From 7967e0009804ae98454b882c34175e14187ab36a Mon Sep 17 00:00:00 2001 From: Pavankumar07s Date: Wed, 13 Nov 2024 14:17:12 +0530 Subject: [PATCH] try again --- src/command_frame.cc | 44 +- src/utils.cc | 24 +- src/utils.h | 3 +- .../sourcemeta/alterschema/engine_bundle.h | 62 +- .../sourcemeta/alterschema/engine_rule.h | 48 +- .../alterschema/engine_transformer.h | 10 +- .../src/linter/antipattern/const_with_type.h | 11 +- .../antipattern/duplicate_enum_values.h | 16 +- .../antipattern/duplicate_required_values.h | 11 +- .../src/linter/antipattern/enum_with_type.h | 11 +- .../exclusive_maximum_number_and_maximum.h | 11 +- .../exclusive_minimum_number_and_minimum.h | 11 +- .../src/linter/desugar/boolean_true.h | 15 +- .../src/linter/desugar/const_as_enum.h | 16 +- .../exclusive_maximum_integer_to_maximum.h | 13 +- .../exclusive_minimum_integer_to_minimum.h | 13 +- .../desugar/type_array_to_any_of_2020_12.h | 11 +- .../src/linter/desugar/type_boolean_as_enum.h | 11 +- .../src/linter/desugar/type_null_as_enum.h | 11 +- .../max_contains_covered_by_max_items.h | 11 +- .../implicit/min_items_given_min_contains.h | 11 +- .../src/linter/implicit/min_items_implicit.h | 11 +- .../src/linter/implicit/min_length_implicit.h | 11 +- .../min_properties_covered_by_required.h | 11 +- .../linter/implicit/min_properties_implicit.h | 11 +- .../linter/implicit/multiple_of_implicit.h | 11 +- .../src/linter/implicit/properties_implicit.h | 16 +- .../src/linter/implicit/type_union_implicit.h | 11 +- .../include/sourcemeta/alterschema/linter.h | 2 +- .../redundant/additional_properties_default.h | 11 +- .../linter/redundant/content_schema_default.h | 11 +- .../linter/redundant/dependencies_default.h | 11 +- .../redundant/dependent_required_default.h | 11 +- .../linter/redundant/items_array_default.h | 11 +- .../linter/redundant/items_schema_default.h | 11 +- .../redundant/pattern_properties_default.h | 11 +- .../src/linter/redundant/properties_default.h | 11 +- .../redundant/unevaluated_items_default.h | 11 +- .../unevaluated_properties_default.h | 11 +- .../redundant/unsatisfiable_max_contains.h | 11 +- .../redundant/unsatisfiable_min_properties.h | 11 +- .../dependencies_property_tautology.h | 11 +- .../simplify/dependent_required_tautology.h | 11 +- .../simplify/equal_numeric_bounds_to_enum.h | 11 +- .../simplify/maximum_real_for_integer.h | 19 +- .../simplify/minimum_real_for_integer.h | 11 +- .../src/linter/simplify/single_type_array.h | 11 +- .../content_media_type_without_encoding.h | 11 +- .../content_schema_without_media_type.h | 11 +- ...op_non_array_keywords_applicator_2019_09.h | 13 +- ...op_non_array_keywords_applicator_2020_12.h | 13 +- .../drop_non_array_keywords_content_2019_09.h | 13 +- .../drop_non_array_keywords_content_2020_12.h | 13 +- .../drop_non_array_keywords_draft0.h | 13 +- .../drop_non_array_keywords_draft1.h | 13 +- .../drop_non_array_keywords_draft2.h | 13 +- .../drop_non_array_keywords_draft3.h | 13 +- .../drop_non_array_keywords_draft4.h | 13 +- .../drop_non_array_keywords_draft6.h | 13 +- .../drop_non_array_keywords_draft7.h | 13 +- .../drop_non_array_keywords_format_2019_09.h | 13 +- .../drop_non_array_keywords_format_2020_12.h | 13 +- ...p_non_array_keywords_unevaluated_2020_12.h | 13 +- ...op_non_array_keywords_validation_2019_09.h | 13 +- ...op_non_array_keywords_validation_2020_12.h | 13 +- ..._non_boolean_keywords_applicator_2019_09.h | 13 +- ..._non_boolean_keywords_applicator_2020_12.h | 13 +- ...rop_non_boolean_keywords_content_2019_09.h | 13 +- ...rop_non_boolean_keywords_content_2020_12.h | 13 +- .../drop_non_boolean_keywords_draft0.h | 13 +- .../drop_non_boolean_keywords_draft1.h | 13 +- .../drop_non_boolean_keywords_draft2.h | 13 +- .../drop_non_boolean_keywords_draft3.h | 13 +- .../drop_non_boolean_keywords_draft4.h | 13 +- .../drop_non_boolean_keywords_draft6.h | 13 +- .../drop_non_boolean_keywords_draft7.h | 13 +- ...drop_non_boolean_keywords_format_2019_09.h | 13 +- ...drop_non_boolean_keywords_format_2020_12.h | 13 +- ...non_boolean_keywords_unevaluated_2020_12.h | 13 +- ..._non_boolean_keywords_validation_2019_09.h | 13 +- ..._non_boolean_keywords_validation_2020_12.h | 13 +- ...rop_non_null_keywords_applicator_2019_09.h | 13 +- ...rop_non_null_keywords_applicator_2020_12.h | 13 +- .../drop_non_null_keywords_content_2019_09.h | 13 +- .../drop_non_null_keywords_content_2020_12.h | 13 +- .../drop_non_null_keywords_draft0.h | 13 +- .../drop_non_null_keywords_draft1.h | 13 +- .../drop_non_null_keywords_draft2.h | 13 +- .../drop_non_null_keywords_draft3.h | 13 +- .../drop_non_null_keywords_draft4.h | 13 +- .../drop_non_null_keywords_draft6.h | 13 +- .../drop_non_null_keywords_draft7.h | 13 +- .../drop_non_null_keywords_format_2019_09.h | 13 +- .../drop_non_null_keywords_format_2020_12.h | 13 +- ...op_non_null_keywords_unevaluated_2020_12.h | 13 +- ...rop_non_null_keywords_validation_2019_09.h | 13 +- ...rop_non_null_keywords_validation_2020_12.h | 13 +- ..._non_numeric_keywords_applicator_2019_09.h | 13 +- ..._non_numeric_keywords_applicator_2020_12.h | 13 +- ...rop_non_numeric_keywords_content_2019_09.h | 13 +- ...rop_non_numeric_keywords_content_2020_12.h | 13 +- .../drop_non_numeric_keywords_draft0.h | 13 +- .../drop_non_numeric_keywords_draft1.h | 13 +- .../drop_non_numeric_keywords_draft2.h | 13 +- .../drop_non_numeric_keywords_draft3.h | 13 +- .../drop_non_numeric_keywords_draft4.h | 13 +- .../drop_non_numeric_keywords_draft6.h | 13 +- .../drop_non_numeric_keywords_draft7.h | 13 +- ...drop_non_numeric_keywords_format_2019_09.h | 13 +- ...drop_non_numeric_keywords_format_2020_12.h | 13 +- ...non_numeric_keywords_unevaluated_2020_12.h | 13 +- ..._non_numeric_keywords_validation_2019_09.h | 13 +- ..._non_numeric_keywords_validation_2020_12.h | 13 +- ...p_non_object_keywords_applicator_2019_09.h | 13 +- ...p_non_object_keywords_applicator_2020_12.h | 13 +- ...drop_non_object_keywords_content_2019_09.h | 13 +- ...drop_non_object_keywords_content_2020_12.h | 13 +- .../drop_non_object_keywords_draft0.h | 13 +- .../drop_non_object_keywords_draft1.h | 13 +- .../drop_non_object_keywords_draft2.h | 13 +- .../drop_non_object_keywords_draft3.h | 13 +- .../drop_non_object_keywords_draft4.h | 13 +- .../drop_non_object_keywords_draft6.h | 13 +- .../drop_non_object_keywords_draft7.h | 13 +- .../drop_non_object_keywords_format_2019_09.h | 13 +- .../drop_non_object_keywords_format_2020_12.h | 13 +- ..._non_object_keywords_unevaluated_2020_12.h | 13 +- ...p_non_object_keywords_validation_2019_09.h | 13 +- ...p_non_object_keywords_validation_2020_12.h | 13 +- ...p_non_string_keywords_applicator_2019_09.h | 13 +- ...p_non_string_keywords_applicator_2020_12.h | 13 +- .../drop_non_string_keywords_draft0.h | 13 +- .../drop_non_string_keywords_draft1.h | 13 +- .../drop_non_string_keywords_draft2.h | 13 +- .../drop_non_string_keywords_draft3.h | 13 +- .../drop_non_string_keywords_draft4.h | 13 +- .../drop_non_string_keywords_draft6.h | 13 +- .../drop_non_string_keywords_draft7.h | 13 +- ..._non_string_keywords_unevaluated_2020_12.h | 13 +- ...p_non_string_keywords_validation_2019_09.h | 13 +- ...p_non_string_keywords_validation_2020_12.h | 13 +- .../superfluous/duplicate_allof_branches.h | 11 +- .../superfluous/duplicate_anyof_branches.h | 11 +- .../src/linter/superfluous/else_without_if.h | 16 +- .../linter/superfluous/if_without_then_else.h | 11 +- .../max_contains_without_contains.h | 11 +- .../min_contains_without_contains.h | 11 +- .../src/linter/superfluous/then_without_if.h | 16 +- .../src/linter/syntax_sugar/enum_to_const.h | 13 +- vendor/blaze/src/compiler/compile_helpers.h | 42 +- .../src/compiler/default_compiler_2019_09.h | 30 +- .../src/compiler/default_compiler_2020_12.h | 23 +- .../src/compiler/default_compiler_draft4.h | 158 +- .../src/compiler/default_compiler_draft6.h | 25 +- .../src/compiler/default_compiler_draft7.h | 9 +- .../include/sourcemeta/blaze/compiler.h | 18 +- .../include/sourcemeta/blaze/compiler_error.h | 15 +- .../sourcemeta/blaze/compiler_output.h | 19 +- .../include/sourcemeta/blaze/evaluator.h | 16 +- .../sourcemeta/blaze/evaluator_context.h | 46 +- .../sourcemeta/blaze/evaluator_error.h | 14 +- .../sourcemeta/blaze/evaluator_template.h | 47 +- .../sourcemeta/blaze/evaluator_value.h | 18 +- vendor/blaze/src/evaluator/trace.h | 8 +- .../bucket/include/sourcemeta/hydra/bucket.h | 17 +- .../sourcemeta/hydra/bucket_aws_sigv4.h | 38 +- .../include/sourcemeta/hydra/bucket_cache.h | 27 +- .../sourcemeta/hydra/bucket_cache_policy.h | 2 +- .../include/sourcemeta/hydra/bucket_error.h | 12 +- .../sourcemeta/hydra/bucket_response.h | 9 +- .../crypto/include/sourcemeta/hydra/crypto.h | 8 +- .../include/sourcemeta/hydra/http_error.h | 12 +- .../include/sourcemeta/hydra/http_header.h | 10 +- .../include/sourcemeta/hydra/http_method.h | 11 +- .../http/include/sourcemeta/hydra/http_mime.h | 6 +- .../include/sourcemeta/hydra/http_status.h | 11 +- .../http/include/sourcemeta/hydra/http_time.h | 6 +- .../sourcemeta/hydra/httpclient_request.h | 19 +- .../sourcemeta/hydra/httpclient_response.h | 18 +- .../sourcemeta/hydra/httpclient_stream.h | 24 +- .../include/sourcemeta/hydra/httpserver.h | 24 +- .../sourcemeta/hydra/httpserver_logger.h | 10 +- .../sourcemeta/hydra/httpserver_request.h | 18 +- .../sourcemeta/hydra/httpserver_response.h | 16 +- vendor/hydra/vendor/bearssl/inc/bearssl.h | 26 +- .../hydra/vendor/bearssl/inc/bearssl_aead.h | 362 +- .../hydra/vendor/bearssl/inc/bearssl_block.h | 1207 +- vendor/hydra/vendor/bearssl/inc/bearssl_ec.h | 453 +- .../hydra/vendor/bearssl/inc/bearssl_hash.h | 453 +- .../hydra/vendor/bearssl/inc/bearssl_hmac.h | 46 +- vendor/hydra/vendor/bearssl/inc/bearssl_kdf.h | 32 +- vendor/hydra/vendor/bearssl/inc/bearssl_pem.h | 76 +- vendor/hydra/vendor/bearssl/inc/bearssl_prf.h | 51 +- .../hydra/vendor/bearssl/inc/bearssl_rand.h | 164 +- vendor/hydra/vendor/bearssl/inc/bearssl_rsa.h | 302 +- vendor/hydra/vendor/bearssl/inc/bearssl_ssl.h | 3497 ++- .../hydra/vendor/bearssl/inc/bearssl_x509.h | 983 +- vendor/hydra/vendor/bearssl/src/config.h | 8 +- vendor/hydra/vendor/bearssl/src/inner.h | 1224 +- vendor/hydra/vendor/curl/include/curl/curl.h | 1343 +- .../hydra/vendor/curl/include/curl/curlver.h | 4 +- vendor/hydra/vendor/curl/include/curl/easy.h | 8 +- .../hydra/vendor/curl/include/curl/header.h | 29 +- .../hydra/vendor/curl/include/curl/mprintf.h | 43 +- vendor/hydra/vendor/curl/include/curl/multi.h | 172 +- .../hydra/vendor/curl/include/curl/options.h | 15 +- .../hydra/vendor/curl/include/curl/system.h | 656 +- .../vendor/curl/include/curl/typecheck-gcc.h | 864 +- .../hydra/vendor/curl/include/curl/urlapi.h | 110 +- .../vendor/curl/include/curl/websockets.h | 25 +- vendor/hydra/vendor/curl/lib/altsvc.h | 21 +- vendor/hydra/vendor/curl/lib/amigaos.h | 2 +- vendor/hydra/vendor/curl/lib/arpa_telnet.h | 79 +- vendor/hydra/vendor/curl/lib/asyn.h | 17 +- vendor/hydra/vendor/curl/lib/bufq.h | 92 +- vendor/hydra/vendor/curl/lib/bufref.h | 9 +- vendor/hydra/vendor/curl/lib/c-hyper.h | 14 +- vendor/hydra/vendor/curl/lib/cf-h1-proxy.h | 1 - vendor/hydra/vendor/curl/lib/cf-h2-proxy.h | 1 - .../hydra/vendor/curl/lib/cf-https-connect.h | 16 +- vendor/hydra/vendor/curl/lib/cf-socket.h | 44 +- vendor/hydra/vendor/curl/lib/cfilters.h | 346 +- vendor/hydra/vendor/curl/lib/config-amigaos.h | 12 +- vendor/hydra/vendor/curl/lib/config-dos.h | 138 +- vendor/hydra/vendor/curl/lib/config-mac.h | 68 +- vendor/hydra/vendor/curl/lib/config-os400.h | 31 +- vendor/hydra/vendor/curl/lib/config-plan9.h | 4 +- vendor/hydra/vendor/curl/lib/config-riscos.h | 4 +- vendor/hydra/vendor/curl/lib/config-win32.h | 173 +- vendor/hydra/vendor/curl/lib/config-win32ce.h | 30 +- vendor/hydra/vendor/curl/lib/conncache.h | 57 +- vendor/hydra/vendor/curl/lib/connect.h | 39 +- vendor/hydra/vendor/curl/lib/cookie.h | 60 +- vendor/hydra/vendor/curl/lib/curl_addrinfo.h | 57 +- vendor/hydra/vendor/curl/lib/curl_base64.h | 14 +- vendor/hydra/vendor/curl/lib/curl_ctype.h | 21 +- vendor/hydra/vendor/curl/lib/curl_des.h | 8 +- vendor/hydra/vendor/curl/lib/curl_fnmatch.h | 6 +- .../hydra/vendor/curl/lib/curl_gethostname.h | 2 +- vendor/hydra/vendor/curl/lib/curl_gssapi.h | 18 +- vendor/hydra/vendor/curl/lib/curl_hmac.h | 38 +- vendor/hydra/vendor/curl/lib/curl_krb5.h | 6 +- vendor/hydra/vendor/curl/lib/curl_ldap.h | 2 +- vendor/hydra/vendor/curl/lib/curl_md4.h | 3 +- vendor/hydra/vendor/curl/lib/curl_md5.h | 32 +- vendor/hydra/vendor/curl/lib/curl_memory.h | 40 +- vendor/hydra/vendor/curl/lib/curl_memrchr.h | 7 +- vendor/hydra/vendor/curl/lib/curl_multibyte.h | 30 +- vendor/hydra/vendor/curl/lib/curl_ntlm_core.h | 23 +- vendor/hydra/vendor/curl/lib/curl_path.h | 21 +- vendor/hydra/vendor/curl/lib/curl_printf.h | 36 +- vendor/hydra/vendor/curl/lib/curl_sasl.h | 99 +- vendor/hydra/vendor/curl/lib/curl_setup.h | 739 +- .../hydra/vendor/curl/lib/curl_setup_once.h | 277 +- vendor/hydra/vendor/curl/lib/curl_sha256.h | 5 +- .../hydra/vendor/curl/lib/curl_sha512_256.h | 6 +- vendor/hydra/vendor/curl/lib/curl_sspi.h | 37 +- vendor/hydra/vendor/curl/lib/curl_threads.h | 50 +- vendor/hydra/vendor/curl/lib/curl_trc.h | 170 +- vendor/hydra/vendor/curl/lib/curlx.h | 1 - vendor/hydra/vendor/curl/lib/cw-out.h | 1 - vendor/hydra/vendor/curl/lib/doh.h | 69 +- vendor/hydra/vendor/curl/lib/dynbuf.h | 53 +- vendor/hydra/vendor/curl/lib/dynhds.h | 55 +- vendor/hydra/vendor/curl/lib/easy_lock.h | 21 +- vendor/hydra/vendor/curl/lib/escape.h | 11 +- vendor/hydra/vendor/curl/lib/file.h | 5 +- vendor/hydra/vendor/curl/lib/fileinfo.h | 3 +- vendor/hydra/vendor/curl/lib/fopen.h | 4 +- vendor/hydra/vendor/curl/lib/formdata.h | 6 +- vendor/hydra/vendor/curl/lib/ftp.h | 86 +- vendor/hydra/vendor/curl/lib/ftplistparser.h | 4 +- vendor/hydra/vendor/curl/lib/functypes.h | 13 +- vendor/hydra/vendor/curl/lib/hash.h | 34 +- vendor/hydra/vendor/curl/lib/headers.h | 10 +- vendor/hydra/vendor/curl/lib/hostip.h | 80 +- vendor/hydra/vendor/curl/lib/hsts.h | 15 +- vendor/hydra/vendor/curl/lib/http.h | 101 +- vendor/hydra/vendor/curl/lib/http1.h | 16 +- vendor/hydra/vendor/curl/lib/http2.h | 30 +- vendor/hydra/vendor/curl/lib/http_chunks.h | 2 +- vendor/hydra/vendor/curl/lib/http_digest.h | 7 +- vendor/hydra/vendor/curl/lib/http_negotiate.h | 4 +- vendor/hydra/vendor/curl/lib/http_proxy.h | 16 +- vendor/hydra/vendor/curl/lib/if2ip.h | 49 +- vendor/hydra/vendor/curl/lib/imap.h | 64 +- vendor/hydra/vendor/curl/lib/inet_ntop.h | 7 +- vendor/hydra/vendor/curl/lib/inet_pton.h | 2 +- vendor/hydra/vendor/curl/lib/llist.h | 11 +- vendor/hydra/vendor/curl/lib/memdebug.h | 117 +- vendor/hydra/vendor/curl/lib/mime.h | 145 +- vendor/hydra/vendor/curl/lib/mqtt.h | 14 +- vendor/hydra/vendor/curl/lib/multihandle.h | 78 +- vendor/hydra/vendor/curl/lib/multiif.h | 20 +- vendor/hydra/vendor/curl/lib/netrc.h | 16 +- vendor/hydra/vendor/curl/lib/nonblock.h | 4 +- vendor/hydra/vendor/curl/lib/noproxy.h | 3 +- vendor/hydra/vendor/curl/lib/parsedate.h | 4 +- vendor/hydra/vendor/curl/lib/pingpong.h | 58 +- vendor/hydra/vendor/curl/lib/pop3.h | 44 +- vendor/hydra/vendor/curl/lib/progress.h | 12 +- vendor/hydra/vendor/curl/lib/psl.h | 6 +- vendor/hydra/vendor/curl/lib/rand.h | 7 +- vendor/hydra/vendor/curl/lib/request.h | 134 +- vendor/hydra/vendor/curl/lib/rtsp.h | 3 +- vendor/hydra/vendor/curl/lib/select.h | 70 +- vendor/hydra/vendor/curl/lib/sendf.h | 110 +- vendor/hydra/vendor/curl/lib/setopt.h | 4 +- vendor/hydra/vendor/curl/lib/setup-os400.h | 125 +- vendor/hydra/vendor/curl/lib/setup-vms.h | 172 +- vendor/hydra/vendor/curl/lib/setup-win32.h | 110 +- vendor/hydra/vendor/curl/lib/share.h | 9 +- vendor/hydra/vendor/curl/lib/sigpipe.h | 37 +- vendor/hydra/vendor/curl/lib/slist.h | 3 +- vendor/hydra/vendor/curl/lib/smb.h | 2 +- vendor/hydra/vendor/curl/lib/smtp.h | 34 +- vendor/hydra/vendor/curl/lib/sockaddr.h | 2 +- vendor/hydra/vendor/curl/lib/socketpair.h | 42 +- vendor/hydra/vendor/curl/lib/socks.h | 15 +- vendor/hydra/vendor/curl/lib/speedcheck.h | 4 +- vendor/hydra/vendor/curl/lib/splay.h | 12 +- vendor/hydra/vendor/curl/lib/strcase.h | 6 +- vendor/hydra/vendor/curl/lib/strdup.h | 2 +- vendor/hydra/vendor/curl/lib/strtok.h | 3 +- vendor/hydra/vendor/curl/lib/strtoofft.h | 6 +- vendor/hydra/vendor/curl/lib/system_win32.h | 2 +- vendor/hydra/vendor/curl/lib/timeval.h | 1 - vendor/hydra/vendor/curl/lib/transfer.h | 51 +- vendor/hydra/vendor/curl/lib/url.h | 23 +- vendor/hydra/vendor/curl/lib/urldata.h | 1071 +- vendor/hydra/vendor/curl/lib/vauth/digest.h | 4 +- vendor/hydra/vendor/curl/lib/vauth/ntlm.h | 48 +- vendor/hydra/vendor/curl/lib/vauth/vauth.h | 65 +- .../hydra/vendor/curl/lib/vquic/curl_msh3.h | 6 +- .../hydra/vendor/curl/lib/vquic/curl_ngtcp2.h | 12 +- .../hydra/vendor/curl/lib/vquic/curl_osslq.h | 6 +- .../hydra/vendor/curl/lib/vquic/curl_quiche.h | 8 +- .../hydra/vendor/curl/lib/vquic/vquic-tls.h | 13 +- vendor/hydra/vendor/curl/lib/vquic/vquic.h | 18 +- .../hydra/vendor/curl/lib/vquic/vquic_int.h | 38 +- vendor/hydra/vendor/curl/lib/vssh/ssh.h | 82 +- .../hydra/vendor/curl/lib/vtls/cipher_suite.h | 4 +- vendor/hydra/vendor/curl/lib/vtls/gtls.h | 18 +- .../vendor/curl/lib/vtls/mbedtls_threadlock.h | 3 +- vendor/hydra/vendor/curl/lib/vtls/openssl.h | 30 +- vendor/hydra/vendor/curl/lib/vtls/schannel.h | 15 +- .../hydra/vendor/curl/lib/vtls/schannel_int.h | 114 +- vendor/hydra/vendor/curl/lib/vtls/vtls.h | 73 +- vendor/hydra/vendor/curl/lib/vtls/vtls_int.h | 81 +- vendor/hydra/vendor/curl/lib/vtls/wolfssl.h | 8 +- vendor/hydra/vendor/curl/lib/vtls/x509asn1.h | 27 +- vendor/hydra/vendor/curl/lib/warnless.h | 8 +- vendor/hydra/vendor/curl/lib/ws.h | 37 +- vendor/hydra/vendor/uwebsockets/src/App.h | 1299 +- .../vendor/uwebsockets/src/AsyncSocket.h | 614 +- .../vendor/uwebsockets/src/AsyncSocketData.h | 85 +- .../vendor/uwebsockets/src/BloomFilter.h | 85 +- .../hydra/vendor/uwebsockets/src/CachingApp.h | 153 +- .../vendor/uwebsockets/src/ChunkedEncoding.h | 351 +- .../hydra/vendor/uwebsockets/src/ClientApp.h | 48 +- .../hydra/vendor/uwebsockets/src/Http3App.h | 299 +- .../vendor/uwebsockets/src/Http3Context.h | 310 +- .../vendor/uwebsockets/src/Http3ContextData.h | 24 +- .../vendor/uwebsockets/src/Http3Request.h | 31 +- .../vendor/uwebsockets/src/Http3Response.h | 234 +- .../uwebsockets/src/Http3ResponseData.h | 28 +- .../vendor/uwebsockets/src/HttpContext.h | 888 +- .../vendor/uwebsockets/src/HttpContextData.h | 63 +- .../hydra/vendor/uwebsockets/src/HttpErrors.h | 22 +- .../hydra/vendor/uwebsockets/src/HttpParser.h | 1282 +- .../vendor/uwebsockets/src/HttpResponse.h | 998 +- .../vendor/uwebsockets/src/HttpResponseData.h | 114 +- .../hydra/vendor/uwebsockets/src/HttpRouter.h | 652 +- .../vendor/uwebsockets/src/LocalCluster.h | 92 +- vendor/hydra/vendor/uwebsockets/src/Loop.h | 352 +- .../hydra/vendor/uwebsockets/src/LoopData.h | 137 +- .../vendor/uwebsockets/src/MessageParser.h | 73 +- .../vendor/uwebsockets/src/MoveOnlyFunction.h | 4 +- .../hydra/vendor/uwebsockets/src/Multipart.h | 402 +- .../uwebsockets/src/PerMessageDeflate.h | 424 +- .../vendor/uwebsockets/src/ProxyParser.h | 202 +- .../vendor/uwebsockets/src/QueryParser.h | 172 +- .../hydra/vendor/uwebsockets/src/TopicTree.h | 542 +- .../hydra/vendor/uwebsockets/src/Utilities.h | 52 +- .../hydra/vendor/uwebsockets/src/WebSocket.h | 699 +- .../vendor/uwebsockets/src/WebSocketContext.h | 867 +- .../uwebsockets/src/WebSocketContextData.h | 147 +- .../vendor/uwebsockets/src/WebSocketData.h | 113 +- .../uwebsockets/src/WebSocketExtensions.h | 393 +- .../uwebsockets/src/WebSocketHandshake.h | 239 +- .../uwebsockets/src/WebSocketProtocol.h | 839 +- .../uSockets/src/internal/eventing/asio.h | 23 +- .../src/internal/eventing/epoll_kqueue.h | 37 +- .../uSockets/src/internal/eventing/gcd.h | 18 +- .../uSockets/src/internal/eventing/libuv.h | 28 +- .../uSockets/src/internal/internal.h | 288 +- .../uSockets/src/internal/loop_data.h | 30 +- .../uSockets/src/internal/networking/bsd.h | 49 +- .../uSockets/src/io_uring/internal.h | 116 +- .../uwebsockets/uSockets/src/libusockets.h | 299 +- .../vendor/uwebsockets/uSockets/src/quic.h | 75 +- vendor/hydra/vendor/zlib/crc32.h | 17577 ++++++++-------- vendor/hydra/vendor/zlib/deflate.h | 489 +- vendor/hydra/vendor/zlib/gzguts.h | 217 +- vendor/hydra/vendor/zlib/inffixed.h | 210 +- vendor/hydra/vendor/zlib/inflate.h | 152 +- vendor/hydra/vendor/zlib/inftrees.h | 16 +- vendor/hydra/vendor/zlib/trees.h | 229 +- vendor/hydra/vendor/zlib/zconf.h | 707 +- vendor/hydra/vendor/zlib/zlib.h | 434 +- vendor/hydra/vendor/zlib/zutil.h | 256 +- vendor/jsonbinpack/src/compiler/encoding.h | 6 +- .../include/sourcemeta/jsonbinpack/compiler.h | 6 +- .../src/compiler/mapper/enum_8_bit.h | 2 +- .../compiler/mapper/enum_8_bit_top_level.h | 2 +- .../src/compiler/mapper/enum_arbitrary.h | 2 +- .../src/compiler/mapper/enum_singleton.h | 11 +- .../compiler/mapper/integer_bounded_8_bit.h | 11 +- .../integer_bounded_greater_than_8_bit.h | 11 +- .../mapper/integer_bounded_multiplier_8_bit.h | 15 +- ...er_bounded_multiplier_greater_than_8_bit.h | 11 +- .../src/compiler/mapper/integer_lower_bound.h | 11 +- .../mapper/integer_lower_bound_multiplier.h | 11 +- .../src/compiler/mapper/integer_unbound.h | 11 +- .../mapper/integer_unbound_multiplier.h | 11 +- .../src/compiler/mapper/integer_upper_bound.h | 11 +- .../mapper/integer_upper_bound_multiplier.h | 11 +- .../src/compiler/mapper/number_arbitrary.h | 11 +- .../sourcemeta/jsonbinpack/numeric_integral.h | 25 +- .../sourcemeta/jsonbinpack/numeric_real.h | 12 +- .../sourcemeta/jsonbinpack/numeric_zigzag.h | 6 +- .../include/sourcemeta/jsonbinpack/runtime.h | 13 +- .../sourcemeta/jsonbinpack/runtime_decoder.h | 7 +- .../sourcemeta/jsonbinpack/runtime_encoder.h | 13 +- .../jsonbinpack/runtime_encoder_cache.h | 14 +- .../sourcemeta/jsonbinpack/runtime_encoding.h | 13 +- .../jsonbinpack/runtime_input_stream.h | 14 +- .../jsonbinpack/runtime_output_stream.h | 10 +- .../jsonbinpack/src/runtime/loader_v1_any.h | 9 +- .../jsonbinpack/src/runtime/loader_v1_array.h | 15 +- .../src/runtime/loader_v1_integer.h | 7 +- .../src/runtime/loader_v1_number.h | 3 +- .../src/runtime/loader_v1_string.h | 7 +- vendor/jsonbinpack/src/runtime/unreachable.h | 2 +- vendor/jsonbinpack/src/runtime/varint.h | 10 +- vendor/jsontoolkit/src/json/grammar.h | 61 +- .../include/sourcemeta/jsontoolkit/json.h | 14 +- .../sourcemeta/jsontoolkit/json_array.h | 13 +- .../sourcemeta/jsontoolkit/json_error.h | 16 +- .../sourcemeta/jsontoolkit/json_object.h | 17 +- .../sourcemeta/jsontoolkit/json_value.h | 37 +- vendor/jsontoolkit/src/json/parser.h | 28 +- vendor/jsontoolkit/src/json/stringify.h | 20 +- vendor/jsontoolkit/src/jsonl/grammar.h | 2 +- .../include/sourcemeta/jsontoolkit/jsonl.h | 8 +- .../sourcemeta/jsontoolkit/jsonl_iterator.h | 21 +- vendor/jsontoolkit/src/jsonpointer/grammar.h | 17 +- .../sourcemeta/jsontoolkit/jsonpointer.h | 12 +- .../jsontoolkit/jsonpointer_error.h | 8 +- .../jsontoolkit/jsonpointer_pointer.h | 32 +- .../jsonpointer_subpointer_walker.h | 22 +- .../jsontoolkit/jsonpointer_token.h | 15 +- .../jsontoolkit/jsonpointer_walker.h | 15 +- vendor/jsontoolkit/src/jsonpointer/parser.h | 27 +- .../jsontoolkit/src/jsonpointer/stringify.h | 21 +- .../sourcemeta/jsontoolkit/jsonschema.h | 16 +- .../jsontoolkit/jsonschema_anchor.h | 10 +- .../jsontoolkit/jsonschema_bundle.h | 8 +- .../sourcemeta/jsontoolkit/jsonschema_error.h | 27 +- .../jsontoolkit/jsonschema_reference.h | 14 +- .../jsontoolkit/jsonschema_resolver.h | 14 +- .../jsontoolkit/jsonschema_walker.h | 36 +- .../uri/include/sourcemeta/jsontoolkit/uri.h | 24 +- .../sourcemeta/jsontoolkit/uri_error.h | 22 +- .../vendor/uriparser/include/uriparser/Uri.h | 560 +- .../uriparser/include/uriparser/UriBase.h | 241 +- .../uriparser/include/uriparser/UriDefsAnsi.h | 10 +- .../include/uriparser/UriDefsConfig.h | 44 +- .../include/uriparser/UriDefsUnicode.h | 10 +- .../uriparser/include/uriparser/UriIp4.h | 67 +- .../vendor/uriparser/src/UriCommon.h | 79 +- .../vendor/uriparser/src/UriIp4Base.h | 18 +- .../vendor/uriparser/src/UriMemory.h | 34 +- .../vendor/uriparser/src/UriNormalizeBase.h | 6 - .../vendor/uriparser/src/UriParseBase.h | 12 +- .../termcolor/include/termcolor/termcolor.hpp | 1654 +- 486 files changed, 29584 insertions(+), 30646 deletions(-) diff --git a/src/command_frame.cc b/src/command_frame.cc index 3c13a272..3604ed51 100644 --- a/src/command_frame.cc +++ b/src/command_frame.cc @@ -11,14 +11,14 @@ static auto enum_to_string( const sourcemeta::jsontoolkit::ReferenceEntryType type) -> std::string { switch (type) { - case sourcemeta::jsontoolkit::ReferenceEntryType::Resource: - return "resource"; - case sourcemeta::jsontoolkit::ReferenceEntryType::Anchor: - return "anchor"; - case sourcemeta::jsontoolkit::ReferenceEntryType::Pointer: - return "pointer"; - default: - return "unknown"; + case sourcemeta::jsontoolkit::ReferenceEntryType::Resource: + return "resource"; + case sourcemeta::jsontoolkit::ReferenceEntryType::Anchor: + return "anchor"; + case sourcemeta::jsontoolkit::ReferenceEntryType::Pointer: + return "pointer"; + default: + return "unknown"; } } @@ -110,20 +110,20 @@ auto sourcemeta::jsonschema::cli::frame( } else { for (const auto &[key, entry] : frame) { switch (entry.type) { - case sourcemeta::jsontoolkit::ReferenceEntryType::Resource: - std::cout << "(LOCATION)"; - break; - case sourcemeta::jsontoolkit::ReferenceEntryType::Anchor: - std::cout << "(ANCHOR)"; - break; - case sourcemeta::jsontoolkit::ReferenceEntryType::Pointer: - std::cout << "(POINTER)"; - break; - default: - // We should never get here - assert(false); - std::cout << "(UNKNOWN)"; - break; + case sourcemeta::jsontoolkit::ReferenceEntryType::Resource: + std::cout << "(LOCATION)"; + break; + case sourcemeta::jsontoolkit::ReferenceEntryType::Anchor: + std::cout << "(ANCHOR)"; + break; + case sourcemeta::jsontoolkit::ReferenceEntryType::Pointer: + std::cout << "(POINTER)"; + break; + default: + // We should never get here + assert(false); + std::cout << "(UNKNOWN)"; + break; } std::cout << " URI: "; diff --git a/src/utils.cc b/src/utils.cc index f24aecf0..9348b73d 100644 --- a/src/utils.cc +++ b/src/utils.cc @@ -199,18 +199,18 @@ auto print(const sourcemeta::blaze::TraceOutput &output, } switch (entry.type) { - case sourcemeta::blaze::TraceOutput::EntryType::Push: - stream << "-> (push) "; - break; - case sourcemeta::blaze::TraceOutput::EntryType::Pass: - stream << "<- (pass) "; - break; - case sourcemeta::blaze::TraceOutput::EntryType::Fail: - stream << "<- (fail) "; - break; - default: - assert(false); - break; + case sourcemeta::blaze::TraceOutput::EntryType::Push: + stream << "-> (push) "; + break; + case sourcemeta::blaze::TraceOutput::EntryType::Pass: + stream << "<- (pass) "; + break; + case sourcemeta::blaze::TraceOutput::EntryType::Fail: + stream << "<- (fail) "; + break; + default: + assert(false); + break; } stream << "\""; diff --git a/src/utils.h b/src/utils.h index f0ceff6e..909b4ef2 100644 --- a/src/utils.h +++ b/src/utils.h @@ -1,12 +1,11 @@ #ifndef SOURCEMETA_JSONSCHEMA_CLI_UTILS_H_ #define SOURCEMETA_JSONSCHEMA_CLI_UTILS_H_ +#include #include #include #include -#include - #include // std::filesystem #include // std::map #include // std::ostream diff --git a/vendor/alterschema/src/engine/include/sourcemeta/alterschema/engine_bundle.h b/vendor/alterschema/src/engine/include/sourcemeta/alterschema/engine_bundle.h index cfb7c145..0a48beb9 100644 --- a/vendor/alterschema/src/engine/include/sourcemeta/alterschema/engine_bundle.h +++ b/vendor/alterschema/src/engine/include/sourcemeta/alterschema/engine_bundle.h @@ -5,21 +5,20 @@ #include #endif +#include #include #include #include -#include - -#include // assert -#include // std::derived_from -#include // std::function -#include // std::map -#include // std::make_unique, std::unique_ptr -#include // std::optional, std::nullopt -#include // std::string -#include // std::string_view -#include // std::move +#include // assert +#include // std::derived_from +#include // std::function +#include // std::map +#include // std::make_unique, std::unique_ptr +#include // std::optional, std::nullopt +#include // std::string +#include // std::string_view +#include // std::move namespace sourcemeta::alterschema { /// @ingroup engine @@ -81,7 +80,7 @@ namespace sourcemeta::alterschema { /// Every registered rule is applied to every subschema of the passed schema /// until no longer of them applies. class SOURCEMETA_ALTERSCHEMA_ENGINE_EXPORT Bundle { -public: + public: /// Create a transform bundle Bundle() = default; @@ -97,7 +96,8 @@ class SOURCEMETA_ALTERSCHEMA_ENGINE_EXPORT Bundle { #endif /// Add a rule to the bundle - template T> auto add() -> void { + template T> + auto add() -> void { auto rule{std::make_unique()}; // Rules must only be defined once assert(!this->rules.contains(rule->name())); @@ -105,14 +105,13 @@ class SOURCEMETA_ALTERSCHEMA_ENGINE_EXPORT Bundle { } /// Apply the bundle of rules to a schema - auto - apply(sourcemeta::jsontoolkit::JSON &schema, - const sourcemeta::jsontoolkit::SchemaWalker &walker, - const sourcemeta::jsontoolkit::SchemaResolver &resolver, - const sourcemeta::jsontoolkit::Pointer &pointer = - sourcemeta::jsontoolkit::empty_pointer, - const std::optional &default_dialect = std::nullopt) const - -> void; + auto apply(sourcemeta::jsontoolkit::JSON &schema, + const sourcemeta::jsontoolkit::SchemaWalker &walker, + const sourcemeta::jsontoolkit::SchemaResolver &resolver, + const sourcemeta::jsontoolkit::Pointer &pointer = + sourcemeta::jsontoolkit::empty_pointer, + const std::optional &default_dialect = + std::nullopt) const -> void; /// The callback that is called whenever the "check" functionality reports a /// rule whose condition holds true. The arguments are as follows: @@ -125,17 +124,16 @@ class SOURCEMETA_ALTERSCHEMA_ENGINE_EXPORT Bundle { const std::string_view, const std::string_view)>; /// Report back the rules from the bundle that need to be applied to a schema - auto - check(const sourcemeta::jsontoolkit::JSON &schema, - const sourcemeta::jsontoolkit::SchemaWalker &walker, - const sourcemeta::jsontoolkit::SchemaResolver &resolver, - const CheckCallback &callback, - const sourcemeta::jsontoolkit::Pointer &pointer = - sourcemeta::jsontoolkit::empty_pointer, - const std::optional &default_dialect = std::nullopt) const - -> bool; + auto check(const sourcemeta::jsontoolkit::JSON &schema, + const sourcemeta::jsontoolkit::SchemaWalker &walker, + const sourcemeta::jsontoolkit::SchemaResolver &resolver, + const CheckCallback &callback, + const sourcemeta::jsontoolkit::Pointer &pointer = + sourcemeta::jsontoolkit::empty_pointer, + const std::optional &default_dialect = + std::nullopt) const -> bool; -private: + private: // Exporting symbols that depends on the standard C++ library is considered // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN @@ -147,6 +145,6 @@ class SOURCEMETA_ALTERSCHEMA_ENGINE_EXPORT Bundle { #pragma warning(default : 4251) #endif }; -} // namespace sourcemeta::alterschema +} // namespace sourcemeta::alterschema #endif diff --git a/vendor/alterschema/src/engine/include/sourcemeta/alterschema/engine_rule.h b/vendor/alterschema/src/engine/include/sourcemeta/alterschema/engine_rule.h index 9222a5e5..b8d9c8e2 100644 --- a/vendor/alterschema/src/engine/include/sourcemeta/alterschema/engine_rule.h +++ b/vendor/alterschema/src/engine/include/sourcemeta/alterschema/engine_rule.h @@ -5,16 +5,15 @@ #include #endif +#include #include #include #include -#include - -#include // std::optional, std::nullopt -#include // std::set -#include // std::string -#include // std::vector +#include // std::optional, std::nullopt +#include // std::set +#include // std::string +#include // std::vector namespace sourcemeta::alterschema { /// @ingroup engine @@ -50,7 +49,7 @@ namespace sourcemeta::alterschema { /// }; /// ``` class SOURCEMETA_ALTERSCHEMA_ENGINE_EXPORT Rule { -public: + public: /// Create a transformation rule. Each rule must have a unique name. Rule(std::string &&name, std::string &&message); @@ -73,28 +72,25 @@ class SOURCEMETA_ALTERSCHEMA_ENGINE_EXPORT Rule { [[nodiscard]] auto message() const -> const std::string &; /// Apply the rule to a schema - auto - apply(sourcemeta::jsontoolkit::JSON &schema, - const sourcemeta::jsontoolkit::Pointer &pointer, - const sourcemeta::jsontoolkit::SchemaResolver &resolver, - const std::optional &default_dialect = std::nullopt) const - -> std::vector; + auto apply(sourcemeta::jsontoolkit::JSON &schema, + const sourcemeta::jsontoolkit::Pointer &pointer, + const sourcemeta::jsontoolkit::SchemaResolver &resolver, + const std::optional &default_dialect = + std::nullopt) const -> std::vector; /// Check if the rule applies to a schema - auto - check(const sourcemeta::jsontoolkit::JSON &schema, - const sourcemeta::jsontoolkit::Pointer &pointer, - const sourcemeta::jsontoolkit::SchemaResolver &resolver, - const std::optional &default_dialect = std::nullopt) const - -> bool; + auto check(const sourcemeta::jsontoolkit::JSON &schema, + const sourcemeta::jsontoolkit::Pointer &pointer, + const sourcemeta::jsontoolkit::SchemaResolver &resolver, + const std::optional &default_dialect = + std::nullopt) const -> bool; -private: + private: /// The rule condition - [[nodiscard]] virtual auto - condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &dialect, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &pointer) const -> bool = 0; + [[nodiscard]] virtual auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &dialect, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &pointer) const -> bool = 0; /// The rule transformation virtual auto transform(Transformer &transformer) const -> void = 0; @@ -111,6 +107,6 @@ class SOURCEMETA_ALTERSCHEMA_ENGINE_EXPORT Rule { #pragma warning(default : 4251) #endif }; -} // namespace sourcemeta::alterschema +} // namespace sourcemeta::alterschema #endif diff --git a/vendor/alterschema/src/engine/include/sourcemeta/alterschema/engine_transformer.h b/vendor/alterschema/src/engine/include/sourcemeta/alterschema/engine_transformer.h index 0dec7f42..be7679cf 100644 --- a/vendor/alterschema/src/engine/include/sourcemeta/alterschema/engine_transformer.h +++ b/vendor/alterschema/src/engine/include/sourcemeta/alterschema/engine_transformer.h @@ -8,8 +8,8 @@ #include #include -#include // std::variant -#include // std::vector +#include // std::variant +#include // std::vector namespace sourcemeta::alterschema { @@ -43,7 +43,7 @@ using Operation = /// This is a proxy class to intercept transformations applied to a schema. We /// use it to keep track of what changed to fix up schema references. class SOURCEMETA_ALTERSCHEMA_ENGINE_EXPORT Transformer { -public: + public: /// Construct a transformer given a schema Transformer(sourcemeta::jsontoolkit::JSON &schema); @@ -98,7 +98,7 @@ class SOURCEMETA_ALTERSCHEMA_ENGINE_EXPORT Transformer { this->erase_keys(sourcemeta::jsontoolkit::empty_pointer, first, last); } -private: + private: sourcemeta::jsontoolkit::JSON &data; // Exporting symbols that depends on the standard C++ library is considered // safe. @@ -111,6 +111,6 @@ class SOURCEMETA_ALTERSCHEMA_ENGINE_EXPORT Transformer { #pragma warning(default : 4251) #endif }; -} // namespace sourcemeta::alterschema +} // namespace sourcemeta::alterschema #endif diff --git a/vendor/alterschema/src/linter/antipattern/const_with_type.h b/vendor/alterschema/src/linter/antipattern/const_with_type.h index a583d472..7f68e537 100644 --- a/vendor/alterschema/src/linter/antipattern/const_with_type.h +++ b/vendor/alterschema/src/linter/antipattern/const_with_type.h @@ -1,15 +1,14 @@ class ConstWithType final : public Rule { -public: + public: ConstWithType() : Rule{"const_with_type", "Setting `type` alongside `const` is considered an anti-pattern, " "as the constant already implies its respective type"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/antipattern/duplicate_enum_values.h b/vendor/alterschema/src/linter/antipattern/duplicate_enum_values.h index d3675c65..0be87bca 100644 --- a/vendor/alterschema/src/linter/antipattern/duplicate_enum_values.h +++ b/vendor/alterschema/src/linter/antipattern/duplicate_enum_values.h @@ -1,14 +1,14 @@ class DuplicateEnumValues final : public Rule { -public: + public: DuplicateEnumValues() - : Rule{"duplicate_enum_values", "Setting duplicate values in `enum` is " - "considered an anti-pattern"} {}; + : Rule{"duplicate_enum_values", + "Setting duplicate values in `enum` is " + "considered an anti-pattern"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/antipattern/duplicate_required_values.h b/vendor/alterschema/src/linter/antipattern/duplicate_required_values.h index 2519bad3..e32683b3 100644 --- a/vendor/alterschema/src/linter/antipattern/duplicate_required_values.h +++ b/vendor/alterschema/src/linter/antipattern/duplicate_required_values.h @@ -1,15 +1,14 @@ class DuplicateRequiredValues final : public Rule { -public: + public: DuplicateRequiredValues() : Rule{"duplicate_required_values", "Setting duplicate values in `required` is considered an " "anti-pattern"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/antipattern/enum_with_type.h b/vendor/alterschema/src/linter/antipattern/enum_with_type.h index dde564aa..59b25bef 100644 --- a/vendor/alterschema/src/linter/antipattern/enum_with_type.h +++ b/vendor/alterschema/src/linter/antipattern/enum_with_type.h @@ -1,16 +1,15 @@ class EnumWithType final : public Rule { -public: + public: EnumWithType() : Rule{ "enum_with_type", "Setting `type` alongside `enum` is considered an anti-pattern, as " "the enumeration choices already imply their respective types"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/antipattern/exclusive_maximum_number_and_maximum.h b/vendor/alterschema/src/linter/antipattern/exclusive_maximum_number_and_maximum.h index 691560c4..c31d3d29 100644 --- a/vendor/alterschema/src/linter/antipattern/exclusive_maximum_number_and_maximum.h +++ b/vendor/alterschema/src/linter/antipattern/exclusive_maximum_number_and_maximum.h @@ -1,15 +1,14 @@ class ExclusiveMaximumNumberAndMaximum final : public Rule { -public: + public: ExclusiveMaximumNumberAndMaximum() : Rule{"exclusive_maximum_number_and_maximum", "Setting both `exclusiveMaximum` and `maximum` at the same time " "is considered an anti-pattern. You should choose one"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/antipattern/exclusive_minimum_number_and_minimum.h b/vendor/alterschema/src/linter/antipattern/exclusive_minimum_number_and_minimum.h index 519537fc..b2fe5054 100644 --- a/vendor/alterschema/src/linter/antipattern/exclusive_minimum_number_and_minimum.h +++ b/vendor/alterschema/src/linter/antipattern/exclusive_minimum_number_and_minimum.h @@ -1,15 +1,14 @@ class ExclusiveMinimumNumberAndMinimum final : public Rule { -public: + public: ExclusiveMinimumNumberAndMinimum() : Rule{"exclusive_minimum_number_and_minimum", "Setting both `exclusiveMinimum` and `minimum` at the same time " "is considered an anti-pattern. You should choose one"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/desugar/boolean_true.h b/vendor/alterschema/src/linter/desugar/boolean_true.h index 791635bb..b941b8de 100644 --- a/vendor/alterschema/src/linter/desugar/boolean_true.h +++ b/vendor/alterschema/src/linter/desugar/boolean_true.h @@ -1,15 +1,14 @@ class BooleanTrue final : public Rule { -public: + public: BooleanTrue() : Rule{"boolean_true", - "The boolean schema `true` is syntax sugar for the empty schema"} { - }; + "The boolean schema `true` is syntax sugar for the empty " + "schema"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return schema.is_boolean() && schema.to_boolean(); } diff --git a/vendor/alterschema/src/linter/desugar/const_as_enum.h b/vendor/alterschema/src/linter/desugar/const_as_enum.h index 534d19cc..ce7a44a6 100644 --- a/vendor/alterschema/src/linter/desugar/const_as_enum.h +++ b/vendor/alterschema/src/linter/desugar/const_as_enum.h @@ -1,14 +1,14 @@ class ConstAsEnum final : public Rule { -public: + public: ConstAsEnum() - : Rule{"const_as_enum", "Setting `const` is syntax sugar for an " - "enumeration of a single value"} {}; + : Rule{"const_as_enum", + "Setting `const` is syntax sugar for an " + "enumeration of a single value"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/desugar/exclusive_maximum_integer_to_maximum.h b/vendor/alterschema/src/linter/desugar/exclusive_maximum_integer_to_maximum.h index 13f27e82..25eaacac 100644 --- a/vendor/alterschema/src/linter/desugar/exclusive_maximum_integer_to_maximum.h +++ b/vendor/alterschema/src/linter/desugar/exclusive_maximum_integer_to_maximum.h @@ -1,15 +1,14 @@ class ExclusiveMaximumIntegerToMaximum final : public Rule { -public: + public: ExclusiveMaximumIntegerToMaximum() : Rule("exclusive_maximum_integer_to_maximum", "Setting `exclusiveMaximum` when `type` is `integer` is syntax " - "sugar for `maximum`") {}; + "sugar for `maximum`"){}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/desugar/exclusive_minimum_integer_to_minimum.h b/vendor/alterschema/src/linter/desugar/exclusive_minimum_integer_to_minimum.h index 4ba9a6c6..a33e12fe 100644 --- a/vendor/alterschema/src/linter/desugar/exclusive_minimum_integer_to_minimum.h +++ b/vendor/alterschema/src/linter/desugar/exclusive_minimum_integer_to_minimum.h @@ -1,15 +1,14 @@ class ExclusiveMinimumIntegerToMinimum final : public Rule { -public: + public: ExclusiveMinimumIntegerToMinimum() : Rule("exclusive_minimum_integer_to_minimum", "Setting `exclusiveMinimum` when `type` is `integer` is syntax " - "sugar for `minimum`") {}; + "sugar for `minimum`"){}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/desugar/type_array_to_any_of_2020_12.h b/vendor/alterschema/src/linter/desugar/type_array_to_any_of_2020_12.h index 4c0fc5a9..188a2abf 100644 --- a/vendor/alterschema/src/linter/desugar/type_array_to_any_of_2020_12.h +++ b/vendor/alterschema/src/linter/desugar/type_array_to_any_of_2020_12.h @@ -1,15 +1,14 @@ class TypeArrayToAnyOf_2020_12 final : public Rule { -public: + public: TypeArrayToAnyOf_2020_12() : Rule{"type_array_to_any_of_2020_12", "Setting `type` to more than one choice is syntax sugar to " "`anyOf` over the corresponding types"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/desugar/type_boolean_as_enum.h b/vendor/alterschema/src/linter/desugar/type_boolean_as_enum.h index fe694a64..cc327fb2 100644 --- a/vendor/alterschema/src/linter/desugar/type_boolean_as_enum.h +++ b/vendor/alterschema/src/linter/desugar/type_boolean_as_enum.h @@ -1,15 +1,14 @@ class TypeBooleanAsEnum final : public Rule { -public: + public: TypeBooleanAsEnum() : Rule{"type_boolean_as_enum", "Setting `type` to `boolean` is syntax sugar for an enumeration " "of two values: `false` and `true`"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/desugar/type_null_as_enum.h b/vendor/alterschema/src/linter/desugar/type_null_as_enum.h index 9bc6c230..34f2be0c 100644 --- a/vendor/alterschema/src/linter/desugar/type_null_as_enum.h +++ b/vendor/alterschema/src/linter/desugar/type_null_as_enum.h @@ -1,15 +1,14 @@ class TypeNullAsEnum final : public Rule { -public: + public: TypeNullAsEnum() : Rule{"type_null_as_enum", "Setting `type` to `null` is syntax sugar for an enumeration " "of a single value: `null`"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/implicit/max_contains_covered_by_max_items.h b/vendor/alterschema/src/linter/implicit/max_contains_covered_by_max_items.h index 348772fa..b78cc46a 100644 --- a/vendor/alterschema/src/linter/implicit/max_contains_covered_by_max_items.h +++ b/vendor/alterschema/src/linter/implicit/max_contains_covered_by_max_items.h @@ -1,16 +1,15 @@ class MaxContainsCoveredByMaxItems final : public Rule { -public: + public: MaxContainsCoveredByMaxItems() : Rule{"max_contains_covered_by_max_items", "Setting the `maxContains` keyword to a number greater than or " "equal to the array upper bound does not add any further " "constraint"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/implicit/min_items_given_min_contains.h b/vendor/alterschema/src/linter/implicit/min_items_given_min_contains.h index a8ae861b..2fff7952 100644 --- a/vendor/alterschema/src/linter/implicit/min_items_given_min_contains.h +++ b/vendor/alterschema/src/linter/implicit/min_items_given_min_contains.h @@ -1,15 +1,14 @@ class MinItemsGivenMinContains final : public sourcemeta::alterschema::Rule { -public: + public: MinItemsGivenMinContains() : Rule{"min_items_given_min_contains", "Every array has a minimum size of zero items but may be affected " "by `minContains`"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/implicit/min_items_implicit.h b/vendor/alterschema/src/linter/implicit/min_items_implicit.h index a997cdfd..99eeab07 100644 --- a/vendor/alterschema/src/linter/implicit/min_items_implicit.h +++ b/vendor/alterschema/src/linter/implicit/min_items_implicit.h @@ -1,14 +1,13 @@ class MinItemsImplicit final : public Rule { -public: + public: MinItemsImplicit() : Rule{"min_items_implicit", "Every array has a minimum size of zero items"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any(vocabularies, {"http://json-schema.org/draft-07/schema#", "http://json-schema.org/draft-06/schema#", diff --git a/vendor/alterschema/src/linter/implicit/min_length_implicit.h b/vendor/alterschema/src/linter/implicit/min_length_implicit.h index e69f3d5e..7e04c9fb 100644 --- a/vendor/alterschema/src/linter/implicit/min_length_implicit.h +++ b/vendor/alterschema/src/linter/implicit/min_length_implicit.h @@ -1,14 +1,13 @@ class MinLengthImplicit final : public sourcemeta::alterschema::Rule { -public: + public: MinLengthImplicit() : Rule{"min_length_implicit", "Every string has a minimum length of zero characters"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/implicit/min_properties_covered_by_required.h b/vendor/alterschema/src/linter/implicit/min_properties_covered_by_required.h index 036bc092..77983c5f 100644 --- a/vendor/alterschema/src/linter/implicit/min_properties_covered_by_required.h +++ b/vendor/alterschema/src/linter/implicit/min_properties_covered_by_required.h @@ -1,15 +1,14 @@ class MinPropertiesCoveredByRequired final : public Rule { -public: + public: MinPropertiesCoveredByRequired() : Rule{"min_properties_covered_by_required", "Setting `minProperties` to a number less than `required` does " "not add any further constraint"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/implicit/min_properties_implicit.h b/vendor/alterschema/src/linter/implicit/min_properties_implicit.h index 7c81bd58..c750d265 100644 --- a/vendor/alterschema/src/linter/implicit/min_properties_implicit.h +++ b/vendor/alterschema/src/linter/implicit/min_properties_implicit.h @@ -1,15 +1,14 @@ class MinPropertiesImplicit final : public Rule { -public: + public: MinPropertiesImplicit() : Rule{"min_properties_implicit", "The `minProperties` keyword has a logical default of 0 or the " "size of `required`"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/implicit/multiple_of_implicit.h b/vendor/alterschema/src/linter/implicit/multiple_of_implicit.h index c12b12c8..ddf5590c 100644 --- a/vendor/alterschema/src/linter/implicit/multiple_of_implicit.h +++ b/vendor/alterschema/src/linter/implicit/multiple_of_implicit.h @@ -1,14 +1,13 @@ class MultipleOfImplicit final : public Rule { -public: + public: MultipleOfImplicit() : Rule{"multiple_of_implicit", "The unit of `multipleOf` is the integer 1"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/implicit/properties_implicit.h b/vendor/alterschema/src/linter/implicit/properties_implicit.h index b5945b88..a1ff3231 100644 --- a/vendor/alterschema/src/linter/implicit/properties_implicit.h +++ b/vendor/alterschema/src/linter/implicit/properties_implicit.h @@ -1,14 +1,14 @@ class PropertiesImplicit final : public sourcemeta::alterschema::Rule { -public: + public: PropertiesImplicit() - : Rule{"properties_implicit", "Every object has an implicit `properties` " - "that consists of the empty object"} {}; + : Rule{"properties_implicit", + "Every object has an implicit `properties` " + "that consists of the empty object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return ((vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && vocabularies.contains( diff --git a/vendor/alterschema/src/linter/implicit/type_union_implicit.h b/vendor/alterschema/src/linter/implicit/type_union_implicit.h index 99e3157e..c8ee2a00 100644 --- a/vendor/alterschema/src/linter/implicit/type_union_implicit.h +++ b/vendor/alterschema/src/linter/implicit/type_union_implicit.h @@ -1,14 +1,13 @@ class TypeUnionImplicit final : public sourcemeta::alterschema::Rule { -public: + public: TypeUnionImplicit() : Rule{"type_union_implicit", "Not setting `type` is equivalent to accepting any type"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { if (!schema.is_object()) { return false; } diff --git a/vendor/alterschema/src/linter/include/sourcemeta/alterschema/linter.h b/vendor/alterschema/src/linter/include/sourcemeta/alterschema/linter.h index a1e56d93..1f95e59d 100644 --- a/vendor/alterschema/src/linter/include/sourcemeta/alterschema/linter.h +++ b/vendor/alterschema/src/linter/include/sourcemeta/alterschema/linter.h @@ -82,6 +82,6 @@ enum class LinterCategory { SOURCEMETA_ALTERSCHEMA_LINTER_EXPORT auto add(Bundle &bundle, const LinterCategory category) -> void; -} // namespace sourcemeta::alterschema +} // namespace sourcemeta::alterschema #endif diff --git a/vendor/alterschema/src/linter/redundant/additional_properties_default.h b/vendor/alterschema/src/linter/redundant/additional_properties_default.h index ddcb561f..9ce6390b 100644 --- a/vendor/alterschema/src/linter/redundant/additional_properties_default.h +++ b/vendor/alterschema/src/linter/redundant/additional_properties_default.h @@ -1,15 +1,14 @@ class AdditionalPropertiesDefault final : public Rule { -public: + public: AdditionalPropertiesDefault() : Rule{"additional_properties_default", "Setting the `additionalProperties` keyword to the true schema " "does not add any further constraint"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/applicator", diff --git a/vendor/alterschema/src/linter/redundant/content_schema_default.h b/vendor/alterschema/src/linter/redundant/content_schema_default.h index 4be61c26..c2175450 100644 --- a/vendor/alterschema/src/linter/redundant/content_schema_default.h +++ b/vendor/alterschema/src/linter/redundant/content_schema_default.h @@ -1,15 +1,14 @@ class ContentSchemaDefault final : public Rule { -public: + public: ContentSchemaDefault() : Rule{"content_schema_default", "Setting the `contentSchema` keyword to the true schema " "does not add any further constraint"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/content", diff --git a/vendor/alterschema/src/linter/redundant/dependencies_default.h b/vendor/alterschema/src/linter/redundant/dependencies_default.h index b9bd21e6..f55a07a8 100644 --- a/vendor/alterschema/src/linter/redundant/dependencies_default.h +++ b/vendor/alterschema/src/linter/redundant/dependencies_default.h @@ -1,15 +1,14 @@ class DependenciesDefault final : public Rule { -public: + public: DependenciesDefault() : Rule{"dependencies_default", "Setting the `dependencies` keyword to an empty object " "does not add any further constraint"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any(vocabularies, {"http://json-schema.org/draft-07/schema#", "http://json-schema.org/draft-06/schema#", diff --git a/vendor/alterschema/src/linter/redundant/dependent_required_default.h b/vendor/alterschema/src/linter/redundant/dependent_required_default.h index 181d3ee0..3275e6fa 100644 --- a/vendor/alterschema/src/linter/redundant/dependent_required_default.h +++ b/vendor/alterschema/src/linter/redundant/dependent_required_default.h @@ -1,15 +1,14 @@ class DependentRequiredDefault final : public Rule { -public: + public: DependentRequiredDefault() : Rule{"dependent_required_default", "Setting the `dependentRequired` keyword to an empty object " "does not add any further constraint"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/redundant/items_array_default.h b/vendor/alterschema/src/linter/redundant/items_array_default.h index f28e2cc7..cc2c9c26 100644 --- a/vendor/alterschema/src/linter/redundant/items_array_default.h +++ b/vendor/alterschema/src/linter/redundant/items_array_default.h @@ -1,15 +1,14 @@ class ItemsArrayDefault final : public Rule { -public: + public: ItemsArrayDefault() : Rule{"items_array_default", "Setting the `items` keyword to the empty array " "does not add any further constraint"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2019-09/vocab/applicator", diff --git a/vendor/alterschema/src/linter/redundant/items_schema_default.h b/vendor/alterschema/src/linter/redundant/items_schema_default.h index d861f9aa..5f7b7f93 100644 --- a/vendor/alterschema/src/linter/redundant/items_schema_default.h +++ b/vendor/alterschema/src/linter/redundant/items_schema_default.h @@ -1,15 +1,14 @@ class ItemsSchemaDefault final : public Rule { -public: + public: ItemsSchemaDefault() : Rule{"items_schema_default", "Setting the `items` keyword to the true schema " "does not add any further constraint"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/applicator", diff --git a/vendor/alterschema/src/linter/redundant/pattern_properties_default.h b/vendor/alterschema/src/linter/redundant/pattern_properties_default.h index eed8cf86..a7bee544 100644 --- a/vendor/alterschema/src/linter/redundant/pattern_properties_default.h +++ b/vendor/alterschema/src/linter/redundant/pattern_properties_default.h @@ -1,15 +1,14 @@ class PatternPropertiesDefault final : public Rule { -public: + public: PatternPropertiesDefault() : Rule{"pattern_properties_default", "Setting the `patternProperties` keyword to the empty object " "does not add any further constraint"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/applicator", diff --git a/vendor/alterschema/src/linter/redundant/properties_default.h b/vendor/alterschema/src/linter/redundant/properties_default.h index ad76c019..4ac838bc 100644 --- a/vendor/alterschema/src/linter/redundant/properties_default.h +++ b/vendor/alterschema/src/linter/redundant/properties_default.h @@ -1,15 +1,14 @@ class PropertiesDefault final : public Rule { -public: + public: PropertiesDefault() : Rule{"properties_default", "Setting the `properties` keyword to the empty object " "does not add any further constraint"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/applicator", diff --git a/vendor/alterschema/src/linter/redundant/unevaluated_items_default.h b/vendor/alterschema/src/linter/redundant/unevaluated_items_default.h index 2da0cf5e..7be01065 100644 --- a/vendor/alterschema/src/linter/redundant/unevaluated_items_default.h +++ b/vendor/alterschema/src/linter/redundant/unevaluated_items_default.h @@ -1,15 +1,14 @@ class UnevaluatedItemsDefault final : public Rule { -public: + public: UnevaluatedItemsDefault() : Rule{"unevaluated_items_default", "Setting the `unevaluatedItems` keyword to the true schema " "does not add any further constraint"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/unevaluated", diff --git a/vendor/alterschema/src/linter/redundant/unevaluated_properties_default.h b/vendor/alterschema/src/linter/redundant/unevaluated_properties_default.h index 89863612..cbaf4c4e 100644 --- a/vendor/alterschema/src/linter/redundant/unevaluated_properties_default.h +++ b/vendor/alterschema/src/linter/redundant/unevaluated_properties_default.h @@ -1,15 +1,14 @@ class UnevaluatedPropertiesDefault final : public Rule { -public: + public: UnevaluatedPropertiesDefault() : Rule{"unevaluated_properties_default", "Setting the `unevaluatedProperties` keyword to the true schema " "does not add any further constraint"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/unevaluated", diff --git a/vendor/alterschema/src/linter/redundant/unsatisfiable_max_contains.h b/vendor/alterschema/src/linter/redundant/unsatisfiable_max_contains.h index b097d9c1..c89df659 100644 --- a/vendor/alterschema/src/linter/redundant/unsatisfiable_max_contains.h +++ b/vendor/alterschema/src/linter/redundant/unsatisfiable_max_contains.h @@ -1,16 +1,15 @@ class UnsatisfiableMaxContains final : public Rule { -public: + public: UnsatisfiableMaxContains() : Rule{"unsatisfiable_max_contains", "Setting the `maxContains` keyword to a number greater than or " "equal to the array upper bound does not add any further " "constraint"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/redundant/unsatisfiable_min_properties.h b/vendor/alterschema/src/linter/redundant/unsatisfiable_min_properties.h index 30db6816..ad468e4b 100644 --- a/vendor/alterschema/src/linter/redundant/unsatisfiable_min_properties.h +++ b/vendor/alterschema/src/linter/redundant/unsatisfiable_min_properties.h @@ -1,15 +1,14 @@ class UnsatisfiableMinProperties final : public Rule { -public: + public: UnsatisfiableMinProperties() : Rule{"unsatisfiable_min_properties", "Setting `minProperties` to a number less than `required` does " "not add any further constraint"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/simplify/dependencies_property_tautology.h b/vendor/alterschema/src/linter/simplify/dependencies_property_tautology.h index 52d51b0b..e098813d 100644 --- a/vendor/alterschema/src/linter/simplify/dependencies_property_tautology.h +++ b/vendor/alterschema/src/linter/simplify/dependencies_property_tautology.h @@ -1,16 +1,15 @@ class DependenciesPropertyTautology final : public Rule { -public: + public: DependenciesPropertyTautology() : Rule{"dependencies_property_tautology", "Defining requirements for a property using `dependencies` " "that is already marked as required is an unnecessarily complex " "use of `dependencies`"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any(vocabularies, {"http://json-schema.org/draft-07/schema#", "http://json-schema.org/draft-06/schema#", diff --git a/vendor/alterschema/src/linter/simplify/dependent_required_tautology.h b/vendor/alterschema/src/linter/simplify/dependent_required_tautology.h index d5336544..789ab297 100644 --- a/vendor/alterschema/src/linter/simplify/dependent_required_tautology.h +++ b/vendor/alterschema/src/linter/simplify/dependent_required_tautology.h @@ -1,16 +1,15 @@ class DependentRequiredTautology final : public Rule { -public: + public: DependentRequiredTautology() : Rule{"dependent_required_tautology", "Defining requirements for a property using `dependentRequired` " "that is already marked as required is an unnecessarily complex " "use of `dependentRequired`"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/simplify/equal_numeric_bounds_to_enum.h b/vendor/alterschema/src/linter/simplify/equal_numeric_bounds_to_enum.h index e6d9eef2..1f54dcc0 100644 --- a/vendor/alterschema/src/linter/simplify/equal_numeric_bounds_to_enum.h +++ b/vendor/alterschema/src/linter/simplify/equal_numeric_bounds_to_enum.h @@ -1,15 +1,14 @@ class EqualNumericBoundsToEnum final : public Rule { -public: + public: EqualNumericBoundsToEnum() : Rule{"equal_numeric_bounds_to_enum", "Setting `minimum` and `maximum` to the same number only leaves " "one possible value"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/simplify/maximum_real_for_integer.h b/vendor/alterschema/src/linter/simplify/maximum_real_for_integer.h index fe6144e0..7cadc27c 100644 --- a/vendor/alterschema/src/linter/simplify/maximum_real_for_integer.h +++ b/vendor/alterschema/src/linter/simplify/maximum_real_for_integer.h @@ -1,16 +1,15 @@ class MaximumRealForInteger final : public Rule { -public: + public: MaximumRealForInteger() - : Rule{"maximum_real_for_integer", - "If an instance is guaranteed to be an integer, setting a real " - "number upper bound is the same as a floor of that upper bound"} { - }; + : Rule{ + "maximum_real_for_integer", + "If an instance is guaranteed to be an integer, setting a real " + "number upper bound is the same as a floor of that upper bound"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/simplify/minimum_real_for_integer.h b/vendor/alterschema/src/linter/simplify/minimum_real_for_integer.h index 1cec27bf..c4be3db5 100644 --- a/vendor/alterschema/src/linter/simplify/minimum_real_for_integer.h +++ b/vendor/alterschema/src/linter/simplify/minimum_real_for_integer.h @@ -1,15 +1,14 @@ class MinimumRealForInteger final : public Rule { -public: + public: MinimumRealForInteger() : Rule{"minimum_real_for_integer", "If an instance is guaranteed to be an integer, setting a real " "number lower bound is the same as a ceil of that lower bound"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/simplify/single_type_array.h b/vendor/alterschema/src/linter/simplify/single_type_array.h index 0e81bd49..37b4009b 100644 --- a/vendor/alterschema/src/linter/simplify/single_type_array.h +++ b/vendor/alterschema/src/linter/simplify/single_type_array.h @@ -1,15 +1,14 @@ class SingleTypeArray final : public Rule { -public: + public: SingleTypeArray() : Rule{"single_type_array", "Setting `type` to an array of a single type is " "the same as directly declaring such type"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/superfluous/content_media_type_without_encoding.h b/vendor/alterschema/src/linter/superfluous/content_media_type_without_encoding.h index 6ea1196c..5c952444 100644 --- a/vendor/alterschema/src/linter/superfluous/content_media_type_without_encoding.h +++ b/vendor/alterschema/src/linter/superfluous/content_media_type_without_encoding.h @@ -1,15 +1,14 @@ class ContentMediaTypeWithoutEncoding final : public Rule { -public: + public: ContentMediaTypeWithoutEncoding() : Rule{"content_media_type_without_encoding", "The `contentMediaType` keyword is meaningless " "without the presence of the `contentEncoding` keyword"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any(vocabularies, {"https://json-schema.org/draft/2020-12/vocab/content", "https://json-schema.org/draft/2019-09/vocab/content", diff --git a/vendor/alterschema/src/linter/superfluous/content_schema_without_media_type.h b/vendor/alterschema/src/linter/superfluous/content_schema_without_media_type.h index c6c0f03a..2ac3d2f7 100644 --- a/vendor/alterschema/src/linter/superfluous/content_schema_without_media_type.h +++ b/vendor/alterschema/src/linter/superfluous/content_schema_without_media_type.h @@ -1,15 +1,14 @@ class ContentSchemaWithoutMediaType final : public Rule { -public: + public: ContentSchemaWithoutMediaType() : Rule{"content_schema_without_media_type", "The `contentSchema` keyword is meaningless without the presence " "of the `contentMediaType` keyword"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/content", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_applicator_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_applicator_2019_09.h index 9077ee42..f29f3826 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_applicator_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_applicator_2019_09.h @@ -1,15 +1,14 @@ class DropNonArrayKeywordsApplicator_2019_09 final : public Rule { -public: + public: DropNonArrayKeywordsApplicator_2019_09() : Rule{"drop_non_array_keywords_applicator_2019_09", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -24,7 +23,7 @@ class DropNonArrayKeywordsApplicator_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "properties", "patternProperties", "additionalProperties", "dependentSchemas", "propertyNames", "unevaluatedProperties"}; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_applicator_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_applicator_2020_12.h index 657dd986..5991a5a5 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_applicator_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_applicator_2020_12.h @@ -1,15 +1,14 @@ class DropNonArrayKeywordsApplicator_2020_12 final : public Rule { -public: + public: DropNonArrayKeywordsApplicator_2020_12() : Rule{"drop_non_array_keywords_applicator_2020_12", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -24,7 +23,7 @@ class DropNonArrayKeywordsApplicator_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"properties", "patternProperties", "additionalProperties", "dependentSchemas", "propertyNames"}; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_content_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_content_2019_09.h index cc67175f..7cad62fa 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_content_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_content_2019_09.h @@ -1,15 +1,14 @@ class DropNonArrayKeywordsContent_2019_09 final : public Rule { -public: + public: DropNonArrayKeywordsContent_2019_09() : Rule{"drop_non_array_keywords_content_2019_09", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -24,7 +23,7 @@ class DropNonArrayKeywordsContent_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"contentEncoding", "contentMediaType", "contentSchema"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_content_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_content_2020_12.h index 520a0925..be08d19c 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_content_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_content_2020_12.h @@ -1,15 +1,14 @@ class DropNonArrayKeywordsContent_2020_12 final : public Rule { -public: + public: DropNonArrayKeywordsContent_2020_12() : Rule{"drop_non_array_keywords_content_2020_12", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -24,7 +23,7 @@ class DropNonArrayKeywordsContent_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"contentEncoding", "contentMediaType", "contentSchema"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft0.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft0.h index 0d7259a5..dc28f9b3 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft0.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft0.h @@ -1,15 +1,14 @@ class DropNonArrayKeywords_Draft0 final : public Rule { -public: + public: DropNonArrayKeywords_Draft0() : Rule{"drop_non_array_keywords_draft0", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-00/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonArrayKeywords_Draft0 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "maxDecimal", "maximum", "maximumCanEqual", "minimum", "minimumCanEqual", "maxLength", "minLength", "pattern", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft1.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft1.h index 1ac6a5af..e226be38 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft1.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft1.h @@ -1,15 +1,14 @@ class DropNonArrayKeywords_Draft1 final : public Rule { -public: + public: DropNonArrayKeywords_Draft1() : Rule{"drop_non_array_keywords_draft1", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-01/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonArrayKeywords_Draft1 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "maxDecimal", "maximum", "maximumCanEqual", "minimum", "minimumCanEqual", "maxLength", "minLength", "pattern", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft2.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft2.h index 678f742c..39e8dd1c 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft2.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft2.h @@ -1,15 +1,14 @@ class DropNonArrayKeywords_Draft2 final : public Rule { -public: + public: DropNonArrayKeywords_Draft2() : Rule{"drop_non_array_keywords_draft2", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-02/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonArrayKeywords_Draft2 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "properties", "optional", "additionalProperties", "requires", "minimum", "maximum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft3.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft3.h index 772f74de..da14c68a 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft3.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft3.h @@ -1,15 +1,14 @@ class DropNonArrayKeywords_Draft3 final : public Rule { -public: + public: DropNonArrayKeywords_Draft3() : Rule{"drop_non_array_keywords_draft3", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-03/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonArrayKeywords_Draft3 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "properties", "patternProperties", "additionalProperties", "required", "dependencies", "minimum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft4.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft4.h index 70e9a6ed..187d8490 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft4.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft4.h @@ -1,15 +1,14 @@ class DropNonArrayKeywords_Draft4 final : public Rule { -public: + public: DropNonArrayKeywords_Draft4() : Rule{"drop_non_array_keywords_draft4", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-04/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonArrayKeywords_Draft4 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "multipleOf", "maximum", "exclusiveMaximum", "minimum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft6.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft6.h index ec7c9785..c8c0df25 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft6.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft6.h @@ -1,15 +1,14 @@ class DropNonArrayKeywords_Draft6 final : public Rule { -public: + public: DropNonArrayKeywords_Draft6() : Rule{"drop_non_array_keywords_draft6", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-06/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonArrayKeywords_Draft6 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"multipleOf", "maximum", "exclusiveMaximum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft7.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft7.h index e39358e0..4e9ffdf0 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft7.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_draft7.h @@ -1,15 +1,14 @@ class DropNonArrayKeywords_Draft7 final : public Rule { -public: + public: DropNonArrayKeywords_Draft7() : Rule{"drop_non_array_keywords_draft7", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-07/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonArrayKeywords_Draft7 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"multipleOf", "maximum", "exclusiveMaximum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_format_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_format_2019_09.h index d385efc4..a536c6b5 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_format_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_format_2019_09.h @@ -1,15 +1,14 @@ class DropNonArrayKeywordsFormat_2019_09 final : public Rule { -public: + public: DropNonArrayKeywordsFormat_2019_09() : Rule{"drop_non_array_keywords_format_2019_09", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -24,6 +23,6 @@ class DropNonArrayKeywordsFormat_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"format"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_format_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_format_2020_12.h index aeb8cc10..8863e3dd 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_format_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_format_2020_12.h @@ -1,15 +1,14 @@ class DropNonArrayKeywordsFormat_2020_12 final : public Rule { -public: + public: DropNonArrayKeywordsFormat_2020_12() : Rule{"drop_non_array_keywords_format_2020_12", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -26,6 +25,6 @@ class DropNonArrayKeywordsFormat_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"format"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_unevaluated_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_unevaluated_2020_12.h index 30692e1d..beddc6a1 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_unevaluated_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_unevaluated_2020_12.h @@ -1,15 +1,14 @@ class DropNonArrayKeywordsUnevaluated_2020_12 final : public Rule { -public: + public: DropNonArrayKeywordsUnevaluated_2020_12() : Rule{"drop_non_array_keywords_unevaluated_2020_12", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -24,6 +23,6 @@ class DropNonArrayKeywordsUnevaluated_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"unevaluatedProperties"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_validation_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_validation_2019_09.h index 29356069..552d6971 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_validation_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_validation_2019_09.h @@ -1,15 +1,14 @@ class DropNonArrayKeywordsValidation_2019_09 final : public Rule { -public: + public: DropNonArrayKeywordsValidation_2019_09() : Rule{"drop_non_array_keywords_validation_2019_09", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonArrayKeywordsValidation_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "minLength", "maxLength", "pattern", "maximum", "exclusiveMinimum", "multipleOf", "exclusiveMaximum", "minimum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_validation_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_validation_2020_12.h index 4a4bb425..ee90c245 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_validation_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_array_keywords_validation_2020_12.h @@ -1,15 +1,14 @@ class DropNonArrayKeywordsValidation_2020_12 final : public Rule { -public: + public: DropNonArrayKeywordsValidation_2020_12() : Rule{"drop_non_array_keywords_validation_2020_12", "Keywords that don't apply to arrays will never match if the " "instance is guaranteed to be an array"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonArrayKeywordsValidation_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "minLength", "maxLength", "pattern", "maximum", "exclusiveMinimum", "multipleOf", "exclusiveMaximum", "minimum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_applicator_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_applicator_2019_09.h index 598ee777..a72562ab 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_applicator_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_applicator_2019_09.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywordsApplicator_2019_09 final : public Rule { -public: + public: DropNonBooleanKeywordsApplicator_2019_09() : Rule{"drop_non_boolean_keywords_applicator_2019_09", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && @@ -26,7 +25,7 @@ class DropNonBooleanKeywordsApplicator_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"properties", "patternProperties", "additionalProperties", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_applicator_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_applicator_2020_12.h index 05c63320..a7c21831 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_applicator_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_applicator_2020_12.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywordsApplicator_2020_12 final : public Rule { -public: + public: DropNonBooleanKeywordsApplicator_2020_12() : Rule{"drop_non_boolean_keywords_applicator_2020_12", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && @@ -26,7 +25,7 @@ class DropNonBooleanKeywordsApplicator_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"properties", "patternProperties", "additionalProperties", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_content_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_content_2019_09.h index e86d9620..aa4578d5 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_content_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_content_2019_09.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywordsContent_2019_09 final : public Rule { -public: + public: DropNonBooleanKeywordsContent_2019_09() : Rule{"drop_non_boolean_keywords_content_2019_09", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && @@ -26,7 +25,7 @@ class DropNonBooleanKeywordsContent_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"contentEncoding", "contentMediaType", "contentSchema"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_content_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_content_2020_12.h index 70e9956f..410ada16 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_content_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_content_2020_12.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywordsContent_2020_12 final : public Rule { -public: + public: DropNonBooleanKeywordsContent_2020_12() : Rule{"drop_non_boolean_keywords_content_2020_12", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && @@ -26,7 +25,7 @@ class DropNonBooleanKeywordsContent_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"contentEncoding", "contentMediaType", "contentSchema"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft0.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft0.h index 6c9ca8b2..5ad18294 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft0.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft0.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywords_Draft0 final : public Rule { -public: + public: DropNonBooleanKeywords_Draft0() : Rule{"drop_non_boolean_keywords_draft0", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-00/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonBooleanKeywords_Draft0 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "properties", "items", "optional", "additionalProperties", "requires", "minimum", "maximum", "minimumCanEqual", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft1.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft1.h index f6939feb..f45cb4a0 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft1.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft1.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywords_Draft1 final : public Rule { -public: + public: DropNonBooleanKeywords_Draft1() : Rule{"drop_non_boolean_keywords_draft1", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-01/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonBooleanKeywords_Draft1 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "properties", "items", "optional", "additionalProperties", "requires", "minimum", "maximum", "minimumCanEqual", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft2.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft2.h index e00dbb62..4fb4009c 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft2.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft2.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywords_Draft2 final : public Rule { -public: + public: DropNonBooleanKeywords_Draft2() : Rule{"drop_non_boolean_keywords_draft2", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-02/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonBooleanKeywords_Draft2 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "properties", "items", "optional", "additionalProperties", "requires", "minimum", "maximum", "minimumCanEqual", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft3.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft3.h index bf6b5c3c..3d839702 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft3.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft3.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywords_Draft3 final : public Rule { -public: + public: DropNonBooleanKeywords_Draft3() : Rule{"drop_non_boolean_keywords_draft3", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-03/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonBooleanKeywords_Draft3 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"properties", "patternProperties", "additionalProperties", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft4.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft4.h index 8d217ce9..d2bd3489 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft4.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft4.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywords_Draft4 final : public Rule { -public: + public: DropNonBooleanKeywords_Draft4() : Rule{"drop_non_boolean_keywords_draft4", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-04/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonBooleanKeywords_Draft4 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"multipleOf", "maximum", "exclusiveMaximum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft6.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft6.h index 976c12b5..aef44eb6 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft6.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft6.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywords_Draft6 final : public Rule { -public: + public: DropNonBooleanKeywords_Draft6() : Rule{"drop_non_boolean_keywords_draft6", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-06/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonBooleanKeywords_Draft6 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"multipleOf", "maximum", "exclusiveMaximum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft7.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft7.h index 72c5501d..ca8d2366 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft7.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_draft7.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywords_Draft7 final : public Rule { -public: + public: DropNonBooleanKeywords_Draft7() : Rule{"drop_non_boolean_keywords_draft7", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-07/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonBooleanKeywords_Draft7 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"multipleOf", "maximum", "exclusiveMaximum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_format_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_format_2019_09.h index 00b0148c..6dbe9b63 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_format_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_format_2019_09.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywordsFormat_2019_09 final : public Rule { -public: + public: DropNonBooleanKeywordsFormat_2019_09() : Rule{"drop_non_boolean_keywords_format_2019_09", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && @@ -26,6 +25,6 @@ class DropNonBooleanKeywordsFormat_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"format"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_format_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_format_2020_12.h index 21731626..55fd03e1 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_format_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_format_2020_12.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywordsFormat_2020_12 final : public Rule { -public: + public: DropNonBooleanKeywordsFormat_2020_12() : Rule{"drop_non_boolean_keywords_format_2020_12", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && @@ -28,6 +27,6 @@ class DropNonBooleanKeywordsFormat_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"format"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_unevaluated_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_unevaluated_2020_12.h index 7b19e77d..896683c3 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_unevaluated_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_unevaluated_2020_12.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywordsUnevaluated_2020_12 final : public Rule { -public: + public: DropNonBooleanKeywordsUnevaluated_2020_12() : Rule{"drop_non_boolean_keywords_unevaluated_2020_12", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && @@ -26,7 +25,7 @@ class DropNonBooleanKeywordsUnevaluated_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"unevaluatedItems", "unevaluatedProperties"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_validation_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_validation_2019_09.h index 1c98da36..40ac822f 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_validation_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_validation_2019_09.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywordsValidation_2019_09 final : public Rule { -public: + public: DropNonBooleanKeywordsValidation_2019_09() : Rule{"drop_non_boolean_keywords_validation_2019_09", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && @@ -26,7 +25,7 @@ class DropNonBooleanKeywordsValidation_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "minLength", "maxLength", "pattern", "maximum", "exclusiveMinimum", "multipleOf", "exclusiveMaximum", "minimum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_validation_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_validation_2020_12.h index 4354ad2b..615f8bfe 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_validation_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_boolean_keywords_validation_2020_12.h @@ -1,15 +1,14 @@ class DropNonBooleanKeywordsValidation_2020_12 final : public Rule { -public: + public: DropNonBooleanKeywordsValidation_2020_12() : Rule{"drop_non_boolean_keywords_validation_2020_12", "Keywords that don't apply to booleans will never match if the " "instance is guaranteed to be a boolean"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && @@ -26,7 +25,7 @@ class DropNonBooleanKeywordsValidation_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "minLength", "maxLength", "pattern", "maximum", "exclusiveMinimum", "multipleOf", "exclusiveMaximum", "minimum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_applicator_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_applicator_2019_09.h index aa504a37..5bce1097 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_applicator_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_applicator_2019_09.h @@ -1,15 +1,14 @@ class DropNonNullKeywordsApplicator_2019_09 final : public Rule { -public: + public: DropNonNullKeywordsApplicator_2019_09() : Rule{"drop_non_null_keywords_applicator_2019_09", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && @@ -26,7 +25,7 @@ class DropNonNullKeywordsApplicator_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"properties", "patternProperties", "additionalProperties", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_applicator_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_applicator_2020_12.h index 739c956a..4961c65e 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_applicator_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_applicator_2020_12.h @@ -1,15 +1,14 @@ class DropNonNullKeywordsApplicator_2020_12 final : public Rule { -public: + public: DropNonNullKeywordsApplicator_2020_12() : Rule{"drop_non_null_keywords_applicator_2020_12", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && @@ -26,7 +25,7 @@ class DropNonNullKeywordsApplicator_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"properties", "patternProperties", "additionalProperties", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_content_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_content_2019_09.h index 64bd5965..04ce78fc 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_content_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_content_2019_09.h @@ -1,15 +1,14 @@ class DropNonNullKeywordsContent_2019_09 final : public Rule { -public: + public: DropNonNullKeywordsContent_2019_09() : Rule{"drop_non_null_keywords_content_2019_09", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && @@ -26,7 +25,7 @@ class DropNonNullKeywordsContent_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"contentEncoding", "contentMediaType", "contentSchema"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_content_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_content_2020_12.h index 00ce2744..5937b85d 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_content_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_content_2020_12.h @@ -1,15 +1,14 @@ class DropNonNullKeywordsContent_2020_12 final : public Rule { -public: + public: DropNonNullKeywordsContent_2020_12() : Rule{"drop_non_null_keywords_content_2020_12", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && @@ -26,7 +25,7 @@ class DropNonNullKeywordsContent_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"contentEncoding", "contentMediaType", "contentSchema"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft0.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft0.h index c14b2470..84ef88e1 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft0.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft0.h @@ -1,15 +1,14 @@ class DropNonNullKeywords_Draft0 final : public Rule { -public: + public: DropNonNullKeywords_Draft0() : Rule{"drop_non_null_keywords_draft0", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-00/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonNullKeywords_Draft0 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "properties", "items", "optional", "additionalProperties", "requires", "minimum", "maximum", "minimumCanEqual", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft1.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft1.h index 4c97fe42..08e9b3ca 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft1.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft1.h @@ -1,15 +1,14 @@ class DropNonNullKeywords_Draft1 final : public Rule { -public: + public: DropNonNullKeywords_Draft1() : Rule{"drop_non_null_keywords_draft1", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-01/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonNullKeywords_Draft1 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "properties", "items", "optional", "additionalProperties", "requires", "minimum", "maximum", "minimumCanEqual", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft2.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft2.h index 24a51386..40679eae 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft2.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft2.h @@ -1,15 +1,14 @@ class DropNonNullKeywords_Draft2 final : public Rule { -public: + public: DropNonNullKeywords_Draft2() : Rule{"drop_non_null_keywords_draft2", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-02/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonNullKeywords_Draft2 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "properties", "items", "optional", "additionalProperties", "requires", "minimum", "maximum", "minimumCanEqual", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft3.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft3.h index 42944ddc..b0965af2 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft3.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft3.h @@ -1,15 +1,14 @@ class DropNonNullKeywords_Draft3 final : public Rule { -public: + public: DropNonNullKeywords_Draft3() : Rule{"drop_non_null_keywords_draft3", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-03/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonNullKeywords_Draft3 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"properties", "patternProperties", "additionalProperties", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft4.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft4.h index b8b38846..3c79943c 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft4.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft4.h @@ -1,15 +1,14 @@ class DropNonNullKeywords_Draft4 final : public Rule { -public: + public: DropNonNullKeywords_Draft4() : Rule{"drop_non_null_keywords_draft4", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-04/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonNullKeywords_Draft4 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"multipleOf", "maximum", "exclusiveMaximum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft6.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft6.h index e9d6f6b7..323eabb3 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft6.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft6.h @@ -1,15 +1,14 @@ class DropNonNullKeywords_Draft6 final : public Rule { -public: + public: DropNonNullKeywords_Draft6() : Rule{"drop_non_null_keywords_draft6", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-06/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonNullKeywords_Draft6 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"multipleOf", "maximum", "exclusiveMaximum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft7.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft7.h index 54fade5d..f773e496 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft7.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_draft7.h @@ -1,15 +1,14 @@ class DropNonNullKeywords_Draft7 final : public Rule { -public: + public: DropNonNullKeywords_Draft7() : Rule{"drop_non_null_keywords_draft7", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-07/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonNullKeywords_Draft7 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"multipleOf", "maximum", "exclusiveMaximum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_format_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_format_2019_09.h index 07cc5695..9955c877 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_format_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_format_2019_09.h @@ -1,15 +1,14 @@ class DropNonNullKeywordsFormat_2019_09 final : public Rule { -public: + public: DropNonNullKeywordsFormat_2019_09() : Rule{"drop_non_null_keywords_format_2019_09", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && @@ -26,6 +25,6 @@ class DropNonNullKeywordsFormat_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"format"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_format_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_format_2020_12.h index 2c9fca18..d2e2fe2f 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_format_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_format_2020_12.h @@ -1,15 +1,14 @@ class DropNonNullKeywordsFormat_2020_12 final : public Rule { -public: + public: DropNonNullKeywordsFormat_2020_12() : Rule{"drop_non_null_keywords_format_2020_12", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && @@ -28,6 +27,6 @@ class DropNonNullKeywordsFormat_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"format"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_unevaluated_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_unevaluated_2020_12.h index b2b61546..dadfe698 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_unevaluated_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_unevaluated_2020_12.h @@ -1,15 +1,14 @@ class DropNonNullKeywordsUnevaluated_2020_12 final : public Rule { -public: + public: DropNonNullKeywordsUnevaluated_2020_12() : Rule{"drop_non_null_keywords_unevaluated_2020_12", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && @@ -26,7 +25,7 @@ class DropNonNullKeywordsUnevaluated_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"unevaluatedItems", "unevaluatedProperties"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_validation_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_validation_2019_09.h index 25191088..a71469a2 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_validation_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_validation_2019_09.h @@ -1,15 +1,14 @@ class DropNonNullKeywordsValidation_2019_09 final : public Rule { -public: + public: DropNonNullKeywordsValidation_2019_09() : Rule{"drop_non_null_keywords_validation_2019_09", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && @@ -26,7 +25,7 @@ class DropNonNullKeywordsValidation_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "minLength", "maxLength", "pattern", "maximum", "exclusiveMinimum", "multipleOf", "exclusiveMaximum", "minimum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_validation_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_validation_2020_12.h index d5821852..8dbb9261 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_validation_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_null_keywords_validation_2020_12.h @@ -1,15 +1,14 @@ class DropNonNullKeywordsValidation_2020_12 final : public Rule { -public: + public: DropNonNullKeywordsValidation_2020_12() : Rule{"drop_non_null_keywords_validation_2020_12", "Keywords that don't apply to null values will never match if the " "instance is guaranteed to be null"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && @@ -26,7 +25,7 @@ class DropNonNullKeywordsValidation_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "minLength", "maxLength", "pattern", "maximum", "exclusiveMinimum", "multipleOf", "exclusiveMaximum", "minimum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_applicator_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_applicator_2019_09.h index 244eda14..881ee5ca 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_applicator_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_applicator_2019_09.h @@ -1,15 +1,14 @@ class DropNonNumericKeywordsApplicator_2019_09 final : public Rule { -public: + public: DropNonNumericKeywordsApplicator_2019_09() : Rule{"drop_non_numeric_keywords_applicator_2019_09", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -25,7 +24,7 @@ class DropNonNumericKeywordsApplicator_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"properties", "patternProperties", "additionalProperties", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_applicator_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_applicator_2020_12.h index 1dc03a7b..e033b639 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_applicator_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_applicator_2020_12.h @@ -1,15 +1,14 @@ class DropNonNumericKeywordsApplicator_2020_12 final : public Rule { -public: + public: DropNonNumericKeywordsApplicator_2020_12() : Rule{"drop_non_numeric_keywords_applicator_2020_12", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -25,7 +24,7 @@ class DropNonNumericKeywordsApplicator_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"properties", "patternProperties", "additionalProperties", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_content_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_content_2019_09.h index e03f530d..d9443d4b 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_content_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_content_2019_09.h @@ -1,15 +1,14 @@ class DropNonNumericKeywordsContent_2019_09 final : public Rule { -public: + public: DropNonNumericKeywordsContent_2019_09() : Rule{"drop_non_numeric_keywords_content_2019_09", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -25,7 +24,7 @@ class DropNonNumericKeywordsContent_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"contentEncoding", "contentMediaType", "contentSchema"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_content_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_content_2020_12.h index 5a5e3fc1..1dd10c0a 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_content_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_content_2020_12.h @@ -1,15 +1,14 @@ class DropNonNumericKeywordsContent_2020_12 final : public Rule { -public: + public: DropNonNumericKeywordsContent_2020_12() : Rule{"drop_non_numeric_keywords_content_2020_12", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -25,7 +24,7 @@ class DropNonNumericKeywordsContent_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"contentEncoding", "contentMediaType", "contentSchema"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft0.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft0.h index f9759899..7155ff56 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft0.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft0.h @@ -1,15 +1,14 @@ class DropNonNumericKeywords_Draft0 final : public Rule { -public: + public: DropNonNumericKeywords_Draft0() : Rule{"drop_non_numeric_keywords_draft0", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-00/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -23,7 +22,7 @@ class DropNonNumericKeywords_Draft0 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "properties", "items", "optional", "additionalProperties", "requires", "minItems", "maxItems", "maxLength", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft1.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft1.h index 160b2583..f89af064 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft1.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft1.h @@ -1,15 +1,14 @@ class DropNonNumericKeywords_Draft1 final : public Rule { -public: + public: DropNonNumericKeywords_Draft1() : Rule{"drop_non_numeric_keywords_draft1", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-01/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -23,7 +22,7 @@ class DropNonNumericKeywords_Draft1 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "properties", "items", "optional", "additionalProperties", "requires", "minItems", "maxItems", "maxLength", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft2.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft2.h index 6c175565..f9950442 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft2.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft2.h @@ -1,15 +1,14 @@ class DropNonNumericKeywords_Draft2 final : public Rule { -public: + public: DropNonNumericKeywords_Draft2() : Rule{"drop_non_numeric_keywords_draft2", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-02/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -23,7 +22,7 @@ class DropNonNumericKeywords_Draft2 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "properties", "items", "optional", "additionalProperties", "requires", "minItems", "maxItems", "uniqueItems", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft3.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft3.h index 50163972..62f00eb2 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft3.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft3.h @@ -1,15 +1,14 @@ class DropNonNumericKeywords_Draft3 final : public Rule { -public: + public: DropNonNumericKeywords_Draft3() : Rule{"drop_non_numeric_keywords_draft3", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-03/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -22,7 +21,7 @@ class DropNonNumericKeywords_Draft3 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"properties", "patternProperties", "additionalProperties", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft4.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft4.h index fe3660ba..4827268c 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft4.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft4.h @@ -1,15 +1,14 @@ class DropNonNumericKeywords_Draft4 final : public Rule { -public: + public: DropNonNumericKeywords_Draft4() : Rule{"drop_non_numeric_keywords_draft4", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-04/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -22,7 +21,7 @@ class DropNonNumericKeywords_Draft4 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"maxLength", "minLength", "pattern", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft6.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft6.h index fcc8e9d6..fcc87e6d 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft6.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft6.h @@ -1,15 +1,14 @@ class DropNonNumericKeywords_Draft6 final : public Rule { -public: + public: DropNonNumericKeywords_Draft6() : Rule{"drop_non_numeric_keywords_draft6", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-06/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -22,7 +21,7 @@ class DropNonNumericKeywords_Draft6 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"maxLength", "minLength", "pattern", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft7.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft7.h index f9a5e64e..a654d519 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft7.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_draft7.h @@ -1,15 +1,14 @@ class DropNonNumericKeywords_Draft7 final : public Rule { -public: + public: DropNonNumericKeywords_Draft7() : Rule{"drop_non_numeric_keywords_draft7", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-07/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -22,7 +21,7 @@ class DropNonNumericKeywords_Draft7 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"maxLength", "minLength", "pattern", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_format_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_format_2019_09.h index fc624a3b..da2a870d 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_format_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_format_2019_09.h @@ -1,15 +1,14 @@ class DropNonNumericKeywordsFormat_2019_09 final : public Rule { -public: + public: DropNonNumericKeywordsFormat_2019_09() : Rule{"drop_non_numeric_keywords_format_2019_09", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -25,6 +24,6 @@ class DropNonNumericKeywordsFormat_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"format"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_format_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_format_2020_12.h index 494f89dc..87ffafb0 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_format_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_format_2020_12.h @@ -1,15 +1,14 @@ class DropNonNumericKeywordsFormat_2020_12 final : public Rule { -public: + public: DropNonNumericKeywordsFormat_2020_12() : Rule{"drop_non_numeric_keywords_format_2020_12", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -27,6 +26,6 @@ class DropNonNumericKeywordsFormat_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"format"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_unevaluated_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_unevaluated_2020_12.h index 785ff108..24c886fa 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_unevaluated_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_unevaluated_2020_12.h @@ -1,15 +1,14 @@ class DropNonNumericKeywordsUnevaluated_2020_12 final : public Rule { -public: + public: DropNonNumericKeywordsUnevaluated_2020_12() : Rule{"drop_non_numeric_keywords_unevaluated_2020_12", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -25,7 +24,7 @@ class DropNonNumericKeywordsUnevaluated_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"unevaluatedItems", "unevaluatedProperties"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_validation_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_validation_2019_09.h index 74a7e7df..936c8612 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_validation_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_validation_2019_09.h @@ -1,15 +1,14 @@ class DropNonNumericKeywordsValidation_2019_09 final : public Rule { -public: + public: DropNonNumericKeywordsValidation_2019_09() : Rule{"drop_non_numeric_keywords_validation_2019_09", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -23,7 +22,7 @@ class DropNonNumericKeywordsValidation_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "minLength", "maxLength", "pattern", "dependentRequired", "minProperties", "maxProperties", "required", "minItems", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_validation_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_validation_2020_12.h index df1de43a..ef415e21 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_validation_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_numeric_keywords_validation_2020_12.h @@ -1,15 +1,14 @@ class DropNonNumericKeywordsValidation_2020_12 final : public Rule { -public: + public: DropNonNumericKeywordsValidation_2020_12() : Rule{"drop_non_numeric_keywords_validation_2020_12", "Keywords that don't apply to numbers will never match if the " "instance is guaranteed to be a number"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -23,7 +22,7 @@ class DropNonNumericKeywordsValidation_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "minLength", "maxLength", "pattern", "dependentRequired", "minProperties", "maxProperties", "required", "minItems", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_applicator_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_applicator_2019_09.h index ee025b82..4096aa28 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_applicator_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_applicator_2019_09.h @@ -1,15 +1,14 @@ class DropNonObjectKeywordsApplicator_2019_09 final : public Rule { -public: + public: DropNonObjectKeywordsApplicator_2019_09() : Rule{"drop_non_object_keywords_applicator_2019_09", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -24,7 +23,7 @@ class DropNonObjectKeywordsApplicator_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"additionalItems", "contains", "items", "unevaluatedItems"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_applicator_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_applicator_2020_12.h index 65dbc844..56b6e7d9 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_applicator_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_applicator_2020_12.h @@ -1,15 +1,14 @@ class DropNonObjectKeywordsApplicator_2020_12 final : public Rule { -public: + public: DropNonObjectKeywordsApplicator_2020_12() : Rule{"drop_non_object_keywords_applicator_2020_12", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -24,6 +23,6 @@ class DropNonObjectKeywordsApplicator_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"prefixItems", "contains", "items"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_content_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_content_2019_09.h index b82a1a35..e134b0e2 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_content_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_content_2019_09.h @@ -1,15 +1,14 @@ class DropNonObjectKeywordsContent_2019_09 final : public Rule { -public: + public: DropNonObjectKeywordsContent_2019_09() : Rule{"drop_non_object_keywords_content_2019_09", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -24,7 +23,7 @@ class DropNonObjectKeywordsContent_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"contentEncoding", "contentMediaType", "contentSchema"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_content_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_content_2020_12.h index 8202d248..becf390b 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_content_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_content_2020_12.h @@ -1,15 +1,14 @@ class DropNonObjectKeywordsContent_2020_12 final : public Rule { -public: + public: DropNonObjectKeywordsContent_2020_12() : Rule{"drop_non_object_keywords_content_2020_12", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -24,7 +23,7 @@ class DropNonObjectKeywordsContent_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"contentEncoding", "contentMediaType", "contentSchema"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft0.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft0.h index 6157e065..c61ad633 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft0.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft0.h @@ -1,15 +1,14 @@ class DropNonObjectKeywords_Draft0 final : public Rule { -public: + public: DropNonObjectKeywords_Draft0() : Rule{"drop_non_object_keywords_draft0", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-00/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonObjectKeywords_Draft0 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "items", "minimum", "maximum", "minimumCanEqual", "maximumCanEqual", "minItems", "maxItems", "maxLength", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft1.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft1.h index 8fea0298..a52a37f8 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft1.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft1.h @@ -1,15 +1,14 @@ class DropNonObjectKeywords_Draft1 final : public Rule { -public: + public: DropNonObjectKeywords_Draft1() : Rule{"drop_non_object_keywords_draft1", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-01/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonObjectKeywords_Draft1 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "items", "minimum", "maximum", "minimumCanEqual", "maximumCanEqual", "minItems", "maxItems", "maxLength", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft2.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft2.h index 7e56a29a..f6f1fe0d 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft2.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft2.h @@ -1,15 +1,14 @@ class DropNonObjectKeywords_Draft2 final : public Rule { -public: + public: DropNonObjectKeywords_Draft2() : Rule{"drop_non_object_keywords_draft2", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-02/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonObjectKeywords_Draft2 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "items", "minimum", "maximum", "minimumCanEqual", "maximumCanEqual", "minItems", "maxItems", "maxLength", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft3.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft3.h index 0112fc52..862d17c3 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft3.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft3.h @@ -1,15 +1,14 @@ class DropNonObjectKeywords_Draft3 final : public Rule { -public: + public: DropNonObjectKeywords_Draft3() : Rule{"drop_non_object_keywords_draft3", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-03/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonObjectKeywords_Draft3 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "items", "additionalItems", "required", "minimum", "maximum", "exclusiveMinimum", "exclusiveMaximum", "minItems", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft4.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft4.h index eb9884b8..1b3e7a97 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft4.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft4.h @@ -1,15 +1,14 @@ class DropNonObjectKeywords_Draft4 final : public Rule { -public: + public: DropNonObjectKeywords_Draft4() : Rule{"drop_non_object_keywords_draft4", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-04/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonObjectKeywords_Draft4 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "multipleOf", "maximum", "exclusiveMaximum", "minimum", "exclusiveMinimum", "maxLength", "minLength", "pattern", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft6.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft6.h index 13f03167..5d1f434d 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft6.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft6.h @@ -1,15 +1,14 @@ class DropNonObjectKeywords_Draft6 final : public Rule { -public: + public: DropNonObjectKeywords_Draft6() : Rule{"drop_non_object_keywords_draft6", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-06/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonObjectKeywords_Draft6 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "multipleOf", "maximum", "exclusiveMaximum", "minimum", "exclusiveMinimum", "maxLength", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft7.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft7.h index 52d7da5e..8beb8402 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft7.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_draft7.h @@ -1,15 +1,14 @@ class DropNonObjectKeywords_Draft7 final : public Rule { -public: + public: DropNonObjectKeywords_Draft7() : Rule{"drop_non_object_keywords_draft7", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-07/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonObjectKeywords_Draft7 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"multipleOf", "maximum", "exclusiveMaximum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_format_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_format_2019_09.h index 51d9c154..a9f6f3e2 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_format_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_format_2019_09.h @@ -1,15 +1,14 @@ class DropNonObjectKeywordsFormat_2019_09 final : public Rule { -public: + public: DropNonObjectKeywordsFormat_2019_09() : Rule{"drop_non_object_keywords_format_2019_09", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -24,6 +23,6 @@ class DropNonObjectKeywordsFormat_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"format"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_format_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_format_2020_12.h index 17a44061..98be72a8 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_format_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_format_2020_12.h @@ -1,15 +1,14 @@ class DropNonObjectKeywordsFormat_2020_12 final : public Rule { -public: + public: DropNonObjectKeywordsFormat_2020_12() : Rule{"drop_non_object_keywords_format_2020_12", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -26,6 +25,6 @@ class DropNonObjectKeywordsFormat_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"format"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_unevaluated_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_unevaluated_2020_12.h index 1ee11a10..d81403ff 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_unevaluated_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_unevaluated_2020_12.h @@ -1,15 +1,14 @@ class DropNonObjectKeywordsUnevaluated_2020_12 final : public Rule { -public: + public: DropNonObjectKeywordsUnevaluated_2020_12() : Rule{"drop_non_object_keywords_unevaluated_2020_12", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -24,6 +23,6 @@ class DropNonObjectKeywordsUnevaluated_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"unevaluatedItems"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_validation_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_validation_2019_09.h index ef534c3b..6aa354b4 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_validation_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_validation_2019_09.h @@ -1,15 +1,14 @@ class DropNonObjectKeywordsValidation_2019_09 final : public Rule { -public: + public: DropNonObjectKeywordsValidation_2019_09() : Rule{"drop_non_object_keywords_validation_2019_09", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonObjectKeywordsValidation_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "minLength", "maxLength", "pattern", "maximum", "exclusiveMinimum", "multipleOf", "exclusiveMaximum", "minimum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_validation_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_validation_2020_12.h index c2deb910..9bb9b52e 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_validation_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_object_keywords_validation_2020_12.h @@ -1,15 +1,14 @@ class DropNonObjectKeywordsValidation_2020_12 final : public Rule { -public: + public: DropNonObjectKeywordsValidation_2020_12() : Rule{"drop_non_object_keywords_validation_2020_12", "Keywords that don't apply to objects will never match if the " "instance is guaranteed to be an object"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonObjectKeywordsValidation_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "minLength", "maxLength", "pattern", "maximum", "exclusiveMinimum", "multipleOf", "exclusiveMaximum", "minimum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_applicator_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_applicator_2019_09.h index 2d85479c..e14a7e56 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_applicator_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_applicator_2019_09.h @@ -1,15 +1,14 @@ class DropNonStringKeywordsApplicator_2019_09 final : public Rule { -public: + public: DropNonStringKeywordsApplicator_2019_09() : Rule{"drop_non_string_keywords_applicator_2019_09", "Keywords that don't apply to strings will never match if the " "instance is guaranteed to be a string"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -24,7 +23,7 @@ class DropNonStringKeywordsApplicator_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"properties", "patternProperties", "additionalProperties", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_applicator_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_applicator_2020_12.h index 3be21848..fb080d67 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_applicator_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_applicator_2020_12.h @@ -1,15 +1,14 @@ class DropNonStringKeywordsApplicator_2020_12 final : public Rule { -public: + public: DropNonStringKeywordsApplicator_2020_12() : Rule{"drop_non_string_keywords_applicator_2020_12", "Keywords that don't apply to strings will never match if the " "instance is guaranteed to be a string"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -24,7 +23,7 @@ class DropNonStringKeywordsApplicator_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"properties", "patternProperties", "additionalProperties", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft0.h b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft0.h index 18017511..4a6a2dc7 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft0.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft0.h @@ -1,15 +1,14 @@ class DropNonStringKeywords_Draft0 final : public Rule { -public: + public: DropNonStringKeywords_Draft0() : Rule{"drop_non_string_keywords_draft0", "Keywords that don't apply to strings will never match if the " "instance is guaranteed to be a string"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-00/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonStringKeywords_Draft0 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "properties", "items", "optional", "additionalProperties", "requires", "minimum", "maximum", "minimumCanEqual", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft1.h b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft1.h index a21f03ef..c64f1819 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft1.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft1.h @@ -1,15 +1,14 @@ class DropNonStringKeywords_Draft1 final : public Rule { -public: + public: DropNonStringKeywords_Draft1() : Rule{"drop_non_string_keywords_draft1", "Keywords that don't apply to strings will never match if the " "instance is guaranteed to be a string"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-01/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonStringKeywords_Draft1 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "properties", "items", "optional", "additionalProperties", "requires", "minimum", "maximum", "minimumCanEqual", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft2.h b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft2.h index 2dfbc3cb..71a6a205 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft2.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft2.h @@ -1,15 +1,14 @@ class DropNonStringKeywords_Draft2 final : public Rule { -public: + public: DropNonStringKeywords_Draft2() : Rule{"drop_non_string_keywords_draft2", "Keywords that don't apply to strings will never match if the " "instance is guaranteed to be a string"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "http://json-schema.org/draft-02/hyper-schema#") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonStringKeywords_Draft2 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "properties", "items", "optional", "additionalProperties", "requires", "minimum", "maximum", "minimumCanEqual", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft3.h b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft3.h index 0608aea9..df457727 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft3.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft3.h @@ -1,15 +1,14 @@ class DropNonStringKeywords_Draft3 final : public Rule { -public: + public: DropNonStringKeywords_Draft3() : Rule{"drop_non_string_keywords_draft3", "Keywords that don't apply to strings will never match if the " "instance is guaranteed to be a string"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-03/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonStringKeywords_Draft3 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"properties", "patternProperties", "additionalProperties", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft4.h b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft4.h index cf2a052b..4aa88c69 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft4.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft4.h @@ -1,15 +1,14 @@ class DropNonStringKeywords_Draft4 final : public Rule { -public: + public: DropNonStringKeywords_Draft4() : Rule{"drop_non_string_keywords_draft4", "Keywords that don't apply to strings will never match if the " "instance is guaranteed to be a string"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-04/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonStringKeywords_Draft4 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"multipleOf", "maximum", "exclusiveMaximum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft6.h b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft6.h index 99f5cf00..39725bb4 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft6.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft6.h @@ -1,15 +1,14 @@ class DropNonStringKeywords_Draft6 final : public Rule { -public: + public: DropNonStringKeywords_Draft6() : Rule{"drop_non_string_keywords_draft6", "Keywords that don't apply to strings will never match if the " "instance is guaranteed to be a string"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-06/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonStringKeywords_Draft6 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"multipleOf", "maximum", "exclusiveMaximum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft7.h b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft7.h index eefd2a37..11084435 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft7.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_draft7.h @@ -1,15 +1,14 @@ class DropNonStringKeywords_Draft7 final : public Rule { -public: + public: DropNonStringKeywords_Draft7() : Rule{"drop_non_string_keywords_draft7", "Keywords that don't apply to strings will never match if the " "instance is guaranteed to be a string"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains("http://json-schema.org/draft-07/schema#") && schema.is_object() && schema.defines("type") && schema.at("type").is_string() && @@ -21,7 +20,7 @@ class DropNonStringKeywords_Draft7 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"multipleOf", "maximum", "exclusiveMaximum", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_unevaluated_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_unevaluated_2020_12.h index 712960b1..0a7f5f58 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_unevaluated_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_unevaluated_2020_12.h @@ -1,15 +1,14 @@ class DropNonStringKeywordsUnevaluated_2020_12 final : public Rule { -public: + public: DropNonStringKeywordsUnevaluated_2020_12() : Rule{"drop_non_string_keywords_unevaluated_2020_12", "Keywords that don't apply to strings will never match if the " "instance is guaranteed to be a string"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -24,7 +23,7 @@ class DropNonStringKeywordsUnevaluated_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{"unevaluatedItems", "unevaluatedProperties"}; }; diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_validation_2019_09.h b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_validation_2019_09.h index 12743af7..284b4ebc 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_validation_2019_09.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_validation_2019_09.h @@ -1,15 +1,14 @@ class DropNonStringKeywordsValidation_2019_09 final : public Rule { -public: + public: DropNonStringKeywordsValidation_2019_09() : Rule{"drop_non_string_keywords_validation_2019_09", "Keywords that don't apply to strings will never match if the " "instance is guaranteed to be a string"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2019-09/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonStringKeywordsValidation_2019_09 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "maximum", "exclusiveMinimum", "multipleOf", "exclusiveMaximum", "minimum", "dependentRequired", "minProperties", "maxProperties", diff --git a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_validation_2020_12.h b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_validation_2020_12.h index da2b7839..1d99e013 100644 --- a/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_validation_2020_12.h +++ b/vendor/alterschema/src/linter/superfluous/drop_non_string_keywords_validation_2020_12.h @@ -1,15 +1,14 @@ class DropNonStringKeywordsValidation_2020_12 final : public Rule { -public: + public: DropNonStringKeywordsValidation_2020_12() : Rule{"drop_non_string_keywords_validation_2020_12", "Keywords that don't apply to strings will never match if the " "instance is guaranteed to be a string"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && schema.is_object() && schema.defines("type") && @@ -22,7 +21,7 @@ class DropNonStringKeywordsValidation_2020_12 final : public Rule { transformer.erase_keys(this->BLACKLIST.cbegin(), this->BLACKLIST.cend()); } -private: + private: const std::set BLACKLIST{ "maximum", "exclusiveMinimum", "multipleOf", "exclusiveMaximum", "minimum", "dependentRequired", "minProperties", "maxProperties", diff --git a/vendor/alterschema/src/linter/superfluous/duplicate_allof_branches.h b/vendor/alterschema/src/linter/superfluous/duplicate_allof_branches.h index 1ed3f158..0d7a742b 100644 --- a/vendor/alterschema/src/linter/superfluous/duplicate_allof_branches.h +++ b/vendor/alterschema/src/linter/superfluous/duplicate_allof_branches.h @@ -1,5 +1,5 @@ class DuplicateAllOfBranches final : public Rule { -public: + public: DuplicateAllOfBranches() : Rule{"duplicate_allof_branches", "Setting duplicate subschemas in `allOf` is redundant, as it " @@ -7,11 +7,10 @@ class DuplicateAllOfBranches final : public Rule { "unnecessary additional validation that is guaranteed to not " "affect the validation result"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/applicator", diff --git a/vendor/alterschema/src/linter/superfluous/duplicate_anyof_branches.h b/vendor/alterschema/src/linter/superfluous/duplicate_anyof_branches.h index e309714b..e5b7265e 100644 --- a/vendor/alterschema/src/linter/superfluous/duplicate_anyof_branches.h +++ b/vendor/alterschema/src/linter/superfluous/duplicate_anyof_branches.h @@ -1,5 +1,5 @@ class DuplicateAnyOfBranches final : public Rule { -public: + public: DuplicateAnyOfBranches() : Rule{"duplicate_anyof_branches", "Setting duplicate subschemas in `anyOf` is redundant, as it " @@ -7,11 +7,10 @@ class DuplicateAnyOfBranches final : public Rule { "unnecessary additional validation that is guaranteed to not " "affect the validation result"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/applicator", diff --git a/vendor/alterschema/src/linter/superfluous/else_without_if.h b/vendor/alterschema/src/linter/superfluous/else_without_if.h index 19d58382..3545df64 100644 --- a/vendor/alterschema/src/linter/superfluous/else_without_if.h +++ b/vendor/alterschema/src/linter/superfluous/else_without_if.h @@ -1,14 +1,14 @@ class ElseWithoutIf final : public Rule { -public: + public: ElseWithoutIf() - : Rule{"else_without_if", "The `else` keyword is meaningless " - "without the presence of the `if` keyword"} {}; + : Rule{"else_without_if", + "The `else` keyword is meaningless " + "without the presence of the `if` keyword"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/applicator", diff --git a/vendor/alterschema/src/linter/superfluous/if_without_then_else.h b/vendor/alterschema/src/linter/superfluous/if_without_then_else.h index c81c577d..a4c4d107 100644 --- a/vendor/alterschema/src/linter/superfluous/if_without_then_else.h +++ b/vendor/alterschema/src/linter/superfluous/if_without_then_else.h @@ -1,15 +1,14 @@ class IfWithoutThenElse final : public Rule { -public: + public: IfWithoutThenElse() : Rule{"if_without_then_else", "The `if` keyword is meaningless " "without the presence of the `then` or `else` keywords"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/applicator", diff --git a/vendor/alterschema/src/linter/superfluous/max_contains_without_contains.h b/vendor/alterschema/src/linter/superfluous/max_contains_without_contains.h index 6358df3f..28f8d620 100644 --- a/vendor/alterschema/src/linter/superfluous/max_contains_without_contains.h +++ b/vendor/alterschema/src/linter/superfluous/max_contains_without_contains.h @@ -1,15 +1,14 @@ class MaxContainsWithoutContains final : public Rule { -public: + public: MaxContainsWithoutContains() : Rule{"max_contains_without_contains", "The `maxContains` keyword is meaningless " "without the presence of the `contains` keyword"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/superfluous/min_contains_without_contains.h b/vendor/alterschema/src/linter/superfluous/min_contains_without_contains.h index 7321e548..17cb6291 100644 --- a/vendor/alterschema/src/linter/superfluous/min_contains_without_contains.h +++ b/vendor/alterschema/src/linter/superfluous/min_contains_without_contains.h @@ -1,15 +1,14 @@ class MinContainsWithoutContains final : public Rule { -public: + public: MinContainsWithoutContains() : Rule{"min_contains_without_contains", "The `minContains` keyword is meaningless " "without the presence of the `contains` keyword"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/alterschema/src/linter/superfluous/then_without_if.h b/vendor/alterschema/src/linter/superfluous/then_without_if.h index 9f1ad2cf..e2080681 100644 --- a/vendor/alterschema/src/linter/superfluous/then_without_if.h +++ b/vendor/alterschema/src/linter/superfluous/then_without_if.h @@ -1,14 +1,14 @@ class ThenWithoutIf final : public Rule { -public: + public: ThenWithoutIf() - : Rule{"then_without_if", "The `then` keyword is meaningless " - "without the presence of the `if` keyword"} {}; + : Rule{"then_without_if", + "The `then` keyword is meaningless " + "without the presence of the `if` keyword"} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/applicator", diff --git a/vendor/alterschema/src/linter/syntax_sugar/enum_to_const.h b/vendor/alterschema/src/linter/syntax_sugar/enum_to_const.h index 69aa67ed..08e4d11d 100644 --- a/vendor/alterschema/src/linter/syntax_sugar/enum_to_const.h +++ b/vendor/alterschema/src/linter/syntax_sugar/enum_to_const.h @@ -1,14 +1,13 @@ class EnumToConst final : public Rule { -public: + public: EnumToConst() : Rule("enum_to_const", - "An `enum` of a single value can be expressed as `const`") {}; + "An `enum` of a single value can be expressed as `const`"){}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return contains_any( vocabularies, {"https://json-schema.org/draft/2020-12/vocab/validation", diff --git a/vendor/blaze/src/compiler/compile_helpers.h b/vendor/blaze/src/compiler/compile_helpers.h index 2f0459dc..69ec7c3d 100644 --- a/vendor/blaze/src/compiler/compile_helpers.h +++ b/vendor/blaze/src/compiler/compile_helpers.h @@ -4,12 +4,12 @@ #include #include -#include // std::find -#include // assert -#include // std::distance -#include // std::regex, std::regex_match, std::smatch -#include // std::declval, std::move -#include // std::visit +#include // std::find +#include // assert +#include // std::distance +#include // std::regex, std::regex_match, std::smatch +#include // std::declval, std::move +#include // std::visit namespace sourcemeta::blaze { @@ -57,8 +57,8 @@ template auto make(const Context &context, const SchemaContext &schema_context, const DynamicContext &dynamic_context, // Take the value type from the "value" property of the step struct - decltype(std::declval().value) &&value, Template &&children) - -> Step { + decltype(std::declval().value) &&value, + Template &&children) -> Step { return { dynamic_context.keyword.empty() ? dynamic_context.base_schema_location @@ -101,9 +101,9 @@ auto rephrase(const Step &step) -> Type { step.value}; } -inline auto -unsigned_integer_property(const sourcemeta::jsontoolkit::JSON &document, - const sourcemeta::jsontoolkit::JSON::String &property) +inline auto unsigned_integer_property( + const sourcemeta::jsontoolkit::JSON &document, + const sourcemeta::jsontoolkit::JSON::String &property) -> std::optional { if (document.defines(property) && document.at(property).is_integer()) { const auto value{document.at(property).to_integer()}; @@ -114,10 +114,10 @@ unsigned_integer_property(const sourcemeta::jsontoolkit::JSON &document, return std::nullopt; } -inline auto -unsigned_integer_property(const sourcemeta::jsontoolkit::JSON &document, - const sourcemeta::jsontoolkit::JSON::String &property, - const std::size_t otherwise) -> std::size_t { +inline auto unsigned_integer_property( + const sourcemeta::jsontoolkit::JSON &document, + const sourcemeta::jsontoolkit::JSON::String &property, + const std::size_t otherwise) -> std::size_t { return unsigned_integer_property(document, property).value_or(otherwise); } @@ -151,12 +151,10 @@ inline auto pattern_as_prefix(const std::string &pattern) } } -inline auto find_adjacent(const Context &context, - const SchemaContext &schema_context, - const std::set &vocabularies, - const std::string &keyword, - const sourcemeta::jsontoolkit::JSON::Type type) - -> auto { +inline auto find_adjacent( + const Context &context, const SchemaContext &schema_context, + const std::set &vocabularies, const std::string &keyword, + const sourcemeta::jsontoolkit::JSON::Type type) -> auto { std::vector possible_keyword_uris; possible_keyword_uris.push_back( to_uri(schema_context.relative_pointer.initial().concat({keyword}), @@ -235,6 +233,6 @@ inline auto recursive_template_size(const Template &steps) -> std::size_t { return result; } -} // namespace sourcemeta::blaze +} // namespace sourcemeta::blaze #endif diff --git a/vendor/blaze/src/compiler/default_compiler_2019_09.h b/vendor/blaze/src/compiler/default_compiler_2019_09.h index 734c87e6..017461df 100644 --- a/vendor/blaze/src/compiler/default_compiler_2019_09.h +++ b/vendor/blaze/src/compiler/default_compiler_2019_09.h @@ -91,10 +91,9 @@ auto compiler_2019_09_validation_dependentrequired( context, schema_context, dynamic_context, std::move(dependencies))}; } -auto compiler_2019_09_core_annotation(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_2019_09_core_annotation( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { return {make( context, schema_context, dynamic_context, sourcemeta::jsontoolkit::JSON{ @@ -175,10 +174,9 @@ auto compiler_2019_09_applicator_contains_with_options( std::move(children))}; } -auto compiler_2019_09_applicator_contains(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_2019_09_applicator_contains( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { return compiler_2019_09_applicator_contains_with_options( context, schema_context, dynamic_context, false, false); } @@ -192,10 +190,9 @@ auto compiler_2019_09_applicator_additionalproperties( !context.unevaluated_properties_schemas.empty()); } -auto compiler_2019_09_applicator_items(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_2019_09_applicator_items( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { return compiler_draft4_applicator_items_with_options( context, schema_context, dynamic_context, context.mode == Mode::Exhaustive, @@ -321,10 +318,9 @@ auto compiler_2019_09_applicator_unevaluatedproperties( } } -auto compiler_2019_09_core_recursiveref(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_2019_09_core_recursiveref( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { const auto &entry{static_frame_entry(context, schema_context)}; // In this case, just behave as a normal static reference if (!context.references.contains( @@ -374,5 +370,5 @@ auto compiler_2019_09_applicator_patternproperties( !context.unevaluated_properties_schemas.empty()); } -} // namespace internal +} // namespace internal #endif diff --git a/vendor/blaze/src/compiler/default_compiler_2020_12.h b/vendor/blaze/src/compiler/default_compiler_2020_12.h index ec6402b1..72c3b18c 100644 --- a/vendor/blaze/src/compiler/default_compiler_2020_12.h +++ b/vendor/blaze/src/compiler/default_compiler_2020_12.h @@ -19,10 +19,9 @@ auto compiler_2020_12_applicator_prefixitems( !context.unevaluated_items_schemas.empty()); } -auto compiler_2020_12_applicator_items(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_2020_12_applicator_items( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { const auto cursor{(schema_context.schema.defines("prefixItems") && schema_context.schema.at("prefixItems").is_array()) ? schema_context.schema.at("prefixItems").size() @@ -34,20 +33,18 @@ auto compiler_2020_12_applicator_items(const Context &context, !context.unevaluated_items_schemas.empty()); } -auto compiler_2020_12_applicator_contains(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_2020_12_applicator_contains( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { return compiler_2019_09_applicator_contains_with_options( context, schema_context, dynamic_context, context.mode == Mode::Exhaustive, !context.unevaluated_items_schemas.empty()); } -auto compiler_2020_12_core_dynamicref(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_2020_12_core_dynamicref( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { const auto &entry{static_frame_entry(context, schema_context)}; // In this case, just behave as a normal static reference if (!context.references.contains( @@ -76,5 +73,5 @@ auto compiler_2020_12_core_dynamicref(const Context &context, std::string{reference.fragment().value()})}; } -} // namespace internal +} // namespace internal #endif diff --git a/vendor/blaze/src/compiler/default_compiler_draft4.h b/vendor/blaze/src/compiler/default_compiler_draft4.h index 85182fd1..7e1abb42 100644 --- a/vendor/blaze/src/compiler/default_compiler_draft4.h +++ b/vendor/blaze/src/compiler/default_compiler_draft4.h @@ -4,19 +4,18 @@ #include #include -#include // std::sort, std::any_of, std::all_of, std::find_if, std::none_of -#include // assert -#include // std::regex, std::regex_error -#include // std::set -#include // std::ostringstream -#include // std::move +#include // std::sort, std::any_of, std::all_of, std::find_if, std::none_of +#include // assert +#include // std::regex, std::regex_error +#include // std::set +#include // std::ostringstream +#include // std::move #include "compile_helpers.h" -static auto parse_regex(const std::string &pattern, - const sourcemeta::jsontoolkit::URI &base, - const sourcemeta::jsontoolkit::Pointer &schema_location) - -> std::regex { +static auto parse_regex( + const std::string &pattern, const sourcemeta::jsontoolkit::URI &base, + const sourcemeta::jsontoolkit::Pointer &schema_location) -> std::regex { try { return std::regex{pattern, std::regex::ECMAScript | std::regex::nosubs}; } catch (const std::regex_error &) { @@ -67,8 +66,8 @@ static auto defines_direct_enumeration(const sourcemeta::blaze::Template &steps) return std::distance(steps.cbegin(), iterator); } -static auto -is_inside_disjunctor(const sourcemeta::jsontoolkit::Pointer &pointer) -> bool { +static auto is_inside_disjunctor( + const sourcemeta::jsontoolkit::Pointer &pointer) -> bool { return pointer.size() > 2 && pointer.at(pointer.size() - 2).is_index() && pointer.at(pointer.size() - 3).is_property() && (pointer.at(pointer.size() - 3).to_property() == "oneOf" || @@ -78,10 +77,9 @@ is_inside_disjunctor(const sourcemeta::jsontoolkit::Pointer &pointer) -> bool { namespace internal { using namespace sourcemeta::blaze; -auto compiler_draft4_core_ref(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_core_ref( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { // Determine the label const auto &entry{static_frame_entry(context, schema_context)}; const auto type{sourcemeta::jsontoolkit::ReferenceType::Static}; @@ -175,10 +173,9 @@ auto compiler_draft4_core_ref(const Context &context, ValueUnsignedInteger{label}, std::move(children))}; } -auto compiler_draft4_validation_type(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_validation_type( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { if (schema_context.schema.at(dynamic_context.keyword).is_string()) { const auto &type{ schema_context.schema.at(dynamic_context.keyword).to_string()}; @@ -384,10 +381,9 @@ auto compiler_draft4_validation_type(const Context &context, return {}; } -auto compiler_draft4_validation_required(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_validation_required( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { assert(schema_context.schema.at(dynamic_context.keyword).is_array()); if (schema_context.schema.defines("type") && @@ -424,10 +420,9 @@ auto compiler_draft4_validation_required(const Context &context, } } -auto compiler_draft4_applicator_allof(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_applicator_allof( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { assert(schema_context.schema.at(dynamic_context.keyword).is_array()); assert(!schema_context.schema.at(dynamic_context.keyword).empty()); @@ -447,10 +442,9 @@ auto compiler_draft4_applicator_allof(const Context &context, ValueNone{}, std::move(children))}; } -auto compiler_draft4_applicator_anyof(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_applicator_anyof( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { assert(schema_context.schema.at(dynamic_context.keyword).is_array()); assert(!schema_context.schema.at(dynamic_context.keyword).empty()); @@ -475,10 +469,9 @@ auto compiler_draft4_applicator_anyof(const Context &context, std::move(disjunctors))}; } -auto compiler_draft4_applicator_oneof(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_applicator_oneof( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { assert(schema_context.schema.at(dynamic_context.keyword).is_array()); assert(!schema_context.schema.at(dynamic_context.keyword).empty()); @@ -984,10 +977,9 @@ auto compiler_draft4_applicator_additionalproperties( context, schema_context, dynamic_context, false, false); } -auto compiler_draft4_validation_pattern(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_validation_pattern( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { assert(schema_context.schema.at(dynamic_context.keyword).is_string()); if (schema_context.schema.defines("type") && @@ -1005,10 +997,9 @@ auto compiler_draft4_validation_pattern(const Context &context, regex_string})}; } -auto compiler_draft4_validation_format(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_validation_format( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { if (!schema_context.schema.at(dynamic_context.keyword).is_string()) { return {}; } @@ -1034,13 +1025,13 @@ auto compiler_draft4_validation_format(const Context &context, ValueStringType::URI)}; } -#define COMPILE_FORMAT_REGEX(name, regular_expression) \ - if (format == (name)) { \ - return {make( \ - context, schema_context, dynamic_context, \ - ValueRegex{parse_regex(regular_expression, schema_context.base, \ - schema_context.relative_pointer), \ - (regular_expression)})}; \ +#define COMPILE_FORMAT_REGEX(name, regular_expression) \ + if (format == (name)) { \ + return {make( \ + context, schema_context, dynamic_context, \ + ValueRegex{parse_regex(regular_expression, schema_context.base, \ + schema_context.relative_pointer), \ + (regular_expression)})}; \ } COMPILE_FORMAT_REGEX("ipv4", FORMAT_REGEX_IPV4) @@ -1050,10 +1041,9 @@ auto compiler_draft4_validation_format(const Context &context, return {}; } -auto compiler_draft4_applicator_not(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_applicator_not( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { std::size_t subschemas{0}; for (const auto &subschema : walk_subschemas(context, schema_context, dynamic_context)) { @@ -1246,10 +1236,9 @@ auto compiler_draft4_applicator_items_with_options( context, schema_context, dynamic_context, annotate, track_evaluation); } -auto compiler_draft4_applicator_items(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_applicator_items( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { return compiler_draft4_applicator_items_with_options( context, schema_context, dynamic_context, false, false); } @@ -1381,10 +1370,9 @@ auto compiler_draft4_applicator_dependencies( return children; } -auto compiler_draft4_validation_enum(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_validation_enum( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { assert(schema_context.schema.at(dynamic_context.keyword).is_array()); if (schema_context.schema.at(dynamic_context.keyword).size() == 1) { @@ -1422,10 +1410,9 @@ auto compiler_draft4_validation_uniqueitems( ValueNone{})}; } -auto compiler_draft4_validation_maxlength(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_validation_maxlength( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { assert(schema_context.schema.at(dynamic_context.keyword).is_integer() || schema_context.schema.at(dynamic_context.keyword).is_integer_real()); assert(schema_context.schema.at(dynamic_context.keyword).is_positive()); @@ -1452,10 +1439,9 @@ auto compiler_draft4_validation_maxlength(const Context &context, 1})}; } -auto compiler_draft4_validation_minlength(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_validation_minlength( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { assert(schema_context.schema.at(dynamic_context.keyword).is_integer() || schema_context.schema.at(dynamic_context.keyword).is_integer_real()); assert(schema_context.schema.at(dynamic_context.keyword).is_positive()); @@ -1482,10 +1468,9 @@ auto compiler_draft4_validation_minlength(const Context &context, 1})}; } -auto compiler_draft4_validation_maxitems(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_validation_maxitems( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { assert(schema_context.schema.at(dynamic_context.keyword).is_integer() || schema_context.schema.at(dynamic_context.keyword).is_integer_real()); assert(schema_context.schema.at(dynamic_context.keyword).is_positive()); @@ -1512,10 +1497,9 @@ auto compiler_draft4_validation_maxitems(const Context &context, 1})}; } -auto compiler_draft4_validation_minitems(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_validation_minitems( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { assert(schema_context.schema.at(dynamic_context.keyword).is_integer() || schema_context.schema.at(dynamic_context.keyword).is_integer_real()); assert(schema_context.schema.at(dynamic_context.keyword).is_positive()); @@ -1600,10 +1584,9 @@ auto compiler_draft4_validation_minproperties( 1})}; } -auto compiler_draft4_validation_maximum(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_validation_maximum( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { assert(schema_context.schema.at(dynamic_context.keyword).is_number()); if (schema_context.schema.defines("type") && @@ -1632,10 +1615,9 @@ auto compiler_draft4_validation_maximum(const Context &context, } } -auto compiler_draft4_validation_minimum(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft4_validation_minimum( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { assert(schema_context.schema.at(dynamic_context.keyword).is_number()); if (schema_context.schema.defines("type") && @@ -1683,5 +1665,5 @@ auto compiler_draft4_validation_multipleof( schema_context.schema.at(dynamic_context.keyword)})}; } -} // namespace internal +} // namespace internal #endif diff --git a/vendor/blaze/src/compiler/default_compiler_draft6.h b/vendor/blaze/src/compiler/default_compiler_draft6.h index 684f3733..f45d6430 100644 --- a/vendor/blaze/src/compiler/default_compiler_draft6.h +++ b/vendor/blaze/src/compiler/default_compiler_draft6.h @@ -3,17 +3,16 @@ #include -#include // std::all_of +#include // std::all_of #include "compile_helpers.h" namespace internal { using namespace sourcemeta::blaze; -auto compiler_draft6_validation_type(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft6_validation_type( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { if (schema_context.schema.at(dynamic_context.keyword).is_string()) { const auto &type{ schema_context.schema.at(dynamic_context.keyword).to_string()}; @@ -264,10 +263,9 @@ auto compiler_draft6_validation_type(const Context &context, return {}; } -auto compiler_draft6_validation_const(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft6_validation_const( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { return {make( context, schema_context, dynamic_context, sourcemeta::jsontoolkit::JSON{ @@ -310,10 +308,9 @@ auto compiler_draft6_validation_exclusiveminimum( schema_context.schema.at(dynamic_context.keyword)})}; } -auto compiler_draft6_applicator_contains(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft6_applicator_contains( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { if (schema_context.schema.defines("type") && schema_context.schema.at("type").is_string() && schema_context.schema.at("type").to_string() != "array") { @@ -356,5 +353,5 @@ auto compiler_draft6_validation_propertynames( std::move(children))}; } -} // namespace internal +} // namespace internal #endif diff --git a/vendor/blaze/src/compiler/default_compiler_draft7.h b/vendor/blaze/src/compiler/default_compiler_draft7.h index 23e35a24..0e6d7a90 100644 --- a/vendor/blaze/src/compiler/default_compiler_draft7.h +++ b/vendor/blaze/src/compiler/default_compiler_draft7.h @@ -9,10 +9,9 @@ namespace internal { using namespace sourcemeta::blaze; // TODO: Don't generate `if` if neither `then` nor `else` is defined -auto compiler_draft7_applicator_if(const Context &context, - const SchemaContext &schema_context, - const DynamicContext &dynamic_context) - -> Template { +auto compiler_draft7_applicator_if( + const Context &context, const SchemaContext &schema_context, + const DynamicContext &dynamic_context) -> Template { // `if` Template children{compile(context, schema_context, relative_dynamic_context, sourcemeta::jsontoolkit::empty_pointer, @@ -78,5 +77,5 @@ auto compiler_draft7_applicator_else(const Context &, const SchemaContext &, return {}; } -} // namespace internal +} // namespace internal #endif diff --git a/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler.h b/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler.h index 00ec7a2f..2c918b2e 100644 --- a/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler.h +++ b/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler.h @@ -7,21 +7,19 @@ #include #include - #include - #include #include #include #include -#include // std::uint8_t -#include // std::function -#include // std::map -#include // std::optional, std::nullopt -#include // std::set -#include // std::string -#include // std::vector +#include // std::uint8_t +#include // std::function +#include // std::map +#include // std::optional, std::nullopt +#include // std::set +#include // std::string +#include // std::vector /// @defgroup compiler Compiler /// @brief Compile a JSON Schema into a set of low-level instructions for fast @@ -233,6 +231,6 @@ auto SOURCEMETA_BLAZE_COMPILER_EXPORT template_format_compare( const sourcemeta::jsontoolkit::JSON::String &left, const sourcemeta::jsontoolkit::JSON::String &right) -> bool; -} // namespace sourcemeta::blaze +} // namespace sourcemeta::blaze #endif diff --git a/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_error.h b/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_error.h index f7d72da6..f795f90d 100644 --- a/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_error.h +++ b/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_error.h @@ -8,9 +8,9 @@ #include #include -#include // std::exception -#include // std::string -#include // std::move +#include // std::exception +#include // std::string +#include // std::move namespace sourcemeta::blaze { @@ -24,11 +24,12 @@ namespace sourcemeta::blaze { /// @ingroup jsonschema /// An error that represents a schema compilation failure event class SOURCEMETA_BLAZE_COMPILER_EXPORT CompilerError : public std::exception { -public: + public: CompilerError(const sourcemeta::jsontoolkit::URI &base, const sourcemeta::jsontoolkit::Pointer &schema_location, std::string message) - : base_{base}, schema_location_{schema_location}, + : base_{base}, + schema_location_{schema_location}, message_{std::move(message)} {} [[nodiscard]] auto what() const noexcept -> const char * override { return this->message_.c_str(); @@ -44,7 +45,7 @@ class SOURCEMETA_BLAZE_COMPILER_EXPORT CompilerError : public std::exception { return this->schema_location_; } -private: + private: sourcemeta::jsontoolkit::URI base_; sourcemeta::jsontoolkit::Pointer schema_location_; std::string message_; @@ -54,6 +55,6 @@ class SOURCEMETA_BLAZE_COMPILER_EXPORT CompilerError : public std::exception { #pragma warning(default : 4251 4275) #endif -} // namespace sourcemeta::blaze +} // namespace sourcemeta::blaze #endif diff --git a/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_output.h b/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_output.h index f53e0e9e..608dbbb3 100644 --- a/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_output.h +++ b/vendor/blaze/src/compiler/include/sourcemeta/blaze/compiler_output.h @@ -5,14 +5,13 @@ #include #endif +#include #include #include -#include - -#include // std::set -#include // std::string -#include // std::vector +#include // std::set +#include // std::string +#include // std::vector namespace sourcemeta::blaze { @@ -59,7 +58,7 @@ namespace sourcemeta::blaze { /// } /// ``` class SOURCEMETA_BLAZE_COMPILER_EXPORT ErrorOutput { -public: + public: ErrorOutput(const sourcemeta::jsontoolkit::JSON &instance, const sourcemeta::jsontoolkit::WeakPointer &base = sourcemeta::jsontoolkit::empty_weak_pointer); @@ -87,7 +86,7 @@ class SOURCEMETA_BLAZE_COMPILER_EXPORT ErrorOutput { auto cbegin() const -> const_iterator; auto cend() const -> const_iterator; -private: + private: // Exporting symbols that depends on the standard C++ library is considered // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN @@ -158,7 +157,7 @@ class SOURCEMETA_BLAZE_COMPILER_EXPORT ErrorOutput { /// } /// ``` class SOURCEMETA_BLAZE_COMPILER_EXPORT TraceOutput { -public: + public: TraceOutput(const sourcemeta::jsontoolkit::WeakPointer &base = sourcemeta::jsontoolkit::empty_weak_pointer); @@ -189,7 +188,7 @@ class SOURCEMETA_BLAZE_COMPILER_EXPORT TraceOutput { auto cbegin() const -> const_iterator; auto cend() const -> const_iterator; -private: + private: // Exporting symbols that depends on the standard C++ library is considered // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN @@ -214,6 +213,6 @@ describe(const bool valid, const Template::value_type &step, const sourcemeta::jsontoolkit::JSON &instance, const sourcemeta::jsontoolkit::JSON &annotation) -> std::string; -} // namespace sourcemeta::blaze +} // namespace sourcemeta::blaze #endif diff --git a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator.h b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator.h index 1abc4607..03787a16 100644 --- a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator.h +++ b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator.h @@ -8,12 +8,11 @@ #include #include #include - #include #include -#include // std::uint8_t -#include // std::function +#include // std::uint8_t +#include // std::function /// @defgroup evaluator Evaluator /// @brief A high-performance JSON Schema evaluator @@ -80,8 +79,8 @@ using Callback = /// assert(result); /// ``` auto SOURCEMETA_BLAZE_EVALUATOR_EXPORT -evaluate(const Template &steps, const sourcemeta::jsontoolkit::JSON &instance) - -> bool; +evaluate(const Template &steps, + const sourcemeta::jsontoolkit::JSON &instance) -> bool; /// @ingroup evaluator /// @@ -173,10 +172,9 @@ evaluate(const Template &steps, const sourcemeta::jsontoolkit::JSON &instance, /// schema_template, context)}; /// assert(result); /// ``` -auto SOURCEMETA_BLAZE_EVALUATOR_EXPORT evaluate(const Template &steps, - EvaluationContext &context) - -> bool; +auto SOURCEMETA_BLAZE_EVALUATOR_EXPORT +evaluate(const Template &steps, EvaluationContext &context) -> bool; -} // namespace sourcemeta::blaze +} // namespace sourcemeta::blaze #endif diff --git a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_context.h b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_context.h index b2f9fa3a..4b86d74c 100644 --- a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_context.h +++ b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_context.h @@ -6,25 +6,24 @@ #endif #include - #include #include -#include // assert -#include // std::uint8_t -#include // std::reference_wrapper -#include // std::map -#include // std::optional -#include // std::set -#include // std::string -#include // std::vector +#include // assert +#include // std::uint8_t +#include // std::reference_wrapper +#include // std::map +#include // std::optional +#include // std::set +#include // std::string +#include // std::vector namespace sourcemeta::blaze { /// @ingroup evaluator /// Represents a stateful schema evaluation context class SOURCEMETA_BLAZE_EVALUATOR_EXPORT EvaluationContext { -public: + public: /// Prepare the schema evaluation context with a given instance. /// Performing evaluation on a context without preparing it with /// an instance is undefined behavior. @@ -51,25 +50,26 @@ class SOURCEMETA_BLAZE_EVALUATOR_EXPORT EvaluationContext { std::reference_wrapper &&new_instance) -> void; auto pop(const bool dynamic, const bool track) -> void; - auto - enter(const sourcemeta::jsontoolkit::WeakPointer::Token::Property &property, - const bool track) -> void; + auto enter( + const sourcemeta::jsontoolkit::WeakPointer::Token::Property &property, + const bool track) -> void; auto enter(const sourcemeta::jsontoolkit::WeakPointer::Token::Index &index, const bool track) -> void; auto leave(const bool track) -> void; auto push_without_traverse( const sourcemeta::jsontoolkit::Pointer &relative_schema_location, const sourcemeta::jsontoolkit::Pointer &relative_instance_location, - const std::size_t &schema_resource, const bool dynamic, const bool track) - -> void; + const std::size_t &schema_resource, const bool dynamic, + const bool track) -> void; /////////////////////////////////////////////// // Target resolution /////////////////////////////////////////////// auto resolve_target() -> const sourcemeta::jsontoolkit::JSON &; - auto resolve_string_target() -> std::optional< - std::reference_wrapper>; + auto resolve_string_target() + -> std::optional< + std::reference_wrapper>; /////////////////////////////////////////////// // References and anchors @@ -86,12 +86,10 @@ class SOURCEMETA_BLAZE_EVALUATOR_EXPORT EvaluationContext { auto evaluate(const sourcemeta::jsontoolkit::WeakPointer::Token::Index from, const sourcemeta::jsontoolkit::WeakPointer::Token::Index to) -> void; - auto - evaluate(const sourcemeta::jsontoolkit::Pointer &relative_instance_location) - -> void; - auto - is_evaluated(const sourcemeta::jsontoolkit::WeakPointer::Token &tail) const - -> bool; + auto evaluate(const sourcemeta::jsontoolkit::Pointer + &relative_instance_location) -> void; + auto is_evaluated( + const sourcemeta::jsontoolkit::WeakPointer::Token &tail) const -> bool; auto unevaluate() -> void; // TODO: Remove this @@ -132,6 +130,6 @@ class SOURCEMETA_BLAZE_EVALUATOR_EXPORT EvaluationContext { #endif }; -} // namespace sourcemeta::blaze +} // namespace sourcemeta::blaze #endif diff --git a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_error.h b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_error.h index 640b93df..fdd3ead6 100644 --- a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_error.h +++ b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_error.h @@ -5,9 +5,9 @@ #include #endif -#include // std::exception -#include // std::string -#include // std::move +#include // std::exception +#include // std::string +#include // std::move namespace sourcemeta::blaze { @@ -22,13 +22,13 @@ namespace sourcemeta::blaze { /// An error that represents a schema evaluation error event class SOURCEMETA_BLAZE_EVALUATOR_EXPORT EvaluationError : public std::exception { -public: + public: EvaluationError(std::string message) : message_{std::move(message)} {} - [[nodiscard]] auto what() const noexcept -> const char * override { + [[nodiscard]] auto what() const noexcept -> const char* override { return this->message_.c_str(); } -private: + private: std::string message_; }; @@ -36,6 +36,6 @@ class SOURCEMETA_BLAZE_EVALUATOR_EXPORT EvaluationError #pragma warning(default : 4251 4275) #endif -} // namespace sourcemeta::blaze +} // namespace sourcemeta::blaze #endif diff --git a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_template.h b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_template.h index 901feccb..e0711bbc 100644 --- a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_template.h +++ b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_template.h @@ -2,12 +2,11 @@ #define SOURCEMETA_BLAZE_EVALUATOR_TEMPLATE_H #include - #include -#include // std::uint8_t -#include // std::string -#include // std::vector +#include // std::uint8_t +#include // std::string +#include // std::vector namespace sourcemeta::blaze { @@ -205,27 +204,27 @@ enum class TemplateIndex : std::uint8_t { }; #endif -#define DEFINE_STEP_WITH_VALUE(category, name, type) \ - struct category##name { \ - const sourcemeta::jsontoolkit::Pointer relative_schema_location; \ - const sourcemeta::jsontoolkit::Pointer relative_instance_location; \ - const std::string keyword_location; \ - const std::size_t schema_resource; \ - const bool dynamic; \ - const bool track; \ - const type value; \ +#define DEFINE_STEP_WITH_VALUE(category, name, type) \ + struct category##name { \ + const sourcemeta::jsontoolkit::Pointer relative_schema_location; \ + const sourcemeta::jsontoolkit::Pointer relative_instance_location; \ + const std::string keyword_location; \ + const std::size_t schema_resource; \ + const bool dynamic; \ + const bool track; \ + const type value; \ }; -#define DEFINE_STEP_APPLICATOR(category, name, type) \ - struct category##name { \ - const sourcemeta::jsontoolkit::Pointer relative_schema_location; \ - const sourcemeta::jsontoolkit::Pointer relative_instance_location; \ - const std::string keyword_location; \ - const std::size_t schema_resource; \ - const bool dynamic; \ - const bool track; \ - const type value; \ - const Template children; \ +#define DEFINE_STEP_APPLICATOR(category, name, type) \ + struct category##name { \ + const sourcemeta::jsontoolkit::Pointer relative_schema_location; \ + const sourcemeta::jsontoolkit::Pointer relative_instance_location; \ + const std::string keyword_location; \ + const std::size_t schema_resource; \ + const bool dynamic; \ + const bool track; \ + const type value; \ + const Template children; \ }; /// @defgroup evaluator_instructions Instruction Set @@ -608,6 +607,6 @@ DEFINE_STEP_WITH_VALUE(Control, DynamicAnchorJump, ValueString) #undef DEFINE_STEP_WITH_VALUE #undef DEFINE_STEP_APPLICATOR -} // namespace sourcemeta::blaze +} // namespace sourcemeta::blaze #endif diff --git a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_value.h b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_value.h index dd672996..a4ac92e1 100644 --- a/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_value.h +++ b/vendor/blaze/src/evaluator/include/sourcemeta/blaze/evaluator_value.h @@ -5,14 +5,14 @@ #include #include -#include // std::uint8_t -#include // std::optional, std::nullopt -#include // std::regex -#include // std::string -#include // std::tuple -#include // std::unordered_map -#include // std::pair -#include // std::vector +#include // std::uint8_t +#include // std::optional, std::nullopt +#include // std::regex +#include // std::string +#include // std::tuple +#include // std::unordered_map +#include // std::pair +#include // std::vector namespace sourcemeta::blaze { @@ -95,6 +95,6 @@ using ValueIndexPair = std::pair; /// Represents a compiler step value that consists of a pointer using ValuePointer = sourcemeta::jsontoolkit::Pointer; -} // namespace sourcemeta::blaze +} // namespace sourcemeta::blaze #endif diff --git a/vendor/blaze/src/evaluator/trace.h b/vendor/blaze/src/evaluator/trace.h index b2cbec17..e08b32d8 100644 --- a/vendor/blaze/src/evaluator/trace.h +++ b/vendor/blaze/src/evaluator/trace.h @@ -13,12 +13,12 @@ static os_log_t log_handle = os_log_create("com.sourcemeta.blaze", OS_LOG_CATEGORY_POINTS_OF_INTEREST); -#define SOURCEMETA_TRACE_REGISTER_ID(name) \ - const os_signpost_id_t name = os_signpost_id_generate(log_handle); \ +#define SOURCEMETA_TRACE_REGISTER_ID(name) \ + const os_signpost_id_t name = os_signpost_id_generate(log_handle); \ assert((name) != OS_SIGNPOST_ID_INVALID); -#define SOURCEMETA_TRACE_START(id, title) \ +#define SOURCEMETA_TRACE_START(id, title) \ os_signpost_interval_begin(log_handle, id, title); -#define SOURCEMETA_TRACE_END(id, title) \ +#define SOURCEMETA_TRACE_END(id, title) \ os_signpost_interval_end(log_handle, id, title); #else diff --git a/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket.h b/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket.h index 45cead7d..9e16d3f5 100644 --- a/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket.h +++ b/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket.h @@ -19,14 +19,13 @@ #include #include #include - #include -#include // std::uint64_t -#include // std::function -#include // std::future -#include // std::optional -#include // std::string +#include // std::uint64_t +#include // std::function +#include // std::future +#include // std::optional +#include // std::string namespace sourcemeta::hydra { @@ -36,7 +35,7 @@ namespace sourcemeta::hydra { /// concurrent context, make use of `std::mutex` or similar techniques to /// control access to it. class SOURCEMETA_HYDRA_BUCKET_EXPORT Bucket { -public: + public: /// Create an instance of this class. This class supports automatically /// caching responses in an LRU fashion based on a byte-size limit. If you set /// the cache byte limit to 0, then caching is effectively disabled. @@ -173,7 +172,7 @@ class SOURCEMETA_HYDRA_BUCKET_EXPORT Bucket { std::function callback) -> std::future; -private: + private: #if defined(_MSC_VER) #pragma warning(disable : 4251) #endif @@ -188,6 +187,6 @@ class SOURCEMETA_HYDRA_BUCKET_EXPORT Bucket { #endif }; -} // namespace sourcemeta::hydra +} // namespace sourcemeta::hydra #endif diff --git a/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_aws_sigv4.h b/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_aws_sigv4.h index cbb21109..3123ea2c 100644 --- a/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_aws_sigv4.h +++ b/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_aws_sigv4.h @@ -8,11 +8,11 @@ #include #include -#include // std::chrono::system_clock::time_point -#include // std::map -#include // std::ostream -#include // std::string -#include // std::string_view +#include // std::chrono::system_clock::time_point +#include // std::map +#include // std::ostream +#include // std::string +#include // std::string_view // This entire module is considered to be private and should not be directly // used by consumers of this project @@ -27,15 +27,13 @@ aws_sigv4(const http::Method method, const sourcemeta::jsontoolkit::URI &url, const std::chrono::system_clock::time_point now) -> std::map; -auto SOURCEMETA_HYDRA_BUCKET_EXPORT aws_sigv4_scope(std::string_view datastamp, - std::string_view region, - std::ostream &output) - -> void; +auto SOURCEMETA_HYDRA_BUCKET_EXPORT +aws_sigv4_scope(std::string_view datastamp, std::string_view region, + std::ostream &output) -> void; -auto SOURCEMETA_HYDRA_BUCKET_EXPORT aws_sigv4_key(std::string_view secret_key, - std::string_view region, - std::string_view datastamp) - -> std::string; +auto SOURCEMETA_HYDRA_BUCKET_EXPORT +aws_sigv4_key(std::string_view secret_key, std::string_view region, + std::string_view datastamp) -> std::string; auto SOURCEMETA_HYDRA_BUCKET_EXPORT aws_sigv4_canonical(const http::Method method, std::string_view host, @@ -47,15 +45,15 @@ aws_sigv4_canonical(const http::Method method, std::string_view host, // MM: Two-digit month (01-12) // DD: Two-digit day (01-31) // Example: 20230913 (September 13, 2023) -auto SOURCEMETA_HYDRA_BUCKET_EXPORT aws_sigv4_datastamp( - const std::chrono::system_clock::time_point time, std::ostream &output) - -> void; +auto SOURCEMETA_HYDRA_BUCKET_EXPORT +aws_sigv4_datastamp(const std::chrono::system_clock::time_point time, + std::ostream &output) -> void; -auto SOURCEMETA_HYDRA_BUCKET_EXPORT aws_sigv4_iso8601( - const std::chrono::system_clock::time_point time, std::ostream &output) - -> void; +auto SOURCEMETA_HYDRA_BUCKET_EXPORT +aws_sigv4_iso8601(const std::chrono::system_clock::time_point time, + std::ostream &output) -> void; -} // namespace sourcemeta::hydra +} // namespace sourcemeta::hydra #endif diff --git a/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_cache.h b/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_cache.h index 771a5994..6bb20eb1 100644 --- a/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_cache.h +++ b/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_cache.h @@ -3,23 +3,24 @@ #include -#include // assert -#include // std::uint64_t -#include // std::prev -#include // std::list -#include // std::optional -#include // std::string -#include // std::tuple -#include // std::unordered_map -#include // std::move +#include // assert +#include // std::uint64_t +#include // std::prev +#include // std::list +#include // std::optional +#include // std::string +#include // std::tuple +#include // std::unordered_map +#include // std::move namespace sourcemeta::hydra { // This entire class is considered to be private and should not be directly used // by consumers of this project #if !defined(DOXYGEN) -template class BucketCache { -public: +template +class BucketCache { + public: // No logical size limit means no cache BucketCache() : logical_size_limit{0} {} BucketCache(const std::uint64_t limit) : logical_size_limit{limit} {} @@ -70,7 +71,7 @@ template class BucketCache { return std::get<2>(this->index.at(this->queue.front())); } -private: + private: auto remove_entry(const std::string &key) -> void { assert(!this->queue.empty()); assert(this->queue.size() == this->index.size()); @@ -97,6 +98,6 @@ template class BucketCache { }; #endif -} // namespace sourcemeta::hydra +} // namespace sourcemeta::hydra #endif diff --git a/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_cache_policy.h b/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_cache_policy.h index 7570dc09..fdf7a2f8 100644 --- a/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_cache_policy.h +++ b/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_cache_policy.h @@ -16,6 +16,6 @@ enum class BucketCachePolicy { }; -} // namespace sourcemeta::hydra +} // namespace sourcemeta::hydra #endif diff --git a/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_error.h b/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_error.h index 4631194b..08c2bd75 100644 --- a/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_error.h +++ b/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_error.h @@ -5,8 +5,8 @@ #include #endif -#include // std::exception -#include // std::string +#include // std::exception +#include // std::string namespace sourcemeta::hydra { @@ -20,16 +20,16 @@ namespace sourcemeta::hydra { /// @ingroup bucket /// This class represents a general Bucket error. class SOURCEMETA_HYDRA_BUCKET_EXPORT BucketError : public std::exception { -public: + public: // We don't want to document this internal constructor #if !defined(DOXYGEN) BucketError(std::string message); #endif /// Get the error message - [[nodiscard]] auto what() const noexcept -> const char * override; + [[nodiscard]] auto what() const noexcept -> const char* override; -private: + private: std::string message_; }; @@ -37,6 +37,6 @@ class SOURCEMETA_HYDRA_BUCKET_EXPORT BucketError : public std::exception { #pragma warning(default : 4251 4275) #endif -} // namespace sourcemeta::hydra +} // namespace sourcemeta::hydra #endif diff --git a/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_response.h b/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_response.h index a0e03481..86215986 100644 --- a/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_response.h +++ b/vendor/hydra/src/bucket/include/sourcemeta/hydra/bucket_response.h @@ -1,13 +1,14 @@ #ifndef SOURCEMETA_HYDRA_BUCKET_RESPONSE_H #define SOURCEMETA_HYDRA_BUCKET_RESPONSE_H -#include // std::chrono::system_clock::time_point -#include // std::string +#include // std::chrono::system_clock::time_point +#include // std::string namespace sourcemeta::hydra { /// @ingroup bucket /// This class represents a Bucket response. -template struct BucketResponse { +template +struct BucketResponse { /// The response data itself T data; /// The ETag HTTP header that the server responded with @@ -17,6 +18,6 @@ template struct BucketResponse { /// Whether the response resulted in an in-memory cache hit bool cache_hit; }; -} // namespace sourcemeta::hydra +} // namespace sourcemeta::hydra #endif diff --git a/vendor/hydra/src/crypto/include/sourcemeta/hydra/crypto.h b/vendor/hydra/src/crypto/include/sourcemeta/hydra/crypto.h index a559088e..f0aaa93d 100644 --- a/vendor/hydra/src/crypto/include/sourcemeta/hydra/crypto.h +++ b/vendor/hydra/src/crypto/include/sourcemeta/hydra/crypto.h @@ -5,9 +5,9 @@ #include #endif -#include // std::ostream -#include // std::string -#include // std::string_view +#include // std::ostream +#include // std::string +#include // std::string_view /// @defgroup crypto Crypto /// @brief This module offers a collection of cryptographic utilities for use in @@ -93,6 +93,6 @@ auto SOURCEMETA_HYDRA_CRYPTO_EXPORT hmac_sha256(std::string_view secret, std::string_view value, std::ostream &output) -> void; -} // namespace sourcemeta::hydra +} // namespace sourcemeta::hydra #endif diff --git a/vendor/hydra/src/http/include/sourcemeta/hydra/http_error.h b/vendor/hydra/src/http/include/sourcemeta/hydra/http_error.h index 778ae1d4..d3f585ab 100644 --- a/vendor/hydra/src/http/include/sourcemeta/hydra/http_error.h +++ b/vendor/hydra/src/http/include/sourcemeta/hydra/http_error.h @@ -5,8 +5,8 @@ #include #endif -#include // std::exception -#include // std::string +#include // std::exception +#include // std::string namespace sourcemeta::hydra::http { @@ -20,16 +20,16 @@ namespace sourcemeta::hydra::http { /// @ingroup http /// This class represents a general HTTP error. class SOURCEMETA_HYDRA_HTTP_EXPORT Error : public std::exception { -public: + public: // We don't want to document this internal constructor #if !defined(DOXYGEN) Error(std::string message); #endif /// Get the error message - [[nodiscard]] auto what() const noexcept -> const char * override; + [[nodiscard]] auto what() const noexcept -> const char* override; -private: + private: std::string message_; }; @@ -37,6 +37,6 @@ class SOURCEMETA_HYDRA_HTTP_EXPORT Error : public std::exception { #pragma warning(default : 4251 4275) #endif -} // namespace sourcemeta::hydra::http +} // namespace sourcemeta::hydra::http #endif diff --git a/vendor/hydra/src/http/include/sourcemeta/hydra/http_header.h b/vendor/hydra/src/http/include/sourcemeta/hydra/http_header.h index 18b86ee7..2d33aa5b 100644 --- a/vendor/hydra/src/http/include/sourcemeta/hydra/http_header.h +++ b/vendor/hydra/src/http/include/sourcemeta/hydra/http_header.h @@ -5,10 +5,10 @@ #include #endif -#include // std::chrono::system_clock::time_point -#include // std::string -#include // std::pair -#include // std::vector +#include // std::chrono::system_clock::time_point +#include // std::string +#include // std::pair +#include // std::vector namespace sourcemeta::hydra::http { @@ -46,6 +46,6 @@ using HeaderListElement = std::pair; auto SOURCEMETA_HYDRA_HTTP_EXPORT header_list(const std::string &value) -> std::vector; -} // namespace sourcemeta::hydra::http +} // namespace sourcemeta::hydra::http #endif diff --git a/vendor/hydra/src/http/include/sourcemeta/hydra/http_method.h b/vendor/hydra/src/http/include/sourcemeta/hydra/http_method.h index 82dc1737..7e34ea39 100644 --- a/vendor/hydra/src/http/include/sourcemeta/hydra/http_method.h +++ b/vendor/hydra/src/http/include/sourcemeta/hydra/http_method.h @@ -5,8 +5,8 @@ #include #endif -#include // std::ostream -#include // std::string_view +#include // std::ostream +#include // std::string_view namespace sourcemeta::hydra::http { @@ -36,9 +36,8 @@ enum class Method { /// output << sourcemeta::hydra::http::Method::GET; /// assert(output.str() == "GET"); /// ``` -auto SOURCEMETA_HYDRA_HTTP_EXPORT operator<<(std::ostream &stream, - const Method method) - -> std::ostream &; +auto SOURCEMETA_HYDRA_HTTP_EXPORT +operator<<(std::ostream &stream, const Method method) -> std::ostream &; /// @ingroup http /// Construct a HTTP method from a string. Note that casing is not supported. @@ -54,6 +53,6 @@ auto SOURCEMETA_HYDRA_HTTP_EXPORT operator<<(std::ostream &stream, /// ``` auto SOURCEMETA_HYDRA_HTTP_EXPORT to_method(std::string_view method) -> Method; -} // namespace sourcemeta::hydra::http +} // namespace sourcemeta::hydra::http #endif diff --git a/vendor/hydra/src/http/include/sourcemeta/hydra/http_mime.h b/vendor/hydra/src/http/include/sourcemeta/hydra/http_mime.h index febeaba2..fc019a1c 100644 --- a/vendor/hydra/src/http/include/sourcemeta/hydra/http_mime.h +++ b/vendor/hydra/src/http/include/sourcemeta/hydra/http_mime.h @@ -5,8 +5,8 @@ #include #endif -#include // std::filesystem -#include // std::string +#include // std::filesystem +#include // std::string namespace sourcemeta::hydra { @@ -23,6 +23,6 @@ namespace sourcemeta::hydra { auto SOURCEMETA_HYDRA_HTTP_EXPORT mime_type(const std::filesystem::path &file_path) -> std::string; -} // namespace sourcemeta::hydra +} // namespace sourcemeta::hydra #endif diff --git a/vendor/hydra/src/http/include/sourcemeta/hydra/http_status.h b/vendor/hydra/src/http/include/sourcemeta/hydra/http_status.h index acc40d2d..ec56d61f 100644 --- a/vendor/hydra/src/http/include/sourcemeta/hydra/http_status.h +++ b/vendor/hydra/src/http/include/sourcemeta/hydra/http_status.h @@ -5,8 +5,8 @@ #include #endif -#include // std::uint16_t -#include // std::ostream +#include // std::uint16_t +#include // std::ostream namespace sourcemeta::hydra::http { @@ -87,10 +87,9 @@ enum class Status : std::uint16_t { }; /// @ingroup http -auto SOURCEMETA_HYDRA_HTTP_EXPORT operator<<(std::ostream &stream, - const Status value) - -> std::ostream &; +auto SOURCEMETA_HYDRA_HTTP_EXPORT +operator<<(std::ostream &stream, const Status value) -> std::ostream &; -} // namespace sourcemeta::hydra::http +} // namespace sourcemeta::hydra::http #endif diff --git a/vendor/hydra/src/http/include/sourcemeta/hydra/http_time.h b/vendor/hydra/src/http/include/sourcemeta/hydra/http_time.h index bff2dc11..ff954acf 100644 --- a/vendor/hydra/src/http/include/sourcemeta/hydra/http_time.h +++ b/vendor/hydra/src/http/include/sourcemeta/hydra/http_time.h @@ -5,8 +5,8 @@ #include #endif -#include // std::chrono::system_clock::time_point -#include // std::string +#include // std::chrono::system_clock::time_point +#include // std::string namespace sourcemeta::hydra::http { @@ -69,6 +69,6 @@ auto to_gmt(const std::chrono::system_clock::time_point time) -> std::string; SOURCEMETA_HYDRA_HTTP_EXPORT auto from_gmt(const std::string &time) -> std::chrono::system_clock::time_point; -} // namespace sourcemeta::hydra::http +} // namespace sourcemeta::hydra::http #endif diff --git a/vendor/hydra/src/httpclient/include/sourcemeta/hydra/httpclient_request.h b/vendor/hydra/src/httpclient/include/sourcemeta/hydra/httpclient_request.h index 5af46fa8..72c44f08 100644 --- a/vendor/hydra/src/httpclient/include/sourcemeta/hydra/httpclient_request.h +++ b/vendor/hydra/src/httpclient/include/sourcemeta/hydra/httpclient_request.h @@ -6,23 +6,22 @@ #endif #include - #include #include -#include // std::future -#include // std::initializer_list -#include // std::istream -#include // std::set -#include // std::string -#include // std::string_view +#include // std::future +#include // std::initializer_list +#include // std::istream +#include // std::set +#include // std::string +#include // std::string_view namespace sourcemeta::hydra::http { /// @ingroup httpclient /// This class is used to perform a non-streaming HTTP request. class SOURCEMETA_HYDRA_HTTPCLIENT_EXPORT ClientRequest { -public: + public: /// Construct an HTTP request to a given URL. For example: /// /// ```cpp @@ -181,7 +180,7 @@ class SOURCEMETA_HYDRA_HTTPCLIENT_EXPORT ClientRequest { /// ``` auto send(std::istream &body) -> std::future; -private: + private: ClientStream stream; // Exporting symbols that depends on the standard C++ library is considered // safe. @@ -196,6 +195,6 @@ class SOURCEMETA_HYDRA_HTTPCLIENT_EXPORT ClientRequest { bool capture_all_{false}; }; -} // namespace sourcemeta::hydra::http +} // namespace sourcemeta::hydra::http #endif diff --git a/vendor/hydra/src/httpclient/include/sourcemeta/hydra/httpclient_response.h b/vendor/hydra/src/httpclient/include/sourcemeta/hydra/httpclient_response.h index d9bd00c5..12dea7b3 100644 --- a/vendor/hydra/src/httpclient/include/sourcemeta/hydra/httpclient_response.h +++ b/vendor/hydra/src/httpclient/include/sourcemeta/hydra/httpclient_response.h @@ -7,19 +7,19 @@ #include -#include // std::chrono::system_clock::time_point -#include // std::map -#include // std::optional -#include // std::ostringstream, std::istringstream -#include // std::string -#include // std::vector +#include // std::chrono::system_clock::time_point +#include // std::map +#include // std::optional +#include // std::ostringstream, std::istringstream +#include // std::string +#include // std::vector namespace sourcemeta::hydra::http { /// @ingroup httpclient /// This class represents a non-streaming HTTP response. class SOURCEMETA_HYDRA_HTTPCLIENT_EXPORT ClientResponse { -public: + public: // We don't want to document this internal constructor #if !defined(DOXYGEN) ClientResponse(const Status status, @@ -164,7 +164,7 @@ class SOURCEMETA_HYDRA_HTTPCLIENT_EXPORT ClientResponse { /// ``` auto body() -> std::istringstream &; -private: + private: Status status_; // Exporting symbols that depends on the standard C++ library is considered // safe. @@ -179,6 +179,6 @@ class SOURCEMETA_HYDRA_HTTPCLIENT_EXPORT ClientResponse { #endif }; -} // namespace sourcemeta::hydra::http +} // namespace sourcemeta::hydra::http #endif diff --git a/vendor/hydra/src/httpclient/include/sourcemeta/hydra/httpclient_stream.h b/vendor/hydra/src/httpclient/include/sourcemeta/hydra/httpclient_stream.h index 915047e4..1537bebe 100644 --- a/vendor/hydra/src/httpclient/include/sourcemeta/hydra/httpclient_stream.h +++ b/vendor/hydra/src/httpclient/include/sourcemeta/hydra/httpclient_stream.h @@ -7,21 +7,21 @@ #include -#include // std::uint8_t -#include // std::function -#include // std::future -#include // std::unique_ptr -#include // std::span -#include // std::string -#include // std::string_view -#include // std::vector +#include // std::uint8_t +#include // std::function +#include // std::future +#include // std::unique_ptr +#include // std::span +#include // std::string +#include // std::string_view +#include // std::vector namespace sourcemeta::hydra::http { /// @ingroup httpclient /// This class is used to perform a streaming HTTP request. class SOURCEMETA_HYDRA_HTTPCLIENT_EXPORT ClientStream { -public: + public: /// Construct a streaming HTTP request to a given URL. For example: /// /// ```cpp @@ -304,12 +304,12 @@ class SOURCEMETA_HYDRA_HTTPCLIENT_EXPORT ClientStream { /// ``` auto on_body(BodyCallback callback) noexcept -> void; -private: + private: struct Internal; // No need to make this private, as the contents of `Internal` // are already hidden with the PIMPL idiom. -public: + public: // Exporting symbols that depends on the standard C++ library is considered // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN @@ -322,6 +322,6 @@ class SOURCEMETA_HYDRA_HTTPCLIENT_EXPORT ClientStream { #endif }; -} // namespace sourcemeta::hydra::http +} // namespace sourcemeta::hydra::http #endif diff --git a/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver.h b/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver.h index 3a1a424a..844073fa 100644 --- a/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver.h +++ b/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver.h @@ -19,20 +19,20 @@ #include #include -#include // std::uint32_t -#include // std::exception_ptr -#include // std::filesystem::path -#include // std::function -#include // std::string -#include // std::tuple -#include // std::vector +#include // std::uint32_t +#include // std::exception_ptr +#include // std::filesystem::path +#include // std::function +#include // std::string +#include // std::tuple +#include // std::vector namespace sourcemeta::hydra::http { /// @ingroup httpserver /// This class represents an HTTP server class SOURCEMETA_HYDRA_HTTPSERVER_EXPORT Server { -public: + public: /// Create a server instance. For example: /// /// ```cpp @@ -78,8 +78,8 @@ class SOURCEMETA_HYDRA_HTTPSERVER_EXPORT Server { /// /// server.run(3000); /// ``` - auto route(const Method method, std::string &&path, RouteCallback &&callback) - -> void; + auto route(const Method method, std::string &&path, + RouteCallback &&callback) -> void; /// Set a handler that responds to HTTP requests that do not match any other /// registered routes. For example: @@ -190,7 +190,7 @@ class SOURCEMETA_HYDRA_HTTPSERVER_EXPORT Server { /// ``` auto run(const std::uint32_t port) const -> int; -private: + private: std::vector> routes; RouteCallback fallback; ErrorCallback error_handler; @@ -228,6 +228,6 @@ auto SOURCEMETA_HYDRA_HTTPSERVER_EXPORT serve_file(const std::filesystem::path &file_path, const ServerRequest &request, ServerResponse &response) -> void; -} // namespace sourcemeta::hydra::http +} // namespace sourcemeta::hydra::http #endif diff --git a/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver_logger.h b/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver_logger.h index 60347fb7..4d75b109 100644 --- a/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver_logger.h +++ b/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver_logger.h @@ -5,8 +5,8 @@ #include #endif -#include // std::string -#include // std::string_view +#include // std::string +#include // std::string_view namespace sourcemeta::hydra::http { @@ -15,7 +15,7 @@ namespace sourcemeta::hydra::http { /// machinery in the HTTP server. Different instances of this logger (with /// different identifiers) will be created for global and per-request logging class SOURCEMETA_HYDRA_HTTPSERVER_EXPORT ServerLogger { -public: + public: // These constructors are considered private. Do not use them directly. #if !defined(DOXYGEN) ServerLogger(); @@ -45,10 +45,10 @@ class SOURCEMETA_HYDRA_HTTPSERVER_EXPORT ServerLogger { /// ``` auto operator<<(std::string_view message) const -> void; -private: + private: const std::string identifier; }; -} // namespace sourcemeta::hydra::http +} // namespace sourcemeta::hydra::http #endif diff --git a/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver_request.h b/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver_request.h index 3a212719..5cdac8db 100644 --- a/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver_request.h +++ b/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver_request.h @@ -7,19 +7,19 @@ #include -#include // std::chrono::system_clock::time_point -#include // std::uint8_t -#include // std::unique_ptr -#include // std::optional -#include // std::string -#include // std::string_view +#include // std::chrono::system_clock::time_point +#include // std::uint8_t +#include // std::unique_ptr +#include // std::optional +#include // std::string +#include // std::string_view namespace sourcemeta::hydra::http { /// @ingroup httpserver /// This class encapsulates the incoming HTTP request class SOURCEMETA_HYDRA_HTTPSERVER_EXPORT ServerRequest { -public: + public: // These constructors are considered private. Do not use them directly. #if !defined(DOXYGEN) ServerRequest(void *const handler); @@ -276,12 +276,12 @@ class SOURCEMETA_HYDRA_HTTPSERVER_EXPORT ServerRequest { /// ``` auto parameter(const std::uint8_t index) const -> std::string; -private: + private: // PIMPL idiom to hide uWebSockets struct Internal; std::unique_ptr internal; }; -} // namespace sourcemeta::hydra::http +} // namespace sourcemeta::hydra::http #endif diff --git a/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver_response.h b/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver_response.h index 72c7c355..76fd3beb 100644 --- a/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver_response.h +++ b/vendor/hydra/src/httpserver/include/sourcemeta/hydra/httpserver_response.h @@ -8,11 +8,11 @@ #include #include -#include // std::chrono::system_clock::time_point -#include // std::map -#include // std::unique_ptr -#include // std::string -#include // std::string_view +#include // std::chrono::system_clock::time_point +#include // std::map +#include // std::unique_ptr +#include // std::string +#include // std::string_view namespace sourcemeta::hydra::http { @@ -23,7 +23,7 @@ enum class ServerContentEncoding { Identity, GZIP }; /// @ingroup httpserver /// This class encapsulates the HTTP response the server responds with class SOURCEMETA_HYDRA_HTTPSERVER_EXPORT ServerResponse { -public: + public: // These constructors are considered private. Do not use them directly. #if !defined(DOXYGEN) ServerResponse(void *const handler); @@ -285,7 +285,7 @@ class SOURCEMETA_HYDRA_HTTPSERVER_EXPORT ServerResponse { /// incorrectly result in a `Content-Length` of `0`. auto end() -> void; -private: + private: Status code{Status::OK}; std::map headers; ServerContentEncoding content_encoding = ServerContentEncoding::Identity; @@ -294,6 +294,6 @@ class SOURCEMETA_HYDRA_HTTPSERVER_EXPORT ServerResponse { std::unique_ptr internal; }; -} // namespace sourcemeta::hydra::http +} // namespace sourcemeta::hydra::http #endif diff --git a/vendor/hydra/vendor/bearssl/inc/bearssl.h b/vendor/hydra/vendor/bearssl/inc/bearssl.h index 4f4797cf..f13ec981 100644 --- a/vendor/hydra/vendor/bearssl/inc/bearssl.h +++ b/vendor/hydra/vendor/bearssl/inc/bearssl.h @@ -1,7 +1,7 @@ /* * Copyright (c) 2016 Thomas Pornin * - * Permission is hereby granted, free of charge, to any person obtaining + * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, @@ -9,12 +9,12 @@ * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * - * The above copyright notice and this permission notice shall be + * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN @@ -124,18 +124,18 @@ * BearSSL source archive also comes with sample code. */ +#include "bearssl_aead.h" +#include "bearssl_block.h" +#include "bearssl_ec.h" #include "bearssl_hash.h" #include "bearssl_hmac.h" #include "bearssl_kdf.h" -#include "bearssl_rand.h" +#include "bearssl_pem.h" #include "bearssl_prf.h" -#include "bearssl_block.h" -#include "bearssl_aead.h" +#include "bearssl_rand.h" #include "bearssl_rsa.h" -#include "bearssl_ec.h" #include "bearssl_ssl.h" #include "bearssl_x509.h" -#include "bearssl_pem.h" /** \brief Type for a configuration option. * @@ -147,10 +147,10 @@ * `"config.h"` file. */ typedef struct { - /** \brief Configurable option name. */ - const char *name; - /** \brief Configurable option value. */ - long value; + /** \brief Configurable option name. */ + const char *name; + /** \brief Configurable option value. */ + long value; } br_config_option; /** \brief Get configuration report. diff --git a/vendor/hydra/vendor/bearssl/inc/bearssl_aead.h b/vendor/hydra/vendor/bearssl/inc/bearssl_aead.h index 8e35a1fd..5de0661c 100644 --- a/vendor/hydra/vendor/bearssl/inc/bearssl_aead.h +++ b/vendor/hydra/vendor/bearssl/inc/bearssl_aead.h @@ -1,7 +1,7 @@ /* * Copyright (c) 2017 Thomas Pornin * - * Permission is hereby granted, free of charge, to any person obtaining + * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, @@ -9,12 +9,12 @@ * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * - * The above copyright notice and this permission notice shall be + * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN @@ -179,152 +179,149 @@ extern "C" { */ typedef struct br_aead_class_ br_aead_class; struct br_aead_class_ { + /** + * \brief Size (in bytes) of authentication tags created by + * this AEAD algorithm. + */ + size_t tag_size; - /** - * \brief Size (in bytes) of authentication tags created by - * this AEAD algorithm. - */ - size_t tag_size; + /** + * \brief Reset an AEAD context. + * + * This function resets an already initialised AEAD context for + * a new computation run. Implementations and keys are + * conserved. This function can be called at any time; it + * cancels any ongoing AEAD computation that uses the provided + * context structure. - /** - * \brief Reset an AEAD context. - * - * This function resets an already initialised AEAD context for - * a new computation run. Implementations and keys are - * conserved. This function can be called at any time; it - * cancels any ongoing AEAD computation that uses the provided - * context structure. + * The provided IV is a _nonce_. Each AEAD algorithm has its + * own requirements on IV size and contents; for most of them, + * it is crucial to security that each nonce value is used + * only once for a given secret key. + * + * \param cc AEAD context structure. + * \param iv AEAD nonce to use. + * \param len AEAD nonce length (in bytes). + */ + void (*reset)(const br_aead_class **cc, const void *iv, size_t len); - * The provided IV is a _nonce_. Each AEAD algorithm has its - * own requirements on IV size and contents; for most of them, - * it is crucial to security that each nonce value is used - * only once for a given secret key. - * - * \param cc AEAD context structure. - * \param iv AEAD nonce to use. - * \param len AEAD nonce length (in bytes). - */ - void (*reset)(const br_aead_class **cc, const void *iv, size_t len); + /** + * \brief Inject additional authenticated data. + * + * The provided data is injected into a running AEAD + * computation. Additional data must be injected _before_ the + * call to `flip()`. Additional data can be injected in several + * chunks of arbitrary length. + * + * \param cc AEAD context structure. + * \param data pointer to additional authenticated data. + * \param len length of additional authenticated data (in bytes). + */ + void (*aad_inject)(const br_aead_class **cc, const void *data, size_t len); - /** - * \brief Inject additional authenticated data. - * - * The provided data is injected into a running AEAD - * computation. Additional data must be injected _before_ the - * call to `flip()`. Additional data can be injected in several - * chunks of arbitrary length. - * - * \param cc AEAD context structure. - * \param data pointer to additional authenticated data. - * \param len length of additional authenticated data (in bytes). - */ - void (*aad_inject)(const br_aead_class **cc, - const void *data, size_t len); + /** + * \brief Finish injection of additional authenticated data. + * + * This function MUST be called before beginning the actual + * encryption or decryption (with `run()`), even if no + * additional authenticated data was injected. No additional + * authenticated data may be injected after this function call. + * + * \param cc AEAD context structure. + */ + void (*flip)(const br_aead_class **cc); - /** - * \brief Finish injection of additional authenticated data. - * - * This function MUST be called before beginning the actual - * encryption or decryption (with `run()`), even if no - * additional authenticated data was injected. No additional - * authenticated data may be injected after this function call. - * - * \param cc AEAD context structure. - */ - void (*flip)(const br_aead_class **cc); + /** + * \brief Encrypt or decrypt some data. + * + * Data encryption or decryption can be done after `flip()` has + * been called on the context. If `encrypt` is non-zero, then + * the provided data shall be plaintext, and it is encrypted in + * place. Otherwise, the data shall be ciphertext, and it is + * decrypted in place. + * + * Data may be provided in several chunks of arbitrary length. + * + * \param cc AEAD context structure. + * \param encrypt non-zero for encryption, zero for decryption. + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + */ + void (*run)(const br_aead_class **cc, int encrypt, void *data, size_t len); - /** - * \brief Encrypt or decrypt some data. - * - * Data encryption or decryption can be done after `flip()` has - * been called on the context. If `encrypt` is non-zero, then - * the provided data shall be plaintext, and it is encrypted in - * place. Otherwise, the data shall be ciphertext, and it is - * decrypted in place. - * - * Data may be provided in several chunks of arbitrary length. - * - * \param cc AEAD context structure. - * \param encrypt non-zero for encryption, zero for decryption. - * \param data data to encrypt or decrypt. - * \param len data length (in bytes). - */ - void (*run)(const br_aead_class **cc, int encrypt, - void *data, size_t len); + /** + * \brief Compute authentication tag. + * + * Compute the AEAD authentication tag. The tag length depends + * on the AEAD algorithm; it is written in the provided `tag` + * buffer. This call terminates the AEAD run: no data may be + * processed with that AEAD context afterwards, until `reset()` + * is called to initiate a new AEAD run. + * + * The tag value must normally be sent along with the encrypted + * data. When decrypting, the tag value must be recomputed and + * compared with the received tag: if the two tag values differ, + * then either the tag or the encrypted data was altered in + * transit. As an alternative to this function, the + * `check_tag()` function may be used to compute and check the + * tag value. + * + * Tag length depends on the AEAD algorithm. + * + * \param cc AEAD context structure. + * \param tag destination buffer for the tag. + */ + void (*get_tag)(const br_aead_class **cc, void *tag); - /** - * \brief Compute authentication tag. - * - * Compute the AEAD authentication tag. The tag length depends - * on the AEAD algorithm; it is written in the provided `tag` - * buffer. This call terminates the AEAD run: no data may be - * processed with that AEAD context afterwards, until `reset()` - * is called to initiate a new AEAD run. - * - * The tag value must normally be sent along with the encrypted - * data. When decrypting, the tag value must be recomputed and - * compared with the received tag: if the two tag values differ, - * then either the tag or the encrypted data was altered in - * transit. As an alternative to this function, the - * `check_tag()` function may be used to compute and check the - * tag value. - * - * Tag length depends on the AEAD algorithm. - * - * \param cc AEAD context structure. - * \param tag destination buffer for the tag. - */ - void (*get_tag)(const br_aead_class **cc, void *tag); + /** + * \brief Compute and check authentication tag. + * + * This function is an alternative to `get_tag()`, and is + * normally used on the receiving end (i.e. when decrypting + * messages). The tag value is recomputed and compared with the + * provided tag value. If they match, 1 is returned; on + * mismatch, 0 is returned. A returned value of 0 means that the + * data or the tag was altered in transit, normally leading to + * wholesale rejection of the complete message. + * + * Tag length depends on the AEAD algorithm. + * + * \param cc AEAD context structure. + * \param tag tag value to compare with. + * \return 1 on success (exact match of tag value), 0 otherwise. + */ + uint32_t (*check_tag)(const br_aead_class **cc, const void *tag); - /** - * \brief Compute and check authentication tag. - * - * This function is an alternative to `get_tag()`, and is - * normally used on the receiving end (i.e. when decrypting - * messages). The tag value is recomputed and compared with the - * provided tag value. If they match, 1 is returned; on - * mismatch, 0 is returned. A returned value of 0 means that the - * data or the tag was altered in transit, normally leading to - * wholesale rejection of the complete message. - * - * Tag length depends on the AEAD algorithm. - * - * \param cc AEAD context structure. - * \param tag tag value to compare with. - * \return 1 on success (exact match of tag value), 0 otherwise. - */ - uint32_t (*check_tag)(const br_aead_class **cc, const void *tag); + /** + * \brief Compute authentication tag (with truncation). + * + * This function is similar to `get_tag()`, except that the tag + * length is provided. Some AEAD algorithms allow several tag + * lengths, usually by truncating the normal tag. Shorter tags + * mechanically increase success probability of forgeries. + * The range of allowed tag lengths depends on the algorithm. + * + * \param cc AEAD context structure. + * \param tag destination buffer for the tag. + * \param len tag length (in bytes). + */ + void (*get_tag_trunc)(const br_aead_class **cc, void *tag, size_t len); - /** - * \brief Compute authentication tag (with truncation). - * - * This function is similar to `get_tag()`, except that the tag - * length is provided. Some AEAD algorithms allow several tag - * lengths, usually by truncating the normal tag. Shorter tags - * mechanically increase success probability of forgeries. - * The range of allowed tag lengths depends on the algorithm. - * - * \param cc AEAD context structure. - * \param tag destination buffer for the tag. - * \param len tag length (in bytes). - */ - void (*get_tag_trunc)(const br_aead_class **cc, void *tag, size_t len); - - /** - * \brief Compute and check authentication tag (with truncation). - * - * This function is similar to `check_tag()` except that it - * works over an explicit tag length. See `get_tag()` for a - * discussion of explicit tag lengths; the range of allowed tag - * lengths depends on the algorithm. - * - * \param cc AEAD context structure. - * \param tag tag value to compare with. - * \param len tag length (in bytes). - * \return 1 on success (exact match of tag value), 0 otherwise. - */ - uint32_t (*check_tag_trunc)(const br_aead_class **cc, - const void *tag, size_t len); + /** + * \brief Compute and check authentication tag (with truncation). + * + * This function is similar to `check_tag()` except that it + * works over an explicit tag length. See `get_tag()` for a + * discussion of explicit tag lengths; the range of allowed tag + * lengths depends on the algorithm. + * + * \param cc AEAD context structure. + * \param tag tag value to compare with. + * \param len tag length (in bytes). + * \return 1 on success (exact match of tag value), 0 otherwise. + */ + uint32_t (*check_tag_trunc)(const br_aead_class **cc, const void *tag, + size_t len); }; /** @@ -353,18 +350,18 @@ struct br_aead_class_ { * initialise that block cipher context. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_aead_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_aead_class *vtable; #ifndef BR_DOXYGEN_IGNORE - const br_block_ctr_class **bctx; - br_ghash gh; - unsigned char h[16]; - unsigned char j0_1[12]; - unsigned char buf[16]; - unsigned char y[16]; - uint32_t j0_2, jc; - uint64_t count_aad, count_ctr; + const br_block_ctr_class **bctx; + br_ghash gh; + unsigned char h[16]; + unsigned char j0_1[12]; + unsigned char buf[16]; + unsigned char y[16]; + uint32_t j0_2, jc; + uint64_t count_aad, count_ctr; #endif } br_gcm_context; @@ -384,8 +381,8 @@ typedef struct { * \param bctx block cipher context (already initialised with secret key). * \param gh GHASH implementation. */ -void br_gcm_init(br_gcm_context *ctx, - const br_block_ctr_class **bctx, br_ghash gh); +void br_gcm_init(br_gcm_context *ctx, const br_block_ctr_class **bctx, + br_ghash gh); /** * \brief Reset a GCM context. @@ -539,8 +536,8 @@ void br_gcm_get_tag_trunc(br_gcm_context *ctx, void *tag, size_t len); * \param len tag length (in bytes). * \return 1 on success (exact match of tag value), 0 otherwise. */ -uint32_t br_gcm_check_tag_trunc(br_gcm_context *ctx, - const void *tag, size_t len); +uint32_t br_gcm_check_tag_trunc(br_gcm_context *ctx, const void *tag, + size_t len); /** * \brief Class instance for GCM. @@ -576,19 +573,19 @@ extern const br_aead_class br_gcm_vtable; * initialise that block cipher context. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_aead_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_aead_class *vtable; #ifndef BR_DOXYGEN_IGNORE - const br_block_ctrcbc_class **bctx; - unsigned char L2[16]; - unsigned char L4[16]; - unsigned char nonce[16]; - unsigned char head[16]; - unsigned char ctr[16]; - unsigned char cbcmac[16]; - unsigned char buf[16]; - size_t ptr; + const br_block_ctrcbc_class **bctx; + unsigned char L2[16]; + unsigned char L4[16]; + unsigned char nonce[16]; + unsigned char head[16]; + unsigned char ctr[16]; + unsigned char cbcmac[16]; + unsigned char buf[16]; + size_t ptr; #endif } br_eax_context; @@ -602,7 +599,7 @@ typedef struct { */ typedef struct { #ifndef BR_DOXYGEN_IGNORE - unsigned char st[3][16]; + unsigned char st[3][16]; #endif } br_eax_state; @@ -680,7 +677,7 @@ void br_eax_reset(br_eax_context *ctx, const void *nonce, size_t len); * \param len EAX nonce length (in bytes). */ void br_eax_reset_pre_aad(br_eax_context *ctx, const br_eax_state *st, - const void *nonce, size_t len); + const void *nonce, size_t len); /** * \brief Reset an EAX context with a post-AAD captured state. @@ -701,7 +698,7 @@ void br_eax_reset_pre_aad(br_eax_context *ctx, const br_eax_state *st, * \param len EAX nonce length (in bytes). */ void br_eax_reset_post_aad(br_eax_context *ctx, const br_eax_state *st, - const void *nonce, size_t len); + const void *nonce, size_t len); /** * \brief Inject additional authenticated data into EAX. @@ -741,10 +738,9 @@ void br_eax_flip(br_eax_context *ctx); * \param ctx EAX context structure. * \param st captured state to update. */ -static inline void -br_eax_get_aad_mac(const br_eax_context *ctx, br_eax_state *st) -{ - memcpy(st->st[1], ctx->head, sizeof ctx->head); +static inline void br_eax_get_aad_mac(const br_eax_context *ctx, + br_eax_state *st) { + memcpy(st->st[1], ctx->head, sizeof ctx->head); } /** @@ -852,8 +848,8 @@ void br_eax_get_tag_trunc(br_eax_context *ctx, void *tag, size_t len); * \param len tag length (in bytes). * \return 1 on success (exact match of tag value), 0 otherwise. */ -uint32_t br_eax_check_tag_trunc(br_eax_context *ctx, - const void *tag, size_t len); +uint32_t br_eax_check_tag_trunc(br_eax_context *ctx, const void *tag, + size_t len); /** * \brief Class instance for EAX. @@ -895,13 +891,13 @@ extern const br_aead_class br_eax_vtable; */ typedef struct { #ifndef BR_DOXYGEN_IGNORE - const br_block_ctrcbc_class **bctx; - unsigned char ctr[16]; - unsigned char cbcmac[16]; - unsigned char tagmask[16]; - unsigned char buf[16]; - size_t ptr; - size_t tag_len; + const br_block_ctrcbc_class **bctx; + unsigned char ctr[16]; + unsigned char cbcmac[16]; + unsigned char tagmask[16]; + unsigned char buf[16]; + size_t ptr; + size_t tag_len; #endif } br_ccm_context; @@ -963,7 +959,7 @@ void br_ccm_init(br_ccm_context *ctx, const br_block_ctrcbc_class **bctx); * \return 1 on success, 0 on error. */ int br_ccm_reset(br_ccm_context *ctx, const void *nonce, size_t nonce_len, - uint64_t aad_len, uint64_t data_len, size_t tag_len); + uint64_t aad_len, uint64_t data_len, size_t tag_len); /** * \brief Inject additional authenticated data into CCM. diff --git a/vendor/hydra/vendor/bearssl/inc/bearssl_block.h b/vendor/hydra/vendor/bearssl/inc/bearssl_block.h index 683a4906..eaa845fd 100644 --- a/vendor/hydra/vendor/bearssl/inc/bearssl_block.h +++ b/vendor/hydra/vendor/bearssl/inc/bearssl_block.h @@ -1,7 +1,7 @@ /* * Copyright (c) 2016 Thomas Pornin * - * Permission is hereby granted, free of charge, to any person obtaining + * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, @@ -9,12 +9,12 @@ * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * - * The above copyright notice and this permission notice shall be + * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN @@ -73,14 +73,16 @@ extern "C" { * structure first field is called `vtable` and points to the * appropriate OOP structure. * - * - `br_xxx_cbcenc_init(br_xxx_cbcenc_keys *ctx, const void *key, size_t len)` + * - `br_xxx_cbcenc_init(br_xxx_cbcenc_keys *ctx, const void *key, size_t + * len)` * * Perform key expansion: subkeys for CBC encryption are computed and * written in the provided context structure. The key length MUST be * adequate for the implemented block cipher. This function also sets * the `vtable` field. * - * - `br_xxx_cbcenc_run(const br_xxx_cbcenc_keys *ctx, void *iv, void *data, size_t len)` + * - `br_xxx_cbcenc_run(const br_xxx_cbcenc_keys *ctx, void *iv, void *data, + * size_t len)` * * Perform CBC encryption of `len` bytes, in place. The encrypted data * replaces the cleartext. `len` MUST be a multiple of the block length @@ -95,14 +97,16 @@ extern "C" { * structure first field is called `vtable` and points to the * appropriate OOP structure. * - * - `br_xxx_cbcdec_init(br_xxx_cbcenc_keys *ctx, const void *key, size_t len)` + * - `br_xxx_cbcdec_init(br_xxx_cbcenc_keys *ctx, const void *key, size_t + * len)` * * Perform key expansion: subkeys for CBC decryption are computed and * written in the provided context structure. The key length MUST be * adequate for the implemented block cipher. This function also sets * the `vtable` field. * - * - `br_xxx_cbcdec_run(const br_xxx_cbcdec_keys *ctx, void *iv, void *data, size_t num_blocks)` + * - `br_xxx_cbcdec_run(const br_xxx_cbcdec_keys *ctx, void *iv, void *data, + * size_t num_blocks)` * * Perform CBC decryption of `len` bytes, in place. The decrypted data * replaces the ciphertext. `len` MUST be a multiple of the block length @@ -124,7 +128,8 @@ extern "C" { * key length MUST be adequate for the implemented block cipher. This * function also sets the `vtable` field. * - * - `br_xxx_ctr_run(const br_xxx_ctr_keys *ctx, const void *iv, uint32_t cc, void *data, size_t len)` (returns `uint32_t`) + * - `br_xxx_ctr_run(const br_xxx_ctr_keys *ctx, const void *iv, uint32_t cc, + * void *data, size_t len)` (returns `uint32_t`) * * Perform CTR encryption/decryption of some data. Processing is done * "in place" (the output data replaces the input data). This function @@ -152,7 +157,8 @@ extern "C" { * the implemented block cipher. This function also sets the * `vtable` field. * - * - `br_xxx_ctrcbc_encrypt(const br_xxx_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)` + * - `br_xxx_ctrcbc_encrypt(const br_xxx_ctrcbc_keys *ctx, void *ctr, void + * *cbcmac, void *data, size_t len)` * * Perform CTR encryption of some data, and CBC-MAC. Processing is * done "in place" (the output data replaces the input data). This @@ -168,7 +174,8 @@ extern "C" { * * The data length MUST be a multiple of the block size. * - * - `br_xxx_ctrcbc_decrypt(const br_xxx_ctrcbc_keys *ctx, void *ctr, void *cbcmac, void *data, size_t len)` + * - `br_xxx_ctrcbc_decrypt(const br_xxx_ctrcbc_keys *ctx, void *ctr, void + * *cbcmac, void *data, size_t len)` * * Perform CTR decryption of some data, and CBC-MAC. Processing is * done "in place" (the output data replaces the input data). This @@ -184,7 +191,8 @@ extern "C" { * * The data length MUST be a multiple of the block size. * - * - `br_xxx_ctrcbc_ctr(const br_xxx_ctrcbc_keys *ctx, void *ctr, void *data, size_t len)` + * - `br_xxx_ctrcbc_ctr(const br_xxx_ctrcbc_keys *ctx, void *ctr, void *data, + * size_t len)` * * Perform CTR encryption or decryption of the provided data. The * data is processed "in place" (the output data replaces the input @@ -196,7 +204,8 @@ extern "C" { * * The data length MUST be a multiple of the block size. * - * - `br_xxx_ctrcbc_mac(const br_xxx_ctrcbc_keys *ctx, void *cbcmac, const void *data, size_t len)` + * - `br_xxx_ctrcbc_mac(const br_xxx_ctrcbc_keys *ctx, void *cbcmac, const + * void *data, size_t len)` * * Compute CBC-MAC over the provided data. The IV for CBC-MAC is * provided as 'cbcmac'; the output is written over the same array. @@ -289,7 +298,7 @@ extern "C" { * * * ## Implemented Block Ciphers - * + * * Provided implementations are: * * | Name | Function | Block Size (bytes) | Key lengths (bytes) | @@ -392,52 +401,52 @@ extern "C" { */ typedef struct br_block_cbcenc_class_ br_block_cbcenc_class; struct br_block_cbcenc_class_ { - /** - * \brief Size (in bytes) of the context structure appropriate - * for containing subkeys. - */ - size_t context_size; - - /** - * \brief Size of individual blocks (in bytes). - */ - unsigned block_size; - - /** - * \brief Base-2 logarithm of the size of individual blocks, - * expressed in bytes. - */ - unsigned log_block_size; - - /** - * \brief Initialisation function. - * - * This function sets the `vtable` field in the context structure. - * The key length MUST be one of the key lengths supported by - * the implementation. - * - * \param ctx context structure to initialise. - * \param key secret key. - * \param key_len key length (in bytes). - */ - void (*init)(const br_block_cbcenc_class **ctx, - const void *key, size_t key_len); - - /** - * \brief Run the CBC encryption. - * - * The `iv` parameter points to the IV for this run; it is - * updated with a copy of the last encrypted block. The data - * is encrypted "in place"; its length (`len`) MUST be a - * multiple of the block size. - * - * \param ctx context structure (already initialised). - * \param iv IV for CBC encryption (updated). - * \param data data to encrypt. - * \param len data length (in bytes, multiple of block size). - */ - void (*run)(const br_block_cbcenc_class *const *ctx, - void *iv, void *data, size_t len); + /** + * \brief Size (in bytes) of the context structure appropriate + * for containing subkeys. + */ + size_t context_size; + + /** + * \brief Size of individual blocks (in bytes). + */ + unsigned block_size; + + /** + * \brief Base-2 logarithm of the size of individual blocks, + * expressed in bytes. + */ + unsigned log_block_size; + + /** + * \brief Initialisation function. + * + * This function sets the `vtable` field in the context structure. + * The key length MUST be one of the key lengths supported by + * the implementation. + * + * \param ctx context structure to initialise. + * \param key secret key. + * \param key_len key length (in bytes). + */ + void (*init)(const br_block_cbcenc_class **ctx, const void *key, + size_t key_len); + + /** + * \brief Run the CBC encryption. + * + * The `iv` parameter points to the IV for this run; it is + * updated with a copy of the last encrypted block. The data + * is encrypted "in place"; its length (`len`) MUST be a + * multiple of the block size. + * + * \param ctx context structure (already initialised). + * \param iv IV for CBC encryption (updated). + * \param data data to encrypt. + * \param len data length (in bytes, multiple of block size). + */ + void (*run)(const br_block_cbcenc_class *const *ctx, void *iv, void *data, + size_t len); }; /** @@ -448,52 +457,52 @@ struct br_block_cbcenc_class_ { */ typedef struct br_block_cbcdec_class_ br_block_cbcdec_class; struct br_block_cbcdec_class_ { - /** - * \brief Size (in bytes) of the context structure appropriate - * for containing subkeys. - */ - size_t context_size; - - /** - * \brief Size of individual blocks (in bytes). - */ - unsigned block_size; - - /** - * \brief Base-2 logarithm of the size of individual blocks, - * expressed in bytes. - */ - unsigned log_block_size; - - /** - * \brief Initialisation function. - * - * This function sets the `vtable` field in the context structure. - * The key length MUST be one of the key lengths supported by - * the implementation. - * - * \param ctx context structure to initialise. - * \param key secret key. - * \param key_len key length (in bytes). - */ - void (*init)(const br_block_cbcdec_class **ctx, - const void *key, size_t key_len); - - /** - * \brief Run the CBC decryption. - * - * The `iv` parameter points to the IV for this run; it is - * updated with a copy of the last encrypted block. The data - * is decrypted "in place"; its length (`len`) MUST be a - * multiple of the block size. - * - * \param ctx context structure (already initialised). - * \param iv IV for CBC decryption (updated). - * \param data data to decrypt. - * \param len data length (in bytes, multiple of block size). - */ - void (*run)(const br_block_cbcdec_class *const *ctx, - void *iv, void *data, size_t len); + /** + * \brief Size (in bytes) of the context structure appropriate + * for containing subkeys. + */ + size_t context_size; + + /** + * \brief Size of individual blocks (in bytes). + */ + unsigned block_size; + + /** + * \brief Base-2 logarithm of the size of individual blocks, + * expressed in bytes. + */ + unsigned log_block_size; + + /** + * \brief Initialisation function. + * + * This function sets the `vtable` field in the context structure. + * The key length MUST be one of the key lengths supported by + * the implementation. + * + * \param ctx context structure to initialise. + * \param key secret key. + * \param key_len key length (in bytes). + */ + void (*init)(const br_block_cbcdec_class **ctx, const void *key, + size_t key_len); + + /** + * \brief Run the CBC decryption. + * + * The `iv` parameter points to the IV for this run; it is + * updated with a copy of the last encrypted block. The data + * is decrypted "in place"; its length (`len`) MUST be a + * multiple of the block size. + * + * \param ctx context structure (already initialised). + * \param iv IV for CBC decryption (updated). + * \param data data to decrypt. + * \param len data length (in bytes, multiple of block size). + */ + void (*run)(const br_block_cbcdec_class *const *ctx, void *iv, void *data, + size_t len); }; /** @@ -505,62 +514,61 @@ struct br_block_cbcdec_class_ { */ typedef struct br_block_ctr_class_ br_block_ctr_class; struct br_block_ctr_class_ { - /** - * \brief Size (in bytes) of the context structure appropriate - * for containing subkeys. - */ - size_t context_size; - - /** - * \brief Size of individual blocks (in bytes). - */ - unsigned block_size; - - /** - * \brief Base-2 logarithm of the size of individual blocks, - * expressed in bytes. - */ - unsigned log_block_size; - - /** - * \brief Initialisation function. - * - * This function sets the `vtable` field in the context structure. - * The key length MUST be one of the key lengths supported by - * the implementation. - * - * \param ctx context structure to initialise. - * \param key secret key. - * \param key_len key length (in bytes). - */ - void (*init)(const br_block_ctr_class **ctx, - const void *key, size_t key_len); - - /** - * \brief Run the CTR encryption or decryption. - * - * The `iv` parameter points to the IV for this run; its - * length is exactly 4 bytes less than the block size (e.g. - * 12 bytes for AES/CTR). The IV is combined with a 32-bit - * block counter to produce the block value which is processed - * with the block cipher. - * - * The data to encrypt or decrypt is updated "in place". Its - * length (`len` bytes) is not required to be a multiple of - * the block size; if the final block is partial, then the - * corresponding key stream bits are dropped. - * - * The resulting counter value is returned. - * - * \param ctx context structure (already initialised). - * \param iv IV for CTR encryption/decryption. - * \param cc initial value for the block counter. - * \param data data to encrypt or decrypt. - * \param len data length (in bytes). - * \return the new block counter value. - */ - uint32_t (*run)(const br_block_ctr_class *const *ctx, - const void *iv, uint32_t cc, void *data, size_t len); + /** + * \brief Size (in bytes) of the context structure appropriate + * for containing subkeys. + */ + size_t context_size; + + /** + * \brief Size of individual blocks (in bytes). + */ + unsigned block_size; + + /** + * \brief Base-2 logarithm of the size of individual blocks, + * expressed in bytes. + */ + unsigned log_block_size; + + /** + * \brief Initialisation function. + * + * This function sets the `vtable` field in the context structure. + * The key length MUST be one of the key lengths supported by + * the implementation. + * + * \param ctx context structure to initialise. + * \param key secret key. + * \param key_len key length (in bytes). + */ + void (*init)(const br_block_ctr_class **ctx, const void *key, size_t key_len); + + /** + * \brief Run the CTR encryption or decryption. + * + * The `iv` parameter points to the IV for this run; its + * length is exactly 4 bytes less than the block size (e.g. + * 12 bytes for AES/CTR). The IV is combined with a 32-bit + * block counter to produce the block value which is processed + * with the block cipher. + * + * The data to encrypt or decrypt is updated "in place". Its + * length (`len` bytes) is not required to be a multiple of + * the block size; if the final block is partial, then the + * corresponding key stream bits are dropped. + * + * The resulting counter value is returned. + * + * \param ctx context structure (already initialised). + * \param iv IV for CTR encryption/decryption. + * \param cc initial value for the block counter. + * \param data data to encrypt or decrypt. + * \param len data length (in bytes). + * \return the new block counter value. + */ + uint32_t (*run)(const br_block_ctr_class *const *ctx, const void *iv, + uint32_t cc, void *data, size_t len); }; /** @@ -572,121 +580,121 @@ struct br_block_ctr_class_ { */ typedef struct br_block_ctrcbc_class_ br_block_ctrcbc_class; struct br_block_ctrcbc_class_ { - /** - * \brief Size (in bytes) of the context structure appropriate - * for containing subkeys. - */ - size_t context_size; - - /** - * \brief Size of individual blocks (in bytes). - */ - unsigned block_size; - - /** - * \brief Base-2 logarithm of the size of individual blocks, - * expressed in bytes. - */ - unsigned log_block_size; - - /** - * \brief Initialisation function. - * - * This function sets the `vtable` field in the context structure. - * The key length MUST be one of the key lengths supported by - * the implementation. - * - * \param ctx context structure to initialise. - * \param key secret key. - * \param key_len key length (in bytes). - */ - void (*init)(const br_block_ctrcbc_class **ctx, - const void *key, size_t key_len); - - /** - * \brief Run the CTR encryption + CBC-MAC. - * - * The `ctr` parameter points to the counter; its length shall - * be equal to the block size. It is updated by this function - * as encryption proceeds. - * - * The `cbcmac` parameter points to the IV for CBC-MAC. The MAC - * is computed over the encrypted data (output of CTR - * encryption). Its length shall be equal to the block size. The - * computed CBC-MAC value is written over the `cbcmac` array. - * - * The data to encrypt is updated "in place". Its length (`len` - * bytes) MUST be a multiple of the block size. - * - * \param ctx context structure (already initialised). - * \param ctr counter for CTR encryption (initial and final). - * \param cbcmac IV and output buffer for CBC-MAC. - * \param data data to encrypt. - * \param len data length (in bytes). - */ - void (*encrypt)(const br_block_ctrcbc_class *const *ctx, - void *ctr, void *cbcmac, void *data, size_t len); - - /** - * \brief Run the CTR decryption + CBC-MAC. - * - * The `ctr` parameter points to the counter; its length shall - * be equal to the block size. It is updated by this function - * as decryption proceeds. - * - * The `cbcmac` parameter points to the IV for CBC-MAC. The MAC - * is computed over the encrypted data (i.e. before CTR - * decryption). Its length shall be equal to the block size. The - * computed CBC-MAC value is written over the `cbcmac` array. - * - * The data to decrypt is updated "in place". Its length (`len` - * bytes) MUST be a multiple of the block size. - * - * \param ctx context structure (already initialised). - * \param ctr counter for CTR encryption (initial and final). - * \param cbcmac IV and output buffer for CBC-MAC. - * \param data data to decrypt. - * \param len data length (in bytes). - */ - void (*decrypt)(const br_block_ctrcbc_class *const *ctx, - void *ctr, void *cbcmac, void *data, size_t len); - - /** - * \brief Run the CTR encryption/decryption only. - * - * The `ctr` parameter points to the counter; its length shall - * be equal to the block size. It is updated by this function - * as decryption proceeds. - * - * The data to decrypt is updated "in place". Its length (`len` - * bytes) MUST be a multiple of the block size. - * - * \param ctx context structure (already initialised). - * \param ctr counter for CTR encryption (initial and final). - * \param data data to decrypt. - * \param len data length (in bytes). - */ - void (*ctr)(const br_block_ctrcbc_class *const *ctx, - void *ctr, void *data, size_t len); - - /** - * \brief Run the CBC-MAC only. - * - * The `cbcmac` parameter points to the IV for CBC-MAC. The MAC - * is computed over the encrypted data (i.e. before CTR - * decryption). Its length shall be equal to the block size. The - * computed CBC-MAC value is written over the `cbcmac` array. - * - * The data is unmodified. Its length (`len` bytes) MUST be a - * multiple of the block size. - * - * \param ctx context structure (already initialised). - * \param cbcmac IV and output buffer for CBC-MAC. - * \param data data to decrypt. - * \param len data length (in bytes). - */ - void (*mac)(const br_block_ctrcbc_class *const *ctx, - void *cbcmac, const void *data, size_t len); + /** + * \brief Size (in bytes) of the context structure appropriate + * for containing subkeys. + */ + size_t context_size; + + /** + * \brief Size of individual blocks (in bytes). + */ + unsigned block_size; + + /** + * \brief Base-2 logarithm of the size of individual blocks, + * expressed in bytes. + */ + unsigned log_block_size; + + /** + * \brief Initialisation function. + * + * This function sets the `vtable` field in the context structure. + * The key length MUST be one of the key lengths supported by + * the implementation. + * + * \param ctx context structure to initialise. + * \param key secret key. + * \param key_len key length (in bytes). + */ + void (*init)(const br_block_ctrcbc_class **ctx, const void *key, + size_t key_len); + + /** + * \brief Run the CTR encryption + CBC-MAC. + * + * The `ctr` parameter points to the counter; its length shall + * be equal to the block size. It is updated by this function + * as encryption proceeds. + * + * The `cbcmac` parameter points to the IV for CBC-MAC. The MAC + * is computed over the encrypted data (output of CTR + * encryption). Its length shall be equal to the block size. The + * computed CBC-MAC value is written over the `cbcmac` array. + * + * The data to encrypt is updated "in place". Its length (`len` + * bytes) MUST be a multiple of the block size. + * + * \param ctx context structure (already initialised). + * \param ctr counter for CTR encryption (initial and final). + * \param cbcmac IV and output buffer for CBC-MAC. + * \param data data to encrypt. + * \param len data length (in bytes). + */ + void (*encrypt)(const br_block_ctrcbc_class *const *ctx, void *ctr, + void *cbcmac, void *data, size_t len); + + /** + * \brief Run the CTR decryption + CBC-MAC. + * + * The `ctr` parameter points to the counter; its length shall + * be equal to the block size. It is updated by this function + * as decryption proceeds. + * + * The `cbcmac` parameter points to the IV for CBC-MAC. The MAC + * is computed over the encrypted data (i.e. before CTR + * decryption). Its length shall be equal to the block size. The + * computed CBC-MAC value is written over the `cbcmac` array. + * + * The data to decrypt is updated "in place". Its length (`len` + * bytes) MUST be a multiple of the block size. + * + * \param ctx context structure (already initialised). + * \param ctr counter for CTR encryption (initial and final). + * \param cbcmac IV and output buffer for CBC-MAC. + * \param data data to decrypt. + * \param len data length (in bytes). + */ + void (*decrypt)(const br_block_ctrcbc_class *const *ctx, void *ctr, + void *cbcmac, void *data, size_t len); + + /** + * \brief Run the CTR encryption/decryption only. + * + * The `ctr` parameter points to the counter; its length shall + * be equal to the block size. It is updated by this function + * as decryption proceeds. + * + * The data to decrypt is updated "in place". Its length (`len` + * bytes) MUST be a multiple of the block size. + * + * \param ctx context structure (already initialised). + * \param ctr counter for CTR encryption (initial and final). + * \param data data to decrypt. + * \param len data length (in bytes). + */ + void (*ctr)(const br_block_ctrcbc_class *const *ctx, void *ctr, void *data, + size_t len); + + /** + * \brief Run the CBC-MAC only. + * + * The `cbcmac` parameter points to the IV for CBC-MAC. The MAC + * is computed over the encrypted data (i.e. before CTR + * decryption). Its length shall be equal to the block size. The + * computed CBC-MAC value is written over the `cbcmac` array. + * + * The data is unmodified. Its length (`len` bytes) MUST be a + * multiple of the block size. + * + * \param ctx context structure (already initialised). + * \param cbcmac IV and output buffer for CBC-MAC. + * \param data data to decrypt. + * \param len data length (in bytes). + */ + void (*mac)(const br_block_ctrcbc_class *const *ctx, void *cbcmac, + const void *data, size_t len); }; /* @@ -698,7 +706,7 @@ struct br_block_ctrcbc_class_ { */ /** \brief AES block size (16 bytes). */ -#define br_aes_big_BLOCK_SIZE 16 +#define br_aes_big_BLOCK_SIZE 16 /** * \brief Context for AES subkeys (`aes_big` implementation, CBC encryption). @@ -707,11 +715,11 @@ struct br_block_ctrcbc_class_ { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcenc_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[60]; - unsigned num_rounds; + uint32_t skey[60]; + unsigned num_rounds; #endif } br_aes_big_cbcenc_keys; @@ -722,11 +730,11 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcdec_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[60]; - unsigned num_rounds; + uint32_t skey[60]; + unsigned num_rounds; #endif } br_aes_big_cbcdec_keys; @@ -738,11 +746,11 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_ctr_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_ctr_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[60]; - unsigned num_rounds; + uint32_t skey[60]; + unsigned num_rounds; #endif } br_aes_big_ctr_keys; @@ -754,11 +762,11 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_ctrcbc_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_ctrcbc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[60]; - unsigned num_rounds; + uint32_t skey[60]; + unsigned num_rounds; #endif } br_aes_big_ctrcbc_keys; @@ -792,8 +800,8 @@ extern const br_block_ctrcbc_class br_aes_big_ctrcbc_vtable; * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_big_cbcenc_init(br_aes_big_cbcenc_keys *ctx, - const void *key, size_t len); +void br_aes_big_cbcenc_init(br_aes_big_cbcenc_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CBC decryption @@ -803,8 +811,8 @@ void br_aes_big_cbcenc_init(br_aes_big_cbcenc_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_big_cbcdec_init(br_aes_big_cbcdec_keys *ctx, - const void *key, size_t len); +void br_aes_big_cbcdec_init(br_aes_big_cbcdec_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CTR encryption @@ -814,8 +822,7 @@ void br_aes_big_cbcdec_init(br_aes_big_cbcdec_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_big_ctr_init(br_aes_big_ctr_keys *ctx, - const void *key, size_t len); +void br_aes_big_ctr_init(br_aes_big_ctr_keys *ctx, const void *key, size_t len); /** * \brief Context initialisation (key schedule) for AES CTR + CBC-MAC @@ -825,8 +832,8 @@ void br_aes_big_ctr_init(br_aes_big_ctr_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_big_ctrcbc_init(br_aes_big_ctrcbc_keys *ctx, - const void *key, size_t len); +void br_aes_big_ctrcbc_init(br_aes_big_ctrcbc_keys *ctx, const void *key, + size_t len); /** * \brief CBC encryption with AES (`aes_big` implementation). @@ -837,7 +844,7 @@ void br_aes_big_ctrcbc_init(br_aes_big_ctrcbc_keys *ctx, * \param len data length (in bytes, MUST be multiple of 16). */ void br_aes_big_cbcenc_run(const br_aes_big_cbcenc_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /** * \brief CBC decryption with AES (`aes_big` implementation). @@ -848,7 +855,7 @@ void br_aes_big_cbcenc_run(const br_aes_big_cbcenc_keys *ctx, void *iv, * \param len data length (in bytes, MUST be multiple of 16). */ void br_aes_big_cbcdec_run(const br_aes_big_cbcdec_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /** * \brief CTR encryption and decryption with AES (`aes_big` implementation). @@ -860,8 +867,8 @@ void br_aes_big_cbcdec_run(const br_aes_big_cbcdec_keys *ctx, void *iv, * \param len data length (in bytes). * \return new block counter value. */ -uint32_t br_aes_big_ctr_run(const br_aes_big_ctr_keys *ctx, - const void *iv, uint32_t cc, void *data, size_t len); +uint32_t br_aes_big_ctr_run(const br_aes_big_ctr_keys *ctx, const void *iv, + uint32_t cc, void *data, size_t len); /** * \brief CTR encryption + CBC-MAC with AES (`aes_big` implementation). @@ -872,8 +879,8 @@ uint32_t br_aes_big_ctr_run(const br_aes_big_ctr_keys *ctx, * \param data data to encrypt (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_big_ctrcbc_encrypt(const br_aes_big_ctrcbc_keys *ctx, - void *ctr, void *cbcmac, void *data, size_t len); +void br_aes_big_ctrcbc_encrypt(const br_aes_big_ctrcbc_keys *ctx, void *ctr, + void *cbcmac, void *data, size_t len); /** * \brief CTR decryption + CBC-MAC with AES (`aes_big` implementation). @@ -884,8 +891,8 @@ void br_aes_big_ctrcbc_encrypt(const br_aes_big_ctrcbc_keys *ctx, * \param data data to decrypt (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_big_ctrcbc_decrypt(const br_aes_big_ctrcbc_keys *ctx, - void *ctr, void *cbcmac, void *data, size_t len); +void br_aes_big_ctrcbc_decrypt(const br_aes_big_ctrcbc_keys *ctx, void *ctr, + void *cbcmac, void *data, size_t len); /** * \brief CTR encryption/decryption with AES (`aes_big` implementation). @@ -895,8 +902,8 @@ void br_aes_big_ctrcbc_decrypt(const br_aes_big_ctrcbc_keys *ctx, * \param data data to MAC (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_big_ctrcbc_ctr(const br_aes_big_ctrcbc_keys *ctx, - void *ctr, void *data, size_t len); +void br_aes_big_ctrcbc_ctr(const br_aes_big_ctrcbc_keys *ctx, void *ctr, + void *data, size_t len); /** * \brief CBC-MAC with AES (`aes_big` implementation). @@ -906,8 +913,8 @@ void br_aes_big_ctrcbc_ctr(const br_aes_big_ctrcbc_keys *ctx, * \param data data to MAC (unmodified). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_big_ctrcbc_mac(const br_aes_big_ctrcbc_keys *ctx, - void *cbcmac, const void *data, size_t len); +void br_aes_big_ctrcbc_mac(const br_aes_big_ctrcbc_keys *ctx, void *cbcmac, + const void *data, size_t len); /* * AES implementation optimized for size. It is slower than the @@ -918,7 +925,7 @@ void br_aes_big_ctrcbc_mac(const br_aes_big_ctrcbc_keys *ctx, */ /** \brief AES block size (16 bytes). */ -#define br_aes_small_BLOCK_SIZE 16 +#define br_aes_small_BLOCK_SIZE 16 /** * \brief Context for AES subkeys (`aes_small` implementation, CBC encryption). @@ -927,11 +934,11 @@ void br_aes_big_ctrcbc_mac(const br_aes_big_ctrcbc_keys *ctx, * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcenc_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[60]; - unsigned num_rounds; + uint32_t skey[60]; + unsigned num_rounds; #endif } br_aes_small_cbcenc_keys; @@ -942,11 +949,11 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcdec_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[60]; - unsigned num_rounds; + uint32_t skey[60]; + unsigned num_rounds; #endif } br_aes_small_cbcdec_keys; @@ -958,11 +965,11 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_ctr_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_ctr_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[60]; - unsigned num_rounds; + uint32_t skey[60]; + unsigned num_rounds; #endif } br_aes_small_ctr_keys; @@ -974,11 +981,11 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_ctrcbc_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_ctrcbc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[60]; - unsigned num_rounds; + uint32_t skey[60]; + unsigned num_rounds; #endif } br_aes_small_ctrcbc_keys; @@ -1012,8 +1019,8 @@ extern const br_block_ctrcbc_class br_aes_small_ctrcbc_vtable; * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_small_cbcenc_init(br_aes_small_cbcenc_keys *ctx, - const void *key, size_t len); +void br_aes_small_cbcenc_init(br_aes_small_cbcenc_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CBC decryption @@ -1023,8 +1030,8 @@ void br_aes_small_cbcenc_init(br_aes_small_cbcenc_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_small_cbcdec_init(br_aes_small_cbcdec_keys *ctx, - const void *key, size_t len); +void br_aes_small_cbcdec_init(br_aes_small_cbcdec_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CTR encryption @@ -1034,8 +1041,8 @@ void br_aes_small_cbcdec_init(br_aes_small_cbcdec_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_small_ctr_init(br_aes_small_ctr_keys *ctx, - const void *key, size_t len); +void br_aes_small_ctr_init(br_aes_small_ctr_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CTR + CBC-MAC @@ -1045,8 +1052,8 @@ void br_aes_small_ctr_init(br_aes_small_ctr_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_small_ctrcbc_init(br_aes_small_ctrcbc_keys *ctx, - const void *key, size_t len); +void br_aes_small_ctrcbc_init(br_aes_small_ctrcbc_keys *ctx, const void *key, + size_t len); /** * \brief CBC encryption with AES (`aes_small` implementation). @@ -1057,7 +1064,7 @@ void br_aes_small_ctrcbc_init(br_aes_small_ctrcbc_keys *ctx, * \param len data length (in bytes, MUST be multiple of 16). */ void br_aes_small_cbcenc_run(const br_aes_small_cbcenc_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /** * \brief CBC decryption with AES (`aes_small` implementation). @@ -1068,7 +1075,7 @@ void br_aes_small_cbcenc_run(const br_aes_small_cbcenc_keys *ctx, void *iv, * \param len data length (in bytes, MUST be multiple of 16). */ void br_aes_small_cbcdec_run(const br_aes_small_cbcdec_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /** * \brief CTR encryption and decryption with AES (`aes_small` implementation). @@ -1080,8 +1087,8 @@ void br_aes_small_cbcdec_run(const br_aes_small_cbcdec_keys *ctx, void *iv, * \param len data length (in bytes). * \return new block counter value. */ -uint32_t br_aes_small_ctr_run(const br_aes_small_ctr_keys *ctx, - const void *iv, uint32_t cc, void *data, size_t len); +uint32_t br_aes_small_ctr_run(const br_aes_small_ctr_keys *ctx, const void *iv, + uint32_t cc, void *data, size_t len); /** * \brief CTR encryption + CBC-MAC with AES (`aes_small` implementation). @@ -1092,8 +1099,8 @@ uint32_t br_aes_small_ctr_run(const br_aes_small_ctr_keys *ctx, * \param data data to encrypt (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_small_ctrcbc_encrypt(const br_aes_small_ctrcbc_keys *ctx, - void *ctr, void *cbcmac, void *data, size_t len); +void br_aes_small_ctrcbc_encrypt(const br_aes_small_ctrcbc_keys *ctx, void *ctr, + void *cbcmac, void *data, size_t len); /** * \brief CTR decryption + CBC-MAC with AES (`aes_small` implementation). @@ -1104,8 +1111,8 @@ void br_aes_small_ctrcbc_encrypt(const br_aes_small_ctrcbc_keys *ctx, * \param data data to decrypt (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_small_ctrcbc_decrypt(const br_aes_small_ctrcbc_keys *ctx, - void *ctr, void *cbcmac, void *data, size_t len); +void br_aes_small_ctrcbc_decrypt(const br_aes_small_ctrcbc_keys *ctx, void *ctr, + void *cbcmac, void *data, size_t len); /** * \brief CTR encryption/decryption with AES (`aes_small` implementation). @@ -1115,8 +1122,8 @@ void br_aes_small_ctrcbc_decrypt(const br_aes_small_ctrcbc_keys *ctx, * \param data data to MAC (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_small_ctrcbc_ctr(const br_aes_small_ctrcbc_keys *ctx, - void *ctr, void *data, size_t len); +void br_aes_small_ctrcbc_ctr(const br_aes_small_ctrcbc_keys *ctx, void *ctr, + void *data, size_t len); /** * \brief CBC-MAC with AES (`aes_small` implementation). @@ -1126,8 +1133,8 @@ void br_aes_small_ctrcbc_ctr(const br_aes_small_ctrcbc_keys *ctx, * \param data data to MAC (unmodified). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_small_ctrcbc_mac(const br_aes_small_ctrcbc_keys *ctx, - void *cbcmac, const void *data, size_t len); +void br_aes_small_ctrcbc_mac(const br_aes_small_ctrcbc_keys *ctx, void *cbcmac, + const void *data, size_t len); /* * Constant-time AES implementation. Its size is similar to that of @@ -1137,7 +1144,7 @@ void br_aes_small_ctrcbc_mac(const br_aes_small_ctrcbc_keys *ctx, */ /** \brief AES block size (16 bytes). */ -#define br_aes_ct_BLOCK_SIZE 16 +#define br_aes_ct_BLOCK_SIZE 16 /** * \brief Context for AES subkeys (`aes_ct` implementation, CBC encryption). @@ -1146,11 +1153,11 @@ void br_aes_small_ctrcbc_mac(const br_aes_small_ctrcbc_keys *ctx, * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcenc_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[60]; - unsigned num_rounds; + uint32_t skey[60]; + unsigned num_rounds; #endif } br_aes_ct_cbcenc_keys; @@ -1161,11 +1168,11 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcdec_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[60]; - unsigned num_rounds; + uint32_t skey[60]; + unsigned num_rounds; #endif } br_aes_ct_cbcdec_keys; @@ -1177,11 +1184,11 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_ctr_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_ctr_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[60]; - unsigned num_rounds; + uint32_t skey[60]; + unsigned num_rounds; #endif } br_aes_ct_ctr_keys; @@ -1193,11 +1200,11 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_ctrcbc_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_ctrcbc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[60]; - unsigned num_rounds; + uint32_t skey[60]; + unsigned num_rounds; #endif } br_aes_ct_ctrcbc_keys; @@ -1231,8 +1238,8 @@ extern const br_block_ctrcbc_class br_aes_ct_ctrcbc_vtable; * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_ct_cbcenc_init(br_aes_ct_cbcenc_keys *ctx, - const void *key, size_t len); +void br_aes_ct_cbcenc_init(br_aes_ct_cbcenc_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CBC decryption @@ -1242,8 +1249,8 @@ void br_aes_ct_cbcenc_init(br_aes_ct_cbcenc_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_ct_cbcdec_init(br_aes_ct_cbcdec_keys *ctx, - const void *key, size_t len); +void br_aes_ct_cbcdec_init(br_aes_ct_cbcdec_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CTR encryption @@ -1253,8 +1260,7 @@ void br_aes_ct_cbcdec_init(br_aes_ct_cbcdec_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_ct_ctr_init(br_aes_ct_ctr_keys *ctx, - const void *key, size_t len); +void br_aes_ct_ctr_init(br_aes_ct_ctr_keys *ctx, const void *key, size_t len); /** * \brief Context initialisation (key schedule) for AES CTR + CBC-MAC @@ -1264,8 +1270,8 @@ void br_aes_ct_ctr_init(br_aes_ct_ctr_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_ct_ctrcbc_init(br_aes_ct_ctrcbc_keys *ctx, - const void *key, size_t len); +void br_aes_ct_ctrcbc_init(br_aes_ct_ctrcbc_keys *ctx, const void *key, + size_t len); /** * \brief CBC encryption with AES (`aes_ct` implementation). @@ -1276,7 +1282,7 @@ void br_aes_ct_ctrcbc_init(br_aes_ct_ctrcbc_keys *ctx, * \param len data length (in bytes, MUST be multiple of 16). */ void br_aes_ct_cbcenc_run(const br_aes_ct_cbcenc_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /** * \brief CBC decryption with AES (`aes_ct` implementation). @@ -1287,7 +1293,7 @@ void br_aes_ct_cbcenc_run(const br_aes_ct_cbcenc_keys *ctx, void *iv, * \param len data length (in bytes, MUST be multiple of 16). */ void br_aes_ct_cbcdec_run(const br_aes_ct_cbcdec_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /** * \brief CTR encryption and decryption with AES (`aes_ct` implementation). @@ -1299,8 +1305,8 @@ void br_aes_ct_cbcdec_run(const br_aes_ct_cbcdec_keys *ctx, void *iv, * \param len data length (in bytes). * \return new block counter value. */ -uint32_t br_aes_ct_ctr_run(const br_aes_ct_ctr_keys *ctx, - const void *iv, uint32_t cc, void *data, size_t len); +uint32_t br_aes_ct_ctr_run(const br_aes_ct_ctr_keys *ctx, const void *iv, + uint32_t cc, void *data, size_t len); /** * \brief CTR encryption + CBC-MAC with AES (`aes_ct` implementation). @@ -1311,8 +1317,8 @@ uint32_t br_aes_ct_ctr_run(const br_aes_ct_ctr_keys *ctx, * \param data data to encrypt (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_ct_ctrcbc_encrypt(const br_aes_ct_ctrcbc_keys *ctx, - void *ctr, void *cbcmac, void *data, size_t len); +void br_aes_ct_ctrcbc_encrypt(const br_aes_ct_ctrcbc_keys *ctx, void *ctr, + void *cbcmac, void *data, size_t len); /** * \brief CTR decryption + CBC-MAC with AES (`aes_ct` implementation). @@ -1323,8 +1329,8 @@ void br_aes_ct_ctrcbc_encrypt(const br_aes_ct_ctrcbc_keys *ctx, * \param data data to decrypt (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_ct_ctrcbc_decrypt(const br_aes_ct_ctrcbc_keys *ctx, - void *ctr, void *cbcmac, void *data, size_t len); +void br_aes_ct_ctrcbc_decrypt(const br_aes_ct_ctrcbc_keys *ctx, void *ctr, + void *cbcmac, void *data, size_t len); /** * \brief CTR encryption/decryption with AES (`aes_ct` implementation). @@ -1334,8 +1340,8 @@ void br_aes_ct_ctrcbc_decrypt(const br_aes_ct_ctrcbc_keys *ctx, * \param data data to MAC (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_ct_ctrcbc_ctr(const br_aes_ct_ctrcbc_keys *ctx, - void *ctr, void *data, size_t len); +void br_aes_ct_ctrcbc_ctr(const br_aes_ct_ctrcbc_keys *ctx, void *ctr, + void *data, size_t len); /** * \brief CBC-MAC with AES (`aes_ct` implementation). @@ -1345,8 +1351,8 @@ void br_aes_ct_ctrcbc_ctr(const br_aes_ct_ctrcbc_keys *ctx, * \param data data to MAC (unmodified). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_ct_ctrcbc_mac(const br_aes_ct_ctrcbc_keys *ctx, - void *cbcmac, const void *data, size_t len); +void br_aes_ct_ctrcbc_mac(const br_aes_ct_ctrcbc_keys *ctx, void *cbcmac, + const void *data, size_t len); /* * 64-bit constant-time AES implementation. It is similar to 'aes_ct' @@ -1358,7 +1364,7 @@ void br_aes_ct_ctrcbc_mac(const br_aes_ct_ctrcbc_keys *ctx, */ /** \brief AES block size (16 bytes). */ -#define br_aes_ct64_BLOCK_SIZE 16 +#define br_aes_ct64_BLOCK_SIZE 16 /** * \brief Context for AES subkeys (`aes_ct64` implementation, CBC encryption). @@ -1367,11 +1373,11 @@ void br_aes_ct_ctrcbc_mac(const br_aes_ct_ctrcbc_keys *ctx, * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcenc_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint64_t skey[30]; - unsigned num_rounds; + uint64_t skey[30]; + unsigned num_rounds; #endif } br_aes_ct64_cbcenc_keys; @@ -1382,11 +1388,11 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcdec_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint64_t skey[30]; - unsigned num_rounds; + uint64_t skey[30]; + unsigned num_rounds; #endif } br_aes_ct64_cbcdec_keys; @@ -1398,11 +1404,11 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_ctr_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_ctr_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint64_t skey[30]; - unsigned num_rounds; + uint64_t skey[30]; + unsigned num_rounds; #endif } br_aes_ct64_ctr_keys; @@ -1414,11 +1420,11 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_ctrcbc_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_ctrcbc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint64_t skey[30]; - unsigned num_rounds; + uint64_t skey[30]; + unsigned num_rounds; #endif } br_aes_ct64_ctrcbc_keys; @@ -1452,8 +1458,8 @@ extern const br_block_ctrcbc_class br_aes_ct64_ctrcbc_vtable; * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_ct64_cbcenc_init(br_aes_ct64_cbcenc_keys *ctx, - const void *key, size_t len); +void br_aes_ct64_cbcenc_init(br_aes_ct64_cbcenc_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CBC decryption @@ -1463,8 +1469,8 @@ void br_aes_ct64_cbcenc_init(br_aes_ct64_cbcenc_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_ct64_cbcdec_init(br_aes_ct64_cbcdec_keys *ctx, - const void *key, size_t len); +void br_aes_ct64_cbcdec_init(br_aes_ct64_cbcdec_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CTR encryption @@ -1474,8 +1480,8 @@ void br_aes_ct64_cbcdec_init(br_aes_ct64_cbcdec_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_ct64_ctr_init(br_aes_ct64_ctr_keys *ctx, - const void *key, size_t len); +void br_aes_ct64_ctr_init(br_aes_ct64_ctr_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CTR + CBC-MAC @@ -1485,8 +1491,8 @@ void br_aes_ct64_ctr_init(br_aes_ct64_ctr_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_ct64_ctrcbc_init(br_aes_ct64_ctrcbc_keys *ctx, - const void *key, size_t len); +void br_aes_ct64_ctrcbc_init(br_aes_ct64_ctrcbc_keys *ctx, const void *key, + size_t len); /** * \brief CBC encryption with AES (`aes_ct64` implementation). @@ -1497,7 +1503,7 @@ void br_aes_ct64_ctrcbc_init(br_aes_ct64_ctrcbc_keys *ctx, * \param len data length (in bytes, MUST be multiple of 16). */ void br_aes_ct64_cbcenc_run(const br_aes_ct64_cbcenc_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /** * \brief CBC decryption with AES (`aes_ct64` implementation). @@ -1508,7 +1514,7 @@ void br_aes_ct64_cbcenc_run(const br_aes_ct64_cbcenc_keys *ctx, void *iv, * \param len data length (in bytes, MUST be multiple of 16). */ void br_aes_ct64_cbcdec_run(const br_aes_ct64_cbcdec_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /** * \brief CTR encryption and decryption with AES (`aes_ct64` implementation). @@ -1520,8 +1526,8 @@ void br_aes_ct64_cbcdec_run(const br_aes_ct64_cbcdec_keys *ctx, void *iv, * \param len data length (in bytes). * \return new block counter value. */ -uint32_t br_aes_ct64_ctr_run(const br_aes_ct64_ctr_keys *ctx, - const void *iv, uint32_t cc, void *data, size_t len); +uint32_t br_aes_ct64_ctr_run(const br_aes_ct64_ctr_keys *ctx, const void *iv, + uint32_t cc, void *data, size_t len); /** * \brief CTR encryption + CBC-MAC with AES (`aes_ct64` implementation). @@ -1532,8 +1538,8 @@ uint32_t br_aes_ct64_ctr_run(const br_aes_ct64_ctr_keys *ctx, * \param data data to encrypt (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_ct64_ctrcbc_encrypt(const br_aes_ct64_ctrcbc_keys *ctx, - void *ctr, void *cbcmac, void *data, size_t len); +void br_aes_ct64_ctrcbc_encrypt(const br_aes_ct64_ctrcbc_keys *ctx, void *ctr, + void *cbcmac, void *data, size_t len); /** * \brief CTR decryption + CBC-MAC with AES (`aes_ct64` implementation). @@ -1544,8 +1550,8 @@ void br_aes_ct64_ctrcbc_encrypt(const br_aes_ct64_ctrcbc_keys *ctx, * \param data data to decrypt (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_ct64_ctrcbc_decrypt(const br_aes_ct64_ctrcbc_keys *ctx, - void *ctr, void *cbcmac, void *data, size_t len); +void br_aes_ct64_ctrcbc_decrypt(const br_aes_ct64_ctrcbc_keys *ctx, void *ctr, + void *cbcmac, void *data, size_t len); /** * \brief CTR encryption/decryption with AES (`aes_ct64` implementation). @@ -1555,8 +1561,8 @@ void br_aes_ct64_ctrcbc_decrypt(const br_aes_ct64_ctrcbc_keys *ctx, * \param data data to MAC (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_ct64_ctrcbc_ctr(const br_aes_ct64_ctrcbc_keys *ctx, - void *ctr, void *data, size_t len); +void br_aes_ct64_ctrcbc_ctr(const br_aes_ct64_ctrcbc_keys *ctx, void *ctr, + void *data, size_t len); /** * \brief CBC-MAC with AES (`aes_ct64` implementation). @@ -1566,15 +1572,15 @@ void br_aes_ct64_ctrcbc_ctr(const br_aes_ct64_ctrcbc_keys *ctx, * \param data data to MAC (unmodified). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_ct64_ctrcbc_mac(const br_aes_ct64_ctrcbc_keys *ctx, - void *cbcmac, const void *data, size_t len); +void br_aes_ct64_ctrcbc_mac(const br_aes_ct64_ctrcbc_keys *ctx, void *cbcmac, + const void *data, size_t len); /* * AES implementation using AES-NI opcodes (x86 platform). */ /** \brief AES block size (16 bytes). */ -#define br_aes_x86ni_BLOCK_SIZE 16 +#define br_aes_x86ni_BLOCK_SIZE 16 /** * \brief Context for AES subkeys (`aes_x86ni` implementation, CBC encryption). @@ -1583,13 +1589,13 @@ void br_aes_ct64_ctrcbc_mac(const br_aes_ct64_ctrcbc_keys *ctx, * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcenc_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - union { - unsigned char skni[16 * 15]; - } skey; - unsigned num_rounds; + union { + unsigned char skni[16 * 15]; + } skey; + unsigned num_rounds; #endif } br_aes_x86ni_cbcenc_keys; @@ -1600,13 +1606,13 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcdec_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; #ifndef BR_DOXYGEN_IGNORE - union { - unsigned char skni[16 * 15]; - } skey; - unsigned num_rounds; + union { + unsigned char skni[16 * 15]; + } skey; + unsigned num_rounds; #endif } br_aes_x86ni_cbcdec_keys; @@ -1618,13 +1624,13 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_ctr_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_ctr_class *vtable; #ifndef BR_DOXYGEN_IGNORE - union { - unsigned char skni[16 * 15]; - } skey; - unsigned num_rounds; + union { + unsigned char skni[16 * 15]; + } skey; + unsigned num_rounds; #endif } br_aes_x86ni_ctr_keys; @@ -1636,13 +1642,13 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_ctrcbc_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_ctrcbc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - union { - unsigned char skni[16 * 15]; - } skey; - unsigned num_rounds; + union { + unsigned char skni[16 * 15]; + } skey; + unsigned num_rounds; #endif } br_aes_x86ni_ctrcbc_keys; @@ -1692,8 +1698,8 @@ extern const br_block_ctrcbc_class br_aes_x86ni_ctrcbc_vtable; * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_x86ni_cbcenc_init(br_aes_x86ni_cbcenc_keys *ctx, - const void *key, size_t len); +void br_aes_x86ni_cbcenc_init(br_aes_x86ni_cbcenc_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CBC decryption @@ -1703,8 +1709,8 @@ void br_aes_x86ni_cbcenc_init(br_aes_x86ni_cbcenc_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_x86ni_cbcdec_init(br_aes_x86ni_cbcdec_keys *ctx, - const void *key, size_t len); +void br_aes_x86ni_cbcdec_init(br_aes_x86ni_cbcdec_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CTR encryption @@ -1714,8 +1720,8 @@ void br_aes_x86ni_cbcdec_init(br_aes_x86ni_cbcdec_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_x86ni_ctr_init(br_aes_x86ni_ctr_keys *ctx, - const void *key, size_t len); +void br_aes_x86ni_ctr_init(br_aes_x86ni_ctr_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CTR + CBC-MAC @@ -1725,8 +1731,8 @@ void br_aes_x86ni_ctr_init(br_aes_x86ni_ctr_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_x86ni_ctrcbc_init(br_aes_x86ni_ctrcbc_keys *ctx, - const void *key, size_t len); +void br_aes_x86ni_ctrcbc_init(br_aes_x86ni_ctrcbc_keys *ctx, const void *key, + size_t len); /** * \brief CBC encryption with AES (`aes_x86ni` implementation). @@ -1737,7 +1743,7 @@ void br_aes_x86ni_ctrcbc_init(br_aes_x86ni_ctrcbc_keys *ctx, * \param len data length (in bytes, MUST be multiple of 16). */ void br_aes_x86ni_cbcenc_run(const br_aes_x86ni_cbcenc_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /** * \brief CBC decryption with AES (`aes_x86ni` implementation). @@ -1748,7 +1754,7 @@ void br_aes_x86ni_cbcenc_run(const br_aes_x86ni_cbcenc_keys *ctx, void *iv, * \param len data length (in bytes, MUST be multiple of 16). */ void br_aes_x86ni_cbcdec_run(const br_aes_x86ni_cbcdec_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /** * \brief CTR encryption and decryption with AES (`aes_x86ni` implementation). @@ -1760,8 +1766,8 @@ void br_aes_x86ni_cbcdec_run(const br_aes_x86ni_cbcdec_keys *ctx, void *iv, * \param len data length (in bytes). * \return new block counter value. */ -uint32_t br_aes_x86ni_ctr_run(const br_aes_x86ni_ctr_keys *ctx, - const void *iv, uint32_t cc, void *data, size_t len); +uint32_t br_aes_x86ni_ctr_run(const br_aes_x86ni_ctr_keys *ctx, const void *iv, + uint32_t cc, void *data, size_t len); /** * \brief CTR encryption + CBC-MAC with AES (`aes_x86ni` implementation). @@ -1772,8 +1778,8 @@ uint32_t br_aes_x86ni_ctr_run(const br_aes_x86ni_ctr_keys *ctx, * \param data data to encrypt (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_x86ni_ctrcbc_encrypt(const br_aes_x86ni_ctrcbc_keys *ctx, - void *ctr, void *cbcmac, void *data, size_t len); +void br_aes_x86ni_ctrcbc_encrypt(const br_aes_x86ni_ctrcbc_keys *ctx, void *ctr, + void *cbcmac, void *data, size_t len); /** * \brief CTR decryption + CBC-MAC with AES (`aes_x86ni` implementation). @@ -1784,8 +1790,8 @@ void br_aes_x86ni_ctrcbc_encrypt(const br_aes_x86ni_ctrcbc_keys *ctx, * \param data data to decrypt (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_x86ni_ctrcbc_decrypt(const br_aes_x86ni_ctrcbc_keys *ctx, - void *ctr, void *cbcmac, void *data, size_t len); +void br_aes_x86ni_ctrcbc_decrypt(const br_aes_x86ni_ctrcbc_keys *ctx, void *ctr, + void *cbcmac, void *data, size_t len); /** * \brief CTR encryption/decryption with AES (`aes_x86ni` implementation). @@ -1795,8 +1801,8 @@ void br_aes_x86ni_ctrcbc_decrypt(const br_aes_x86ni_ctrcbc_keys *ctx, * \param data data to MAC (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_x86ni_ctrcbc_ctr(const br_aes_x86ni_ctrcbc_keys *ctx, - void *ctr, void *data, size_t len); +void br_aes_x86ni_ctrcbc_ctr(const br_aes_x86ni_ctrcbc_keys *ctx, void *ctr, + void *data, size_t len); /** * \brief CBC-MAC with AES (`aes_x86ni` implementation). @@ -1806,8 +1812,8 @@ void br_aes_x86ni_ctrcbc_ctr(const br_aes_x86ni_ctrcbc_keys *ctx, * \param data data to MAC (unmodified). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_x86ni_ctrcbc_mac(const br_aes_x86ni_ctrcbc_keys *ctx, - void *cbcmac, const void *data, size_t len); +void br_aes_x86ni_ctrcbc_mac(const br_aes_x86ni_ctrcbc_keys *ctx, void *cbcmac, + const void *data, size_t len); /** * \brief Obtain the `aes_x86ni` AES-CBC (encryption) implementation, if @@ -1865,7 +1871,7 @@ const br_block_ctrcbc_class *br_aes_x86ni_ctrcbc_get_vtable(void); */ /** \brief AES block size (16 bytes). */ -#define br_aes_pwr8_BLOCK_SIZE 16 +#define br_aes_pwr8_BLOCK_SIZE 16 /** * \brief Context for AES subkeys (`aes_pwr8` implementation, CBC encryption). @@ -1874,13 +1880,13 @@ const br_block_ctrcbc_class *br_aes_x86ni_ctrcbc_get_vtable(void); * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcenc_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - union { - unsigned char skni[16 * 15]; - } skey; - unsigned num_rounds; + union { + unsigned char skni[16 * 15]; + } skey; + unsigned num_rounds; #endif } br_aes_pwr8_cbcenc_keys; @@ -1891,13 +1897,13 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcdec_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; #ifndef BR_DOXYGEN_IGNORE - union { - unsigned char skni[16 * 15]; - } skey; - unsigned num_rounds; + union { + unsigned char skni[16 * 15]; + } skey; + unsigned num_rounds; #endif } br_aes_pwr8_cbcdec_keys; @@ -1909,13 +1915,13 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_ctr_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_ctr_class *vtable; #ifndef BR_DOXYGEN_IGNORE - union { - unsigned char skni[16 * 15]; - } skey; - unsigned num_rounds; + union { + unsigned char skni[16 * 15]; + } skey; + unsigned num_rounds; #endif } br_aes_pwr8_ctr_keys; @@ -1927,13 +1933,13 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_ctrcbc_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_ctrcbc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - union { - unsigned char skni[16 * 15]; - } skey; - unsigned num_rounds; + union { + unsigned char skni[16 * 15]; + } skey; + unsigned num_rounds; #endif } br_aes_pwr8_ctrcbc_keys; @@ -1983,8 +1989,8 @@ extern const br_block_ctrcbc_class br_aes_pwr8_ctrcbc_vtable; * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_pwr8_cbcenc_init(br_aes_pwr8_cbcenc_keys *ctx, - const void *key, size_t len); +void br_aes_pwr8_cbcenc_init(br_aes_pwr8_cbcenc_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CBC decryption @@ -1994,8 +2000,8 @@ void br_aes_pwr8_cbcenc_init(br_aes_pwr8_cbcenc_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_pwr8_cbcdec_init(br_aes_pwr8_cbcdec_keys *ctx, - const void *key, size_t len); +void br_aes_pwr8_cbcdec_init(br_aes_pwr8_cbcdec_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CTR encryption @@ -2005,8 +2011,8 @@ void br_aes_pwr8_cbcdec_init(br_aes_pwr8_cbcdec_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_pwr8_ctr_init(br_aes_pwr8_ctr_keys *ctx, - const void *key, size_t len); +void br_aes_pwr8_ctr_init(br_aes_pwr8_ctr_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for AES CTR + CBC-MAC @@ -2016,8 +2022,8 @@ void br_aes_pwr8_ctr_init(br_aes_pwr8_ctr_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_aes_pwr8_ctrcbc_init(br_aes_pwr8_ctrcbc_keys *ctx, - const void *key, size_t len); +void br_aes_pwr8_ctrcbc_init(br_aes_pwr8_ctrcbc_keys *ctx, const void *key, + size_t len); /** * \brief CBC encryption with AES (`aes_pwr8` implementation). @@ -2028,7 +2034,7 @@ void br_aes_pwr8_ctrcbc_init(br_aes_pwr8_ctrcbc_keys *ctx, * \param len data length (in bytes, MUST be multiple of 16). */ void br_aes_pwr8_cbcenc_run(const br_aes_pwr8_cbcenc_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /** * \brief CBC decryption with AES (`aes_pwr8` implementation). @@ -2039,7 +2045,7 @@ void br_aes_pwr8_cbcenc_run(const br_aes_pwr8_cbcenc_keys *ctx, void *iv, * \param len data length (in bytes, MUST be multiple of 16). */ void br_aes_pwr8_cbcdec_run(const br_aes_pwr8_cbcdec_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /** * \brief CTR encryption and decryption with AES (`aes_pwr8` implementation). @@ -2051,8 +2057,8 @@ void br_aes_pwr8_cbcdec_run(const br_aes_pwr8_cbcdec_keys *ctx, void *iv, * \param len data length (in bytes). * \return new block counter value. */ -uint32_t br_aes_pwr8_ctr_run(const br_aes_pwr8_ctr_keys *ctx, - const void *iv, uint32_t cc, void *data, size_t len); +uint32_t br_aes_pwr8_ctr_run(const br_aes_pwr8_ctr_keys *ctx, const void *iv, + uint32_t cc, void *data, size_t len); /** * \brief CTR encryption + CBC-MAC with AES (`aes_pwr8` implementation). @@ -2063,8 +2069,8 @@ uint32_t br_aes_pwr8_ctr_run(const br_aes_pwr8_ctr_keys *ctx, * \param data data to encrypt (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_pwr8_ctrcbc_encrypt(const br_aes_pwr8_ctrcbc_keys *ctx, - void *ctr, void *cbcmac, void *data, size_t len); +void br_aes_pwr8_ctrcbc_encrypt(const br_aes_pwr8_ctrcbc_keys *ctx, void *ctr, + void *cbcmac, void *data, size_t len); /** * \brief CTR decryption + CBC-MAC with AES (`aes_pwr8` implementation). @@ -2075,8 +2081,8 @@ void br_aes_pwr8_ctrcbc_encrypt(const br_aes_pwr8_ctrcbc_keys *ctx, * \param data data to decrypt (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_pwr8_ctrcbc_decrypt(const br_aes_pwr8_ctrcbc_keys *ctx, - void *ctr, void *cbcmac, void *data, size_t len); +void br_aes_pwr8_ctrcbc_decrypt(const br_aes_pwr8_ctrcbc_keys *ctx, void *ctr, + void *cbcmac, void *data, size_t len); /** * \brief CTR encryption/decryption with AES (`aes_pwr8` implementation). @@ -2086,8 +2092,8 @@ void br_aes_pwr8_ctrcbc_decrypt(const br_aes_pwr8_ctrcbc_keys *ctx, * \param data data to MAC (updated). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_pwr8_ctrcbc_ctr(const br_aes_pwr8_ctrcbc_keys *ctx, - void *ctr, void *data, size_t len); +void br_aes_pwr8_ctrcbc_ctr(const br_aes_pwr8_ctrcbc_keys *ctx, void *ctr, + void *data, size_t len); /** * \brief CBC-MAC with AES (`aes_pwr8` implementation). @@ -2097,8 +2103,8 @@ void br_aes_pwr8_ctrcbc_ctr(const br_aes_pwr8_ctrcbc_keys *ctx, * \param data data to MAC (unmodified). * \param len data length (in bytes, MUST be a multiple of 16). */ -void br_aes_pwr8_ctrcbc_mac(const br_aes_pwr8_ctrcbc_keys *ctx, - void *cbcmac, const void *data, size_t len); +void br_aes_pwr8_ctrcbc_mac(const br_aes_pwr8_ctrcbc_keys *ctx, void *cbcmac, + const void *data, size_t len); /** * \brief Obtain the `aes_pwr8` AES-CBC (encryption) implementation, if @@ -2156,13 +2162,13 @@ const br_block_ctrcbc_class *br_aes_pwr8_ctrcbc_get_vtable(void); * subkeys (CBC encryption) for all AES implementations. */ typedef union { - const br_block_cbcenc_class *vtable; - br_aes_big_cbcenc_keys c_big; - br_aes_small_cbcenc_keys c_small; - br_aes_ct_cbcenc_keys c_ct; - br_aes_ct64_cbcenc_keys c_ct64; - br_aes_x86ni_cbcenc_keys c_x86ni; - br_aes_pwr8_cbcenc_keys c_pwr8; + const br_block_cbcenc_class *vtable; + br_aes_big_cbcenc_keys c_big; + br_aes_small_cbcenc_keys c_small; + br_aes_ct_cbcenc_keys c_ct; + br_aes_ct64_cbcenc_keys c_ct64; + br_aes_x86ni_cbcenc_keys c_x86ni; + br_aes_pwr8_cbcenc_keys c_pwr8; } br_aes_gen_cbcenc_keys; /** @@ -2170,13 +2176,13 @@ typedef union { * subkeys (CBC decryption) for all AES implementations. */ typedef union { - const br_block_cbcdec_class *vtable; - br_aes_big_cbcdec_keys c_big; - br_aes_small_cbcdec_keys c_small; - br_aes_ct_cbcdec_keys c_ct; - br_aes_ct64_cbcdec_keys c_ct64; - br_aes_x86ni_cbcdec_keys c_x86ni; - br_aes_pwr8_cbcdec_keys c_pwr8; + const br_block_cbcdec_class *vtable; + br_aes_big_cbcdec_keys c_big; + br_aes_small_cbcdec_keys c_small; + br_aes_ct_cbcdec_keys c_ct; + br_aes_ct64_cbcdec_keys c_ct64; + br_aes_x86ni_cbcdec_keys c_x86ni; + br_aes_pwr8_cbcdec_keys c_pwr8; } br_aes_gen_cbcdec_keys; /** @@ -2184,13 +2190,13 @@ typedef union { * subkeys (CTR encryption and decryption) for all AES implementations. */ typedef union { - const br_block_ctr_class *vtable; - br_aes_big_ctr_keys c_big; - br_aes_small_ctr_keys c_small; - br_aes_ct_ctr_keys c_ct; - br_aes_ct64_ctr_keys c_ct64; - br_aes_x86ni_ctr_keys c_x86ni; - br_aes_pwr8_ctr_keys c_pwr8; + const br_block_ctr_class *vtable; + br_aes_big_ctr_keys c_big; + br_aes_small_ctr_keys c_small; + br_aes_ct_ctr_keys c_ct; + br_aes_ct64_ctr_keys c_ct64; + br_aes_x86ni_ctr_keys c_x86ni; + br_aes_pwr8_ctr_keys c_pwr8; } br_aes_gen_ctr_keys; /** @@ -2198,13 +2204,13 @@ typedef union { * subkeys (CTR encryption/decryption + CBC-MAC) for all AES implementations. */ typedef union { - const br_block_ctrcbc_class *vtable; - br_aes_big_ctrcbc_keys c_big; - br_aes_small_ctrcbc_keys c_small; - br_aes_ct_ctrcbc_keys c_ct; - br_aes_ct64_ctrcbc_keys c_ct64; - br_aes_x86ni_ctrcbc_keys c_x86ni; - br_aes_pwr8_ctrcbc_keys c_pwr8; + const br_block_ctrcbc_class *vtable; + br_aes_big_ctrcbc_keys c_big; + br_aes_small_ctrcbc_keys c_small; + br_aes_ct_ctrcbc_keys c_ct; + br_aes_ct64_ctrcbc_keys c_ct64; + br_aes_x86ni_ctrcbc_keys c_x86ni; + br_aes_pwr8_ctrcbc_keys c_pwr8; } br_aes_gen_ctrcbc_keys; /* @@ -2213,7 +2219,7 @@ typedef union { */ /** \brief DES/3DES block size (8 bytes). */ -#define br_des_tab_BLOCK_SIZE 8 +#define br_des_tab_BLOCK_SIZE 8 /** * \brief Context for DES subkeys (`des_tab` implementation, CBC encryption). @@ -2222,11 +2228,11 @@ typedef union { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcenc_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[96]; - unsigned num_rounds; + uint32_t skey[96]; + unsigned num_rounds; #endif } br_des_tab_cbcenc_keys; @@ -2237,11 +2243,11 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcdec_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[96]; - unsigned num_rounds; + uint32_t skey[96]; + unsigned num_rounds; #endif } br_des_tab_cbcdec_keys; @@ -2263,8 +2269,8 @@ extern const br_block_cbcdec_class br_des_tab_cbcdec_vtable; * \param key secret key. * \param len secret key length (in bytes). */ -void br_des_tab_cbcenc_init(br_des_tab_cbcenc_keys *ctx, - const void *key, size_t len); +void br_des_tab_cbcenc_init(br_des_tab_cbcenc_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for DES CBC decryption @@ -2274,8 +2280,8 @@ void br_des_tab_cbcenc_init(br_des_tab_cbcenc_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_des_tab_cbcdec_init(br_des_tab_cbcdec_keys *ctx, - const void *key, size_t len); +void br_des_tab_cbcdec_init(br_des_tab_cbcdec_keys *ctx, const void *key, + size_t len); /** * \brief CBC encryption with DES (`des_tab` implementation). @@ -2286,7 +2292,7 @@ void br_des_tab_cbcdec_init(br_des_tab_cbcdec_keys *ctx, * \param len data length (in bytes, MUST be multiple of 8). */ void br_des_tab_cbcenc_run(const br_des_tab_cbcenc_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /** * \brief CBC decryption with DES (`des_tab` implementation). @@ -2297,7 +2303,7 @@ void br_des_tab_cbcenc_run(const br_des_tab_cbcenc_keys *ctx, void *iv, * \param len data length (in bytes, MUST be multiple of 8). */ void br_des_tab_cbcdec_run(const br_des_tab_cbcdec_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /* * Constant-time implementation for DES/3DES. It is substantially slower @@ -2305,7 +2311,7 @@ void br_des_tab_cbcdec_run(const br_des_tab_cbcdec_keys *ctx, void *iv, */ /** \brief DES/3DES block size (8 bytes). */ -#define br_des_ct_BLOCK_SIZE 8 +#define br_des_ct_BLOCK_SIZE 8 /** * \brief Context for DES subkeys (`des_ct` implementation, CBC encryption). @@ -2314,11 +2320,11 @@ void br_des_tab_cbcdec_run(const br_des_tab_cbcdec_keys *ctx, void *iv, * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcenc_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcenc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[96]; - unsigned num_rounds; + uint32_t skey[96]; + unsigned num_rounds; #endif } br_des_ct_cbcenc_keys; @@ -2329,11 +2335,11 @@ typedef struct { * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** \brief Pointer to vtable for this context. */ - const br_block_cbcdec_class *vtable; + /** \brief Pointer to vtable for this context. */ + const br_block_cbcdec_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint32_t skey[96]; - unsigned num_rounds; + uint32_t skey[96]; + unsigned num_rounds; #endif } br_des_ct_cbcdec_keys; @@ -2355,8 +2361,8 @@ extern const br_block_cbcdec_class br_des_ct_cbcdec_vtable; * \param key secret key. * \param len secret key length (in bytes). */ -void br_des_ct_cbcenc_init(br_des_ct_cbcenc_keys *ctx, - const void *key, size_t len); +void br_des_ct_cbcenc_init(br_des_ct_cbcenc_keys *ctx, const void *key, + size_t len); /** * \brief Context initialisation (key schedule) for DES CBC decryption @@ -2366,8 +2372,8 @@ void br_des_ct_cbcenc_init(br_des_ct_cbcenc_keys *ctx, * \param key secret key. * \param len secret key length (in bytes). */ -void br_des_ct_cbcdec_init(br_des_ct_cbcdec_keys *ctx, - const void *key, size_t len); +void br_des_ct_cbcdec_init(br_des_ct_cbcdec_keys *ctx, const void *key, + size_t len); /** * \brief CBC encryption with DES (`des_ct` implementation). @@ -2378,7 +2384,7 @@ void br_des_ct_cbcdec_init(br_des_ct_cbcdec_keys *ctx, * \param len data length (in bytes, MUST be multiple of 8). */ void br_des_ct_cbcenc_run(const br_des_ct_cbcenc_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /** * \brief CBC decryption with DES (`des_ct` implementation). @@ -2389,7 +2395,7 @@ void br_des_ct_cbcenc_run(const br_des_ct_cbcenc_keys *ctx, void *iv, * \param len data length (in bytes, MUST be multiple of 8). */ void br_des_ct_cbcdec_run(const br_des_ct_cbcdec_keys *ctx, void *iv, - void *data, size_t len); + void *data, size_t len); /* * These structures are large enough to accommodate subkeys for all @@ -2401,9 +2407,9 @@ void br_des_ct_cbcdec_run(const br_des_ct_cbcdec_keys *ctx, void *iv, * subkeys (CBC encryption) for all DES implementations. */ typedef union { - const br_block_cbcenc_class *vtable; - br_des_tab_cbcenc_keys tab; - br_des_ct_cbcenc_keys ct; + const br_block_cbcenc_class *vtable; + br_des_tab_cbcenc_keys tab; + br_des_ct_cbcenc_keys ct; } br_des_gen_cbcenc_keys; /** @@ -2411,9 +2417,9 @@ typedef union { * subkeys (CBC decryption) for all DES implementations. */ typedef union { - const br_block_cbcdec_class *vtable; - br_des_tab_cbcdec_keys c_tab; - br_des_ct_cbcdec_keys c_ct; + const br_block_cbcdec_class *vtable; + br_des_tab_cbcdec_keys c_tab; + br_des_ct_cbcdec_keys c_ct; } br_des_gen_cbcdec_keys; /** @@ -2439,8 +2445,8 @@ typedef union { * \param data data to encrypt or decrypt. * \param len data length (in bytes). */ -typedef uint32_t (*br_chacha20_run)(const void *key, - const void *iv, uint32_t cc, void *data, size_t len); +typedef uint32_t (*br_chacha20_run)(const void *key, const void *iv, + uint32_t cc, void *data, size_t len); /** * \brief ChaCha20 implementation (straightforward C code, constant-time). @@ -2453,8 +2459,8 @@ typedef uint32_t (*br_chacha20_run)(const void *key, * \param data data to encrypt or decrypt. * \param len data length (in bytes). */ -uint32_t br_chacha20_ct_run(const void *key, - const void *iv, uint32_t cc, void *data, size_t len); +uint32_t br_chacha20_ct_run(const void *key, const void *iv, uint32_t cc, + void *data, size_t len); /** * \brief ChaCha20 implementation (SSE2 code, constant-time). @@ -2474,8 +2480,8 @@ uint32_t br_chacha20_ct_run(const void *key, * \param data data to encrypt or decrypt. * \param len data length (in bytes). */ -uint32_t br_chacha20_sse2_run(const void *key, - const void *iv, uint32_t cc, void *data, size_t len); +uint32_t br_chacha20_sse2_run(const void *key, const void *iv, uint32_t cc, + void *data, size_t len); /** * \brief Obtain the `sse2` ChaCha20 implementation, if available. @@ -2510,9 +2516,10 @@ br_chacha20_run br_chacha20_sse2_get(void); * \param ichacha implementation of ChaCha20. * \param encrypt non-zero for encryption, zero for decryption. */ -typedef void (*br_poly1305_run)(const void *key, const void *iv, - void *data, size_t len, const void *aad, size_t aad_len, - void *tag, br_chacha20_run ichacha, int encrypt); +typedef void (*br_poly1305_run)(const void *key, const void *iv, void *data, + size_t len, const void *aad, size_t aad_len, + void *tag, br_chacha20_run ichacha, + int encrypt); /** * \brief ChaCha20+Poly1305 AEAD implementation (mixed 32-bit multiplications). @@ -2529,9 +2536,9 @@ typedef void (*br_poly1305_run)(const void *key, const void *iv, * \param ichacha implementation of ChaCha20. * \param encrypt non-zero for encryption, zero for decryption. */ -void br_poly1305_ctmul_run(const void *key, const void *iv, - void *data, size_t len, const void *aad, size_t aad_len, - void *tag, br_chacha20_run ichacha, int encrypt); +void br_poly1305_ctmul_run(const void *key, const void *iv, void *data, + size_t len, const void *aad, size_t aad_len, + void *tag, br_chacha20_run ichacha, int encrypt); /** * \brief ChaCha20+Poly1305 AEAD implementation (pure 32-bit multiplications). @@ -2548,9 +2555,9 @@ void br_poly1305_ctmul_run(const void *key, const void *iv, * \param ichacha implementation of ChaCha20. * \param encrypt non-zero for encryption, zero for decryption. */ -void br_poly1305_ctmul32_run(const void *key, const void *iv, - void *data, size_t len, const void *aad, size_t aad_len, - void *tag, br_chacha20_run ichacha, int encrypt); +void br_poly1305_ctmul32_run(const void *key, const void *iv, void *data, + size_t len, const void *aad, size_t aad_len, + void *tag, br_chacha20_run ichacha, int encrypt); /** * \brief ChaCha20+Poly1305 AEAD implementation (i15). @@ -2573,9 +2580,9 @@ void br_poly1305_ctmul32_run(const void *key, const void *iv, * \param ichacha implementation of ChaCha20. * \param encrypt non-zero for encryption, zero for decryption. */ -void br_poly1305_i15_run(const void *key, const void *iv, - void *data, size_t len, const void *aad, size_t aad_len, - void *tag, br_chacha20_run ichacha, int encrypt); +void br_poly1305_i15_run(const void *key, const void *iv, void *data, + size_t len, const void *aad, size_t aad_len, void *tag, + br_chacha20_run ichacha, int encrypt); /** * \brief ChaCha20+Poly1305 AEAD implementation (ctmulq). @@ -2597,9 +2604,9 @@ void br_poly1305_i15_run(const void *key, const void *iv, * \param ichacha implementation of ChaCha20. * \param encrypt non-zero for encryption, zero for decryption. */ -void br_poly1305_ctmulq_run(const void *key, const void *iv, - void *data, size_t len, const void *aad, size_t aad_len, - void *tag, br_chacha20_run ichacha, int encrypt); +void br_poly1305_ctmulq_run(const void *key, const void *iv, void *data, + size_t len, const void *aad, size_t aad_len, + void *tag, br_chacha20_run ichacha, int encrypt); /** * \brief Get the ChaCha20+Poly1305 "ctmulq" implementation, if available. diff --git a/vendor/hydra/vendor/bearssl/inc/bearssl_ec.h b/vendor/hydra/vendor/bearssl/inc/bearssl_ec.h index db22692e..5a6d6e98 100644 --- a/vendor/hydra/vendor/bearssl/inc/bearssl_ec.h +++ b/vendor/hydra/vendor/bearssl/inc/bearssl_ec.h @@ -1,7 +1,7 @@ /* * Copyright (c) 2016 Thomas Pornin * - * Permission is hereby granted, free of charge, to any person obtaining + * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, @@ -9,12 +9,12 @@ * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * - * The above copyright notice and this permission notice shall be + * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN @@ -109,7 +109,7 @@ extern "C" { * - The multipliers (integers) MUST be lower than the subgroup order. * If this property is not met, then the result is indeterminate, * but an error value is not ncessearily returned. - * + * * * ## ECDSA * @@ -146,105 +146,105 @@ extern "C" { */ /** \brief Identifier for named curve sect163k1. */ -#define BR_EC_sect163k1 1 +#define BR_EC_sect163k1 1 /** \brief Identifier for named curve sect163r1. */ -#define BR_EC_sect163r1 2 +#define BR_EC_sect163r1 2 /** \brief Identifier for named curve sect163r2. */ -#define BR_EC_sect163r2 3 +#define BR_EC_sect163r2 3 /** \brief Identifier for named curve sect193r1. */ -#define BR_EC_sect193r1 4 +#define BR_EC_sect193r1 4 /** \brief Identifier for named curve sect193r2. */ -#define BR_EC_sect193r2 5 +#define BR_EC_sect193r2 5 /** \brief Identifier for named curve sect233k1. */ -#define BR_EC_sect233k1 6 +#define BR_EC_sect233k1 6 /** \brief Identifier for named curve sect233r1. */ -#define BR_EC_sect233r1 7 +#define BR_EC_sect233r1 7 /** \brief Identifier for named curve sect239k1. */ -#define BR_EC_sect239k1 8 +#define BR_EC_sect239k1 8 /** \brief Identifier for named curve sect283k1. */ -#define BR_EC_sect283k1 9 +#define BR_EC_sect283k1 9 /** \brief Identifier for named curve sect283r1. */ -#define BR_EC_sect283r1 10 +#define BR_EC_sect283r1 10 /** \brief Identifier for named curve sect409k1. */ -#define BR_EC_sect409k1 11 +#define BR_EC_sect409k1 11 /** \brief Identifier for named curve sect409r1. */ -#define BR_EC_sect409r1 12 +#define BR_EC_sect409r1 12 /** \brief Identifier for named curve sect571k1. */ -#define BR_EC_sect571k1 13 +#define BR_EC_sect571k1 13 /** \brief Identifier for named curve sect571r1. */ -#define BR_EC_sect571r1 14 +#define BR_EC_sect571r1 14 /** \brief Identifier for named curve secp160k1. */ -#define BR_EC_secp160k1 15 +#define BR_EC_secp160k1 15 /** \brief Identifier for named curve secp160r1. */ -#define BR_EC_secp160r1 16 +#define BR_EC_secp160r1 16 /** \brief Identifier for named curve secp160r2. */ -#define BR_EC_secp160r2 17 +#define BR_EC_secp160r2 17 /** \brief Identifier for named curve secp192k1. */ -#define BR_EC_secp192k1 18 +#define BR_EC_secp192k1 18 /** \brief Identifier for named curve secp192r1. */ -#define BR_EC_secp192r1 19 +#define BR_EC_secp192r1 19 /** \brief Identifier for named curve secp224k1. */ -#define BR_EC_secp224k1 20 +#define BR_EC_secp224k1 20 /** \brief Identifier for named curve secp224r1. */ -#define BR_EC_secp224r1 21 +#define BR_EC_secp224r1 21 /** \brief Identifier for named curve secp256k1. */ -#define BR_EC_secp256k1 22 +#define BR_EC_secp256k1 22 /** \brief Identifier for named curve secp256r1. */ -#define BR_EC_secp256r1 23 +#define BR_EC_secp256r1 23 /** \brief Identifier for named curve secp384r1. */ -#define BR_EC_secp384r1 24 +#define BR_EC_secp384r1 24 /** \brief Identifier for named curve secp521r1. */ -#define BR_EC_secp521r1 25 +#define BR_EC_secp521r1 25 /** \brief Identifier for named curve brainpoolP256r1. */ -#define BR_EC_brainpoolP256r1 26 +#define BR_EC_brainpoolP256r1 26 /** \brief Identifier for named curve brainpoolP384r1. */ -#define BR_EC_brainpoolP384r1 27 +#define BR_EC_brainpoolP384r1 27 /** \brief Identifier for named curve brainpoolP512r1. */ -#define BR_EC_brainpoolP512r1 28 +#define BR_EC_brainpoolP512r1 28 /** \brief Identifier for named curve Curve25519. */ -#define BR_EC_curve25519 29 +#define BR_EC_curve25519 29 /** \brief Identifier for named curve Curve448. */ -#define BR_EC_curve448 30 +#define BR_EC_curve448 30 /** * \brief Structure for an EC public key. */ typedef struct { - /** \brief Identifier for the curve used by this key. */ - int curve; - /** \brief Public curve point (uncompressed format). */ - unsigned char *q; - /** \brief Length of public curve point (in bytes). */ - size_t qlen; + /** \brief Identifier for the curve used by this key. */ + int curve; + /** \brief Public curve point (uncompressed format). */ + unsigned char *q; + /** \brief Length of public curve point (in bytes). */ + size_t qlen; } br_ec_public_key; /** @@ -256,162 +256,162 @@ typedef struct { * subgroup order. */ typedef struct { - /** \brief Identifier for the curve used by this key. */ - int curve; - /** \brief Private key (integer, unsigned big-endian encoding). */ - unsigned char *x; - /** \brief Private key length (in bytes). */ - size_t xlen; + /** \brief Identifier for the curve used by this key. */ + int curve; + /** \brief Private key (integer, unsigned big-endian encoding). */ + unsigned char *x; + /** \brief Private key length (in bytes). */ + size_t xlen; } br_ec_private_key; /** * \brief Type for an EC implementation. */ typedef struct { - /** - * \brief Supported curves. - * - * This word is a bitfield: bit `x` is set if the curve of ID `x` - * is supported. E.g. an implementation supporting both NIST P-256 - * (secp256r1, ID 23) and NIST P-384 (secp384r1, ID 24) will have - * value `0x01800000` in this field. - */ - uint32_t supported_curves; - - /** - * \brief Get the conventional generator. - * - * This function returns the conventional generator (encoded - * curve point) for the specified curve. This function MUST NOT - * be called if the curve is not supported. - * - * \param curve curve identifier. - * \param len receiver for the encoded generator length (in bytes). - * \return the encoded generator. - */ - const unsigned char *(*generator)(int curve, size_t *len); - - /** - * \brief Get the subgroup order. - * - * This function returns the order of the subgroup generated by - * the conventional generator, for the specified curve. Unsigned - * big-endian encoding is used. This function MUST NOT be called - * if the curve is not supported. - * - * \param curve curve identifier. - * \param len receiver for the encoded order length (in bytes). - * \return the encoded order. - */ - const unsigned char *(*order)(int curve, size_t *len); - - /** - * \brief Get the offset and length for the X coordinate. - * - * This function returns the offset and length (in bytes) of - * the X coordinate in an encoded non-zero point. - * - * \param curve curve identifier. - * \param len receiver for the X coordinate length (in bytes). - * \return the offset for the X coordinate (in bytes). - */ - size_t (*xoff)(int curve, size_t *len); - - /** - * \brief Multiply a curve point by an integer. - * - * The source point is provided in array `G` (of size `Glen` bytes); - * the multiplication result is written over it. The multiplier - * `x` (of size `xlen` bytes) uses unsigned big-endian encoding. - * - * Rules: - * - * - The specified curve MUST be supported. - * - * - The source point must be a valid point on the relevant curve - * subgroup (and not the "point at infinity" either). If this is - * not the case, then this function returns an error (0). - * - * - The multiplier integer MUST be non-zero and less than the - * curve subgroup order. If this property does not hold, then - * the result is indeterminate and an error code is not - * guaranteed. - * - * Returned value is 1 on success, 0 on error. On error, the - * contents of `G` are indeterminate. - * - * \param G point to multiply. - * \param Glen length of the encoded point (in bytes). - * \param x multiplier (unsigned big-endian). - * \param xlen multiplier length (in bytes). - * \param curve curve identifier. - * \return 1 on success, 0 on error. - */ - uint32_t (*mul)(unsigned char *G, size_t Glen, - const unsigned char *x, size_t xlen, int curve); - - /** - * \brief Multiply the generator by an integer. - * - * The multiplier MUST be non-zero and less than the curve - * subgroup order. Results are indeterminate if this property - * does not hold. - * - * \param R output buffer for the point. - * \param x multiplier (unsigned big-endian). - * \param xlen multiplier length (in bytes). - * \param curve curve identifier. - * \return encoded result point length (in bytes). - */ - size_t (*mulgen)(unsigned char *R, - const unsigned char *x, size_t xlen, int curve); - - /** - * \brief Multiply two points by two integers and add the - * results. - * - * The point `x*A + y*B` is computed and written back in the `A` - * array. - * - * Rules: - * - * - The specified curve MUST be supported. - * - * - The source points (`A` and `B`) must be valid points on - * the relevant curve subgroup (and not the "point at - * infinity" either). If this is not the case, then this - * function returns an error (0). - * - * - If the `B` pointer is `NULL`, then the conventional - * subgroup generator is used. With some implementations, - * this may be faster than providing a pointer to the - * generator. - * - * - The multiplier integers (`x` and `y`) MUST be non-zero - * and less than the curve subgroup order. If either integer - * is zero, then an error is reported, but if one of them is - * not lower than the subgroup order, then the result is - * indeterminate and an error code is not guaranteed. - * - * - If the final result is the point at infinity, then an - * error is returned. - * - * Returned value is 1 on success, 0 on error. On error, the - * contents of `A` are indeterminate. - * - * \param A first point to multiply. - * \param B second point to multiply (`NULL` for the generator). - * \param len common length of the encoded points (in bytes). - * \param x multiplier for `A` (unsigned big-endian). - * \param xlen length of multiplier for `A` (in bytes). - * \param y multiplier for `A` (unsigned big-endian). - * \param ylen length of multiplier for `A` (in bytes). - * \param curve curve identifier. - * \return 1 on success, 0 on error. - */ - uint32_t (*muladd)(unsigned char *A, const unsigned char *B, size_t len, - const unsigned char *x, size_t xlen, - const unsigned char *y, size_t ylen, int curve); + /** + * \brief Supported curves. + * + * This word is a bitfield: bit `x` is set if the curve of ID `x` + * is supported. E.g. an implementation supporting both NIST P-256 + * (secp256r1, ID 23) and NIST P-384 (secp384r1, ID 24) will have + * value `0x01800000` in this field. + */ + uint32_t supported_curves; + + /** + * \brief Get the conventional generator. + * + * This function returns the conventional generator (encoded + * curve point) for the specified curve. This function MUST NOT + * be called if the curve is not supported. + * + * \param curve curve identifier. + * \param len receiver for the encoded generator length (in bytes). + * \return the encoded generator. + */ + const unsigned char *(*generator)(int curve, size_t *len); + + /** + * \brief Get the subgroup order. + * + * This function returns the order of the subgroup generated by + * the conventional generator, for the specified curve. Unsigned + * big-endian encoding is used. This function MUST NOT be called + * if the curve is not supported. + * + * \param curve curve identifier. + * \param len receiver for the encoded order length (in bytes). + * \return the encoded order. + */ + const unsigned char *(*order)(int curve, size_t *len); + + /** + * \brief Get the offset and length for the X coordinate. + * + * This function returns the offset and length (in bytes) of + * the X coordinate in an encoded non-zero point. + * + * \param curve curve identifier. + * \param len receiver for the X coordinate length (in bytes). + * \return the offset for the X coordinate (in bytes). + */ + size_t (*xoff)(int curve, size_t *len); + + /** + * \brief Multiply a curve point by an integer. + * + * The source point is provided in array `G` (of size `Glen` bytes); + * the multiplication result is written over it. The multiplier + * `x` (of size `xlen` bytes) uses unsigned big-endian encoding. + * + * Rules: + * + * - The specified curve MUST be supported. + * + * - The source point must be a valid point on the relevant curve + * subgroup (and not the "point at infinity" either). If this is + * not the case, then this function returns an error (0). + * + * - The multiplier integer MUST be non-zero and less than the + * curve subgroup order. If this property does not hold, then + * the result is indeterminate and an error code is not + * guaranteed. + * + * Returned value is 1 on success, 0 on error. On error, the + * contents of `G` are indeterminate. + * + * \param G point to multiply. + * \param Glen length of the encoded point (in bytes). + * \param x multiplier (unsigned big-endian). + * \param xlen multiplier length (in bytes). + * \param curve curve identifier. + * \return 1 on success, 0 on error. + */ + uint32_t (*mul)(unsigned char *G, size_t Glen, const unsigned char *x, + size_t xlen, int curve); + + /** + * \brief Multiply the generator by an integer. + * + * The multiplier MUST be non-zero and less than the curve + * subgroup order. Results are indeterminate if this property + * does not hold. + * + * \param R output buffer for the point. + * \param x multiplier (unsigned big-endian). + * \param xlen multiplier length (in bytes). + * \param curve curve identifier. + * \return encoded result point length (in bytes). + */ + size_t (*mulgen)(unsigned char *R, const unsigned char *x, size_t xlen, + int curve); + + /** + * \brief Multiply two points by two integers and add the + * results. + * + * The point `x*A + y*B` is computed and written back in the `A` + * array. + * + * Rules: + * + * - The specified curve MUST be supported. + * + * - The source points (`A` and `B`) must be valid points on + * the relevant curve subgroup (and not the "point at + * infinity" either). If this is not the case, then this + * function returns an error (0). + * + * - If the `B` pointer is `NULL`, then the conventional + * subgroup generator is used. With some implementations, + * this may be faster than providing a pointer to the + * generator. + * + * - The multiplier integers (`x` and `y`) MUST be non-zero + * and less than the curve subgroup order. If either integer + * is zero, then an error is reported, but if one of them is + * not lower than the subgroup order, then the result is + * indeterminate and an error code is not guaranteed. + * + * - If the final result is the point at infinity, then an + * error is returned. + * + * Returned value is 1 on success, 0 on error. On error, the + * contents of `A` are indeterminate. + * + * \param A first point to multiply. + * \param B second point to multiply (`NULL` for the generator). + * \param len common length of the encoded points (in bytes). + * \param x multiplier for `A` (unsigned big-endian). + * \param xlen length of multiplier for `A` (in bytes). + * \param y multiplier for `A` (unsigned big-endian). + * \param ylen length of multiplier for `A` (in bytes). + * \param curve curve identifier. + * \return 1 on success, 0 on error. + */ + uint32_t (*muladd)(unsigned char *A, const unsigned char *B, size_t len, + const unsigned char *x, size_t xlen, + const unsigned char *y, size_t ylen, int curve); } br_ec_impl; /** @@ -597,9 +597,9 @@ size_t br_ecdsa_asn1_to_raw(void *sig, size_t sig_len); * \param sig destination buffer. * \return the signature length (in bytes), or 0 on error. */ -typedef size_t (*br_ecdsa_sign)(const br_ec_impl *impl, - const br_hash_class *hf, const void *hash_value, - const br_ec_private_key *sk, void *sig); +typedef size_t (*br_ecdsa_sign)(const br_ec_impl *impl, const br_hash_class *hf, + const void *hash_value, + const br_ec_private_key *sk, void *sig); /** * \brief Type for an ECDSA signature verification function. @@ -623,9 +623,9 @@ typedef size_t (*br_ecdsa_sign)(const br_ec_impl *impl, * \param sig_len signature length (in bytes). * \return 1 on success, 0 on error. */ -typedef uint32_t (*br_ecdsa_vrfy)(const br_ec_impl *impl, - const void *hash, size_t hash_len, - const br_ec_public_key *pk, const void *sig, size_t sig_len); +typedef uint32_t (*br_ecdsa_vrfy)(const br_ec_impl *impl, const void *hash, + size_t hash_len, const br_ec_public_key *pk, + const void *sig, size_t sig_len); /** * \brief ECDSA signature generator, "i31" implementation, "asn1" format. @@ -639,9 +639,9 @@ typedef uint32_t (*br_ecdsa_vrfy)(const br_ec_impl *impl, * \param sig destination buffer. * \return the signature length (in bytes), or 0 on error. */ -size_t br_ecdsa_i31_sign_asn1(const br_ec_impl *impl, - const br_hash_class *hf, const void *hash_value, - const br_ec_private_key *sk, void *sig); +size_t br_ecdsa_i31_sign_asn1(const br_ec_impl *impl, const br_hash_class *hf, + const void *hash_value, + const br_ec_private_key *sk, void *sig); /** * \brief ECDSA signature generator, "i31" implementation, "raw" format. @@ -655,9 +655,9 @@ size_t br_ecdsa_i31_sign_asn1(const br_ec_impl *impl, * \param sig destination buffer. * \return the signature length (in bytes), or 0 on error. */ -size_t br_ecdsa_i31_sign_raw(const br_ec_impl *impl, - const br_hash_class *hf, const void *hash_value, - const br_ec_private_key *sk, void *sig); +size_t br_ecdsa_i31_sign_raw(const br_ec_impl *impl, const br_hash_class *hf, + const void *hash_value, + const br_ec_private_key *sk, void *sig); /** * \brief ECDSA signature verifier, "i31" implementation, "asn1" format. @@ -672,9 +672,9 @@ size_t br_ecdsa_i31_sign_raw(const br_ec_impl *impl, * \param sig_len signature length (in bytes). * \return 1 on success, 0 on error. */ -uint32_t br_ecdsa_i31_vrfy_asn1(const br_ec_impl *impl, - const void *hash, size_t hash_len, - const br_ec_public_key *pk, const void *sig, size_t sig_len); +uint32_t br_ecdsa_i31_vrfy_asn1(const br_ec_impl *impl, const void *hash, + size_t hash_len, const br_ec_public_key *pk, + const void *sig, size_t sig_len); /** * \brief ECDSA signature verifier, "i31" implementation, "raw" format. @@ -689,9 +689,9 @@ uint32_t br_ecdsa_i31_vrfy_asn1(const br_ec_impl *impl, * \param sig_len signature length (in bytes). * \return 1 on success, 0 on error. */ -uint32_t br_ecdsa_i31_vrfy_raw(const br_ec_impl *impl, - const void *hash, size_t hash_len, - const br_ec_public_key *pk, const void *sig, size_t sig_len); +uint32_t br_ecdsa_i31_vrfy_raw(const br_ec_impl *impl, const void *hash, + size_t hash_len, const br_ec_public_key *pk, + const void *sig, size_t sig_len); /** * \brief ECDSA signature generator, "i15" implementation, "asn1" format. @@ -705,9 +705,9 @@ uint32_t br_ecdsa_i31_vrfy_raw(const br_ec_impl *impl, * \param sig destination buffer. * \return the signature length (in bytes), or 0 on error. */ -size_t br_ecdsa_i15_sign_asn1(const br_ec_impl *impl, - const br_hash_class *hf, const void *hash_value, - const br_ec_private_key *sk, void *sig); +size_t br_ecdsa_i15_sign_asn1(const br_ec_impl *impl, const br_hash_class *hf, + const void *hash_value, + const br_ec_private_key *sk, void *sig); /** * \brief ECDSA signature generator, "i15" implementation, "raw" format. @@ -721,9 +721,9 @@ size_t br_ecdsa_i15_sign_asn1(const br_ec_impl *impl, * \param sig destination buffer. * \return the signature length (in bytes), or 0 on error. */ -size_t br_ecdsa_i15_sign_raw(const br_ec_impl *impl, - const br_hash_class *hf, const void *hash_value, - const br_ec_private_key *sk, void *sig); +size_t br_ecdsa_i15_sign_raw(const br_ec_impl *impl, const br_hash_class *hf, + const void *hash_value, + const br_ec_private_key *sk, void *sig); /** * \brief ECDSA signature verifier, "i15" implementation, "asn1" format. @@ -738,9 +738,9 @@ size_t br_ecdsa_i15_sign_raw(const br_ec_impl *impl, * \param sig_len signature length (in bytes). * \return 1 on success, 0 on error. */ -uint32_t br_ecdsa_i15_vrfy_asn1(const br_ec_impl *impl, - const void *hash, size_t hash_len, - const br_ec_public_key *pk, const void *sig, size_t sig_len); +uint32_t br_ecdsa_i15_vrfy_asn1(const br_ec_impl *impl, const void *hash, + size_t hash_len, const br_ec_public_key *pk, + const void *sig, size_t sig_len); /** * \brief ECDSA signature verifier, "i15" implementation, "raw" format. @@ -755,9 +755,9 @@ uint32_t br_ecdsa_i15_vrfy_asn1(const br_ec_impl *impl, * \param sig_len signature length (in bytes). * \return 1 on success, 0 on error. */ -uint32_t br_ecdsa_i15_vrfy_raw(const br_ec_impl *impl, - const void *hash, size_t hash_len, - const br_ec_public_key *pk, const void *sig, size_t sig_len); +uint32_t br_ecdsa_i15_vrfy_raw(const br_ec_impl *impl, const void *hash, + size_t hash_len, const br_ec_public_key *pk, + const void *sig, size_t sig_len); /** * \brief Get "default" ECDSA implementation (signer, asn1 format). @@ -805,7 +805,7 @@ br_ecdsa_vrfy br_ecdsa_vrfy_raw_get_default(void); * This is the largest number of bytes that `br_ec_keygen()` may need or * ever return. */ -#define BR_EC_KBUF_PRIV_MAX_SIZE 72 +#define BR_EC_KBUF_PRIV_MAX_SIZE 72 /** * \brief Maximum size for EC public key element buffer. @@ -813,7 +813,7 @@ br_ecdsa_vrfy br_ecdsa_vrfy_raw_get_default(void); * This is the largest number of bytes that `br_ec_compute_public()` may * need or ever return. */ -#define BR_EC_KBUF_PUB_MAX_SIZE 145 +#define BR_EC_KBUF_PUB_MAX_SIZE 145 /** * \brief Generate a new EC private key. @@ -841,9 +841,8 @@ br_ecdsa_vrfy br_ecdsa_vrfy_raw_get_default(void); * \param curve the curve identifier. * \return the key data length (in bytes), or zero. */ -size_t br_ec_keygen(const br_prng_class **rng_ctx, - const br_ec_impl *impl, br_ec_private_key *sk, - void *kbuf, int curve); +size_t br_ec_keygen(const br_prng_class **rng_ctx, const br_ec_impl *impl, + br_ec_private_key *sk, void *kbuf, int curve); /** * \brief Compute EC public key from EC private key. @@ -874,7 +873,7 @@ size_t br_ec_keygen(const br_prng_class **rng_ctx, * \return the public key point length (in bytes), or zero. */ size_t br_ec_compute_pub(const br_ec_impl *impl, br_ec_public_key *pk, - void *kbuf, const br_ec_private_key *sk); + void *kbuf, const br_ec_private_key *sk); #ifdef __cplusplus } diff --git a/vendor/hydra/vendor/bearssl/inc/bearssl_hash.h b/vendor/hydra/vendor/bearssl/inc/bearssl_hash.h index 3b15ba7c..ea7f32bd 100644 --- a/vendor/hydra/vendor/bearssl/inc/bearssl_hash.h +++ b/vendor/hydra/vendor/bearssl/inc/bearssl_hash.h @@ -1,7 +1,7 @@ /* * Copyright (c) 2016 Thomas Pornin * - * Permission is hereby granted, free of charge, to any person obtaining + * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, @@ -9,12 +9,12 @@ * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * - * The above copyright notice and this permission notice shall be + * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN @@ -197,7 +197,8 @@ extern "C" { * A GHASH implementation is basically a function that uses the type defined * in this file under the name `br_ghash`: * - * typedef void (*br_ghash)(void *y, const void *h, const void *data, size_t len); + * typedef void (*br_ghash)(void *y, const void *h, const void *data, size_t + * len); * * The `y` pointer refers to a 16-byte value which is used as input, and * receives the output of the GHASH invocation. `h` is a 16-byte secret @@ -220,134 +221,133 @@ extern "C" { */ typedef struct br_hash_class_ br_hash_class; struct br_hash_class_ { - /** - * \brief Size (in bytes) of the context structure appropriate for - * computing this hash function. - */ - size_t context_size; - - /** - * \brief Descriptor word that contains information about the hash - * function. - * - * For each word `xxx` described below, use `BR_HASHDESC_xxx_OFF` - * and `BR_HASHDESC_xxx_MASK` to access the specific value, as - * follows: - * - * (hf->desc >> BR_HASHDESC_xxx_OFF) & BR_HASHDESC_xxx_MASK - * - * The defined elements are: - * - * - `ID`: the symbolic identifier for the function, as defined - * in [TLS](https://tools.ietf.org/html/rfc5246#section-7.4.1.4.1) - * (MD5 = 1, SHA-1 = 2,...). - * - * - `OUT`: hash output size, in bytes. - * - * - `STATE`: internal running state size, in bytes. - * - * - `LBLEN`: base-2 logarithm for the internal block size, as - * defined for HMAC processing (this is 6 for MD5, SHA-1, SHA-224 - * and SHA-256, since these functions use 64-byte blocks; for - * SHA-384 and SHA-512, this is 7, corresponding to their - * 128-byte blocks). - * - * The descriptor may contain a few other flags. - */ - uint32_t desc; - - /** - * \brief Initialisation method. - * - * This method takes as parameter a pointer to a context area, - * that it initialises. The first field of the context is set - * to this vtable; other elements are initialised for a new hash - * computation. - * - * \param ctx pointer to (the first field of) the context. - */ - void (*init)(const br_hash_class **ctx); - - /** - * \brief Data injection method. - * - * The `len` bytes starting at address `data` are injected into - * the running hash computation incarnated by the specified - * context. The context is updated accordingly. It is allowed - * to have `len == 0`, in which case `data` is ignored (and could - * be `NULL`), and nothing happens. - * on the input data. - * - * \param ctx pointer to (the first field of) the context. - * \param data pointer to the first data byte to inject. - * \param len number of bytes to inject. - */ - void (*update)(const br_hash_class **ctx, const void *data, size_t len); - - /** - * \brief Produce hash output. - * - * The hash output corresponding to all data bytes injected in the - * context since the last `init()` call is computed, and written - * in the buffer pointed to by `dst`. The hash output size depends - * on the implemented hash function (e.g. 16 bytes for MD5). - * The context is _not_ modified by this call, so further bytes - * may be afterwards injected to continue the current computation. - * - * \param ctx pointer to (the first field of) the context. - * \param dst destination buffer for the hash output. - */ - void (*out)(const br_hash_class *const *ctx, void *dst); - - /** - * \brief Get running state. - * - * This method saves the current running state into the `dst` - * buffer. What constitutes the "running state" depends on the - * hash function; for Merkle-Damgård hash functions (like - * MD5 or SHA-1), this is the output obtained after processing - * each block. The number of bytes injected so far is returned. - * The context is not modified by this call. - * - * \param ctx pointer to (the first field of) the context. - * \param dst destination buffer for the state. - * \return the injected total byte length. - */ - uint64_t (*state)(const br_hash_class *const *ctx, void *dst); - - /** - * \brief Set running state. - * - * This methods replaces the running state for the function. - * - * \param ctx pointer to (the first field of) the context. - * \param stb source buffer for the state. - * \param count injected total byte length. - */ - void (*set_state)(const br_hash_class **ctx, - const void *stb, uint64_t count); + /** + * \brief Size (in bytes) of the context structure appropriate for + * computing this hash function. + */ + size_t context_size; + + /** + * \brief Descriptor word that contains information about the hash + * function. + * + * For each word `xxx` described below, use `BR_HASHDESC_xxx_OFF` + * and `BR_HASHDESC_xxx_MASK` to access the specific value, as + * follows: + * + * (hf->desc >> BR_HASHDESC_xxx_OFF) & BR_HASHDESC_xxx_MASK + * + * The defined elements are: + * + * - `ID`: the symbolic identifier for the function, as defined + * in [TLS](https://tools.ietf.org/html/rfc5246#section-7.4.1.4.1) + * (MD5 = 1, SHA-1 = 2,...). + * + * - `OUT`: hash output size, in bytes. + * + * - `STATE`: internal running state size, in bytes. + * + * - `LBLEN`: base-2 logarithm for the internal block size, as + * defined for HMAC processing (this is 6 for MD5, SHA-1, SHA-224 + * and SHA-256, since these functions use 64-byte blocks; for + * SHA-384 and SHA-512, this is 7, corresponding to their + * 128-byte blocks). + * + * The descriptor may contain a few other flags. + */ + uint32_t desc; + + /** + * \brief Initialisation method. + * + * This method takes as parameter a pointer to a context area, + * that it initialises. The first field of the context is set + * to this vtable; other elements are initialised for a new hash + * computation. + * + * \param ctx pointer to (the first field of) the context. + */ + void (*init)(const br_hash_class **ctx); + + /** + * \brief Data injection method. + * + * The `len` bytes starting at address `data` are injected into + * the running hash computation incarnated by the specified + * context. The context is updated accordingly. It is allowed + * to have `len == 0`, in which case `data` is ignored (and could + * be `NULL`), and nothing happens. + * on the input data. + * + * \param ctx pointer to (the first field of) the context. + * \param data pointer to the first data byte to inject. + * \param len number of bytes to inject. + */ + void (*update)(const br_hash_class **ctx, const void *data, size_t len); + + /** + * \brief Produce hash output. + * + * The hash output corresponding to all data bytes injected in the + * context since the last `init()` call is computed, and written + * in the buffer pointed to by `dst`. The hash output size depends + * on the implemented hash function (e.g. 16 bytes for MD5). + * The context is _not_ modified by this call, so further bytes + * may be afterwards injected to continue the current computation. + * + * \param ctx pointer to (the first field of) the context. + * \param dst destination buffer for the hash output. + */ + void (*out)(const br_hash_class *const *ctx, void *dst); + + /** + * \brief Get running state. + * + * This method saves the current running state into the `dst` + * buffer. What constitutes the "running state" depends on the + * hash function; for Merkle-Damgård hash functions (like + * MD5 or SHA-1), this is the output obtained after processing + * each block. The number of bytes injected so far is returned. + * The context is not modified by this call. + * + * \param ctx pointer to (the first field of) the context. + * \param dst destination buffer for the state. + * \return the injected total byte length. + */ + uint64_t (*state)(const br_hash_class *const *ctx, void *dst); + + /** + * \brief Set running state. + * + * This methods replaces the running state for the function. + * + * \param ctx pointer to (the first field of) the context. + * \param stb source buffer for the state. + * \param count injected total byte length. + */ + void (*set_state)(const br_hash_class **ctx, const void *stb, uint64_t count); }; #ifndef BR_DOXYGEN_IGNORE -#define BR_HASHDESC_ID(id) ((uint32_t)(id) << BR_HASHDESC_ID_OFF) -#define BR_HASHDESC_ID_OFF 0 -#define BR_HASHDESC_ID_MASK 0xFF +#define BR_HASHDESC_ID(id) ((uint32_t)(id) << BR_HASHDESC_ID_OFF) +#define BR_HASHDESC_ID_OFF 0 +#define BR_HASHDESC_ID_MASK 0xFF -#define BR_HASHDESC_OUT(size) ((uint32_t)(size) << BR_HASHDESC_OUT_OFF) -#define BR_HASHDESC_OUT_OFF 8 -#define BR_HASHDESC_OUT_MASK 0x7F +#define BR_HASHDESC_OUT(size) ((uint32_t)(size) << BR_HASHDESC_OUT_OFF) +#define BR_HASHDESC_OUT_OFF 8 +#define BR_HASHDESC_OUT_MASK 0x7F -#define BR_HASHDESC_STATE(size) ((uint32_t)(size) << BR_HASHDESC_STATE_OFF) -#define BR_HASHDESC_STATE_OFF 15 -#define BR_HASHDESC_STATE_MASK 0xFF +#define BR_HASHDESC_STATE(size) ((uint32_t)(size) << BR_HASHDESC_STATE_OFF) +#define BR_HASHDESC_STATE_OFF 15 +#define BR_HASHDESC_STATE_MASK 0xFF -#define BR_HASHDESC_LBLEN(ls) ((uint32_t)(ls) << BR_HASHDESC_LBLEN_OFF) -#define BR_HASHDESC_LBLEN_OFF 23 -#define BR_HASHDESC_LBLEN_MASK 0x0F +#define BR_HASHDESC_LBLEN(ls) ((uint32_t)(ls) << BR_HASHDESC_LBLEN_OFF) +#define BR_HASHDESC_LBLEN_OFF 23 +#define BR_HASHDESC_LBLEN_MASK 0x0F -#define BR_HASHDESC_MD_PADDING ((uint32_t)1 << 28) -#define BR_HASHDESC_MD_PADDING_128 ((uint32_t)1 << 29) -#define BR_HASHDESC_MD_PADDING_BE ((uint32_t)1 << 30) +#define BR_HASHDESC_MD_PADDING ((uint32_t)1 << 28) +#define BR_HASHDESC_MD_PADDING_128 ((uint32_t)1 << 29) +#define BR_HASHDESC_MD_PADDING_BE ((uint32_t)1 << 30) #endif /* @@ -368,12 +368,12 @@ struct br_hash_class_ { /** * \brief Symbolic identifier for MD5. */ -#define br_md5_ID 1 +#define br_md5_ID 1 /** * \brief MD5 output size (in bytes). */ -#define br_md5_SIZE 16 +#define br_md5_SIZE 16 /** * \brief Constant vtable for MD5. @@ -387,14 +387,14 @@ extern const br_hash_class br_md5_vtable; * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** - * \brief Pointer to vtable for this context. - */ - const br_hash_class *vtable; + /** + * \brief Pointer to vtable for this context. + */ + const br_hash_class *vtable; #ifndef BR_DOXYGEN_IGNORE - unsigned char buf[64]; - uint64_t count; - uint32_t val[4]; + unsigned char buf[64]; + uint64_t count; + uint32_t val[4]; #endif } br_md5_context; @@ -463,12 +463,12 @@ void br_md5_set_state(br_md5_context *ctx, const void *stb, uint64_t count); /** * \brief Symbolic identifier for SHA-1. */ -#define br_sha1_ID 2 +#define br_sha1_ID 2 /** * \brief SHA-1 output size (in bytes). */ -#define br_sha1_SIZE 20 +#define br_sha1_SIZE 20 /** * \brief Constant vtable for SHA-1. @@ -482,14 +482,14 @@ extern const br_hash_class br_sha1_vtable; * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** - * \brief Pointer to vtable for this context. - */ - const br_hash_class *vtable; + /** + * \brief Pointer to vtable for this context. + */ + const br_hash_class *vtable; #ifndef BR_DOXYGEN_IGNORE - unsigned char buf[64]; - uint64_t count; - uint32_t val[5]; + unsigned char buf[64]; + uint64_t count; + uint32_t val[5]; #endif } br_sha1_context; @@ -558,12 +558,12 @@ void br_sha1_set_state(br_sha1_context *ctx, const void *stb, uint64_t count); /** * \brief Symbolic identifier for SHA-224. */ -#define br_sha224_ID 3 +#define br_sha224_ID 3 /** * \brief SHA-224 output size (in bytes). */ -#define br_sha224_SIZE 28 +#define br_sha224_SIZE 28 /** * \brief Constant vtable for SHA-224. @@ -577,14 +577,14 @@ extern const br_hash_class br_sha224_vtable; * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** - * \brief Pointer to vtable for this context. - */ - const br_hash_class *vtable; + /** + * \brief Pointer to vtable for this context. + */ + const br_hash_class *vtable; #ifndef BR_DOXYGEN_IGNORE - unsigned char buf[64]; - uint64_t count; - uint32_t val[8]; + unsigned char buf[64]; + uint64_t count; + uint32_t val[8]; #endif } br_sha224_context; @@ -648,18 +648,18 @@ uint64_t br_sha224_state(const br_sha224_context *ctx, void *out); * \param stb source buffer for the running state. * \param count the injected total byte length. */ -void br_sha224_set_state(br_sha224_context *ctx, - const void *stb, uint64_t count); +void br_sha224_set_state(br_sha224_context *ctx, const void *stb, + uint64_t count); /** * \brief Symbolic identifier for SHA-256. */ -#define br_sha256_ID 4 +#define br_sha256_ID 4 /** * \brief SHA-256 output size (in bytes). */ -#define br_sha256_SIZE 32 +#define br_sha256_SIZE 32 /** * \brief Constant vtable for SHA-256. @@ -674,10 +674,10 @@ extern const br_hash_class br_sha256_vtable; * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** - * \brief Pointer to vtable for this context. - */ - const br_hash_class *vtable; + /** + * \brief Pointer to vtable for this context. + */ + const br_hash_class *vtable; } br_sha256_context; #else typedef br_sha224_context br_sha256_context; @@ -707,7 +707,7 @@ void br_sha256_init(br_sha256_context *ctx); */ void br_sha256_update(br_sha256_context *ctx, const void *data, size_t len); #else -#define br_sha256_update br_sha224_update +#define br_sha256_update br_sha224_update #endif /** @@ -739,7 +739,7 @@ void br_sha256_out(const br_sha256_context *ctx, void *out); */ uint64_t br_sha256_state(const br_sha256_context *ctx, void *out); #else -#define br_sha256_state br_sha224_state +#define br_sha256_state br_sha224_state #endif #if BR_DOXYGEN_IGNORE @@ -752,21 +752,21 @@ uint64_t br_sha256_state(const br_sha256_context *ctx, void *out); * \param stb source buffer for the running state. * \param count the injected total byte length. */ -void br_sha256_set_state(br_sha256_context *ctx, - const void *stb, uint64_t count); +void br_sha256_set_state(br_sha256_context *ctx, const void *stb, + uint64_t count); #else -#define br_sha256_set_state br_sha224_set_state +#define br_sha256_set_state br_sha224_set_state #endif /** * \brief Symbolic identifier for SHA-384. */ -#define br_sha384_ID 5 +#define br_sha384_ID 5 /** * \brief SHA-384 output size (in bytes). */ -#define br_sha384_SIZE 48 +#define br_sha384_SIZE 48 /** * \brief Constant vtable for SHA-384. @@ -780,14 +780,14 @@ extern const br_hash_class br_sha384_vtable; * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** - * \brief Pointer to vtable for this context. - */ - const br_hash_class *vtable; + /** + * \brief Pointer to vtable for this context. + */ + const br_hash_class *vtable; #ifndef BR_DOXYGEN_IGNORE - unsigned char buf[128]; - uint64_t count; - uint64_t val[8]; + unsigned char buf[128]; + uint64_t count; + uint64_t val[8]; #endif } br_sha384_context; @@ -851,18 +851,18 @@ uint64_t br_sha384_state(const br_sha384_context *ctx, void *out); * \param stb source buffer for the running state. * \param count the injected total byte length. */ -void br_sha384_set_state(br_sha384_context *ctx, - const void *stb, uint64_t count); +void br_sha384_set_state(br_sha384_context *ctx, const void *stb, + uint64_t count); /** * \brief Symbolic identifier for SHA-512. */ -#define br_sha512_ID 6 +#define br_sha512_ID 6 /** * \brief SHA-512 output size (in bytes). */ -#define br_sha512_SIZE 64 +#define br_sha512_SIZE 64 /** * \brief Constant vtable for SHA-512. @@ -877,10 +877,10 @@ extern const br_hash_class br_sha512_vtable; * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** - * \brief Pointer to vtable for this context. - */ - const br_hash_class *vtable; + /** + * \brief Pointer to vtable for this context. + */ + const br_hash_class *vtable; } br_sha512_context; #else typedef br_sha384_context br_sha512_context; @@ -910,7 +910,7 @@ void br_sha512_init(br_sha512_context *ctx); */ void br_sha512_update(br_sha512_context *ctx, const void *data, size_t len); #else -#define br_sha512_update br_sha384_update +#define br_sha512_update br_sha384_update #endif /** @@ -942,7 +942,7 @@ void br_sha512_out(const br_sha512_context *ctx, void *out); */ uint64_t br_sha512_state(const br_sha512_context *ctx, void *out); #else -#define br_sha512_state br_sha384_state +#define br_sha512_state br_sha384_state #endif #ifdef BR_DOXYGEN_IGNORE @@ -955,10 +955,10 @@ uint64_t br_sha512_state(const br_sha512_context *ctx, void *out); * \param stb source buffer for the running state. * \param count the injected total byte length. */ -void br_sha512_set_state(br_sha512_context *ctx, - const void *stb, uint64_t count); +void br_sha512_set_state(br_sha512_context *ctx, const void *stb, + uint64_t count); #else -#define br_sha512_set_state br_sha384_set_state +#define br_sha512_set_state br_sha384_set_state #endif /* @@ -974,12 +974,12 @@ void br_sha512_set_state(br_sha512_context *ctx, * same input. It is not one of the functions identified in TLS, so * we give it a symbolic identifier of value 0. */ -#define br_md5sha1_ID 0 +#define br_md5sha1_ID 0 /** * \brief MD5+SHA-1 output size (in bytes). */ -#define br_md5sha1_SIZE 36 +#define br_md5sha1_SIZE 36 /** * \brief Constant vtable for MD5+SHA-1. @@ -993,15 +993,15 @@ extern const br_hash_class br_md5sha1_vtable; * function. Other fields are not supposed to be accessed by user code. */ typedef struct { - /** - * \brief Pointer to vtable for this context. - */ - const br_hash_class *vtable; + /** + * \brief Pointer to vtable for this context. + */ + const br_hash_class *vtable; #ifndef BR_DOXYGEN_IGNORE - unsigned char buf[64]; - uint64_t count; - uint32_t val_md5[4]; - uint32_t val_sha1[5]; + unsigned char buf[64]; + uint64_t count; + uint32_t val_md5[4]; + uint32_t val_sha1[5]; #endif } br_md5sha1_context; @@ -1065,8 +1065,8 @@ uint64_t br_md5sha1_state(const br_md5sha1_context *ctx, void *out); * \param stb source buffer for the running state. * \param count the injected total byte length. */ -void br_md5sha1_set_state(br_md5sha1_context *ctx, - const void *stb, uint64_t count); +void br_md5sha1_set_state(br_md5sha1_context *ctx, const void *stb, + uint64_t count); /** * \brief Aggregate context for configurable hash function support. @@ -1075,14 +1075,14 @@ void br_md5sha1_set_state(br_md5sha1_context *ctx, * serve as context for all standard hash functions defined above. */ typedef union { - const br_hash_class *vtable; - br_md5_context md5; - br_sha1_context sha1; - br_sha224_context sha224; - br_sha256_context sha256; - br_sha384_context sha384; - br_sha512_context sha512; - br_md5sha1_context md5sha1; + const br_hash_class *vtable; + br_md5_context md5; + br_sha1_context sha1; + br_sha224_context sha224; + br_sha256_context sha256; + br_sha384_context sha384; + br_sha512_context sha512; + br_md5sha1_context md5sha1; } br_hash_compat_context; /* @@ -1106,11 +1106,11 @@ typedef union { */ typedef struct { #ifndef BR_DOXYGEN_IGNORE - unsigned char buf[128]; - uint64_t count; - uint32_t val_32[25]; - uint64_t val_64[16]; - const br_hash_class *impl[6]; + unsigned char buf[128]; + uint64_t count; + uint32_t val_32[25]; + uint64_t val_64[16]; + const br_hash_class *impl[6]; #endif } br_multihash_context; @@ -1138,15 +1138,13 @@ void br_multihash_zero(br_multihash_context *ctx); * \param id the hash function symbolic identifier. * \param impl the hash function vtable, or `NULL`. */ -static inline void -br_multihash_setimpl(br_multihash_context *ctx, - int id, const br_hash_class *impl) -{ - /* - * This code relies on hash functions ID being values 1 to 6, - * in the MD5 to SHA-512 order. - */ - ctx->impl[id - 1] = impl; +static inline void br_multihash_setimpl(br_multihash_context *ctx, int id, + const br_hash_class *impl) { + /* + * This code relies on hash functions ID being values 1 to 6, + * in the MD5 to SHA-512 order. + */ + ctx->impl[id - 1] = impl; } /** @@ -1160,10 +1158,9 @@ br_multihash_setimpl(br_multihash_context *ctx, * \param id the hash function symbolic identifier. * \return the hash function vtable, or `NULL`. */ -static inline const br_hash_class * -br_multihash_getimpl(const br_multihash_context *ctx, int id) -{ - return ctx->impl[id - 1]; +static inline const br_hash_class *br_multihash_getimpl( + const br_multihash_context *ctx, int id) { + return ctx->impl[id - 1]; } /** @@ -1187,8 +1184,8 @@ void br_multihash_init(br_multihash_context *ctx); * \param data pointer to the injected data. * \param len injected data length (in bytes). */ -void br_multihash_update(br_multihash_context *ctx, - const void *data, size_t len); +void br_multihash_update(br_multihash_context *ctx, const void *data, + size_t len); /** * \brief Compute a hash output from a multi-hasher. diff --git a/vendor/hydra/vendor/bearssl/inc/bearssl_hmac.h b/vendor/hydra/vendor/bearssl/inc/bearssl_hmac.h index 4dc01ca3..6fa81421 100644 --- a/vendor/hydra/vendor/bearssl/inc/bearssl_hmac.h +++ b/vendor/hydra/vendor/bearssl/inc/bearssl_hmac.h @@ -1,7 +1,7 @@ /* * Copyright (c) 2016 Thomas Pornin * - * Permission is hereby granted, free of charge, to any person obtaining + * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, @@ -9,12 +9,12 @@ * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * - * The above copyright notice and this permission notice shall be + * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN @@ -65,8 +65,8 @@ extern "C" { */ typedef struct { #ifndef BR_DOXYGEN_IGNORE - const br_hash_class *dig_vtable; - unsigned char ksi[64], kso[64]; + const br_hash_class *dig_vtable; + unsigned char ksi[64], kso[64]; #endif } br_hmac_key_context; @@ -82,7 +82,8 @@ typedef struct { * \param key_len HMAC secret key length (in bytes). */ void br_hmac_key_init(br_hmac_key_context *kc, - const br_hash_class *digest_vtable, const void *key, size_t key_len); + const br_hash_class *digest_vtable, const void *key, + size_t key_len); /* * \brief Get the underlying hash function. @@ -94,9 +95,8 @@ void br_hmac_key_init(br_hmac_key_context *kc, * \return the hash function implementation. */ static inline const br_hash_class *br_hmac_key_get_digest( - const br_hmac_key_context *kc) -{ - return kc->dig_vtable; + const br_hmac_key_context *kc) { + return kc->dig_vtable; } /** @@ -109,9 +109,9 @@ static inline const br_hash_class *br_hmac_key_get_digest( */ typedef struct { #ifndef BR_DOXYGEN_IGNORE - br_hash_compat_context dig; - unsigned char kso[64]; - size_t out_len; + br_hash_compat_context dig; + unsigned char kso[64]; + size_t out_len; #endif } br_hmac_context; @@ -133,8 +133,8 @@ typedef struct { * \param kc HMAC key context (already initialised with the key). * \param out_len HMAC output length (0 to select "natural length"). */ -void br_hmac_init(br_hmac_context *ctx, - const br_hmac_key_context *kc, size_t out_len); +void br_hmac_init(br_hmac_context *ctx, const br_hmac_key_context *kc, + size_t out_len); /** * \brief Get the HMAC output size. @@ -151,11 +151,7 @@ void br_hmac_init(br_hmac_context *ctx, * \param ctx the (already initialised) HMAC computation context. * \return the HMAC actual output size. */ -static inline size_t -br_hmac_size(br_hmac_context *ctx) -{ - return ctx->out_len; -} +static inline size_t br_hmac_size(br_hmac_context *ctx) { return ctx->out_len; } /* * \brief Get the underlying hash function. @@ -167,9 +163,8 @@ br_hmac_size(br_hmac_context *ctx) * \return the hash function implementation. */ static inline const br_hash_class *br_hmac_get_digest( - const br_hmac_context *hc) -{ - return hc->dig.vtable; + const br_hmac_context *hc) { + return hc->dig.vtable; } /** @@ -230,9 +225,8 @@ size_t br_hmac_out(const br_hmac_context *ctx, void *out); * \param out destination buffer for the HMAC output. * \return the produced value length (in bytes). */ -size_t br_hmac_outCT(const br_hmac_context *ctx, - const void *data, size_t len, size_t min_len, size_t max_len, - void *out); +size_t br_hmac_outCT(const br_hmac_context *ctx, const void *data, size_t len, + size_t min_len, size_t max_len, void *out); #ifdef __cplusplus } diff --git a/vendor/hydra/vendor/bearssl/inc/bearssl_kdf.h b/vendor/hydra/vendor/bearssl/inc/bearssl_kdf.h index f018d7e8..a9bc678d 100644 --- a/vendor/hydra/vendor/bearssl/inc/bearssl_kdf.h +++ b/vendor/hydra/vendor/bearssl/inc/bearssl_kdf.h @@ -1,7 +1,7 @@ /* * Copyright (c) 2018 Thomas Pornin * - * Permission is hereby granted, free of charge, to any person obtaining + * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, @@ -9,12 +9,12 @@ * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * - * The above copyright notice and this permission notice shall be + * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN @@ -94,14 +94,14 @@ extern "C" { */ typedef struct { #ifndef BR_DOXYGEN_IGNORE - union { - br_hmac_context hmac_ctx; - br_hmac_key_context prk_ctx; - } u; - unsigned char buf[64]; - size_t ptr; - size_t dig_len; - unsigned chunk_num; + union { + br_hmac_context hmac_ctx; + br_hmac_key_context prk_ctx; + } u; + unsigned char buf[64]; + size_t ptr; + size_t dig_len; + unsigned chunk_num; #endif } br_hkdf_context; @@ -124,12 +124,12 @@ typedef struct { * \param salt_len HKDF-Extract salt length (in bytes). */ void br_hkdf_init(br_hkdf_context *hc, const br_hash_class *digest_vtable, - const void *salt, size_t salt_len); + const void *salt, size_t salt_len); /** * \brief The special "absent salt" value for HKDF. */ -#define BR_HKDF_NO_SALT (&br_hkdf_no_salt) +#define BR_HKDF_NO_SALT (&br_hkdf_no_salt) #ifndef BR_DOXYGEN_IGNORE extern const unsigned char br_hkdf_no_salt; @@ -175,8 +175,8 @@ void br_hkdf_flip(br_hkdf_context *hc); * \param out_len the length of the requested output (in bytes). * \return the produced output length (in bytes). */ -size_t br_hkdf_produce(br_hkdf_context *hc, - const void *info, size_t info_len, void *out, size_t out_len); +size_t br_hkdf_produce(br_hkdf_context *hc, const void *info, size_t info_len, + void *out, size_t out_len); #ifdef __cplusplus } diff --git a/vendor/hydra/vendor/bearssl/inc/bearssl_pem.h b/vendor/hydra/vendor/bearssl/inc/bearssl_pem.h index 8dba5827..cd8dfd1f 100644 --- a/vendor/hydra/vendor/bearssl/inc/bearssl_pem.h +++ b/vendor/hydra/vendor/bearssl/inc/bearssl_pem.h @@ -1,7 +1,7 @@ /* * Copyright (c) 2016 Thomas Pornin * - * Permission is hereby granted, free of charge, to any person obtaining + * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, @@ -9,12 +9,12 @@ * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * - * The above copyright notice and this permission notice shall be + * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN @@ -111,26 +111,26 @@ extern "C" { */ typedef struct { #ifndef BR_DOXYGEN_IGNORE - /* CPU for the T0 virtual machine. */ - struct { - uint32_t *dp; - uint32_t *rp; - const unsigned char *ip; - } cpu; - uint32_t dp_stack[32]; - uint32_t rp_stack[32]; - int err; + /* CPU for the T0 virtual machine. */ + struct { + uint32_t *dp; + uint32_t *rp; + const unsigned char *ip; + } cpu; + uint32_t dp_stack[32]; + uint32_t rp_stack[32]; + int err; - const unsigned char *hbuf; - size_t hlen; + const unsigned char *hbuf; + size_t hlen; - void (*dest)(void *dest_ctx, const void *src, size_t len); - void *dest_ctx; + void (*dest)(void *dest_ctx, const void *src, size_t len); + void *dest_ctx; - unsigned char event; - char name[128]; - unsigned char buf[255]; - size_t ptr; + unsigned char event; + char name[128]; + unsigned char buf[255]; + size_t ptr; #endif } br_pem_decoder_context; @@ -154,8 +154,8 @@ void br_pem_decoder_init(br_pem_decoder_context *ctx); * \param len number of new data bytes. * \return the number of bytes actually received (may be less than `len`). */ -size_t br_pem_decoder_push(br_pem_decoder_context *ctx, - const void *data, size_t len); +size_t br_pem_decoder_push(br_pem_decoder_context *ctx, const void *data, + size_t len); /** * \brief Set the receiver for decoded data. @@ -171,13 +171,11 @@ size_t br_pem_decoder_push(br_pem_decoder_context *ctx, * \param dest callback for receiving decoded data. * \param dest_ctx opaque context pointer for the `dest` callback. */ -static inline void -br_pem_decoder_setdest(br_pem_decoder_context *ctx, - void (*dest)(void *dest_ctx, const void *src, size_t len), - void *dest_ctx) -{ - ctx->dest = dest; - ctx->dest_ctx = dest_ctx; +static inline void br_pem_decoder_setdest( + br_pem_decoder_context *ctx, + void (*dest)(void *dest_ctx, const void *src, size_t len), void *dest_ctx) { + ctx->dest = dest; + ctx->dest_ctx = dest_ctx; } /** @@ -200,7 +198,7 @@ int br_pem_decoder_event(br_pem_decoder_context *ctx); * The object name (normalised to uppercase) can be accessed with * `br_pem_decoder_name()`. */ -#define BR_PEM_BEGIN_OBJ 1 +#define BR_PEM_BEGIN_OBJ 1 /** * \brief Event: end of object. @@ -208,7 +206,7 @@ int br_pem_decoder_event(br_pem_decoder_context *ctx); * This event is raised when the end of the current object is reached * (normally, i.e. with no decoding error). */ -#define BR_PEM_END_OBJ 2 +#define BR_PEM_END_OBJ 2 /** * \brief Event: decoding error. @@ -218,7 +216,7 @@ int br_pem_decoder_event(br_pem_decoder_context *ctx); * to the "out of any object" state. The offending line in the source * is consumed. */ -#define BR_PEM_ERROR 3 +#define BR_PEM_ERROR 3 /** * \brief Get the name of the encountered object. @@ -230,10 +228,8 @@ int br_pem_decoder_event(br_pem_decoder_context *ctx); * \param ctx decoder context. * \return the current object name. */ -static inline const char * -br_pem_decoder_name(br_pem_decoder_context *ctx) -{ - return ctx->name; +static inline const char *br_pem_decoder_name(br_pem_decoder_context *ctx) { + return ctx->name; } /** @@ -275,17 +271,17 @@ br_pem_decoder_name(br_pem_decoder_context *ctx) * \return the PEM object length (in characters), EXCLUDING the final zero. */ size_t br_pem_encode(void *dest, const void *data, size_t len, - const char *banner, unsigned flags); + const char *banner, unsigned flags); /** * \brief PEM encoding flag: split lines at 64 characters. */ -#define BR_PEM_LINE64 0x0001 +#define BR_PEM_LINE64 0x0001 /** * \brief PEM encoding flag: use CR+LF line endings. */ -#define BR_PEM_CRLF 0x0002 +#define BR_PEM_CRLF 0x0002 #ifdef __cplusplus } diff --git a/vendor/hydra/vendor/bearssl/inc/bearssl_prf.h b/vendor/hydra/vendor/bearssl/inc/bearssl_prf.h index fdf608c8..993b5de7 100644 --- a/vendor/hydra/vendor/bearssl/inc/bearssl_prf.h +++ b/vendor/hydra/vendor/bearssl/inc/bearssl_prf.h @@ -1,7 +1,7 @@ /* * Copyright (c) 2016 Thomas Pornin * - * Permission is hereby granted, free of charge, to any person obtaining + * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, @@ -9,12 +9,12 @@ * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * - * The above copyright notice and this permission notice shall be + * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN @@ -63,15 +63,15 @@ extern "C" { * may be `NULL`. */ typedef struct { - /** - * \brief Pointer to the chunk data. - */ - const void *data; + /** + * \brief Pointer to the chunk data. + */ + const void *data; - /** - * \brief Chunk length (in bytes). - */ - size_t len; + /** + * \brief Chunk length (in bytes). + */ + size_t len; } br_tls_prf_seed_chunk; /** @@ -88,9 +88,9 @@ typedef struct { * \param seed_num number of seed chunks. * \param seed seed chnks for this computation (usually non-secret). */ -void br_tls10_prf(void *dst, size_t len, - const void *secret, size_t secret_len, const char *label, - size_t seed_num, const br_tls_prf_seed_chunk *seed); +void br_tls10_prf(void *dst, size_t len, const void *secret, size_t secret_len, + const char *label, size_t seed_num, + const br_tls_prf_seed_chunk *seed); /** * \brief PRF implementation for TLS 1.2, with SHA-256. @@ -106,9 +106,9 @@ void br_tls10_prf(void *dst, size_t len, * \param seed_num number of seed chunks. * \param seed seed chnks for this computation (usually non-secret). */ -void br_tls12_sha256_prf(void *dst, size_t len, - const void *secret, size_t secret_len, const char *label, - size_t seed_num, const br_tls_prf_seed_chunk *seed); +void br_tls12_sha256_prf(void *dst, size_t len, const void *secret, + size_t secret_len, const char *label, size_t seed_num, + const br_tls_prf_seed_chunk *seed); /** * \brief PRF implementation for TLS 1.2, with SHA-384. @@ -124,11 +124,11 @@ void br_tls12_sha256_prf(void *dst, size_t len, * \param seed_num number of seed chunks. * \param seed seed chnks for this computation (usually non-secret). */ -void br_tls12_sha384_prf(void *dst, size_t len, - const void *secret, size_t secret_len, const char *label, - size_t seed_num, const br_tls_prf_seed_chunk *seed); +void br_tls12_sha384_prf(void *dst, size_t len, const void *secret, + size_t secret_len, const char *label, size_t seed_num, + const br_tls_prf_seed_chunk *seed); -/** +/** * brief A convenient type name for a PRF implementation. * * \param dst destination buffer. @@ -139,9 +139,10 @@ void br_tls12_sha384_prf(void *dst, size_t len, * \param seed_num number of seed chunks. * \param seed seed chnks for this computation (usually non-secret). */ -typedef void (*br_tls_prf_impl)(void *dst, size_t len, - const void *secret, size_t secret_len, const char *label, - size_t seed_num, const br_tls_prf_seed_chunk *seed); +typedef void (*br_tls_prf_impl)(void *dst, size_t len, const void *secret, + size_t secret_len, const char *label, + size_t seed_num, + const br_tls_prf_seed_chunk *seed); #ifdef __cplusplus } diff --git a/vendor/hydra/vendor/bearssl/inc/bearssl_rand.h b/vendor/hydra/vendor/bearssl/inc/bearssl_rand.h index 0a9f544f..20b4b15e 100644 --- a/vendor/hydra/vendor/bearssl/inc/bearssl_rand.h +++ b/vendor/hydra/vendor/bearssl/inc/bearssl_rand.h @@ -1,7 +1,7 @@ /* * Copyright (c) 2016 Thomas Pornin * - * Permission is hereby granted, free of charge, to any person obtaining + * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, @@ -9,12 +9,12 @@ * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * - * The above copyright notice and this permission notice shall be + * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN @@ -133,58 +133,57 @@ extern "C" { */ typedef struct br_prng_class_ br_prng_class; struct br_prng_class_ { - /** - * \brief Size (in bytes) of the context structure appropriate for - * running this PRNG. - */ - size_t context_size; + /** + * \brief Size (in bytes) of the context structure appropriate for + * running this PRNG. + */ + size_t context_size; - /** - * \brief Initialisation method. - * - * The context to initialise is provided as a pointer to its - * first field (the vtable pointer); this function sets that - * first field to a pointer to the vtable. - * - * The extra parameters depend on the implementation; each - * implementation defines what kind of extra parameters it - * expects (if any). - * - * Requirements on the initial seed depend on the implemented - * PRNG. - * - * \param ctx PRNG context to initialise. - * \param params extra parameters for the PRNG. - * \param seed initial seed. - * \param seed_len initial seed length (in bytes). - */ - void (*init)(const br_prng_class **ctx, const void *params, - const void *seed, size_t seed_len); + /** + * \brief Initialisation method. + * + * The context to initialise is provided as a pointer to its + * first field (the vtable pointer); this function sets that + * first field to a pointer to the vtable. + * + * The extra parameters depend on the implementation; each + * implementation defines what kind of extra parameters it + * expects (if any). + * + * Requirements on the initial seed depend on the implemented + * PRNG. + * + * \param ctx PRNG context to initialise. + * \param params extra parameters for the PRNG. + * \param seed initial seed. + * \param seed_len initial seed length (in bytes). + */ + void (*init)(const br_prng_class **ctx, const void *params, const void *seed, + size_t seed_len); - /** - * \brief Random bytes generation. - * - * This method produces `len` pseudorandom bytes, in the `out` - * buffer. The context is updated accordingly. - * - * \param ctx PRNG context. - * \param out output buffer. - * \param len number of pseudorandom bytes to produce. - */ - void (*generate)(const br_prng_class **ctx, void *out, size_t len); + /** + * \brief Random bytes generation. + * + * This method produces `len` pseudorandom bytes, in the `out` + * buffer. The context is updated accordingly. + * + * \param ctx PRNG context. + * \param out output buffer. + * \param len number of pseudorandom bytes to produce. + */ + void (*generate)(const br_prng_class **ctx, void *out, size_t len); - /** - * \brief Inject additional seed bytes. - * - * The provided seed bytes are added into the PRNG internal - * entropy pool. - * - * \param ctx PRNG context. - * \param seed additional seed. - * \param seed_len additional seed length (in bytes). - */ - void (*update)(const br_prng_class **ctx, - const void *seed, size_t seed_len); + /** + * \brief Inject additional seed bytes. + * + * The provided seed bytes are added into the PRNG internal + * entropy pool. + * + * \param ctx PRNG context. + * \param seed additional seed. + * \param seed_len additional seed length (in bytes). + */ + void (*update)(const br_prng_class **ctx, const void *seed, size_t seed_len); }; /** @@ -194,16 +193,16 @@ struct br_prng_class_ { * supports OOP. */ typedef struct { - /** - * \brief Pointer to the vtable. - * - * This field is set with the initialisation method/function. - */ - const br_prng_class *vtable; + /** + * \brief Pointer to the vtable. + * + * This field is set with the initialisation method/function. + */ + const br_prng_class *vtable; #ifndef BR_DOXYGEN_IGNORE - unsigned char K[64]; - unsigned char V[64]; - const br_hash_class *digest_class; + unsigned char K[64]; + unsigned char V[64]; + const br_hash_class *digest_class; #endif } br_hmac_drbg_context; @@ -235,7 +234,8 @@ extern const br_prng_class br_hmac_drbg_vtable; * \param seed_len initial seed length (in bytes). */ void br_hmac_drbg_init(br_hmac_drbg_context *ctx, - const br_hash_class *digest_class, const void *seed, size_t seed_len); + const br_hash_class *digest_class, const void *seed, + size_t seed_len); /** * \brief Random bytes generation with HMAC_DRBG. @@ -263,8 +263,8 @@ void br_hmac_drbg_generate(br_hmac_drbg_context *ctx, void *out, size_t len); * \param seed additional seed. * \param seed_len additional seed length (in bytes). */ -void br_hmac_drbg_update(br_hmac_drbg_context *ctx, - const void *seed, size_t seed_len); +void br_hmac_drbg_update(br_hmac_drbg_context *ctx, const void *seed, + size_t seed_len); /** * \brief Get the hash function implementation used by a given instance of @@ -276,10 +276,9 @@ void br_hmac_drbg_update(br_hmac_drbg_context *ctx, * \param ctx HMAC_DRBG context. * \return the hash function vtable. */ -static inline const br_hash_class * -br_hmac_drbg_get_hash(const br_hmac_drbg_context *ctx) -{ - return ctx->digest_class; +static inline const br_hash_class *br_hmac_drbg_get_hash( + const br_hmac_drbg_context *ctx) { + return ctx->digest_class; } /** @@ -324,15 +323,15 @@ br_prng_seeder br_prng_seeder_system(const char **name); * supports OOP. */ typedef struct { - /** - * \brief Pointer to the vtable. - * - * This field is set with the initialisation method/function. - */ - const br_prng_class *vtable; + /** + * \brief Pointer to the vtable. + * + * This field is set with the initialisation method/function. + */ + const br_prng_class *vtable; #ifndef BR_DOXYGEN_IGNORE - br_aes_gen_ctr_keys sk; - uint32_t cc; + br_aes_gen_ctr_keys sk; + uint32_t cc; #endif } br_aesctr_drbg_context; @@ -360,7 +359,8 @@ extern const br_prng_class br_aesctr_drbg_vtable; * \param seed_len initial seed length (in bytes). */ void br_aesctr_drbg_init(br_aesctr_drbg_context *ctx, - const br_block_ctr_class *aesctr, const void *seed, size_t seed_len); + const br_block_ctr_class *aesctr, const void *seed, + size_t seed_len); /** * \brief Random bytes generation with AESCTR_DRBG. @@ -372,8 +372,8 @@ void br_aesctr_drbg_init(br_aesctr_drbg_context *ctx, * \param out output buffer. * \param len number of pseudorandom bytes to produce. */ -void br_aesctr_drbg_generate(br_aesctr_drbg_context *ctx, - void *out, size_t len); +void br_aesctr_drbg_generate(br_aesctr_drbg_context *ctx, void *out, + size_t len); /** * \brief Inject additional seed bytes in AESCTR_DRBG. @@ -387,8 +387,8 @@ void br_aesctr_drbg_generate(br_aesctr_drbg_context *ctx, * \param seed additional seed. * \param seed_len additional seed length (in bytes). */ -void br_aesctr_drbg_update(br_aesctr_drbg_context *ctx, - const void *seed, size_t seed_len); +void br_aesctr_drbg_update(br_aesctr_drbg_context *ctx, const void *seed, + size_t seed_len); #ifdef __cplusplus } diff --git a/vendor/hydra/vendor/bearssl/inc/bearssl_rsa.h b/vendor/hydra/vendor/bearssl/inc/bearssl_rsa.h index 0eaf2a20..aa785c73 100644 --- a/vendor/hydra/vendor/bearssl/inc/bearssl_rsa.h +++ b/vendor/hydra/vendor/bearssl/inc/bearssl_rsa.h @@ -1,7 +1,7 @@ /* * Copyright (c) 2016 Thomas Pornin * - * Permission is hereby granted, free of charge, to any person obtaining + * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, @@ -9,12 +9,12 @@ * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * - * The above copyright notice and this permission notice shall be + * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN @@ -159,14 +159,14 @@ extern "C" { * of value 0 are allowed. */ typedef struct { - /** \brief Modulus. */ - unsigned char *n; - /** \brief Modulus length (in bytes). */ - size_t nlen; - /** \brief Public exponent. */ - unsigned char *e; - /** \brief Public exponent length (in bytes). */ - size_t elen; + /** \brief Modulus. */ + unsigned char *n; + /** \brief Modulus length (in bytes). */ + size_t nlen; + /** \brief Public exponent. */ + unsigned char *e; + /** \brief Public exponent length (in bytes). */ + size_t elen; } br_rsa_public_key; /** @@ -179,28 +179,28 @@ typedef struct { * length (`n_bitlen`) MUST be exact. */ typedef struct { - /** \brief Modulus bit length (in bits, exact value). */ - uint32_t n_bitlen; - /** \brief First prime factor. */ - unsigned char *p; - /** \brief First prime factor length (in bytes). */ - size_t plen; - /** \brief Second prime factor. */ - unsigned char *q; - /** \brief Second prime factor length (in bytes). */ - size_t qlen; - /** \brief First reduced private exponent. */ - unsigned char *dp; - /** \brief First reduced private exponent length (in bytes). */ - size_t dplen; - /** \brief Second reduced private exponent. */ - unsigned char *dq; - /** \brief Second reduced private exponent length (in bytes). */ - size_t dqlen; - /** \brief CRT coefficient. */ - unsigned char *iq; - /** \brief CRT coefficient length (in bytes). */ - size_t iqlen; + /** \brief Modulus bit length (in bits, exact value). */ + uint32_t n_bitlen; + /** \brief First prime factor. */ + unsigned char *p; + /** \brief First prime factor length (in bytes). */ + size_t plen; + /** \brief Second prime factor. */ + unsigned char *q; + /** \brief Second prime factor length (in bytes). */ + size_t qlen; + /** \brief First reduced private exponent. */ + unsigned char *dp; + /** \brief First reduced private exponent length (in bytes). */ + size_t dplen; + /** \brief Second reduced private exponent. */ + unsigned char *dq; + /** \brief Second reduced private exponent length (in bytes). */ + size_t dqlen; + /** \brief CRT coefficient. */ + unsigned char *iq; + /** \brief CRT coefficient length (in bytes). */ + size_t iqlen; } br_rsa_private_key; /** @@ -214,7 +214,7 @@ typedef struct { * length as the modulus (actual modulus length, without extra leading * zeros in the modulus representation in memory). If the length does * not match, then this function returns 0 and `x[]` is unmodified. - * + * * It `xlen` is correct, then `x[]` is modified. Returned value is 1 * on success, 0 on error. Error conditions include an oversized `x[]` * (the array has the same length as the modulus, but the numerical value @@ -228,7 +228,7 @@ typedef struct { * \return 1 on success, 0 on error. */ typedef uint32_t (*br_rsa_public)(unsigned char *x, size_t xlen, - const br_rsa_public_key *pk); + const br_rsa_public_key *pk); /** * \brief Type for a RSA signature verification engine (PKCS#1 v1.5). @@ -276,8 +276,10 @@ typedef uint32_t (*br_rsa_public)(unsigned char *x, size_t xlen, * \return 1 on success, 0 on error. */ typedef uint32_t (*br_rsa_pkcs1_vrfy)(const unsigned char *x, size_t xlen, - const unsigned char *hash_oid, size_t hash_len, - const br_rsa_public_key *pk, unsigned char *hash_out); + const unsigned char *hash_oid, + size_t hash_len, + const br_rsa_public_key *pk, + unsigned char *hash_out); /** * \brief Type for a RSA encryption engine (OAEP). @@ -323,12 +325,12 @@ typedef uint32_t (*br_rsa_pkcs1_vrfy)(const unsigned char *x, size_t xlen, * \param src_len source message length (in bytes). * \return encrypted message length (in bytes), or 0 on error. */ -typedef size_t (*br_rsa_oaep_encrypt)( - const br_prng_class **rnd, const br_hash_class *dig, - const void *label, size_t label_len, - const br_rsa_public_key *pk, - void *dst, size_t dst_max_len, - const void *src, size_t src_len); +typedef size_t (*br_rsa_oaep_encrypt)(const br_prng_class **rnd, + const br_hash_class *dig, + const void *label, size_t label_len, + const br_rsa_public_key *pk, void *dst, + size_t dst_max_len, const void *src, + size_t src_len); /** * \brief Type for a RSA private key engine. @@ -344,7 +346,7 @@ typedef size_t (*br_rsa_oaep_encrypt)( * \return 1 on success, 0 on error. */ typedef uint32_t (*br_rsa_private)(unsigned char *x, - const br_rsa_private_key *sk); + const br_rsa_private_key *sk); /** * \brief Type for a RSA signature generation engine (PKCS#1 v1.5). @@ -382,38 +384,39 @@ typedef uint32_t (*br_rsa_private)(unsigned char *x, * \return 1 on success, 0 on error. */ typedef uint32_t (*br_rsa_pkcs1_sign)(const unsigned char *hash_oid, - const unsigned char *hash, size_t hash_len, - const br_rsa_private_key *sk, unsigned char *x); + const unsigned char *hash, + size_t hash_len, + const br_rsa_private_key *sk, + unsigned char *x); /** * \brief Encoded OID for SHA-1 (in RSA PKCS#1 signatures). */ -#define BR_HASH_OID_SHA1 \ - ((const unsigned char *)"\x05\x2B\x0E\x03\x02\x1A") +#define BR_HASH_OID_SHA1 ((const unsigned char *)"\x05\x2B\x0E\x03\x02\x1A") /** * \brief Encoded OID for SHA-224 (in RSA PKCS#1 signatures). */ -#define BR_HASH_OID_SHA224 \ - ((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x04") +#define BR_HASH_OID_SHA224 \ + ((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x04") /** * \brief Encoded OID for SHA-256 (in RSA PKCS#1 signatures). */ -#define BR_HASH_OID_SHA256 \ - ((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01") +#define BR_HASH_OID_SHA256 \ + ((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01") /** * \brief Encoded OID for SHA-384 (in RSA PKCS#1 signatures). */ -#define BR_HASH_OID_SHA384 \ - ((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x02") +#define BR_HASH_OID_SHA384 \ + ((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x02") /** * \brief Encoded OID for SHA-512 (in RSA PKCS#1 signatures). */ -#define BR_HASH_OID_SHA512 \ - ((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x03") +#define BR_HASH_OID_SHA512 \ + ((const unsigned char *)"\x09\x60\x86\x48\x01\x65\x03\x04\x02\x03") /** * \brief Type for a RSA decryption engine (OAEP). @@ -452,9 +455,10 @@ typedef uint32_t (*br_rsa_pkcs1_sign)(const unsigned char *hash_oid, * \param len encrypted/decrypted message length. * \return 1 on success, 0 on error. */ -typedef uint32_t (*br_rsa_oaep_decrypt)( - const br_hash_class *dig, const void *label, size_t label_len, - const br_rsa_private_key *sk, void *data, size_t *len); +typedef uint32_t (*br_rsa_oaep_decrypt)(const br_hash_class *dig, + const void *label, size_t label_len, + const br_rsa_private_key *sk, + void *data, size_t *len); /* * RSA "i32" engine. Integers are internally represented as arrays of @@ -473,7 +477,7 @@ typedef uint32_t (*br_rsa_oaep_decrypt)( * \return 1 on success, 0 on error. */ uint32_t br_rsa_i32_public(unsigned char *x, size_t xlen, - const br_rsa_public_key *pk); + const br_rsa_public_key *pk); /** * \brief RSA signature verification engine "i32". @@ -489,8 +493,9 @@ uint32_t br_rsa_i32_public(unsigned char *x, size_t xlen, * \return 1 on success, 0 on error. */ uint32_t br_rsa_i32_pkcs1_vrfy(const unsigned char *x, size_t xlen, - const unsigned char *hash_oid, size_t hash_len, - const br_rsa_public_key *pk, unsigned char *hash_out); + const unsigned char *hash_oid, size_t hash_len, + const br_rsa_public_key *pk, + unsigned char *hash_out); /** * \brief RSA private key engine "i32". @@ -501,8 +506,7 @@ uint32_t br_rsa_i32_pkcs1_vrfy(const unsigned char *x, size_t xlen, * \param sk RSA private key. * \return 1 on success, 0 on error. */ -uint32_t br_rsa_i32_private(unsigned char *x, - const br_rsa_private_key *sk); +uint32_t br_rsa_i32_private(unsigned char *x, const br_rsa_private_key *sk); /** * \brief RSA signature generation engine "i32". @@ -517,8 +521,8 @@ uint32_t br_rsa_i32_private(unsigned char *x, * \return 1 on success, 0 on error. */ uint32_t br_rsa_i32_pkcs1_sign(const unsigned char *hash_oid, - const unsigned char *hash, size_t hash_len, - const br_rsa_private_key *sk, unsigned char *x); + const unsigned char *hash, size_t hash_len, + const br_rsa_private_key *sk, unsigned char *x); /* * RSA "i31" engine. Similar to i32, but only 31 bits are used per 32-bit @@ -537,7 +541,7 @@ uint32_t br_rsa_i32_pkcs1_sign(const unsigned char *hash_oid, * \return 1 on success, 0 on error. */ uint32_t br_rsa_i31_public(unsigned char *x, size_t xlen, - const br_rsa_public_key *pk); + const br_rsa_public_key *pk); /** * \brief RSA signature verification engine "i31". @@ -553,8 +557,9 @@ uint32_t br_rsa_i31_public(unsigned char *x, size_t xlen, * \return 1 on success, 0 on error. */ uint32_t br_rsa_i31_pkcs1_vrfy(const unsigned char *x, size_t xlen, - const unsigned char *hash_oid, size_t hash_len, - const br_rsa_public_key *pk, unsigned char *hash_out); + const unsigned char *hash_oid, size_t hash_len, + const br_rsa_public_key *pk, + unsigned char *hash_out); /** * \brief RSA private key engine "i31". @@ -565,8 +570,7 @@ uint32_t br_rsa_i31_pkcs1_vrfy(const unsigned char *x, size_t xlen, * \param sk RSA private key. * \return 1 on success, 0 on error. */ -uint32_t br_rsa_i31_private(unsigned char *x, - const br_rsa_private_key *sk); +uint32_t br_rsa_i31_private(unsigned char *x, const br_rsa_private_key *sk); /** * \brief RSA signature generation engine "i31". @@ -581,8 +585,8 @@ uint32_t br_rsa_i31_private(unsigned char *x, * \return 1 on success, 0 on error. */ uint32_t br_rsa_i31_pkcs1_sign(const unsigned char *hash_oid, - const unsigned char *hash, size_t hash_len, - const br_rsa_private_key *sk, unsigned char *x); + const unsigned char *hash, size_t hash_len, + const br_rsa_private_key *sk, unsigned char *x); /* * RSA "i62" engine. Similar to i31, but internal multiplication use @@ -605,7 +609,7 @@ uint32_t br_rsa_i31_pkcs1_sign(const unsigned char *hash_oid, * \return 1 on success, 0 on error. */ uint32_t br_rsa_i62_public(unsigned char *x, size_t xlen, - const br_rsa_public_key *pk); + const br_rsa_public_key *pk); /** * \brief RSA signature verification engine "i62". @@ -625,8 +629,9 @@ uint32_t br_rsa_i62_public(unsigned char *x, size_t xlen, * \return 1 on success, 0 on error. */ uint32_t br_rsa_i62_pkcs1_vrfy(const unsigned char *x, size_t xlen, - const unsigned char *hash_oid, size_t hash_len, - const br_rsa_public_key *pk, unsigned char *hash_out); + const unsigned char *hash_oid, size_t hash_len, + const br_rsa_public_key *pk, + unsigned char *hash_out); /** * \brief RSA private key engine "i62". @@ -641,8 +646,7 @@ uint32_t br_rsa_i62_pkcs1_vrfy(const unsigned char *x, size_t xlen, * \param sk RSA private key. * \return 1 on success, 0 on error. */ -uint32_t br_rsa_i62_private(unsigned char *x, - const br_rsa_private_key *sk); +uint32_t br_rsa_i62_private(unsigned char *x, const br_rsa_private_key *sk); /** * \brief RSA signature generation engine "i62". @@ -661,8 +665,8 @@ uint32_t br_rsa_i62_private(unsigned char *x, * \return 1 on success, 0 on error. */ uint32_t br_rsa_i62_pkcs1_sign(const unsigned char *hash_oid, - const unsigned char *hash, size_t hash_len, - const br_rsa_private_key *sk, unsigned char *x); + const unsigned char *hash, size_t hash_len, + const br_rsa_private_key *sk, unsigned char *x); /** * \brief Get the RSA "i62" implementation (public key operations), @@ -729,7 +733,7 @@ br_rsa_oaep_decrypt br_rsa_i62_oaep_decrypt_get(void); * \return 1 on success, 0 on error. */ uint32_t br_rsa_i15_public(unsigned char *x, size_t xlen, - const br_rsa_public_key *pk); + const br_rsa_public_key *pk); /** * \brief RSA signature verification engine "i15". @@ -745,8 +749,9 @@ uint32_t br_rsa_i15_public(unsigned char *x, size_t xlen, * \return 1 on success, 0 on error. */ uint32_t br_rsa_i15_pkcs1_vrfy(const unsigned char *x, size_t xlen, - const unsigned char *hash_oid, size_t hash_len, - const br_rsa_public_key *pk, unsigned char *hash_out); + const unsigned char *hash_oid, size_t hash_len, + const br_rsa_public_key *pk, + unsigned char *hash_out); /** * \brief RSA private key engine "i15". @@ -757,8 +762,7 @@ uint32_t br_rsa_i15_pkcs1_vrfy(const unsigned char *x, size_t xlen, * \param sk RSA private key. * \return 1 on success, 0 on error. */ -uint32_t br_rsa_i15_private(unsigned char *x, - const br_rsa_private_key *sk); +uint32_t br_rsa_i15_private(unsigned char *x, const br_rsa_private_key *sk); /** * \brief RSA signature generation engine "i15". @@ -773,8 +777,8 @@ uint32_t br_rsa_i15_private(unsigned char *x, * \return 1 on success, 0 on error. */ uint32_t br_rsa_i15_pkcs1_sign(const unsigned char *hash_oid, - const unsigned char *hash, size_t hash_len, - const br_rsa_private_key *sk, unsigned char *x); + const unsigned char *hash, size_t hash_len, + const br_rsa_private_key *sk, unsigned char *x); /** * \brief Get "default" RSA implementation (public-key operations). @@ -864,7 +868,7 @@ br_rsa_oaep_decrypt br_rsa_oaep_decrypt_get_default(void); * \return 1 on success, 0 on error. */ uint32_t br_rsa_ssl_decrypt(br_rsa_private core, const br_rsa_private_key *sk, - unsigned char *data, size_t len); + unsigned char *data, size_t len); /** * \brief RSA encryption (OAEP) with the "i15" engine. @@ -882,12 +886,11 @@ uint32_t br_rsa_ssl_decrypt(br_rsa_private core, const br_rsa_private_key *sk, * \param src_len source message length (in bytes). * \return encrypted message length (in bytes), or 0 on error. */ -size_t br_rsa_i15_oaep_encrypt( - const br_prng_class **rnd, const br_hash_class *dig, - const void *label, size_t label_len, - const br_rsa_public_key *pk, - void *dst, size_t dst_max_len, - const void *src, size_t src_len); +size_t br_rsa_i15_oaep_encrypt(const br_prng_class **rnd, + const br_hash_class *dig, const void *label, + size_t label_len, const br_rsa_public_key *pk, + void *dst, size_t dst_max_len, const void *src, + size_t src_len); /** * \brief RSA decryption (OAEP) with the "i15" engine. @@ -902,9 +905,9 @@ size_t br_rsa_i15_oaep_encrypt( * \param len encrypted/decrypted message length. * \return 1 on success, 0 on error. */ -uint32_t br_rsa_i15_oaep_decrypt( - const br_hash_class *dig, const void *label, size_t label_len, - const br_rsa_private_key *sk, void *data, size_t *len); +uint32_t br_rsa_i15_oaep_decrypt(const br_hash_class *dig, const void *label, + size_t label_len, const br_rsa_private_key *sk, + void *data, size_t *len); /** * \brief RSA encryption (OAEP) with the "i31" engine. @@ -922,12 +925,11 @@ uint32_t br_rsa_i15_oaep_decrypt( * \param src_len source message length (in bytes). * \return encrypted message length (in bytes), or 0 on error. */ -size_t br_rsa_i31_oaep_encrypt( - const br_prng_class **rnd, const br_hash_class *dig, - const void *label, size_t label_len, - const br_rsa_public_key *pk, - void *dst, size_t dst_max_len, - const void *src, size_t src_len); +size_t br_rsa_i31_oaep_encrypt(const br_prng_class **rnd, + const br_hash_class *dig, const void *label, + size_t label_len, const br_rsa_public_key *pk, + void *dst, size_t dst_max_len, const void *src, + size_t src_len); /** * \brief RSA decryption (OAEP) with the "i31" engine. @@ -942,9 +944,9 @@ size_t br_rsa_i31_oaep_encrypt( * \param len encrypted/decrypted message length. * \return 1 on success, 0 on error. */ -uint32_t br_rsa_i31_oaep_decrypt( - const br_hash_class *dig, const void *label, size_t label_len, - const br_rsa_private_key *sk, void *data, size_t *len); +uint32_t br_rsa_i31_oaep_decrypt(const br_hash_class *dig, const void *label, + size_t label_len, const br_rsa_private_key *sk, + void *data, size_t *len); /** * \brief RSA encryption (OAEP) with the "i32" engine. @@ -962,12 +964,11 @@ uint32_t br_rsa_i31_oaep_decrypt( * \param src_len source message length (in bytes). * \return encrypted message length (in bytes), or 0 on error. */ -size_t br_rsa_i32_oaep_encrypt( - const br_prng_class **rnd, const br_hash_class *dig, - const void *label, size_t label_len, - const br_rsa_public_key *pk, - void *dst, size_t dst_max_len, - const void *src, size_t src_len); +size_t br_rsa_i32_oaep_encrypt(const br_prng_class **rnd, + const br_hash_class *dig, const void *label, + size_t label_len, const br_rsa_public_key *pk, + void *dst, size_t dst_max_len, const void *src, + size_t src_len); /** * \brief RSA decryption (OAEP) with the "i32" engine. @@ -982,9 +983,9 @@ size_t br_rsa_i32_oaep_encrypt( * \param len encrypted/decrypted message length. * \return 1 on success, 0 on error. */ -uint32_t br_rsa_i32_oaep_decrypt( - const br_hash_class *dig, const void *label, size_t label_len, - const br_rsa_private_key *sk, void *data, size_t *len); +uint32_t br_rsa_i32_oaep_decrypt(const br_hash_class *dig, const void *label, + size_t label_len, const br_rsa_private_key *sk, + void *data, size_t *len); /** * \brief RSA encryption (OAEP) with the "i62" engine. @@ -1006,12 +1007,11 @@ uint32_t br_rsa_i32_oaep_decrypt( * \param src_len source message length (in bytes). * \return encrypted message length (in bytes), or 0 on error. */ -size_t br_rsa_i62_oaep_encrypt( - const br_prng_class **rnd, const br_hash_class *dig, - const void *label, size_t label_len, - const br_rsa_public_key *pk, - void *dst, size_t dst_max_len, - const void *src, size_t src_len); +size_t br_rsa_i62_oaep_encrypt(const br_prng_class **rnd, + const br_hash_class *dig, const void *label, + size_t label_len, const br_rsa_public_key *pk, + void *dst, size_t dst_max_len, const void *src, + size_t src_len); /** * \brief RSA decryption (OAEP) with the "i62" engine. @@ -1030,9 +1030,9 @@ size_t br_rsa_i62_oaep_encrypt( * \param len encrypted/decrypted message length. * \return 1 on success, 0 on error. */ -uint32_t br_rsa_i62_oaep_decrypt( - const br_hash_class *dig, const void *label, size_t label_len, - const br_rsa_private_key *sk, void *data, size_t *len); +uint32_t br_rsa_i62_oaep_decrypt(const br_hash_class *dig, const void *label, + size_t label_len, const br_rsa_private_key *sk, + void *data, size_t *len); /** * \brief Get buffer size to hold RSA private key elements. @@ -1045,7 +1045,7 @@ uint32_t br_rsa_i62_oaep_decrypt( * \param size target key size (modulus size, in bits) * \return the length of the private key buffer, in bytes. */ -#define BR_RSA_KBUF_PRIV_SIZE(size) (5 * (((size) + 15) >> 4)) +#define BR_RSA_KBUF_PRIV_SIZE(size) (5 * (((size) + 15) >> 4)) /** * \brief Get buffer size to hold RSA public key elements. @@ -1058,7 +1058,7 @@ uint32_t br_rsa_i62_oaep_decrypt( * \param size target key size (modulus size, in bits) * \return the length of the public key buffer, in bytes. */ -#define BR_RSA_KBUF_PUB_SIZE(size) (4 + (((size) + 7) >> 3)) +#define BR_RSA_KBUF_PUB_SIZE(size) (4 + (((size) + 7) >> 3)) /** * \brief Type for RSA key pair generator implementation. @@ -1098,11 +1098,10 @@ uint32_t br_rsa_i62_oaep_decrypt( * \param pubexp public exponent to use, or zero * \return 1 on success, 0 on error (invalid parameters) */ -typedef uint32_t (*br_rsa_keygen)( - const br_prng_class **rng_ctx, - br_rsa_private_key *sk, void *kbuf_priv, - br_rsa_public_key *pk, void *kbuf_pub, - unsigned size, uint32_t pubexp); +typedef uint32_t (*br_rsa_keygen)(const br_prng_class **rng_ctx, + br_rsa_private_key *sk, void *kbuf_priv, + br_rsa_public_key *pk, void *kbuf_pub, + unsigned size, uint32_t pubexp); /** * \brief RSA key pair generation with the "i15" engine. @@ -1118,11 +1117,10 @@ typedef uint32_t (*br_rsa_keygen)( * \param pubexp public exponent to use, or zero * \return 1 on success, 0 on error (invalid parameters) */ -uint32_t br_rsa_i15_keygen( - const br_prng_class **rng_ctx, - br_rsa_private_key *sk, void *kbuf_priv, - br_rsa_public_key *pk, void *kbuf_pub, - unsigned size, uint32_t pubexp); +uint32_t br_rsa_i15_keygen(const br_prng_class **rng_ctx, + br_rsa_private_key *sk, void *kbuf_priv, + br_rsa_public_key *pk, void *kbuf_pub, unsigned size, + uint32_t pubexp); /** * \brief RSA key pair generation with the "i31" engine. @@ -1138,11 +1136,10 @@ uint32_t br_rsa_i15_keygen( * \param pubexp public exponent to use, or zero * \return 1 on success, 0 on error (invalid parameters) */ -uint32_t br_rsa_i31_keygen( - const br_prng_class **rng_ctx, - br_rsa_private_key *sk, void *kbuf_priv, - br_rsa_public_key *pk, void *kbuf_pub, - unsigned size, uint32_t pubexp); +uint32_t br_rsa_i31_keygen(const br_prng_class **rng_ctx, + br_rsa_private_key *sk, void *kbuf_priv, + br_rsa_public_key *pk, void *kbuf_pub, unsigned size, + uint32_t pubexp); /** * \brief RSA key pair generation with the "i62" engine. @@ -1162,11 +1159,10 @@ uint32_t br_rsa_i31_keygen( * \param pubexp public exponent to use, or zero * \return 1 on success, 0 on error (invalid parameters) */ -uint32_t br_rsa_i62_keygen( - const br_prng_class **rng_ctx, - br_rsa_private_key *sk, void *kbuf_priv, - br_rsa_public_key *pk, void *kbuf_pub, - unsigned size, uint32_t pubexp); +uint32_t br_rsa_i62_keygen(const br_prng_class **rng_ctx, + br_rsa_private_key *sk, void *kbuf_priv, + br_rsa_public_key *pk, void *kbuf_pub, unsigned size, + uint32_t pubexp); /** * \brief Get the RSA "i62" implementation (key pair generation), @@ -1320,8 +1316,8 @@ br_rsa_compute_pubexp br_rsa_compute_pubexp_get_default(void); * \param pubexp the public exponent. * \return the private exponent length (in bytes), or 0. */ -typedef size_t (*br_rsa_compute_privexp)(void *d, - const br_rsa_private_key *sk, uint32_t pubexp); +typedef size_t (*br_rsa_compute_privexp)(void *d, const br_rsa_private_key *sk, + uint32_t pubexp); /** * \brief Recompute RSA private exponent ("i15" engine). @@ -1333,8 +1329,8 @@ typedef size_t (*br_rsa_compute_privexp)(void *d, * \param pubexp the public exponent. * \return the private exponent length (in bytes), or 0. */ -size_t br_rsa_i15_compute_privexp(void *d, - const br_rsa_private_key *sk, uint32_t pubexp); +size_t br_rsa_i15_compute_privexp(void *d, const br_rsa_private_key *sk, + uint32_t pubexp); /** * \brief Recompute RSA private exponent ("i31" engine). @@ -1346,8 +1342,8 @@ size_t br_rsa_i15_compute_privexp(void *d, * \param pubexp the public exponent. * \return the private exponent length (in bytes), or 0. */ -size_t br_rsa_i31_compute_privexp(void *d, - const br_rsa_private_key *sk, uint32_t pubexp); +size_t br_rsa_i31_compute_privexp(void *d, const br_rsa_private_key *sk, + uint32_t pubexp); /** * \brief Get "default" RSA implementation (recompute private exponent). diff --git a/vendor/hydra/vendor/bearssl/inc/bearssl_ssl.h b/vendor/hydra/vendor/bearssl/inc/bearssl_ssl.h index 8c8c86bd..ef7d78a5 100644 --- a/vendor/hydra/vendor/bearssl/inc/bearssl_ssl.h +++ b/vendor/hydra/vendor/bearssl/inc/bearssl_ssl.h @@ -1,7 +1,7 @@ /* * Copyright (c) 2016 Thomas Pornin * - * Permission is hereby granted, free of charge, to any person obtaining + * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, @@ -9,12 +9,12 @@ * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * - * The above copyright notice and this permission notice shall be + * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN @@ -58,18 +58,18 @@ extern "C" { */ /** \brief Optimal input buffer size. */ -#define BR_SSL_BUFSIZE_INPUT (16384 + 325) +#define BR_SSL_BUFSIZE_INPUT (16384 + 325) /** \brief Optimal output buffer size. */ -#define BR_SSL_BUFSIZE_OUTPUT (16384 + 85) +#define BR_SSL_BUFSIZE_OUTPUT (16384 + 85) /** \brief Optimal buffer size for monodirectional engine (shared input/output buffer). */ -#define BR_SSL_BUFSIZE_MONO BR_SSL_BUFSIZE_INPUT +#define BR_SSL_BUFSIZE_MONO BR_SSL_BUFSIZE_INPUT /** \brief Optimal buffer size for bidirectional engine (single buffer split into two separate input/output buffers). */ -#define BR_SSL_BUFSIZE_BIDI (BR_SSL_BUFSIZE_INPUT + BR_SSL_BUFSIZE_OUTPUT) +#define BR_SSL_BUFSIZE_BIDI (BR_SSL_BUFSIZE_INPUT + BR_SSL_BUFSIZE_OUTPUT) /* * Constants for known SSL/TLS protocol versions (SSL 3.0, TLS 1.0, TLS 1.1 @@ -78,13 +78,13 @@ extern "C" { */ /** \brief Protocol version: SSL 3.0 (unsupported). */ -#define BR_SSL30 0x0300 +#define BR_SSL30 0x0300 /** \brief Protocol version: TLS 1.0. */ -#define BR_TLS10 0x0301 +#define BR_TLS10 0x0301 /** \brief Protocol version: TLS 1.1. */ -#define BR_TLS11 0x0302 +#define BR_TLS11 0x0302 /** \brief Protocol version: TLS 1.2. */ -#define BR_TLS12 0x0303 +#define BR_TLS12 0x0303 /* * Error constants. They are used to report the reason why a context has @@ -96,133 +96,133 @@ extern "C" { */ /** \brief SSL status: no error so far (0). */ -#define BR_ERR_OK 0 +#define BR_ERR_OK 0 /** \brief SSL status: caller-provided parameter is incorrect. */ -#define BR_ERR_BAD_PARAM 1 +#define BR_ERR_BAD_PARAM 1 /** \brief SSL status: operation requested by the caller cannot be applied with the current context state (e.g. reading data while outgoing data is waiting to be sent). */ -#define BR_ERR_BAD_STATE 2 +#define BR_ERR_BAD_STATE 2 /** \brief SSL status: incoming protocol or record version is unsupported. */ -#define BR_ERR_UNSUPPORTED_VERSION 3 +#define BR_ERR_UNSUPPORTED_VERSION 3 /** \brief SSL status: incoming record version does not match the expected version. */ -#define BR_ERR_BAD_VERSION 4 +#define BR_ERR_BAD_VERSION 4 /** \brief SSL status: incoming record length is invalid. */ -#define BR_ERR_BAD_LENGTH 5 +#define BR_ERR_BAD_LENGTH 5 /** \brief SSL status: incoming record is too large to be processed, or buffer is too small for the handshake message to send. */ -#define BR_ERR_TOO_LARGE 6 +#define BR_ERR_TOO_LARGE 6 /** \brief SSL status: decryption found an invalid padding, or the record MAC is not correct. */ -#define BR_ERR_BAD_MAC 7 +#define BR_ERR_BAD_MAC 7 /** \brief SSL status: no initial entropy was provided, and none can be obtained from the OS. */ -#define BR_ERR_NO_RANDOM 8 +#define BR_ERR_NO_RANDOM 8 /** \brief SSL status: incoming record type is unknown. */ -#define BR_ERR_UNKNOWN_TYPE 9 +#define BR_ERR_UNKNOWN_TYPE 9 /** \brief SSL status: incoming record or message has wrong type with regards to the current engine state. */ -#define BR_ERR_UNEXPECTED 10 +#define BR_ERR_UNEXPECTED 10 /** \brief SSL status: ChangeCipherSpec message from the peer has invalid contents. */ -#define BR_ERR_BAD_CCS 12 +#define BR_ERR_BAD_CCS 12 /** \brief SSL status: alert message from the peer has invalid contents (odd length). */ -#define BR_ERR_BAD_ALERT 13 +#define BR_ERR_BAD_ALERT 13 /** \brief SSL status: incoming handshake message decoding failed. */ -#define BR_ERR_BAD_HANDSHAKE 14 +#define BR_ERR_BAD_HANDSHAKE 14 /** \brief SSL status: ServerHello contains a session ID which is larger than 32 bytes. */ -#define BR_ERR_OVERSIZED_ID 15 +#define BR_ERR_OVERSIZED_ID 15 /** \brief SSL status: server wants to use a cipher suite that we did not claim to support. This is also reported if we tried to advertise a cipher suite that we do not support. */ -#define BR_ERR_BAD_CIPHER_SUITE 16 +#define BR_ERR_BAD_CIPHER_SUITE 16 /** \brief SSL status: server wants to use a compression that we did not claim to support. */ -#define BR_ERR_BAD_COMPRESSION 17 +#define BR_ERR_BAD_COMPRESSION 17 /** \brief SSL status: server's max fragment length does not match client's. */ -#define BR_ERR_BAD_FRAGLEN 18 +#define BR_ERR_BAD_FRAGLEN 18 /** \brief SSL status: secure renegotiation failed. */ -#define BR_ERR_BAD_SECRENEG 19 +#define BR_ERR_BAD_SECRENEG 19 /** \brief SSL status: server sent an extension type that we did not announce, or used the same extension type several times in a single ServerHello. */ -#define BR_ERR_EXTRA_EXTENSION 20 +#define BR_ERR_EXTRA_EXTENSION 20 /** \brief SSL status: invalid Server Name Indication contents (when used by the server, this extension shall be empty). */ -#define BR_ERR_BAD_SNI 21 +#define BR_ERR_BAD_SNI 21 /** \brief SSL status: invalid ServerHelloDone from the server (length is not 0). */ -#define BR_ERR_BAD_HELLO_DONE 22 +#define BR_ERR_BAD_HELLO_DONE 22 /** \brief SSL status: internal limit exceeded (e.g. server's public key is too large). */ -#define BR_ERR_LIMIT_EXCEEDED 23 +#define BR_ERR_LIMIT_EXCEEDED 23 /** \brief SSL status: Finished message from peer does not match the expected value. */ -#define BR_ERR_BAD_FINISHED 24 +#define BR_ERR_BAD_FINISHED 24 /** \brief SSL status: session resumption attempt with distinct version or cipher suite. */ -#define BR_ERR_RESUME_MISMATCH 25 +#define BR_ERR_RESUME_MISMATCH 25 /** \brief SSL status: unsupported or invalid algorithm (ECDHE curve, signature algorithm, hash function). */ -#define BR_ERR_INVALID_ALGORITHM 26 +#define BR_ERR_INVALID_ALGORITHM 26 /** \brief SSL status: invalid signature (on ServerKeyExchange from server, or in CertificateVerify from client). */ -#define BR_ERR_BAD_SIGNATURE 27 +#define BR_ERR_BAD_SIGNATURE 27 /** \brief SSL status: peer's public key does not have the proper type or is not allowed for requested operation. */ -#define BR_ERR_WRONG_KEY_USAGE 28 +#define BR_ERR_WRONG_KEY_USAGE 28 /** \brief SSL status: client did not send a certificate upon request, or the client certificate could not be validated. */ -#define BR_ERR_NO_CLIENT_AUTH 29 +#define BR_ERR_NO_CLIENT_AUTH 29 /** \brief SSL status: I/O error or premature close on underlying transport stream. This error code is set only by the simplified I/O API ("br_sslio_*"). */ -#define BR_ERR_IO 31 +#define BR_ERR_IO 31 /** \brief SSL status: base value for a received fatal alert. When a fatal alert is received from the peer, the alert value is added to this constant. */ -#define BR_ERR_RECV_FATAL_ALERT 256 +#define BR_ERR_RECV_FATAL_ALERT 256 /** \brief SSL status: base value for a sent fatal alert. When a fatal alert is sent to the peer, the alert value is added to this constant. */ -#define BR_ERR_SEND_FATAL_ALERT 512 +#define BR_ERR_SEND_FATAL_ALERT 512 /* ===================================================================== */ @@ -238,46 +238,44 @@ extern "C" { */ typedef struct br_sslrec_in_class_ br_sslrec_in_class; struct br_sslrec_in_class_ { - /** - * \brief Context size (in bytes). - */ - size_t context_size; - - /** - * \brief Test validity of the incoming record length. - * - * This function returns 1 if the announced length for an - * incoming record is valid, 0 otherwise, - * - * \param ctx decryption engine context. - * \param record_len incoming record length. - * \return 1 of a valid length, 0 otherwise. - */ - int (*check_length)(const br_sslrec_in_class *const *ctx, - size_t record_len); - - /** - * \brief Decrypt the incoming record. - * - * This function may assume that the record length is valid - * (it has been previously tested with `check_length()`). - * Decryption is done in place; `*len` is updated with the - * cleartext length, and the address of the first plaintext - * byte is returned. If the record is correct but empty, then - * `*len` is set to 0 and a non-`NULL` pointer is returned. - * - * On decryption/MAC error, `NULL` is returned. - * - * \param ctx decryption engine context. - * \param record_type record type (23 for application data, etc). - * \param version record version. - * \param payload address of encrypted payload. - * \param len pointer to payload length (updated). - * \return pointer to plaintext, or `NULL` on error. - */ - unsigned char *(*decrypt)(const br_sslrec_in_class **ctx, - int record_type, unsigned version, - void *payload, size_t *len); + /** + * \brief Context size (in bytes). + */ + size_t context_size; + + /** + * \brief Test validity of the incoming record length. + * + * This function returns 1 if the announced length for an + * incoming record is valid, 0 otherwise, + * + * \param ctx decryption engine context. + * \param record_len incoming record length. + * \return 1 of a valid length, 0 otherwise. + */ + int (*check_length)(const br_sslrec_in_class *const *ctx, size_t record_len); + + /** + * \brief Decrypt the incoming record. + * + * This function may assume that the record length is valid + * (it has been previously tested with `check_length()`). + * Decryption is done in place; `*len` is updated with the + * cleartext length, and the address of the first plaintext + * byte is returned. If the record is correct but empty, then + * `*len` is set to 0 and a non-`NULL` pointer is returned. + * + * On decryption/MAC error, `NULL` is returned. + * + * \param ctx decryption engine context. + * \param record_type record type (23 for application data, etc). + * \param version record version. + * \param payload address of encrypted payload. + * \param len pointer to payload length (updated). + * \return pointer to plaintext, or `NULL` on error. + */ + unsigned char *(*decrypt)(const br_sslrec_in_class **ctx, int record_type, + unsigned version, void *payload, size_t *len); }; /** @@ -292,51 +290,50 @@ struct br_sslrec_in_class_ { */ typedef struct br_sslrec_out_class_ br_sslrec_out_class; struct br_sslrec_out_class_ { - /** - * \brief Context size (in bytes). - */ - size_t context_size; - - /** - * \brief Compute maximum plaintext sizes and offsets. - * - * When this function is called, the `*start` and `*end` - * values contain offsets designating the free area in the - * outgoing buffer for plaintext data; that free area is - * preceded by a 5-byte space which will receive the record - * header. - * - * The `max_plaintext()` function is responsible for adjusting - * both `*start` and `*end` to make room for any record-specific - * header, MAC, padding, and possible split. - * - * \param ctx encryption engine context. - * \param start pointer to start of plaintext offset (updated). - * \param end pointer to start of plaintext offset (updated). - */ - void (*max_plaintext)(const br_sslrec_out_class *const *ctx, - size_t *start, size_t *end); - - /** - * \brief Perform record encryption. - * - * This function encrypts the record. The plaintext address and - * length are provided. Returned value is the start of the - * encrypted record (or sequence of records, if a split was - * performed), _including_ the 5-byte header, and `*len` is - * adjusted to the total size of the record(s), there again - * including the header(s). - * - * \param ctx decryption engine context. - * \param record_type record type (23 for application data, etc). - * \param version record version. - * \param plaintext address of plaintext. - * \param len pointer to plaintext length (updated). - * \return pointer to start of built record. - */ - unsigned char *(*encrypt)(const br_sslrec_out_class **ctx, - int record_type, unsigned version, - void *plaintext, size_t *len); + /** + * \brief Context size (in bytes). + */ + size_t context_size; + + /** + * \brief Compute maximum plaintext sizes and offsets. + * + * When this function is called, the `*start` and `*end` + * values contain offsets designating the free area in the + * outgoing buffer for plaintext data; that free area is + * preceded by a 5-byte space which will receive the record + * header. + * + * The `max_plaintext()` function is responsible for adjusting + * both `*start` and `*end` to make room for any record-specific + * header, MAC, padding, and possible split. + * + * \param ctx encryption engine context. + * \param start pointer to start of plaintext offset (updated). + * \param end pointer to start of plaintext offset (updated). + */ + void (*max_plaintext)(const br_sslrec_out_class *const *ctx, size_t *start, + size_t *end); + + /** + * \brief Perform record encryption. + * + * This function encrypts the record. The plaintext address and + * length are provided. Returned value is the start of the + * encrypted record (or sequence of records, if a split was + * performed), _including_ the 5-byte header, and `*len` is + * adjusted to the total size of the record(s), there again + * including the header(s). + * + * \param ctx decryption engine context. + * \param record_type record type (23 for application data, etc). + * \param version record version. + * \param plaintext address of plaintext. + * \param len pointer to plaintext length (updated). + * \return pointer to start of built record. + */ + unsigned char *(*encrypt)(const br_sslrec_out_class **ctx, int record_type, + unsigned version, void *plaintext, size_t *len); }; /** @@ -346,8 +343,8 @@ struct br_sslrec_out_class_ { * handshake, before encryption is applied. */ typedef struct { - /** \brief No-encryption engine vtable. */ - const br_sslrec_out_class *vtable; + /** \brief No-encryption engine vtable. */ + const br_sslrec_out_class *vtable; } br_sslrec_out_clear_context; /** \brief Static, constant vtable for the no-encryption engine. */ @@ -366,32 +363,31 @@ extern const br_sslrec_out_class br_sslrec_out_clear_vtable; */ typedef struct br_sslrec_in_cbc_class_ br_sslrec_in_cbc_class; struct br_sslrec_in_cbc_class_ { - /** - * \brief Superclass, as first vtable field. - */ - br_sslrec_in_class inner; - - /** - * \brief Engine initialisation method. - * - * This method sets the vtable field in the context. - * - * \param ctx context to initialise. - * \param bc_impl block cipher implementation (CBC decryption). - * \param bc_key block cipher key. - * \param bc_key_len block cipher key length (in bytes). - * \param dig_impl hash function for HMAC. - * \param mac_key HMAC key. - * \param mac_key_len HMAC key length (in bytes). - * \param mac_out_len HMAC output length (in bytes). - * \param iv initial IV (or `NULL`). - */ - void (*init)(const br_sslrec_in_cbc_class **ctx, - const br_block_cbcdec_class *bc_impl, - const void *bc_key, size_t bc_key_len, - const br_hash_class *dig_impl, - const void *mac_key, size_t mac_key_len, size_t mac_out_len, - const void *iv); + /** + * \brief Superclass, as first vtable field. + */ + br_sslrec_in_class inner; + + /** + * \brief Engine initialisation method. + * + * This method sets the vtable field in the context. + * + * \param ctx context to initialise. + * \param bc_impl block cipher implementation (CBC decryption). + * \param bc_key block cipher key. + * \param bc_key_len block cipher key length (in bytes). + * \param dig_impl hash function for HMAC. + * \param mac_key HMAC key. + * \param mac_key_len HMAC key length (in bytes). + * \param mac_out_len HMAC output length (in bytes). + * \param iv initial IV (or `NULL`). + */ + void (*init)(const br_sslrec_in_cbc_class **ctx, + const br_block_cbcdec_class *bc_impl, const void *bc_key, + size_t bc_key_len, const br_hash_class *dig_impl, + const void *mac_key, size_t mac_key_len, size_t mac_out_len, + const void *iv); }; /** @@ -405,32 +401,31 @@ struct br_sslrec_in_cbc_class_ { */ typedef struct br_sslrec_out_cbc_class_ br_sslrec_out_cbc_class; struct br_sslrec_out_cbc_class_ { - /** - * \brief Superclass, as first vtable field. - */ - br_sslrec_out_class inner; - - /** - * \brief Engine initialisation method. - * - * This method sets the vtable field in the context. - * - * \param ctx context to initialise. - * \param bc_impl block cipher implementation (CBC encryption). - * \param bc_key block cipher key. - * \param bc_key_len block cipher key length (in bytes). - * \param dig_impl hash function for HMAC. - * \param mac_key HMAC key. - * \param mac_key_len HMAC key length (in bytes). - * \param mac_out_len HMAC output length (in bytes). - * \param iv initial IV (or `NULL`). - */ - void (*init)(const br_sslrec_out_cbc_class **ctx, - const br_block_cbcenc_class *bc_impl, - const void *bc_key, size_t bc_key_len, - const br_hash_class *dig_impl, - const void *mac_key, size_t mac_key_len, size_t mac_out_len, - const void *iv); + /** + * \brief Superclass, as first vtable field. + */ + br_sslrec_out_class inner; + + /** + * \brief Engine initialisation method. + * + * This method sets the vtable field in the context. + * + * \param ctx context to initialise. + * \param bc_impl block cipher implementation (CBC encryption). + * \param bc_key block cipher key. + * \param bc_key_len block cipher key length (in bytes). + * \param dig_impl hash function for HMAC. + * \param mac_key HMAC key. + * \param mac_key_len HMAC key length (in bytes). + * \param mac_out_len HMAC output length (in bytes). + * \param iv initial IV (or `NULL`). + */ + void (*init)(const br_sslrec_out_cbc_class **ctx, + const br_block_cbcenc_class *bc_impl, const void *bc_key, + size_t bc_key_len, const br_hash_class *dig_impl, + const void *mac_key, size_t mac_key_len, size_t mac_out_len, + const void *iv); }; /** @@ -441,19 +436,19 @@ struct br_sslrec_out_cbc_class_ { * and shall not be accessed directly. */ typedef struct { - /** \brief Pointer to vtable. */ - const br_sslrec_in_cbc_class *vtable; + /** \brief Pointer to vtable. */ + const br_sslrec_in_cbc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint64_t seq; - union { - const br_block_cbcdec_class *vtable; - br_aes_gen_cbcdec_keys aes; - br_des_gen_cbcdec_keys des; - } bc; - br_hmac_key_context mac; - size_t mac_len; - unsigned char iv[16]; - int explicit_IV; + uint64_t seq; + union { + const br_block_cbcdec_class *vtable; + br_aes_gen_cbcdec_keys aes; + br_des_gen_cbcdec_keys des; + } bc; + br_hmac_key_context mac; + size_t mac_len; + unsigned char iv[16]; + int explicit_IV; #endif } br_sslrec_in_cbc_context; @@ -470,19 +465,19 @@ extern const br_sslrec_in_cbc_class br_sslrec_in_cbc_vtable; * and shall not be accessed directly. */ typedef struct { - /** \brief Pointer to vtable. */ - const br_sslrec_out_cbc_class *vtable; + /** \brief Pointer to vtable. */ + const br_sslrec_out_cbc_class *vtable; #ifndef BR_DOXYGEN_IGNORE - uint64_t seq; - union { - const br_block_cbcenc_class *vtable; - br_aes_gen_cbcenc_keys aes; - br_des_gen_cbcenc_keys des; - } bc; - br_hmac_key_context mac; - size_t mac_len; - unsigned char iv[16]; - int explicit_IV; + uint64_t seq; + union { + const br_block_cbcenc_class *vtable; + br_aes_gen_cbcenc_keys aes; + br_des_gen_cbcenc_keys des; + } bc; + br_hmac_key_context mac; + size_t mac_len; + unsigned char iv[16]; + int explicit_IV; #endif } br_sslrec_out_cbc_context; @@ -503,28 +498,26 @@ extern const br_sslrec_out_cbc_class br_sslrec_out_cbc_vtable; */ typedef struct br_sslrec_in_gcm_class_ br_sslrec_in_gcm_class; struct br_sslrec_in_gcm_class_ { - /** - * \brief Superclass, as first vtable field. - */ - br_sslrec_in_class inner; - - /** - * \brief Engine initialisation method. - * - * This method sets the vtable field in the context. - * - * \param ctx context to initialise. - * \param bc_impl block cipher implementation (CTR). - * \param key block cipher key. - * \param key_len block cipher key length (in bytes). - * \param gh_impl GHASH implementation. - * \param iv static IV (4 bytes). - */ - void (*init)(const br_sslrec_in_gcm_class **ctx, - const br_block_ctr_class *bc_impl, - const void *key, size_t key_len, - br_ghash gh_impl, - const void *iv); + /** + * \brief Superclass, as first vtable field. + */ + br_sslrec_in_class inner; + + /** + * \brief Engine initialisation method. + * + * This method sets the vtable field in the context. + * + * \param ctx context to initialise. + * \param bc_impl block cipher implementation (CTR). + * \param key block cipher key. + * \param key_len block cipher key length (in bytes). + * \param gh_impl GHASH implementation. + * \param iv static IV (4 bytes). + */ + void (*init)(const br_sslrec_in_gcm_class **ctx, + const br_block_ctr_class *bc_impl, const void *key, + size_t key_len, br_ghash gh_impl, const void *iv); }; /** @@ -537,28 +530,26 @@ struct br_sslrec_in_gcm_class_ { */ typedef struct br_sslrec_out_gcm_class_ br_sslrec_out_gcm_class; struct br_sslrec_out_gcm_class_ { - /** - * \brief Superclass, as first vtable field. - */ - br_sslrec_out_class inner; - - /** - * \brief Engine initialisation method. - * - * This method sets the vtable field in the context. - * - * \param ctx context to initialise. - * \param bc_impl block cipher implementation (CTR). - * \param key block cipher key. - * \param key_len block cipher key length (in bytes). - * \param gh_impl GHASH implementation. - * \param iv static IV (4 bytes). - */ - void (*init)(const br_sslrec_out_gcm_class **ctx, - const br_block_ctr_class *bc_impl, - const void *key, size_t key_len, - br_ghash gh_impl, - const void *iv); + /** + * \brief Superclass, as first vtable field. + */ + br_sslrec_out_class inner; + + /** + * \brief Engine initialisation method. + * + * This method sets the vtable field in the context. + * + * \param ctx context to initialise. + * \param bc_impl block cipher implementation (CTR). + * \param key block cipher key. + * \param key_len block cipher key length (in bytes). + * \param gh_impl GHASH implementation. + * \param iv static IV (4 bytes). + */ + void (*init)(const br_sslrec_out_gcm_class **ctx, + const br_block_ctr_class *bc_impl, const void *key, + size_t key_len, br_ghash gh_impl, const void *iv); }; /** @@ -570,21 +561,21 @@ struct br_sslrec_out_gcm_class_ { * and shall not be accessed directly. */ typedef struct { - /** \brief Pointer to vtable. */ - union { - const void *gen; - const br_sslrec_in_gcm_class *in; - const br_sslrec_out_gcm_class *out; - } vtable; + /** \brief Pointer to vtable. */ + union { + const void *gen; + const br_sslrec_in_gcm_class *in; + const br_sslrec_out_gcm_class *out; + } vtable; #ifndef BR_DOXYGEN_IGNORE - uint64_t seq; - union { - const br_block_ctr_class *vtable; - br_aes_gen_ctr_keys aes; - } bc; - br_ghash gh; - unsigned char iv[4]; - unsigned char h[16]; + uint64_t seq; + union { + const br_block_ctr_class *vtable; + br_aes_gen_ctr_keys aes; + } bc; + br_ghash gh; + unsigned char iv[4]; + unsigned char h[16]; #endif } br_sslrec_gcm_context; @@ -610,26 +601,24 @@ extern const br_sslrec_out_gcm_class br_sslrec_out_gcm_vtable; */ typedef struct br_sslrec_in_chapol_class_ br_sslrec_in_chapol_class; struct br_sslrec_in_chapol_class_ { - /** - * \brief Superclass, as first vtable field. - */ - br_sslrec_in_class inner; - - /** - * \brief Engine initialisation method. - * - * This method sets the vtable field in the context. - * - * \param ctx context to initialise. - * \param ichacha ChaCha20 implementation. - * \param ipoly Poly1305 implementation. - * \param key secret key (32 bytes). - * \param iv static IV (12 bytes). - */ - void (*init)(const br_sslrec_in_chapol_class **ctx, - br_chacha20_run ichacha, - br_poly1305_run ipoly, - const void *key, const void *iv); + /** + * \brief Superclass, as first vtable field. + */ + br_sslrec_in_class inner; + + /** + * \brief Engine initialisation method. + * + * This method sets the vtable field in the context. + * + * \param ctx context to initialise. + * \param ichacha ChaCha20 implementation. + * \param ipoly Poly1305 implementation. + * \param key secret key (32 bytes). + * \param iv static IV (12 bytes). + */ + void (*init)(const br_sslrec_in_chapol_class **ctx, br_chacha20_run ichacha, + br_poly1305_run ipoly, const void *key, const void *iv); }; /** @@ -642,26 +631,24 @@ struct br_sslrec_in_chapol_class_ { */ typedef struct br_sslrec_out_chapol_class_ br_sslrec_out_chapol_class; struct br_sslrec_out_chapol_class_ { - /** - * \brief Superclass, as first vtable field. - */ - br_sslrec_out_class inner; - - /** - * \brief Engine initialisation method. - * - * This method sets the vtable field in the context. - * - * \param ctx context to initialise. - * \param ichacha ChaCha20 implementation. - * \param ipoly Poly1305 implementation. - * \param key secret key (32 bytes). - * \param iv static IV (12 bytes). - */ - void (*init)(const br_sslrec_out_chapol_class **ctx, - br_chacha20_run ichacha, - br_poly1305_run ipoly, - const void *key, const void *iv); + /** + * \brief Superclass, as first vtable field. + */ + br_sslrec_out_class inner; + + /** + * \brief Engine initialisation method. + * + * This method sets the vtable field in the context. + * + * \param ctx context to initialise. + * \param ichacha ChaCha20 implementation. + * \param ipoly Poly1305 implementation. + * \param key secret key (32 bytes). + * \param iv static IV (12 bytes). + */ + void (*init)(const br_sslrec_out_chapol_class **ctx, br_chacha20_run ichacha, + br_poly1305_run ipoly, const void *key, const void *iv); }; /** @@ -673,18 +660,18 @@ struct br_sslrec_out_chapol_class_ { * and shall not be accessed directly. */ typedef struct { - /** \brief Pointer to vtable. */ - union { - const void *gen; - const br_sslrec_in_chapol_class *in; - const br_sslrec_out_chapol_class *out; - } vtable; + /** \brief Pointer to vtable. */ + union { + const void *gen; + const br_sslrec_in_chapol_class *in; + const br_sslrec_out_chapol_class *out; + } vtable; #ifndef BR_DOXYGEN_IGNORE - uint64_t seq; - unsigned char key[32]; - unsigned char iv[12]; - br_chacha20_run ichacha; - br_poly1305_run ipoly; + uint64_t seq; + unsigned char key[32]; + unsigned char iv[12]; + br_chacha20_run ichacha; + br_poly1305_run ipoly; #endif } br_sslrec_chapol_context; @@ -710,27 +697,26 @@ extern const br_sslrec_out_chapol_class br_sslrec_out_chapol_vtable; */ typedef struct br_sslrec_in_ccm_class_ br_sslrec_in_ccm_class; struct br_sslrec_in_ccm_class_ { - /** - * \brief Superclass, as first vtable field. - */ - br_sslrec_in_class inner; - - /** - * \brief Engine initialisation method. - * - * This method sets the vtable field in the context. - * - * \param ctx context to initialise. - * \param bc_impl block cipher implementation (CTR+CBC). - * \param key block cipher key. - * \param key_len block cipher key length (in bytes). - * \param iv static IV (4 bytes). - * \param tag_len tag length (in bytes) - */ - void (*init)(const br_sslrec_in_ccm_class **ctx, - const br_block_ctrcbc_class *bc_impl, - const void *key, size_t key_len, - const void *iv, size_t tag_len); + /** + * \brief Superclass, as first vtable field. + */ + br_sslrec_in_class inner; + + /** + * \brief Engine initialisation method. + * + * This method sets the vtable field in the context. + * + * \param ctx context to initialise. + * \param bc_impl block cipher implementation (CTR+CBC). + * \param key block cipher key. + * \param key_len block cipher key length (in bytes). + * \param iv static IV (4 bytes). + * \param tag_len tag length (in bytes) + */ + void (*init)(const br_sslrec_in_ccm_class **ctx, + const br_block_ctrcbc_class *bc_impl, const void *key, + size_t key_len, const void *iv, size_t tag_len); }; /** @@ -743,27 +729,26 @@ struct br_sslrec_in_ccm_class_ { */ typedef struct br_sslrec_out_ccm_class_ br_sslrec_out_ccm_class; struct br_sslrec_out_ccm_class_ { - /** - * \brief Superclass, as first vtable field. - */ - br_sslrec_out_class inner; - - /** - * \brief Engine initialisation method. - * - * This method sets the vtable field in the context. - * - * \param ctx context to initialise. - * \param bc_impl block cipher implementation (CTR+CBC). - * \param key block cipher key. - * \param key_len block cipher key length (in bytes). - * \param iv static IV (4 bytes). - * \param tag_len tag length (in bytes) - */ - void (*init)(const br_sslrec_out_ccm_class **ctx, - const br_block_ctrcbc_class *bc_impl, - const void *key, size_t key_len, - const void *iv, size_t tag_len); + /** + * \brief Superclass, as first vtable field. + */ + br_sslrec_out_class inner; + + /** + * \brief Engine initialisation method. + * + * This method sets the vtable field in the context. + * + * \param ctx context to initialise. + * \param bc_impl block cipher implementation (CTR+CBC). + * \param key block cipher key. + * \param key_len block cipher key length (in bytes). + * \param iv static IV (4 bytes). + * \param tag_len tag length (in bytes) + */ + void (*init)(const br_sslrec_out_ccm_class **ctx, + const br_block_ctrcbc_class *bc_impl, const void *key, + size_t key_len, const void *iv, size_t tag_len); }; /** @@ -775,20 +760,20 @@ struct br_sslrec_out_ccm_class_ { * and shall not be accessed directly. */ typedef struct { - /** \brief Pointer to vtable. */ - union { - const void *gen; - const br_sslrec_in_ccm_class *in; - const br_sslrec_out_ccm_class *out; - } vtable; + /** \brief Pointer to vtable. */ + union { + const void *gen; + const br_sslrec_in_ccm_class *in; + const br_sslrec_out_ccm_class *out; + } vtable; #ifndef BR_DOXYGEN_IGNORE - uint64_t seq; - union { - const br_block_ctrcbc_class *vtable; - br_aes_gen_ctrcbc_keys aes; - } bc; - unsigned char iv[4]; - size_t tag_len; + uint64_t seq; + union { + const br_block_ctrcbc_class *vtable; + br_aes_gen_ctrcbc_keys aes; + } bc; + unsigned char iv[4]; + size_t tag_len; #endif } br_sslrec_ccm_context; @@ -808,23 +793,23 @@ extern const br_sslrec_out_ccm_class br_sslrec_out_ccm_vtable; * \brief Type for session parameters, to be saved for session resumption. */ typedef struct { - /** \brief Session ID buffer. */ - unsigned char session_id[32]; - /** \brief Session ID length (in bytes, at most 32). */ - unsigned char session_id_len; - /** \brief Protocol version. */ - uint16_t version; - /** \brief Cipher suite. */ - uint16_t cipher_suite; - /** \brief Master secret. */ - unsigned char master_secret[48]; + /** \brief Session ID buffer. */ + unsigned char session_id[32]; + /** \brief Session ID length (in bytes, at most 32). */ + unsigned char session_id_len; + /** \brief Protocol version. */ + uint16_t version; + /** \brief Cipher suite. */ + uint16_t cipher_suite; + /** \brief Master secret. */ + unsigned char master_secret[48]; } br_ssl_session_parameters; #ifndef BR_DOXYGEN_IGNORE /* * Maximum number of cipher suites supported by a client or server. */ -#define BR_MAX_CIPHER_SUITES 48 +#define BR_MAX_CIPHER_SUITES 48 #endif /** @@ -844,277 +829,277 @@ typedef struct { */ typedef struct { #ifndef BR_DOXYGEN_IGNORE - /* - * The error code. When non-zero, then the state is "failed" and - * no I/O may occur until reset. - */ - int err; - - /* - * Configured I/O buffers. They are either disjoint, or identical. - */ - unsigned char *ibuf, *obuf; - size_t ibuf_len, obuf_len; - - /* - * Maximum fragment length applies to outgoing records; incoming - * records can be processed as long as they fit in the input - * buffer. It is guaranteed that incoming records at least as big - * as max_frag_len can be processed. - */ - uint16_t max_frag_len; - unsigned char log_max_frag_len; - unsigned char peer_log_max_frag_len; - - /* - * Buffering management registers. - */ - size_t ixa, ixb, ixc; - size_t oxa, oxb, oxc; - unsigned char iomode; - unsigned char incrypt; - - /* - * Shutdown flag: when set to non-zero, incoming record bytes - * will not be accepted anymore. This is used after a close_notify - * has been received: afterwards, the engine no longer claims that - * it could receive bytes from the transport medium. - */ - unsigned char shutdown_recv; - - /* - * 'record_type_in' is set to the incoming record type when the - * record header has been received. - * 'record_type_out' is used to make the next outgoing record - * header when it is ready to go. - */ - unsigned char record_type_in, record_type_out; - - /* - * When a record is received, its version is extracted: - * -- if 'version_in' is 0, then it is set to the received version; - * -- otherwise, if the received version is not identical to - * the 'version_in' contents, then a failure is reported. - * - * This implements the SSL requirement that all records shall - * use the negotiated protocol version, once decided (in the - * ServerHello). It is up to the handshake handler to adjust this - * field when necessary. - */ - uint16_t version_in; - - /* - * 'version_out' is used when the next outgoing record is ready - * to go. - */ - uint16_t version_out; - - /* - * Record handler contexts. - */ - union { - const br_sslrec_in_class *vtable; - br_sslrec_in_cbc_context cbc; - br_sslrec_gcm_context gcm; - br_sslrec_chapol_context chapol; - br_sslrec_ccm_context ccm; - } in; - union { - const br_sslrec_out_class *vtable; - br_sslrec_out_clear_context clear; - br_sslrec_out_cbc_context cbc; - br_sslrec_gcm_context gcm; - br_sslrec_chapol_context chapol; - br_sslrec_ccm_context ccm; - } out; - - /* - * The "application data" flag. Value: - * 0 handshake is in process, no application data acceptable - * 1 application data can be sent and received - * 2 closing, no application data can be sent, but some - * can still be received (and discarded) - */ - unsigned char application_data; - - /* - * Context RNG. - * - * rng_init_done is initially 0. It is set to 1 when the - * basic structure of the RNG is set, and 2 when some - * entropy has been pushed in. The value 2 marks the RNG - * as "properly seeded". - * - * rng_os_rand_done is initially 0. It is set to 1 when - * some seeding from the OS or hardware has been attempted. - */ - br_hmac_drbg_context rng; - int rng_init_done; - int rng_os_rand_done; - - /* - * Supported minimum and maximum versions, and cipher suites. - */ - uint16_t version_min; - uint16_t version_max; - uint16_t suites_buf[BR_MAX_CIPHER_SUITES]; - unsigned char suites_num; - - /* - * For clients, the server name to send as a SNI extension. For - * servers, the name received in the SNI extension (if any). - */ - char server_name[256]; - - /* - * "Security parameters". These are filled by the handshake - * handler, and used when switching encryption state. - */ - unsigned char client_random[32]; - unsigned char server_random[32]; - br_ssl_session_parameters session; - - /* - * ECDHE elements: curve and point from the peer. The server also - * uses that buffer for the point to send to the client. - */ - unsigned char ecdhe_curve; - unsigned char ecdhe_point[133]; - unsigned char ecdhe_point_len; - - /* - * Secure renegotiation (RFC 5746): 'reneg' can be: - * 0 first handshake (server support is not known) - * 1 peer does not support secure renegotiation - * 2 peer supports secure renegotiation - * - * The saved_finished buffer contains the client and the - * server "Finished" values from the last handshake, in - * that order (12 bytes each). - */ - unsigned char reneg; - unsigned char saved_finished[24]; - - /* - * Behavioural flags. - */ - uint32_t flags; - - /* - * Context variables for the handshake processor. The 'pad' must - * be large enough to accommodate an RSA-encrypted pre-master - * secret, or an RSA signature; since we want to support up to - * RSA-4096, this means at least 512 bytes. (Other pad usages - * require its length to be at least 256.) - */ - struct { - uint32_t *dp; - uint32_t *rp; - const unsigned char *ip; - } cpu; - uint32_t dp_stack[32]; - uint32_t rp_stack[32]; - unsigned char pad[512]; - unsigned char *hbuf_in, *hbuf_out, *saved_hbuf_out; - size_t hlen_in, hlen_out; - void (*hsrun)(void *ctx); - - /* - * The 'action' value communicates OOB information between the - * engine and the handshake processor. - * - * From the engine: - * 0 invocation triggered by I/O - * 1 invocation triggered by explicit close - * 2 invocation triggered by explicit renegotiation - */ - unsigned char action; - - /* - * State for alert messages. Value is either 0, or the value of - * the alert level byte (level is either 1 for warning, or 2 for - * fatal; we convert all other values to 'fatal'). - */ - unsigned char alert; - - /* - * Closure flags. This flag is set when a close_notify has been - * received from the peer. - */ - unsigned char close_received; - - /* - * Multi-hasher for the handshake messages. The handshake handler - * is responsible for resetting it when appropriate. - */ - br_multihash_context mhash; - - /* - * Pointer to the X.509 engine. The engine is supposed to be - * already initialized. It is used to validate the peer's - * certificate. - */ - const br_x509_class **x509ctx; - - /* - * Certificate chain to send. This is used by both client and - * server, when they send their respective Certificate messages. - * If chain_len is 0, then chain may be NULL. - */ - const br_x509_certificate *chain; - size_t chain_len; - const unsigned char *cert_cur; - size_t cert_len; - - /* - * List of supported protocol names (ALPN extension). If unset, - * (number of names is 0), then: - * - the client sends no ALPN extension; - * - the server ignores any incoming ALPN extension. - * - * Otherwise: - * - the client sends an ALPN extension with all the names; - * - the server selects the first protocol in its list that - * the client also supports, or fails (fatal alert 120) - * if the client sends an ALPN extension and there is no - * match. - * - * The 'selected_protocol' field contains 1+n if the matching - * name has index n in the list (the value is 0 if no match was - * performed, e.g. the peer did not send an ALPN extension). - */ - const char **protocol_names; - uint16_t protocol_names_num; - uint16_t selected_protocol; - - /* - * Pointers to implementations; left to NULL for unsupported - * functions. For the raw hash functions, implementations are - * referenced from the multihasher (mhash field). - */ - br_tls_prf_impl prf10; - br_tls_prf_impl prf_sha256; - br_tls_prf_impl prf_sha384; - const br_block_cbcenc_class *iaes_cbcenc; - const br_block_cbcdec_class *iaes_cbcdec; - const br_block_ctr_class *iaes_ctr; - const br_block_ctrcbc_class *iaes_ctrcbc; - const br_block_cbcenc_class *ides_cbcenc; - const br_block_cbcdec_class *ides_cbcdec; - br_ghash ighash; - br_chacha20_run ichacha; - br_poly1305_run ipoly; - const br_sslrec_in_cbc_class *icbc_in; - const br_sslrec_out_cbc_class *icbc_out; - const br_sslrec_in_gcm_class *igcm_in; - const br_sslrec_out_gcm_class *igcm_out; - const br_sslrec_in_chapol_class *ichapol_in; - const br_sslrec_out_chapol_class *ichapol_out; - const br_sslrec_in_ccm_class *iccm_in; - const br_sslrec_out_ccm_class *iccm_out; - const br_ec_impl *iec; - br_rsa_pkcs1_vrfy irsavrfy; - br_ecdsa_vrfy iecdsa; + /* + * The error code. When non-zero, then the state is "failed" and + * no I/O may occur until reset. + */ + int err; + + /* + * Configured I/O buffers. They are either disjoint, or identical. + */ + unsigned char *ibuf, *obuf; + size_t ibuf_len, obuf_len; + + /* + * Maximum fragment length applies to outgoing records; incoming + * records can be processed as long as they fit in the input + * buffer. It is guaranteed that incoming records at least as big + * as max_frag_len can be processed. + */ + uint16_t max_frag_len; + unsigned char log_max_frag_len; + unsigned char peer_log_max_frag_len; + + /* + * Buffering management registers. + */ + size_t ixa, ixb, ixc; + size_t oxa, oxb, oxc; + unsigned char iomode; + unsigned char incrypt; + + /* + * Shutdown flag: when set to non-zero, incoming record bytes + * will not be accepted anymore. This is used after a close_notify + * has been received: afterwards, the engine no longer claims that + * it could receive bytes from the transport medium. + */ + unsigned char shutdown_recv; + + /* + * 'record_type_in' is set to the incoming record type when the + * record header has been received. + * 'record_type_out' is used to make the next outgoing record + * header when it is ready to go. + */ + unsigned char record_type_in, record_type_out; + + /* + * When a record is received, its version is extracted: + * -- if 'version_in' is 0, then it is set to the received version; + * -- otherwise, if the received version is not identical to + * the 'version_in' contents, then a failure is reported. + * + * This implements the SSL requirement that all records shall + * use the negotiated protocol version, once decided (in the + * ServerHello). It is up to the handshake handler to adjust this + * field when necessary. + */ + uint16_t version_in; + + /* + * 'version_out' is used when the next outgoing record is ready + * to go. + */ + uint16_t version_out; + + /* + * Record handler contexts. + */ + union { + const br_sslrec_in_class *vtable; + br_sslrec_in_cbc_context cbc; + br_sslrec_gcm_context gcm; + br_sslrec_chapol_context chapol; + br_sslrec_ccm_context ccm; + } in; + union { + const br_sslrec_out_class *vtable; + br_sslrec_out_clear_context clear; + br_sslrec_out_cbc_context cbc; + br_sslrec_gcm_context gcm; + br_sslrec_chapol_context chapol; + br_sslrec_ccm_context ccm; + } out; + + /* + * The "application data" flag. Value: + * 0 handshake is in process, no application data acceptable + * 1 application data can be sent and received + * 2 closing, no application data can be sent, but some + * can still be received (and discarded) + */ + unsigned char application_data; + + /* + * Context RNG. + * + * rng_init_done is initially 0. It is set to 1 when the + * basic structure of the RNG is set, and 2 when some + * entropy has been pushed in. The value 2 marks the RNG + * as "properly seeded". + * + * rng_os_rand_done is initially 0. It is set to 1 when + * some seeding from the OS or hardware has been attempted. + */ + br_hmac_drbg_context rng; + int rng_init_done; + int rng_os_rand_done; + + /* + * Supported minimum and maximum versions, and cipher suites. + */ + uint16_t version_min; + uint16_t version_max; + uint16_t suites_buf[BR_MAX_CIPHER_SUITES]; + unsigned char suites_num; + + /* + * For clients, the server name to send as a SNI extension. For + * servers, the name received in the SNI extension (if any). + */ + char server_name[256]; + + /* + * "Security parameters". These are filled by the handshake + * handler, and used when switching encryption state. + */ + unsigned char client_random[32]; + unsigned char server_random[32]; + br_ssl_session_parameters session; + + /* + * ECDHE elements: curve and point from the peer. The server also + * uses that buffer for the point to send to the client. + */ + unsigned char ecdhe_curve; + unsigned char ecdhe_point[133]; + unsigned char ecdhe_point_len; + + /* + * Secure renegotiation (RFC 5746): 'reneg' can be: + * 0 first handshake (server support is not known) + * 1 peer does not support secure renegotiation + * 2 peer supports secure renegotiation + * + * The saved_finished buffer contains the client and the + * server "Finished" values from the last handshake, in + * that order (12 bytes each). + */ + unsigned char reneg; + unsigned char saved_finished[24]; + + /* + * Behavioural flags. + */ + uint32_t flags; + + /* + * Context variables for the handshake processor. The 'pad' must + * be large enough to accommodate an RSA-encrypted pre-master + * secret, or an RSA signature; since we want to support up to + * RSA-4096, this means at least 512 bytes. (Other pad usages + * require its length to be at least 256.) + */ + struct { + uint32_t *dp; + uint32_t *rp; + const unsigned char *ip; + } cpu; + uint32_t dp_stack[32]; + uint32_t rp_stack[32]; + unsigned char pad[512]; + unsigned char *hbuf_in, *hbuf_out, *saved_hbuf_out; + size_t hlen_in, hlen_out; + void (*hsrun)(void *ctx); + + /* + * The 'action' value communicates OOB information between the + * engine and the handshake processor. + * + * From the engine: + * 0 invocation triggered by I/O + * 1 invocation triggered by explicit close + * 2 invocation triggered by explicit renegotiation + */ + unsigned char action; + + /* + * State for alert messages. Value is either 0, or the value of + * the alert level byte (level is either 1 for warning, or 2 for + * fatal; we convert all other values to 'fatal'). + */ + unsigned char alert; + + /* + * Closure flags. This flag is set when a close_notify has been + * received from the peer. + */ + unsigned char close_received; + + /* + * Multi-hasher for the handshake messages. The handshake handler + * is responsible for resetting it when appropriate. + */ + br_multihash_context mhash; + + /* + * Pointer to the X.509 engine. The engine is supposed to be + * already initialized. It is used to validate the peer's + * certificate. + */ + const br_x509_class **x509ctx; + + /* + * Certificate chain to send. This is used by both client and + * server, when they send their respective Certificate messages. + * If chain_len is 0, then chain may be NULL. + */ + const br_x509_certificate *chain; + size_t chain_len; + const unsigned char *cert_cur; + size_t cert_len; + + /* + * List of supported protocol names (ALPN extension). If unset, + * (number of names is 0), then: + * - the client sends no ALPN extension; + * - the server ignores any incoming ALPN extension. + * + * Otherwise: + * - the client sends an ALPN extension with all the names; + * - the server selects the first protocol in its list that + * the client also supports, or fails (fatal alert 120) + * if the client sends an ALPN extension and there is no + * match. + * + * The 'selected_protocol' field contains 1+n if the matching + * name has index n in the list (the value is 0 if no match was + * performed, e.g. the peer did not send an ALPN extension). + */ + const char **protocol_names; + uint16_t protocol_names_num; + uint16_t selected_protocol; + + /* + * Pointers to implementations; left to NULL for unsupported + * functions. For the raw hash functions, implementations are + * referenced from the multihasher (mhash field). + */ + br_tls_prf_impl prf10; + br_tls_prf_impl prf_sha256; + br_tls_prf_impl prf_sha384; + const br_block_cbcenc_class *iaes_cbcenc; + const br_block_cbcdec_class *iaes_cbcdec; + const br_block_ctr_class *iaes_ctr; + const br_block_ctrcbc_class *iaes_ctrcbc; + const br_block_cbcenc_class *ides_cbcenc; + const br_block_cbcdec_class *ides_cbcdec; + br_ghash ighash; + br_chacha20_run ichacha; + br_poly1305_run ipoly; + const br_sslrec_in_cbc_class *icbc_in; + const br_sslrec_out_cbc_class *icbc_out; + const br_sslrec_in_gcm_class *igcm_in; + const br_sslrec_out_gcm_class *igcm_out; + const br_sslrec_in_chapol_class *ichapol_in; + const br_sslrec_out_chapol_class *ichapol_out; + const br_sslrec_in_ccm_class *iccm_in; + const br_sslrec_out_ccm_class *iccm_out; + const br_ec_impl *iec; + br_rsa_pkcs1_vrfy irsavrfy; + br_ecdsa_vrfy iecdsa; #endif } br_ssl_engine_context; @@ -1124,10 +1109,8 @@ typedef struct { * \param cc SSL engine context. * \return the flags. */ -static inline uint32_t -br_ssl_engine_get_flags(br_ssl_engine_context *cc) -{ - return cc->flags; +static inline uint32_t br_ssl_engine_get_flags(br_ssl_engine_context *cc) { + return cc->flags; } /** @@ -1136,10 +1119,9 @@ br_ssl_engine_get_flags(br_ssl_engine_context *cc) * \param cc SSL engine context. * \param flags new value for all flags. */ -static inline void -br_ssl_engine_set_all_flags(br_ssl_engine_context *cc, uint32_t flags) -{ - cc->flags = flags; +static inline void br_ssl_engine_set_all_flags(br_ssl_engine_context *cc, + uint32_t flags) { + cc->flags = flags; } /** @@ -1151,10 +1133,9 @@ br_ssl_engine_set_all_flags(br_ssl_engine_context *cc, uint32_t flags) * \param cc SSL engine context. * \param flags additional set flags. */ -static inline void -br_ssl_engine_add_flags(br_ssl_engine_context *cc, uint32_t flags) -{ - cc->flags |= flags; +static inline void br_ssl_engine_add_flags(br_ssl_engine_context *cc, + uint32_t flags) { + cc->flags |= flags; } /** @@ -1166,10 +1147,9 @@ br_ssl_engine_add_flags(br_ssl_engine_context *cc, uint32_t flags) * \param cc SSL engine context. * \param flags flags to remove. */ -static inline void -br_ssl_engine_remove_flags(br_ssl_engine_context *cc, uint32_t flags) -{ - cc->flags &= ~flags; +static inline void br_ssl_engine_remove_flags(br_ssl_engine_context *cc, + uint32_t flags) { + cc->flags &= ~flags; } /** @@ -1178,7 +1158,7 @@ br_ssl_engine_remove_flags(br_ssl_engine_context *cc, uint32_t flags) * If this flag is set, then the server will enforce its own cipher suite * preference order; otherwise, it follows the client preferences. */ -#define BR_OPT_ENFORCE_SERVER_PREFERENCES ((uint32_t)1 << 0) +#define BR_OPT_ENFORCE_SERVER_PREFERENCES ((uint32_t)1 << 0) /** * \brief Behavioural flag: disable renegotiation. @@ -1187,7 +1167,7 @@ br_ssl_engine_remove_flags(br_ssl_engine_context *cc, uint32_t flags) * they won't be honoured if asked for programmatically, and requests from * the peer are rejected. */ -#define BR_OPT_NO_RENEGOTIATION ((uint32_t)1 << 1) +#define BR_OPT_NO_RENEGOTIATION ((uint32_t)1 << 1) /** * \brief Behavioural flag: tolerate lack of client authentication. @@ -1207,7 +1187,7 @@ br_ssl_engine_remove_flags(br_ssl_engine_context *cc, uint32_t flags) * - If using full-static ECDH, then a failure to validate the client's * certificate prevents the handshake from succeeding. */ -#define BR_OPT_TOLERATE_NO_CLIENT_AUTH ((uint32_t)1 << 2) +#define BR_OPT_TOLERATE_NO_CLIENT_AUTH ((uint32_t)1 << 2) /** * \brief Behavioural flag: fail on application protocol mismatch. @@ -1233,7 +1213,7 @@ br_ssl_engine_remove_flags(br_ssl_engine_context *cc, uint32_t flags) * may still return `NULL` if the client or the server does not send an * ALPN extension at all. */ -#define BR_OPT_FAIL_ON_ALPN_MISMATCH ((uint32_t)1 << 3) +#define BR_OPT_FAIL_ON_ALPN_MISMATCH ((uint32_t)1 << 3) /** * \brief Set the minimum and maximum supported protocol versions. @@ -1246,12 +1226,11 @@ br_ssl_engine_remove_flags(br_ssl_engine_context *cc, uint32_t flags) * \param version_min minimum supported TLS version. * \param version_max maximum supported TLS version. */ -static inline void -br_ssl_engine_set_versions(br_ssl_engine_context *cc, - unsigned version_min, unsigned version_max) -{ - cc->version_min = version_min; - cc->version_max = version_max; +static inline void br_ssl_engine_set_versions(br_ssl_engine_context *cc, + unsigned version_min, + unsigned version_max) { + cc->version_min = version_min; + cc->version_max = version_max; } /** @@ -1273,8 +1252,8 @@ br_ssl_engine_set_versions(br_ssl_engine_context *cc, * \param suites cipher suites. * \param suites_num number of cipher suites. */ -void br_ssl_engine_set_suites(br_ssl_engine_context *cc, - const uint16_t *suites, size_t suites_num); +void br_ssl_engine_set_suites(br_ssl_engine_context *cc, const uint16_t *suites, + size_t suites_num); /** * \brief Set the X.509 engine. @@ -1284,10 +1263,9 @@ void br_ssl_engine_set_suites(br_ssl_engine_context *cc, * \param cc SSL engine context. * \param x509ctx X.509 certificate validation context. */ -static inline void -br_ssl_engine_set_x509(br_ssl_engine_context *cc, const br_x509_class **x509ctx) -{ - cc->x509ctx = x509ctx; +static inline void br_ssl_engine_set_x509(br_ssl_engine_context *cc, + const br_x509_class **x509ctx) { + cc->x509ctx = x509ctx; } /** @@ -1319,12 +1297,11 @@ br_ssl_engine_set_x509(br_ssl_engine_context *cc, const br_x509_class **x509ctx) * \param names list of protocol names (zero-terminated). * \param num number of protocol names (MUST be 1 or more). */ -static inline void -br_ssl_engine_set_protocol_names(br_ssl_engine_context *ctx, - const char **names, size_t num) -{ - ctx->protocol_names = names; - ctx->protocol_names_num = num; +static inline void br_ssl_engine_set_protocol_names(br_ssl_engine_context *ctx, + const char **names, + size_t num) { + ctx->protocol_names = names; + ctx->protocol_names_num = num; } /** @@ -1340,13 +1317,12 @@ br_ssl_engine_set_protocol_names(br_ssl_engine_context *ctx, * * \return the selected protocol, or `NULL`. */ -static inline const char * -br_ssl_engine_get_selected_protocol(br_ssl_engine_context *ctx) -{ - unsigned k; +static inline const char *br_ssl_engine_get_selected_protocol( + br_ssl_engine_context *ctx) { + unsigned k; - k = ctx->selected_protocol; - return (k == 0 || k == 0xFFFF) ? NULL : ctx->protocol_names[k - 1]; + k = ctx->selected_protocol; + return (k == 0 || k == 0xFFFF) ? NULL : ctx->protocol_names[k - 1]; } /** @@ -1361,11 +1337,9 @@ br_ssl_engine_get_selected_protocol(br_ssl_engine_context *ctx) * \param id hash function identifier. * \param impl hash function implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_hash(br_ssl_engine_context *ctx, - int id, const br_hash_class *impl) -{ - br_multihash_setimpl(&ctx->mhash, id, impl); +static inline void br_ssl_engine_set_hash(br_ssl_engine_context *ctx, int id, + const br_hash_class *impl) { + br_multihash_setimpl(&ctx->mhash, id, impl); } /** @@ -1378,10 +1352,9 @@ br_ssl_engine_set_hash(br_ssl_engine_context *ctx, * \param id hash function identifier. * \return the hash function implementation (or `NULL`). */ -static inline const br_hash_class * -br_ssl_engine_get_hash(br_ssl_engine_context *ctx, int id) -{ - return br_multihash_getimpl(&ctx->mhash, id); +static inline const br_hash_class *br_ssl_engine_get_hash( + br_ssl_engine_context *ctx, int id) { + return br_multihash_getimpl(&ctx->mhash, id); } /** @@ -1393,10 +1366,9 @@ br_ssl_engine_get_hash(br_ssl_engine_context *ctx, int id) * \param cc SSL engine context. * \param impl PRF implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_prf10(br_ssl_engine_context *cc, br_tls_prf_impl impl) -{ - cc->prf10 = impl; +static inline void br_ssl_engine_set_prf10(br_ssl_engine_context *cc, + br_tls_prf_impl impl) { + cc->prf10 = impl; } /** @@ -1408,10 +1380,9 @@ br_ssl_engine_set_prf10(br_ssl_engine_context *cc, br_tls_prf_impl impl) * \param cc SSL engine context. * \param impl PRF implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_prf_sha256(br_ssl_engine_context *cc, br_tls_prf_impl impl) -{ - cc->prf_sha256 = impl; +static inline void br_ssl_engine_set_prf_sha256(br_ssl_engine_context *cc, + br_tls_prf_impl impl) { + cc->prf_sha256 = impl; } /** @@ -1423,10 +1394,9 @@ br_ssl_engine_set_prf_sha256(br_ssl_engine_context *cc, br_tls_prf_impl impl) * \param cc SSL engine context. * \param impl PRF implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_prf_sha384(br_ssl_engine_context *cc, br_tls_prf_impl impl) -{ - cc->prf_sha384 = impl; +static inline void br_ssl_engine_set_prf_sha384(br_ssl_engine_context *cc, + br_tls_prf_impl impl) { + cc->prf_sha384 = impl; } /** @@ -1436,13 +1406,11 @@ br_ssl_engine_set_prf_sha384(br_ssl_engine_context *cc, br_tls_prf_impl impl) * \param impl_enc AES/CBC encryption implementation (or `NULL`). * \param impl_dec AES/CBC decryption implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_aes_cbc(br_ssl_engine_context *cc, - const br_block_cbcenc_class *impl_enc, - const br_block_cbcdec_class *impl_dec) -{ - cc->iaes_cbcenc = impl_enc; - cc->iaes_cbcdec = impl_dec; +static inline void br_ssl_engine_set_aes_cbc( + br_ssl_engine_context *cc, const br_block_cbcenc_class *impl_enc, + const br_block_cbcdec_class *impl_dec) { + cc->iaes_cbcenc = impl_enc; + cc->iaes_cbcdec = impl_dec; } /** @@ -1463,11 +1431,9 @@ void br_ssl_engine_set_default_aes_cbc(br_ssl_engine_context *cc); * \param cc SSL engine context. * \param impl AES/CTR encryption/decryption implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_aes_ctr(br_ssl_engine_context *cc, - const br_block_ctr_class *impl) -{ - cc->iaes_ctr = impl; +static inline void br_ssl_engine_set_aes_ctr(br_ssl_engine_context *cc, + const br_block_ctr_class *impl) { + cc->iaes_ctr = impl; } /** @@ -1489,13 +1455,11 @@ void br_ssl_engine_set_default_aes_gcm(br_ssl_engine_context *cc); * \param impl_enc DES/CBC encryption implementation (or `NULL`). * \param impl_dec DES/CBC decryption implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_des_cbc(br_ssl_engine_context *cc, - const br_block_cbcenc_class *impl_enc, - const br_block_cbcdec_class *impl_dec) -{ - cc->ides_cbcenc = impl_enc; - cc->ides_cbcdec = impl_dec; +static inline void br_ssl_engine_set_des_cbc( + br_ssl_engine_context *cc, const br_block_cbcenc_class *impl_enc, + const br_block_cbcdec_class *impl_dec) { + cc->ides_cbcenc = impl_enc; + cc->ides_cbcdec = impl_dec; } /** @@ -1516,10 +1480,9 @@ void br_ssl_engine_set_default_des_cbc(br_ssl_engine_context *cc); * \param cc SSL engine context. * \param impl GHASH implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_ghash(br_ssl_engine_context *cc, br_ghash impl) -{ - cc->ighash = impl; +static inline void br_ssl_engine_set_ghash(br_ssl_engine_context *cc, + br_ghash impl) { + cc->ighash = impl; } /** @@ -1528,11 +1491,9 @@ br_ssl_engine_set_ghash(br_ssl_engine_context *cc, br_ghash impl) * \param cc SSL engine context. * \param ichacha ChaCha20 implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_chacha20(br_ssl_engine_context *cc, - br_chacha20_run ichacha) -{ - cc->ichacha = ichacha; +static inline void br_ssl_engine_set_chacha20(br_ssl_engine_context *cc, + br_chacha20_run ichacha) { + cc->ichacha = ichacha; } /** @@ -1541,11 +1502,9 @@ br_ssl_engine_set_chacha20(br_ssl_engine_context *cc, * \param cc SSL engine context. * \param ipoly Poly1305 implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_poly1305(br_ssl_engine_context *cc, - br_poly1305_run ipoly) -{ - cc->ipoly = ipoly; +static inline void br_ssl_engine_set_poly1305(br_ssl_engine_context *cc, + br_poly1305_run ipoly) { + cc->ipoly = ipoly; } /** @@ -1566,11 +1525,9 @@ void br_ssl_engine_set_default_chapol(br_ssl_engine_context *cc); * \param cc SSL engine context. * \param impl AES/CTR+CBC encryption/decryption implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_aes_ctrcbc(br_ssl_engine_context *cc, - const br_block_ctrcbc_class *impl) -{ - cc->iaes_ctrcbc = impl; +static inline void br_ssl_engine_set_aes_ctrcbc( + br_ssl_engine_context *cc, const br_block_ctrcbc_class *impl) { + cc->iaes_ctrcbc = impl; } /** @@ -1592,13 +1549,11 @@ void br_ssl_engine_set_default_aes_ccm(br_ssl_engine_context *cc); * \param impl_in record CBC decryption implementation (or `NULL`). * \param impl_out record CBC encryption implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_cbc(br_ssl_engine_context *cc, - const br_sslrec_in_cbc_class *impl_in, - const br_sslrec_out_cbc_class *impl_out) -{ - cc->icbc_in = impl_in; - cc->icbc_out = impl_out; +static inline void br_ssl_engine_set_cbc( + br_ssl_engine_context *cc, const br_sslrec_in_cbc_class *impl_in, + const br_sslrec_out_cbc_class *impl_out) { + cc->icbc_in = impl_in; + cc->icbc_out = impl_out; } /** @@ -1608,13 +1563,11 @@ br_ssl_engine_set_cbc(br_ssl_engine_context *cc, * \param impl_in record GCM decryption implementation (or `NULL`). * \param impl_out record GCM encryption implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_gcm(br_ssl_engine_context *cc, - const br_sslrec_in_gcm_class *impl_in, - const br_sslrec_out_gcm_class *impl_out) -{ - cc->igcm_in = impl_in; - cc->igcm_out = impl_out; +static inline void br_ssl_engine_set_gcm( + br_ssl_engine_context *cc, const br_sslrec_in_gcm_class *impl_in, + const br_sslrec_out_gcm_class *impl_out) { + cc->igcm_in = impl_in; + cc->igcm_out = impl_out; } /** @@ -1624,13 +1577,11 @@ br_ssl_engine_set_gcm(br_ssl_engine_context *cc, * \param impl_in record CCM decryption implementation (or `NULL`). * \param impl_out record CCM encryption implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_ccm(br_ssl_engine_context *cc, - const br_sslrec_in_ccm_class *impl_in, - const br_sslrec_out_ccm_class *impl_out) -{ - cc->iccm_in = impl_in; - cc->iccm_out = impl_out; +static inline void br_ssl_engine_set_ccm( + br_ssl_engine_context *cc, const br_sslrec_in_ccm_class *impl_in, + const br_sslrec_out_ccm_class *impl_out) { + cc->iccm_in = impl_in; + cc->iccm_out = impl_out; } /** @@ -1641,13 +1592,11 @@ br_ssl_engine_set_ccm(br_ssl_engine_context *cc, * \param impl_in record ChaCha20 decryption implementation (or `NULL`). * \param impl_out record ChaCha20 encryption implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_chapol(br_ssl_engine_context *cc, - const br_sslrec_in_chapol_class *impl_in, - const br_sslrec_out_chapol_class *impl_out) -{ - cc->ichapol_in = impl_in; - cc->ichapol_out = impl_out; +static inline void br_ssl_engine_set_chapol( + br_ssl_engine_context *cc, const br_sslrec_in_chapol_class *impl_in, + const br_sslrec_out_chapol_class *impl_out) { + cc->ichapol_in = impl_in; + cc->ichapol_out = impl_out; } /** @@ -1659,10 +1608,9 @@ br_ssl_engine_set_chapol(br_ssl_engine_context *cc, * \param cc SSL engine context. * \param iec EC implementation (or `NULL`). */ -static inline void -br_ssl_engine_set_ec(br_ssl_engine_context *cc, const br_ec_impl *iec) -{ - cc->iec = iec; +static inline void br_ssl_engine_set_ec(br_ssl_engine_context *cc, + const br_ec_impl *iec) { + cc->iec = iec; } /** @@ -1682,10 +1630,9 @@ void br_ssl_engine_set_default_ec(br_ssl_engine_context *cc); * \param cc SSL engine context. * \return the EC implementation. */ -static inline const br_ec_impl * -br_ssl_engine_get_ec(br_ssl_engine_context *cc) -{ - return cc->iec; +static inline const br_ec_impl *br_ssl_engine_get_ec( + br_ssl_engine_context *cc) { + return cc->iec; } /** @@ -1699,10 +1646,9 @@ br_ssl_engine_get_ec(br_ssl_engine_context *cc) * \param cc SSL engine context. * \param irsavrfy RSA signature verification implementation. */ -static inline void -br_ssl_engine_set_rsavrfy(br_ssl_engine_context *cc, br_rsa_pkcs1_vrfy irsavrfy) -{ - cc->irsavrfy = irsavrfy; +static inline void br_ssl_engine_set_rsavrfy(br_ssl_engine_context *cc, + br_rsa_pkcs1_vrfy irsavrfy) { + cc->irsavrfy = irsavrfy; } /** @@ -1722,10 +1668,9 @@ void br_ssl_engine_set_default_rsavrfy(br_ssl_engine_context *cc); * \param cc SSL engine context. * \return the RSA signature verification implementation. */ -static inline br_rsa_pkcs1_vrfy -br_ssl_engine_get_rsavrfy(br_ssl_engine_context *cc) -{ - return cc->irsavrfy; +static inline br_rsa_pkcs1_vrfy br_ssl_engine_get_rsavrfy( + br_ssl_engine_context *cc) { + return cc->irsavrfy; } /* @@ -1743,10 +1688,9 @@ br_ssl_engine_get_rsavrfy(br_ssl_engine_context *cc) * \param cc client context. * \param iecdsa ECDSA verification implementation. */ -static inline void -br_ssl_engine_set_ecdsa(br_ssl_engine_context *cc, br_ecdsa_vrfy iecdsa) -{ - cc->iecdsa = iecdsa; +static inline void br_ssl_engine_set_ecdsa(br_ssl_engine_context *cc, + br_ecdsa_vrfy iecdsa) { + cc->iecdsa = iecdsa; } /** @@ -1768,10 +1712,8 @@ void br_ssl_engine_set_default_ecdsa(br_ssl_engine_context *cc); * \param cc SSL engine context. * \return the ECDSA signature verification implementation. */ -static inline br_ecdsa_vrfy -br_ssl_engine_get_ecdsa(br_ssl_engine_context *cc) -{ - return cc->iecdsa; +static inline br_ecdsa_vrfy br_ssl_engine_get_ecdsa(br_ssl_engine_context *cc) { + return cc->iecdsa; } /** @@ -1804,8 +1746,8 @@ br_ssl_engine_get_ecdsa(br_ssl_engine_context *cc) * \param iobuf_len I/O buffer length (in bytes). * \param bidi non-zero for full-duplex mode. */ -void br_ssl_engine_set_buffer(br_ssl_engine_context *cc, - void *iobuf, size_t iobuf_len, int bidi); +void br_ssl_engine_set_buffer(br_ssl_engine_context *cc, void *iobuf, + size_t iobuf_len, int bidi); /** * \brief Set the I/O buffers for the SSL engine. @@ -1827,8 +1769,9 @@ void br_ssl_engine_set_buffer(br_ssl_engine_context *cc, * \param obuf output buffer. * \param obuf_len output buffer length (in bytes). */ -void br_ssl_engine_set_buffers_bidi(br_ssl_engine_context *cc, - void *ibuf, size_t ibuf_len, void *obuf, size_t obuf_len); +void br_ssl_engine_set_buffers_bidi(br_ssl_engine_context *cc, void *ibuf, + size_t ibuf_len, void *obuf, + size_t obuf_len); /** * \brief Inject some "initial entropy" in the context. @@ -1861,8 +1804,8 @@ void br_ssl_engine_set_buffers_bidi(br_ssl_engine_context *cc, * \param data extra entropy to inject. * \param len length of the extra data (in bytes). */ -void br_ssl_engine_inject_entropy(br_ssl_engine_context *cc, - const void *data, size_t len); +void br_ssl_engine_inject_entropy(br_ssl_engine_context *cc, const void *data, + size_t len); /** * \brief Get the "server name" in this engine. @@ -1880,10 +1823,9 @@ void br_ssl_engine_inject_entropy(br_ssl_engine_context *cc, * \param cc SSL engine context. * \return the server name (possibly empty). */ -static inline const char * -br_ssl_engine_get_server_name(const br_ssl_engine_context *cc) -{ - return cc->server_name; +static inline const char *br_ssl_engine_get_server_name( + const br_ssl_engine_context *cc) { + return cc->server_name; } /** @@ -1896,10 +1838,9 @@ br_ssl_engine_get_server_name(const br_ssl_engine_context *cc) * \param cc SSL engine context. * \return the protocol version. */ -static inline unsigned -br_ssl_engine_get_version(const br_ssl_engine_context *cc) -{ - return cc->session.version; +static inline unsigned br_ssl_engine_get_version( + const br_ssl_engine_context *cc) { + return cc->session.version; } /** @@ -1917,11 +1858,9 @@ br_ssl_engine_get_version(const br_ssl_engine_context *cc) * \param cc SSL engine context. * \param pp destination structure for the session parameters. */ -static inline void -br_ssl_engine_get_session_parameters(const br_ssl_engine_context *cc, - br_ssl_session_parameters *pp) -{ - memcpy(pp, &cc->session, sizeof *pp); +static inline void br_ssl_engine_get_session_parameters( + const br_ssl_engine_context *cc, br_ssl_session_parameters *pp) { + memcpy(pp, &cc->session, sizeof *pp); } /** @@ -1934,11 +1873,9 @@ br_ssl_engine_get_session_parameters(const br_ssl_engine_context *cc, * \param cc SSL engine context. * \param pp source structure for the session parameters. */ -static inline void -br_ssl_engine_set_session_parameters(br_ssl_engine_context *cc, - const br_ssl_session_parameters *pp) -{ - memcpy(&cc->session, pp, sizeof *pp); +static inline void br_ssl_engine_set_session_parameters( + br_ssl_engine_context *cc, const br_ssl_session_parameters *pp) { + memcpy(&cc->session, pp, sizeof *pp); } /** @@ -1954,10 +1891,8 @@ br_ssl_engine_set_session_parameters(br_ssl_engine_context *cc, * @param cc SSL engine context. * @return the ECDHE curve identifier. */ -static inline int -br_ssl_engine_get_ecdhe_curve(br_ssl_engine_context *cc) -{ - return cc->ecdhe_curve; +static inline int br_ssl_engine_get_ecdhe_curve(br_ssl_engine_context *cc) { + return cc->ecdhe_curve; } /** @@ -2006,15 +1941,15 @@ br_ssl_engine_get_ecdhe_curve(br_ssl_engine_context *cc) unsigned br_ssl_engine_current_state(const br_ssl_engine_context *cc); /** \brief SSL engine state: closed or failed. */ -#define BR_SSL_CLOSED 0x0001 +#define BR_SSL_CLOSED 0x0001 /** \brief SSL engine state: record data is ready to be sent to the peer. */ -#define BR_SSL_SENDREC 0x0002 +#define BR_SSL_SENDREC 0x0002 /** \brief SSL engine state: engine may receive records from the peer. */ -#define BR_SSL_RECVREC 0x0004 +#define BR_SSL_RECVREC 0x0004 /** \brief SSL engine state: engine may accept application data to send. */ -#define BR_SSL_SENDAPP 0x0008 +#define BR_SSL_SENDAPP 0x0008 /** \brief SSL engine state: engine has received application data. */ -#define BR_SSL_RECVAPP 0x0010 +#define BR_SSL_RECVAPP 0x0010 /** * \brief Get the engine error indicator. @@ -2028,10 +1963,8 @@ unsigned br_ssl_engine_current_state(const br_ssl_engine_context *cc); * \param cc SSL engine context. * \return 0, or a non-zero error code. */ -static inline int -br_ssl_engine_last_error(const br_ssl_engine_context *cc) -{ - return cc->err; +static inline int br_ssl_engine_last_error(const br_ssl_engine_context *cc) { + return cc->err; } /* @@ -2082,8 +2015,8 @@ br_ssl_engine_last_error(const br_ssl_engine_context *cc) * \param len receives the application data output buffer length, or 0. * \return the application data output buffer, or `NULL`. */ -unsigned char *br_ssl_engine_sendapp_buf( - const br_ssl_engine_context *cc, size_t *len); +unsigned char *br_ssl_engine_sendapp_buf(const br_ssl_engine_context *cc, + size_t *len); /** * \brief Inform the engine of some new application data. @@ -2111,8 +2044,8 @@ void br_ssl_engine_sendapp_ack(br_ssl_engine_context *cc, size_t len); * \param len receives the application data input buffer length, or 0. * \return the application data input buffer, or `NULL`. */ -unsigned char *br_ssl_engine_recvapp_buf( - const br_ssl_engine_context *cc, size_t *len); +unsigned char *br_ssl_engine_recvapp_buf(const br_ssl_engine_context *cc, + size_t *len); /** * \brief Acknowledge some received application data. @@ -2140,8 +2073,8 @@ void br_ssl_engine_recvapp_ack(br_ssl_engine_context *cc, size_t len); * \param len receives the record data output buffer length, or 0. * \return the record data output buffer, or `NULL`. */ -unsigned char *br_ssl_engine_sendrec_buf( - const br_ssl_engine_context *cc, size_t *len); +unsigned char *br_ssl_engine_sendrec_buf(const br_ssl_engine_context *cc, + size_t *len); /** * \brief Acknowledge some sent record data. @@ -2169,8 +2102,8 @@ void br_ssl_engine_sendrec_ack(br_ssl_engine_context *cc, size_t len); * \param len receives the record data input buffer length, or 0. * \return the record data input buffer, or `NULL`. */ -unsigned char *br_ssl_engine_recvrec_buf( - const br_ssl_engine_context *cc, size_t *len); +unsigned char *br_ssl_engine_recvrec_buf(const br_ssl_engine_context *cc, + size_t *len); /** * \brief Inform the engine of some new record data. @@ -2265,9 +2198,9 @@ int br_ssl_engine_renegotiate(br_ssl_engine_context *cc); * \param context_len context length (in bytes). * \return 1 on success, 0 on error. */ -int br_ssl_key_export(br_ssl_engine_context *cc, - void *dst, size_t len, const char *label, - const void *context, size_t context_len); +int br_ssl_key_export(br_ssl_engine_context *cc, void *dst, size_t len, + const char *label, const void *context, + size_t context_len); /* * Pre-declaration for the SSL client context. @@ -2278,48 +2211,48 @@ typedef struct br_ssl_client_context_ br_ssl_client_context; * \brief Type for the client certificate, if requested by the server. */ typedef struct { - /** - * \brief Authentication type. - * - * This is either `BR_AUTH_RSA` (RSA signature), `BR_AUTH_ECDSA` - * (ECDSA signature), or `BR_AUTH_ECDH` (static ECDH key exchange). - */ - int auth_type; - - /** - * \brief Hash function for computing the CertificateVerify. - * - * This is the symbolic identifier for the hash function that - * will be used to produce the hash of handshake messages, to - * be signed into the CertificateVerify. For full static ECDH - * (client and server certificates are both EC in the same - * curve, and static ECDH is used), this value is set to -1. - * - * Take care that with TLS 1.0 and 1.1, that value MUST match - * the protocol requirements: value must be 0 (MD5+SHA-1) for - * a RSA signature, or 2 (SHA-1) for an ECDSA signature. Only - * TLS 1.2 allows for other hash functions. - */ - int hash_id; - - /** - * \brief Certificate chain to send to the server. - * - * This is an array of `br_x509_certificate` objects, each - * normally containing a DER-encoded certificate. The client - * code does not try to decode these elements. If there is no - * chain to send to the server, then this pointer shall be - * set to `NULL`. - */ - const br_x509_certificate *chain; - - /** - * \brief Certificate chain length (number of certificates). - * - * If there is no chain to send to the server, then this value - * shall be set to 0. - */ - size_t chain_len; + /** + * \brief Authentication type. + * + * This is either `BR_AUTH_RSA` (RSA signature), `BR_AUTH_ECDSA` + * (ECDSA signature), or `BR_AUTH_ECDH` (static ECDH key exchange). + */ + int auth_type; + + /** + * \brief Hash function for computing the CertificateVerify. + * + * This is the symbolic identifier for the hash function that + * will be used to produce the hash of handshake messages, to + * be signed into the CertificateVerify. For full static ECDH + * (client and server certificates are both EC in the same + * curve, and static ECDH is used), this value is set to -1. + * + * Take care that with TLS 1.0 and 1.1, that value MUST match + * the protocol requirements: value must be 0 (MD5+SHA-1) for + * a RSA signature, or 2 (SHA-1) for an ECDSA signature. Only + * TLS 1.2 allows for other hash functions. + */ + int hash_id; + + /** + * \brief Certificate chain to send to the server. + * + * This is an array of `br_x509_certificate` objects, each + * normally containing a DER-encoded certificate. The client + * code does not try to decode these elements. If there is no + * chain to send to the server, then this pointer shall be + * set to `NULL`. + */ + const br_x509_certificate *chain; + + /** + * \brief Certificate chain length (number of certificates). + * + * If there is no chain to send to the server, then this value + * shall be set to 0. + */ + size_t chain_len; } br_ssl_client_certificate; @@ -2328,11 +2261,11 @@ typedef struct { */ /** \brief Client authentication type: static ECDH. */ -#define BR_AUTH_ECDH 0 +#define BR_AUTH_ECDH 0 /** \brief Client authentication type: RSA signature. */ -#define BR_AUTH_RSA 1 +#define BR_AUTH_RSA 1 /** \brief Client authentication type: ECDSA signature. */ -#define BR_AUTH_ECDSA 3 +#define BR_AUTH_ECDSA 3 /** * \brief Class type for a certificate handler (client side). @@ -2352,195 +2285,194 @@ typedef struct { */ typedef struct br_ssl_client_certificate_class_ br_ssl_client_certificate_class; struct br_ssl_client_certificate_class_ { - /** - * \brief Context size (in bytes). - */ - size_t context_size; - - /** - * \brief Begin reception of a list of trust anchor names. This - * is called while parsing the incoming CertificateRequest. - * - * \param pctx certificate handler context. - */ - void (*start_name_list)(const br_ssl_client_certificate_class **pctx); - - /** - * \brief Begin reception of a new trust anchor name. - * - * The total encoded name length is provided; it is less than - * 65535 bytes. - * - * \param pctx certificate handler context. - * \param len encoded name length (in bytes). - */ - void (*start_name)(const br_ssl_client_certificate_class **pctx, - size_t len); - - /** - * \brief Receive some more bytes for the current trust anchor name. - * - * The provided reference (`data`) points to a transient buffer - * they may be reused as soon as this function returns. The chunk - * length (`len`) is never zero. - * - * \param pctx certificate handler context. - * \param data anchor name chunk. - * \param len anchor name chunk length (in bytes). - */ - void (*append_name)(const br_ssl_client_certificate_class **pctx, - const unsigned char *data, size_t len); - - /** - * \brief End current trust anchor name. - * - * This function is called when all the encoded anchor name data - * has been provided. - * - * \param pctx certificate handler context. - */ - void (*end_name)(const br_ssl_client_certificate_class **pctx); - - /** - * \brief End list of trust anchor names. - * - * This function is called when all the anchor names in the - * CertificateRequest message have been obtained. - * - * \param pctx certificate handler context. - */ - void (*end_name_list)(const br_ssl_client_certificate_class **pctx); - - /** - * \brief Select client certificate and algorithms. - * - * This callback function shall fill the provided `choices` - * structure with the selected algorithms and certificate chain. - * The `hash_id`, `chain` and `chain_len` fields must be set. If - * the client cannot or does not wish to send a certificate, - * then it shall set `chain` to `NULL` and `chain_len` to 0. - * - * The `auth_types` parameter describes the authentication types, - * signature algorithms and hash functions that are supported by - * both the client context and the server, and compatible with - * the current protocol version. This is a bit field with the - * following contents: - * - * - If RSA signatures with hash function x are supported, then - * bit x is set. - * - * - If ECDSA signatures with hash function x are supported, - * then bit 8+x is set. - * - * - If static ECDH is supported, with a RSA-signed certificate, - * then bit 16 is set. - * - * - If static ECDH is supported, with an ECDSA-signed certificate, - * then bit 17 is set. - * - * Notes: - * - * - When using TLS 1.0 or 1.1, the hash function for RSA - * signatures is always the special MD5+SHA-1 (id 0), and the - * hash function for ECDSA signatures is always SHA-1 (id 2). - * - * - When using TLS 1.2, the list of hash functions is trimmed - * down to include only hash functions that the client context - * can support. The actual server list can be obtained with - * `br_ssl_client_get_server_hashes()`; that list may be used - * to select the certificate chain to send to the server. - * - * \param pctx certificate handler context. - * \param cc SSL client context. - * \param auth_types supported authentication types and algorithms. - * \param choices destination structure for the policy choices. - */ - void (*choose)(const br_ssl_client_certificate_class **pctx, - const br_ssl_client_context *cc, uint32_t auth_types, - br_ssl_client_certificate *choices); - - /** - * \brief Perform key exchange (client part). - * - * This callback is invoked in case of a full static ECDH key - * exchange: - * - * - the cipher suite uses `ECDH_RSA` or `ECDH_ECDSA`; - * - * - the server requests a client certificate; - * - * - the client has, and sends, a client certificate that - * uses an EC key in the same curve as the server's key, - * and chooses static ECDH (the `hash_id` field in the choice - * structure was set to -1). - * - * In that situation, this callback is invoked to compute the - * client-side ECDH: the provided `data` (of length `*len` bytes) - * is the server's public key point (as decoded from its - * certificate), and the client shall multiply that point with - * its own private key, and write back the X coordinate of the - * resulting point in the same buffer, starting at offset 0. - * The `*len` value shall be modified to designate the actual - * length of the X coordinate. - * - * The callback must uphold the following: - * - * - If the input array does not have the proper length for - * an encoded curve point, then an error (0) shall be reported. - * - * - If the input array has the proper length, then processing - * MUST be constant-time, even if the data is not a valid - * encoded point. - * - * - This callback MUST check that the input point is valid. - * - * Returned value is 1 on success, 0 on error. - * - * \param pctx certificate handler context. - * \param data server public key point. - * \param len public key point length / X coordinate length. - * \return 1 on success, 0 on error. - */ - uint32_t (*do_keyx)(const br_ssl_client_certificate_class **pctx, - unsigned char *data, size_t *len); - - /** - * \brief Perform a signature (client authentication). - * - * This callback is invoked when a client certificate was sent, - * and static ECDH is not used. It shall compute a signature, - * using the client's private key, over the provided hash value - * (which is the hash of all previous handshake messages). - * - * On input, the hash value to sign is in `data`, of size - * `hv_len`; the involved hash function is identified by - * `hash_id`. The signature shall be computed and written - * back into `data`; the total size of that buffer is `len` - * bytes. - * - * This callback shall verify that the signature length does not - * exceed `len` bytes, and abstain from writing the signature if - * it does not fit. - * - * For RSA signatures, the `hash_id` may be 0, in which case - * this is the special header-less signature specified in TLS 1.0 - * and 1.1, with a 36-byte hash value. Otherwise, normal PKCS#1 - * v1.5 signatures shall be computed. - * - * For ECDSA signatures, the signature value shall use the ASN.1 - * based encoding. - * - * Returned value is the signature length (in bytes), or 0 on error. - * - * \param pctx certificate handler context. - * \param hash_id hash function identifier. - * \param hv_len hash value length (in bytes). - * \param data input/output buffer (hash value, then signature). - * \param len total buffer length (in bytes). - * \return signature length (in bytes) on success, or 0 on error. - */ - size_t (*do_sign)(const br_ssl_client_certificate_class **pctx, - int hash_id, size_t hv_len, unsigned char *data, size_t len); + /** + * \brief Context size (in bytes). + */ + size_t context_size; + + /** + * \brief Begin reception of a list of trust anchor names. This + * is called while parsing the incoming CertificateRequest. + * + * \param pctx certificate handler context. + */ + void (*start_name_list)(const br_ssl_client_certificate_class **pctx); + + /** + * \brief Begin reception of a new trust anchor name. + * + * The total encoded name length is provided; it is less than + * 65535 bytes. + * + * \param pctx certificate handler context. + * \param len encoded name length (in bytes). + */ + void (*start_name)(const br_ssl_client_certificate_class **pctx, size_t len); + + /** + * \brief Receive some more bytes for the current trust anchor name. + * + * The provided reference (`data`) points to a transient buffer + * they may be reused as soon as this function returns. The chunk + * length (`len`) is never zero. + * + * \param pctx certificate handler context. + * \param data anchor name chunk. + * \param len anchor name chunk length (in bytes). + */ + void (*append_name)(const br_ssl_client_certificate_class **pctx, + const unsigned char *data, size_t len); + + /** + * \brief End current trust anchor name. + * + * This function is called when all the encoded anchor name data + * has been provided. + * + * \param pctx certificate handler context. + */ + void (*end_name)(const br_ssl_client_certificate_class **pctx); + + /** + * \brief End list of trust anchor names. + * + * This function is called when all the anchor names in the + * CertificateRequest message have been obtained. + * + * \param pctx certificate handler context. + */ + void (*end_name_list)(const br_ssl_client_certificate_class **pctx); + + /** + * \brief Select client certificate and algorithms. + * + * This callback function shall fill the provided `choices` + * structure with the selected algorithms and certificate chain. + * The `hash_id`, `chain` and `chain_len` fields must be set. If + * the client cannot or does not wish to send a certificate, + * then it shall set `chain` to `NULL` and `chain_len` to 0. + * + * The `auth_types` parameter describes the authentication types, + * signature algorithms and hash functions that are supported by + * both the client context and the server, and compatible with + * the current protocol version. This is a bit field with the + * following contents: + * + * - If RSA signatures with hash function x are supported, then + * bit x is set. + * + * - If ECDSA signatures with hash function x are supported, + * then bit 8+x is set. + * + * - If static ECDH is supported, with a RSA-signed certificate, + * then bit 16 is set. + * + * - If static ECDH is supported, with an ECDSA-signed certificate, + * then bit 17 is set. + * + * Notes: + * + * - When using TLS 1.0 or 1.1, the hash function for RSA + * signatures is always the special MD5+SHA-1 (id 0), and the + * hash function for ECDSA signatures is always SHA-1 (id 2). + * + * - When using TLS 1.2, the list of hash functions is trimmed + * down to include only hash functions that the client context + * can support. The actual server list can be obtained with + * `br_ssl_client_get_server_hashes()`; that list may be used + * to select the certificate chain to send to the server. + * + * \param pctx certificate handler context. + * \param cc SSL client context. + * \param auth_types supported authentication types and algorithms. + * \param choices destination structure for the policy choices. + */ + void (*choose)(const br_ssl_client_certificate_class **pctx, + const br_ssl_client_context *cc, uint32_t auth_types, + br_ssl_client_certificate *choices); + + /** + * \brief Perform key exchange (client part). + * + * This callback is invoked in case of a full static ECDH key + * exchange: + * + * - the cipher suite uses `ECDH_RSA` or `ECDH_ECDSA`; + * + * - the server requests a client certificate; + * + * - the client has, and sends, a client certificate that + * uses an EC key in the same curve as the server's key, + * and chooses static ECDH (the `hash_id` field in the choice + * structure was set to -1). + * + * In that situation, this callback is invoked to compute the + * client-side ECDH: the provided `data` (of length `*len` bytes) + * is the server's public key point (as decoded from its + * certificate), and the client shall multiply that point with + * its own private key, and write back the X coordinate of the + * resulting point in the same buffer, starting at offset 0. + * The `*len` value shall be modified to designate the actual + * length of the X coordinate. + * + * The callback must uphold the following: + * + * - If the input array does not have the proper length for + * an encoded curve point, then an error (0) shall be reported. + * + * - If the input array has the proper length, then processing + * MUST be constant-time, even if the data is not a valid + * encoded point. + * + * - This callback MUST check that the input point is valid. + * + * Returned value is 1 on success, 0 on error. + * + * \param pctx certificate handler context. + * \param data server public key point. + * \param len public key point length / X coordinate length. + * \return 1 on success, 0 on error. + */ + uint32_t (*do_keyx)(const br_ssl_client_certificate_class **pctx, + unsigned char *data, size_t *len); + + /** + * \brief Perform a signature (client authentication). + * + * This callback is invoked when a client certificate was sent, + * and static ECDH is not used. It shall compute a signature, + * using the client's private key, over the provided hash value + * (which is the hash of all previous handshake messages). + * + * On input, the hash value to sign is in `data`, of size + * `hv_len`; the involved hash function is identified by + * `hash_id`. The signature shall be computed and written + * back into `data`; the total size of that buffer is `len` + * bytes. + * + * This callback shall verify that the signature length does not + * exceed `len` bytes, and abstain from writing the signature if + * it does not fit. + * + * For RSA signatures, the `hash_id` may be 0, in which case + * this is the special header-less signature specified in TLS 1.0 + * and 1.1, with a 36-byte hash value. Otherwise, normal PKCS#1 + * v1.5 signatures shall be computed. + * + * For ECDSA signatures, the signature value shall use the ASN.1 + * based encoding. + * + * Returned value is the signature length (in bytes), or 0 on error. + * + * \param pctx certificate handler context. + * \param hash_id hash function identifier. + * \param hv_len hash value length (in bytes). + * \param data input/output buffer (hash value, then signature). + * \param len total buffer length (in bytes). + * \return signature length (in bytes) on success, or 0 on error. + */ + size_t (*do_sign)(const br_ssl_client_certificate_class **pctx, int hash_id, + size_t hv_len, unsigned char *data, size_t len); }; /** @@ -2553,13 +2485,13 @@ struct br_ssl_client_certificate_class_ { * opaque and shall not be accessed directly. */ typedef struct { - /** \brief Pointer to vtable. */ - const br_ssl_client_certificate_class *vtable; + /** \brief Pointer to vtable. */ + const br_ssl_client_certificate_class *vtable; #ifndef BR_DOXYGEN_IGNORE - const br_x509_certificate *chain; - size_t chain_len; - const br_rsa_private_key *sk; - br_rsa_pkcs1_sign irsasign; + const br_x509_certificate *chain; + size_t chain_len; + const br_rsa_private_key *sk; + br_rsa_pkcs1_sign irsasign; #endif } br_ssl_client_certificate_rsa_context; @@ -2576,17 +2508,17 @@ typedef struct { * opaque and shall not be accessed directly. */ typedef struct { - /** \brief Pointer to vtable. */ - const br_ssl_client_certificate_class *vtable; + /** \brief Pointer to vtable. */ + const br_ssl_client_certificate_class *vtable; #ifndef BR_DOXYGEN_IGNORE - const br_x509_certificate *chain; - size_t chain_len; - const br_ec_private_key *sk; - unsigned allowed_usages; - unsigned issuer_key_type; - const br_multihash_context *mhash; - const br_ec_impl *iec; - br_ecdsa_sign iecdsa; + const br_x509_certificate *chain; + size_t chain_len; + const br_ec_private_key *sk; + unsigned allowed_usages; + unsigned issuer_key_type; + const br_multihash_context *mhash; + const br_ec_impl *iec; + br_ecdsa_sign iecdsa; #endif } br_ssl_client_certificate_ec_context; @@ -2599,61 +2531,61 @@ typedef struct { * must not be accessed directly. */ struct br_ssl_client_context_ { - /** - * \brief The encapsulated engine context. - */ - br_ssl_engine_context eng; + /** + * \brief The encapsulated engine context. + */ + br_ssl_engine_context eng; #ifndef BR_DOXYGEN_IGNORE - /* - * Minimum ClientHello length; padding with an extension (RFC - * 7685) is added if necessary to match at least that length. - * Such padding is nominally unnecessary, but it has been used - * to work around some server implementation bugs. - */ - uint16_t min_clienthello_len; - - /* - * Bit field for algoithms (hash + signature) supported by the - * server when requesting a client certificate. - */ - uint32_t hashes; - - /* - * Server's public key curve. - */ - int server_curve; - - /* - * Context for certificate handler. - */ - const br_ssl_client_certificate_class **client_auth_vtable; - - /* - * Client authentication type. - */ - unsigned char auth_type; - - /* - * Hash function to use for the client signature. This is 0xFF - * if static ECDH is used. - */ - unsigned char hash_id; - - /* - * For the core certificate handlers, thus avoiding (in most - * cases) the need for an externally provided policy context. - */ - union { - const br_ssl_client_certificate_class *vtable; - br_ssl_client_certificate_rsa_context single_rsa; - br_ssl_client_certificate_ec_context single_ec; - } client_auth; - - /* - * Implementations. - */ - br_rsa_public irsapub; + /* + * Minimum ClientHello length; padding with an extension (RFC + * 7685) is added if necessary to match at least that length. + * Such padding is nominally unnecessary, but it has been used + * to work around some server implementation bugs. + */ + uint16_t min_clienthello_len; + + /* + * Bit field for algoithms (hash + signature) supported by the + * server when requesting a client certificate. + */ + uint32_t hashes; + + /* + * Server's public key curve. + */ + int server_curve; + + /* + * Context for certificate handler. + */ + const br_ssl_client_certificate_class **client_auth_vtable; + + /* + * Client authentication type. + */ + unsigned char auth_type; + + /* + * Hash function to use for the client signature. This is 0xFF + * if static ECDH is used. + */ + unsigned char hash_id; + + /* + * For the core certificate handlers, thus avoiding (in most + * cases) the need for an externally provided policy context. + */ + union { + const br_ssl_client_certificate_class *vtable; + br_ssl_client_certificate_rsa_context single_rsa; + br_ssl_client_certificate_ec_context single_ec; + } client_auth; + + /* + * Implementations. + */ + br_rsa_public irsapub; #endif }; @@ -2687,10 +2619,9 @@ struct br_ssl_client_context_ { * \param cc client context. * \return the server-supported hash functions and signature algorithms. */ -static inline uint32_t -br_ssl_client_get_server_hashes(const br_ssl_client_context *cc) -{ - return cc->hashes; +static inline uint32_t br_ssl_client_get_server_hashes( + const br_ssl_client_context *cc) { + return cc->hashes; } /** @@ -2702,10 +2633,9 @@ br_ssl_client_get_server_hashes(const br_ssl_client_context *cc) * * \return the server's public key curve ID, or 0. */ -static inline int -br_ssl_client_get_server_curve(const br_ssl_client_context *cc) -{ - return cc->server_curve; +static inline int br_ssl_client_get_server_curve( + const br_ssl_client_context *cc) { + return cc->server_curve; } /* @@ -2732,8 +2662,9 @@ br_ssl_client_get_server_curve(const br_ssl_client_context *cc) * \param trust_anchors_num number of trust anchors. */ void br_ssl_client_init_full(br_ssl_client_context *cc, - br_x509_minimal_context *xc, - const br_x509_trust_anchor *trust_anchors, size_t trust_anchors_num); + br_x509_minimal_context *xc, + const br_x509_trust_anchor *trust_anchors, + size_t trust_anchors_num); /** * \brief Clear the complete contents of a SSL client context. @@ -2755,11 +2686,9 @@ void br_ssl_client_zero(br_ssl_client_context *cc); * \param cc client context. * \param pctx certificate handler context (pointer to its vtable field). */ -static inline void -br_ssl_client_set_client_certificate(br_ssl_client_context *cc, - const br_ssl_client_certificate_class **pctx) -{ - cc->client_auth_vtable = pctx; +static inline void br_ssl_client_set_client_certificate( + br_ssl_client_context *cc, const br_ssl_client_certificate_class **pctx) { + cc->client_auth_vtable = pctx; } /** @@ -2771,10 +2700,9 @@ br_ssl_client_set_client_certificate(br_ssl_client_context *cc, * \param cc client context. * \param irsapub RSA public-key encryption implementation. */ -static inline void -br_ssl_client_set_rsapub(br_ssl_client_context *cc, br_rsa_public irsapub) -{ - cc->irsapub = irsapub; +static inline void br_ssl_client_set_rsapub(br_ssl_client_context *cc, + br_rsa_public irsapub) { + cc->irsapub = irsapub; } /** @@ -2805,10 +2733,9 @@ void br_ssl_client_set_default_rsapub(br_ssl_client_context *cc); * \param cc client context. * \param len minimum ClientHello length (in bytes). */ -static inline void -br_ssl_client_set_min_clienthello_len(br_ssl_client_context *cc, uint16_t len) -{ - cc->min_clienthello_len = len; +static inline void br_ssl_client_set_min_clienthello_len( + br_ssl_client_context *cc, uint16_t len) { + cc->min_clienthello_len = len; } /** @@ -2841,8 +2768,8 @@ br_ssl_client_set_min_clienthello_len(br_ssl_client_context *cc, uint16_t len) * \param resume_session non-zero to try session resumption. * \return 0 on failure, 1 on success. */ -int br_ssl_client_reset(br_ssl_client_context *cc, - const char *server_name, int resume_session); +int br_ssl_client_reset(br_ssl_client_context *cc, const char *server_name, + int resume_session); /** * \brief Forget any session in the context. @@ -2853,10 +2780,8 @@ int br_ssl_client_reset(br_ssl_client_context *cc, * * \param cc client context. */ -static inline void -br_ssl_client_forget_session(br_ssl_client_context *cc) -{ - cc->eng.session.session_id_len = 0; +static inline void br_ssl_client_forget_session(br_ssl_client_context *cc) { + cc->eng.session.session_id_len = 0; } /** @@ -2880,8 +2805,10 @@ br_ssl_client_forget_session(br_ssl_client_context *cc) * \param irsasign RSA signature implementation (PKCS#1 v1.5). */ void br_ssl_client_set_single_rsa(br_ssl_client_context *cc, - const br_x509_certificate *chain, size_t chain_len, - const br_rsa_private_key *sk, br_rsa_pkcs1_sign irsasign); + const br_x509_certificate *chain, + size_t chain_len, + const br_rsa_private_key *sk, + br_rsa_pkcs1_sign irsasign); /* * \brief Set the client certificate chain and key (single EC case). @@ -2921,10 +2848,11 @@ void br_ssl_client_set_single_rsa(br_ssl_client_context *cc, * \param iecdsa ECDSA signature implementation ("asn1" format). */ void br_ssl_client_set_single_ec(br_ssl_client_context *cc, - const br_x509_certificate *chain, size_t chain_len, - const br_ec_private_key *sk, unsigned allowed_usages, - unsigned cert_issuer_key_type, - const br_ec_impl *iec, br_ecdsa_sign iecdsa); + const br_x509_certificate *chain, + size_t chain_len, const br_ec_private_key *sk, + unsigned allowed_usages, + unsigned cert_issuer_key_type, + const br_ec_impl *iec, br_ecdsa_sign iecdsa); /** * \brief Type for a "translated cipher suite", as an array of two @@ -2937,40 +2865,45 @@ void br_ssl_client_set_single_ec(br_ssl_client_context *cc, * * - Bits 12 to 15: key exchange + server key type * - * | val | symbolic constant | suite type | details | - * | :-- | :----------------------- | :---------- | :----------------------------------------------- | - * | 0 | `BR_SSLKEYX_RSA` | RSA | RSA key exchange, key is RSA (encryption) | - * | 1 | `BR_SSLKEYX_ECDHE_RSA` | ECDHE_RSA | ECDHE key exchange, key is RSA (signature) | - * | 2 | `BR_SSLKEYX_ECDHE_ECDSA` | ECDHE_ECDSA | ECDHE key exchange, key is EC (signature) | - * | 3 | `BR_SSLKEYX_ECDH_RSA` | ECDH_RSA | Key is EC (key exchange), cert signed with RSA | - * | 4 | `BR_SSLKEYX_ECDH_ECDSA` | ECDH_ECDSA | Key is EC (key exchange), cert signed with ECDSA | + * | val | symbolic constant | suite type | details | | :-- | + * :----------------------- | :---------- | + * :----------------------------------------------- | | 0 | `BR_SSLKEYX_RSA` + * | RSA | RSA key exchange, key is RSA (encryption) | | 1 | + * `BR_SSLKEYX_ECDHE_RSA` | ECDHE_RSA | ECDHE key exchange, key is RSA + * (signature) | | 2 | `BR_SSLKEYX_ECDHE_ECDSA` | ECDHE_ECDSA | ECDHE + * key exchange, key is EC (signature) | | 3 | `BR_SSLKEYX_ECDH_RSA` | + * ECDH_RSA | Key is EC (key exchange), cert signed with RSA | | 4 | + * `BR_SSLKEYX_ECDH_ECDSA` | ECDH_ECDSA | Key is EC (key exchange), cert + * signed with ECDSA | * * - Bits 8 to 11: symmetric encryption algorithm * - * | val | symbolic constant | symmetric encryption | key strength (bits) | - * | :-- | :--------------------- | :------------------- | :------------------ | - * | 0 | `BR_SSLENC_3DES_CBC` | 3DES/CBC | 168 | - * | 1 | `BR_SSLENC_AES128_CBC` | AES-128/CBC | 128 | - * | 2 | `BR_SSLENC_AES256_CBC` | AES-256/CBC | 256 | - * | 3 | `BR_SSLENC_AES128_GCM` | AES-128/GCM | 128 | - * | 4 | `BR_SSLENC_AES256_GCM` | AES-256/GCM | 256 | - * | 5 | `BR_SSLENC_CHACHA20` | ChaCha20/Poly1305 | 256 | + * | val | symbolic constant | symmetric encryption | key strength + * (bits) | | :-- | :--------------------- | :------------------- | + * :------------------ | | 0 | `BR_SSLENC_3DES_CBC` | 3DES/CBC | + * 168 | | 1 | `BR_SSLENC_AES128_CBC` | AES-128/CBC | + * 128 | | 2 | `BR_SSLENC_AES256_CBC` | AES-256/CBC | + * 256 | | 3 | `BR_SSLENC_AES128_GCM` | AES-128/GCM | + * 128 | | 4 | `BR_SSLENC_AES256_GCM` | AES-256/GCM | + * 256 | | 5 | `BR_SSLENC_CHACHA20` | ChaCha20/Poly1305 | + * 256 | * * - Bits 4 to 7: MAC algorithm * - * | val | symbolic constant | MAC type | details | - * | :-- | :----------------- | :----------- | :------------------------------------ | - * | 0 | `BR_SSLMAC_AEAD` | AEAD | No dedicated MAC (encryption is AEAD) | - * | 2 | `BR_SSLMAC_SHA1` | HMAC/SHA-1 | Value matches `br_sha1_ID` | - * | 4 | `BR_SSLMAC_SHA256` | HMAC/SHA-256 | Value matches `br_sha256_ID` | - * | 5 | `BR_SSLMAC_SHA384` | HMAC/SHA-384 | Value matches `br_sha384_ID` | + * | val | symbolic constant | MAC type | details | | :-- | + * :----------------- | :----------- | :------------------------------------ | + * | 0 | `BR_SSLMAC_AEAD` | AEAD | No dedicated MAC (encryption + * is AEAD) | | 2 | `BR_SSLMAC_SHA1` | HMAC/SHA-1 | Value matches + * `br_sha1_ID` | | 4 | `BR_SSLMAC_SHA256` | HMAC/SHA-256 | Value + * matches `br_sha256_ID` | | 5 | `BR_SSLMAC_SHA384` | HMAC/SHA-384 | + * Value matches `br_sha384_ID` | * * - Bits 0 to 3: hash function for PRF when used with TLS-1.2 * - * | val | symbolic constant | hash function | details | - * | :-- | :----------------- | :------------ | :----------------------------------- | - * | 4 | `BR_SSLPRF_SHA256` | SHA-256 | Value matches `br_sha256_ID` | - * | 5 | `BR_SSLPRF_SHA384` | SHA-384 | Value matches `br_sha384_ID` | + * | val | symbolic constant | hash function | details | | :-- | + * :----------------- | :------------ | :----------------------------------- | + * | 4 | `BR_SSLPRF_SHA256` | SHA-256 | Value matches `br_sha256_ID` + * | | 5 | `BR_SSLPRF_SHA384` | SHA-384 | Value matches `br_sha384_ID` | * * For instance, cipher suite `TLS_RSA_WITH_AES_128_GCM_SHA256` has * standard identifier 0x009C, and is translated to 0x0304, for, in @@ -2984,26 +2917,26 @@ typedef uint16_t br_suite_translated[2]; * Constants are already documented in the br_suite_translated type. */ -#define BR_SSLKEYX_RSA 0 -#define BR_SSLKEYX_ECDHE_RSA 1 -#define BR_SSLKEYX_ECDHE_ECDSA 2 -#define BR_SSLKEYX_ECDH_RSA 3 -#define BR_SSLKEYX_ECDH_ECDSA 4 +#define BR_SSLKEYX_RSA 0 +#define BR_SSLKEYX_ECDHE_RSA 1 +#define BR_SSLKEYX_ECDHE_ECDSA 2 +#define BR_SSLKEYX_ECDH_RSA 3 +#define BR_SSLKEYX_ECDH_ECDSA 4 -#define BR_SSLENC_3DES_CBC 0 -#define BR_SSLENC_AES128_CBC 1 -#define BR_SSLENC_AES256_CBC 2 -#define BR_SSLENC_AES128_GCM 3 -#define BR_SSLENC_AES256_GCM 4 -#define BR_SSLENC_CHACHA20 5 +#define BR_SSLENC_3DES_CBC 0 +#define BR_SSLENC_AES128_CBC 1 +#define BR_SSLENC_AES256_CBC 2 +#define BR_SSLENC_AES128_GCM 3 +#define BR_SSLENC_AES256_GCM 4 +#define BR_SSLENC_CHACHA20 5 -#define BR_SSLMAC_AEAD 0 -#define BR_SSLMAC_SHA1 br_sha1_ID -#define BR_SSLMAC_SHA256 br_sha256_ID -#define BR_SSLMAC_SHA384 br_sha384_ID +#define BR_SSLMAC_AEAD 0 +#define BR_SSLMAC_SHA1 br_sha1_ID +#define BR_SSLMAC_SHA256 br_sha256_ID +#define BR_SSLMAC_SHA384 br_sha384_ID -#define BR_SSLPRF_SHA256 br_sha256_ID -#define BR_SSLPRF_SHA384 br_sha384_ID +#define BR_SSLPRF_SHA256 br_sha256_ID +#define BR_SSLPRF_SHA384 br_sha384_ID #endif @@ -3017,67 +2950,67 @@ typedef struct br_ssl_server_context_ br_ssl_server_context; * the client message (ClientHello). */ typedef struct { - /** - * \brief Cipher suite to use with that client. - */ - uint16_t cipher_suite; - - /** - * \brief Hash function or algorithm for signing the ServerKeyExchange. - * - * This parameter is ignored for `TLS_RSA_*` and `TLS_ECDH_*` - * cipher suites; it is used only for `TLS_ECDHE_*` suites, in - * which the server _signs_ the ephemeral EC Diffie-Hellman - * parameters sent to the client. - * - * This identifier must be one of the following values: - * - * - `0xFF00 + id`, where `id` is a hash function identifier - * (0 for MD5+SHA-1, or 2 to 6 for one of the SHA functions); - * - * - a full 16-bit identifier, lower than `0xFF00`. - * - * If the first option is used, then the SSL engine will - * compute the hash of the data that is to be signed, with the - * designated hash function. The `do_sign()` method will be - * invoked with that hash value provided in the the `data` - * buffer. - * - * If the second option is used, then the SSL engine will NOT - * compute a hash on the data; instead, it will provide the - * to-be-signed data itself in `data`, i.e. the concatenation of - * the client random, server random, and encoded ECDH - * parameters. Furthermore, with TLS-1.2 and later, the 16-bit - * identifier will be used "as is" in the protocol, in the - * SignatureAndHashAlgorithm; for instance, `0x0401` stands for - * RSA PKCS#1 v1.5 signature (the `01`) with SHA-256 as hash - * function (the `04`). - * - * Take care that with TLS 1.0 and 1.1, the hash function is - * constrainted by the protocol: RSA signature must use - * MD5+SHA-1 (so use `0xFF00`), while ECDSA must use SHA-1 - * (`0xFF02`). Since TLS 1.0 and 1.1 don't include a - * SignatureAndHashAlgorithm field in their ServerKeyExchange - * messages, any value below `0xFF00` will be usable to send the - * raw ServerKeyExchange data to the `do_sign()` callback, but - * that callback must still follow the protocol requirements - * when generating the signature. - */ - unsigned algo_id; - - /** - * \brief Certificate chain to send to the client. - * - * This is an array of `br_x509_certificate` objects, each - * normally containing a DER-encoded certificate. The server - * code does not try to decode these elements. - */ - const br_x509_certificate *chain; - - /** - * \brief Certificate chain length (number of certificates). - */ - size_t chain_len; + /** + * \brief Cipher suite to use with that client. + */ + uint16_t cipher_suite; + + /** + * \brief Hash function or algorithm for signing the ServerKeyExchange. + * + * This parameter is ignored for `TLS_RSA_*` and `TLS_ECDH_*` + * cipher suites; it is used only for `TLS_ECDHE_*` suites, in + * which the server _signs_ the ephemeral EC Diffie-Hellman + * parameters sent to the client. + * + * This identifier must be one of the following values: + * + * - `0xFF00 + id`, where `id` is a hash function identifier + * (0 for MD5+SHA-1, or 2 to 6 for one of the SHA functions); + * + * - a full 16-bit identifier, lower than `0xFF00`. + * + * If the first option is used, then the SSL engine will + * compute the hash of the data that is to be signed, with the + * designated hash function. The `do_sign()` method will be + * invoked with that hash value provided in the the `data` + * buffer. + * + * If the second option is used, then the SSL engine will NOT + * compute a hash on the data; instead, it will provide the + * to-be-signed data itself in `data`, i.e. the concatenation of + * the client random, server random, and encoded ECDH + * parameters. Furthermore, with TLS-1.2 and later, the 16-bit + * identifier will be used "as is" in the protocol, in the + * SignatureAndHashAlgorithm; for instance, `0x0401` stands for + * RSA PKCS#1 v1.5 signature (the `01`) with SHA-256 as hash + * function (the `04`). + * + * Take care that with TLS 1.0 and 1.1, the hash function is + * constrainted by the protocol: RSA signature must use + * MD5+SHA-1 (so use `0xFF00`), while ECDSA must use SHA-1 + * (`0xFF02`). Since TLS 1.0 and 1.1 don't include a + * SignatureAndHashAlgorithm field in their ServerKeyExchange + * messages, any value below `0xFF00` will be usable to send the + * raw ServerKeyExchange data to the `do_sign()` callback, but + * that callback must still follow the protocol requirements + * when generating the signature. + */ + unsigned algo_id; + + /** + * \brief Certificate chain to send to the client. + * + * This is an array of `br_x509_certificate` objects, each + * normally containing a DER-encoded certificate. The server + * code does not try to decode these elements. + */ + const br_x509_certificate *chain; + + /** + * \brief Certificate chain length (number of certificates). + */ + size_t chain_len; } br_ssl_server_choices; @@ -3095,142 +3028,141 @@ typedef struct { */ typedef struct br_ssl_server_policy_class_ br_ssl_server_policy_class; struct br_ssl_server_policy_class_ { - /** - * \brief Context size (in bytes). - */ - size_t context_size; - - /** - * \brief Select algorithms and certificates for this connection. - * - * This callback function shall fill the provided `choices` - * structure with the policy choices for this connection. This - * entails selecting the cipher suite, hash function for signing - * the ServerKeyExchange (applicable only to ECDHE cipher suites), - * and certificate chain to send. - * - * The callback receives a pointer to the server context that - * contains the relevant data. In particular, the functions - * `br_ssl_server_get_client_suites()`, - * `br_ssl_server_get_client_hashes()` and - * `br_ssl_server_get_client_curves()` can be used to obtain - * the cipher suites, hash functions and elliptic curves - * supported by both the client and server, respectively. The - * `br_ssl_engine_get_version()` and `br_ssl_engine_get_server_name()` - * functions yield the protocol version and requested server name - * (SNI), respectively. - * - * This function may modify its context structure (`pctx`) in - * arbitrary ways to keep track of its own choices. - * - * This function shall return 1 if appropriate policy choices - * could be made, or 0 if this connection cannot be pursued. - * - * \param pctx policy context. - * \param cc SSL server context. - * \param choices destination structure for the policy choices. - * \return 1 on success, 0 on error. - */ - int (*choose)(const br_ssl_server_policy_class **pctx, - const br_ssl_server_context *cc, - br_ssl_server_choices *choices); - - /** - * \brief Perform key exchange (server part). - * - * This callback is invoked to perform the server-side cryptographic - * operation for a key exchange that is not ECDHE. This callback - * uses the private key. - * - * **For RSA key exchange**, the provided `data` (of length `*len` - * bytes) shall be decrypted with the server's private key, and - * the 48-byte premaster secret copied back to the first 48 bytes - * of `data`. - * - * - The caller makes sure that `*len` is at least 59 bytes. - * - * - This callback MUST check that the provided length matches - * that of the key modulus; it shall report an error otherwise. - * - * - If the length matches that of the RSA key modulus, then - * processing MUST be constant-time, even if decryption fails, - * or the padding is incorrect, or the plaintext message length - * is not exactly 48 bytes. - * - * - This callback needs not check the two first bytes of the - * obtained pre-master secret (the caller will do that). - * - * - If an error is reported (0), then what the callback put - * in the first 48 bytes of `data` is unimportant (the caller - * will use random bytes instead). - * - * **For ECDH key exchange**, the provided `data` (of length `*len` - * bytes) is the elliptic curve point from the client. The - * callback shall multiply it with its private key, and store - * the resulting X coordinate in `data`, starting at offset 0, - * and set `*len` to the length of the X coordinate. - * - * - If the input array does not have the proper length for - * an encoded curve point, then an error (0) shall be reported. - * - * - If the input array has the proper length, then processing - * MUST be constant-time, even if the data is not a valid - * encoded point. - * - * - This callback MUST check that the input point is valid. - * - * Returned value is 1 on success, 0 on error. - * - * \param pctx policy context. - * \param data key exchange data from the client. - * \param len key exchange data length (in bytes). - * \return 1 on success, 0 on error. - */ - uint32_t (*do_keyx)(const br_ssl_server_policy_class **pctx, - unsigned char *data, size_t *len); - - /** - * \brief Perform a signature (for a ServerKeyExchange message). - * - * This callback function is invoked for ECDHE cipher suites. On - * input, the hash value or message to sign is in `data`, of - * size `hv_len`; the involved hash function or algorithm is - * identified by `algo_id`. The signature shall be computed and - * written back into `data`; the total size of that buffer is - * `len` bytes. - * - * This callback shall verify that the signature length does not - * exceed `len` bytes, and abstain from writing the signature if - * it does not fit. - * - * The `algo_id` value matches that which was written in the - * `choices` structures by the `choose()` callback. This will be - * one of the following: - * - * - `0xFF00 + id` for a hash function identifier `id`. In - * that case, the `data` buffer contains a hash value - * already computed over the data that is to be signed, - * of length `hv_len`. The `id` may be 0 to designate the - * special MD5+SHA-1 concatenation (old-style RSA signing). - * - * - Another value, lower than `0xFF00`. The `data` buffer - * then contains the raw, non-hashed data to be signed - * (concatenation of the client and server randoms and - * ECDH parameters). The callback is responsible to apply - * any relevant hashing as part of the signing process. - * - * Returned value is the signature length (in bytes), or 0 on error. - * - * \param pctx policy context. - * \param algo_id hash function / algorithm identifier. - * \param data input/output buffer (message/hash, then signature). - * \param hv_len hash value or message length (in bytes). - * \param len total buffer length (in bytes). - * \return signature length (in bytes) on success, or 0 on error. - */ - size_t (*do_sign)(const br_ssl_server_policy_class **pctx, - unsigned algo_id, - unsigned char *data, size_t hv_len, size_t len); + /** + * \brief Context size (in bytes). + */ + size_t context_size; + + /** + * \brief Select algorithms and certificates for this connection. + * + * This callback function shall fill the provided `choices` + * structure with the policy choices for this connection. This + * entails selecting the cipher suite, hash function for signing + * the ServerKeyExchange (applicable only to ECDHE cipher suites), + * and certificate chain to send. + * + * The callback receives a pointer to the server context that + * contains the relevant data. In particular, the functions + * `br_ssl_server_get_client_suites()`, + * `br_ssl_server_get_client_hashes()` and + * `br_ssl_server_get_client_curves()` can be used to obtain + * the cipher suites, hash functions and elliptic curves + * supported by both the client and server, respectively. The + * `br_ssl_engine_get_version()` and `br_ssl_engine_get_server_name()` + * functions yield the protocol version and requested server name + * (SNI), respectively. + * + * This function may modify its context structure (`pctx`) in + * arbitrary ways to keep track of its own choices. + * + * This function shall return 1 if appropriate policy choices + * could be made, or 0 if this connection cannot be pursued. + * + * \param pctx policy context. + * \param cc SSL server context. + * \param choices destination structure for the policy choices. + * \return 1 on success, 0 on error. + */ + int (*choose)(const br_ssl_server_policy_class **pctx, + const br_ssl_server_context *cc, + br_ssl_server_choices *choices); + + /** + * \brief Perform key exchange (server part). + * + * This callback is invoked to perform the server-side cryptographic + * operation for a key exchange that is not ECDHE. This callback + * uses the private key. + * + * **For RSA key exchange**, the provided `data` (of length `*len` + * bytes) shall be decrypted with the server's private key, and + * the 48-byte premaster secret copied back to the first 48 bytes + * of `data`. + * + * - The caller makes sure that `*len` is at least 59 bytes. + * + * - This callback MUST check that the provided length matches + * that of the key modulus; it shall report an error otherwise. + * + * - If the length matches that of the RSA key modulus, then + * processing MUST be constant-time, even if decryption fails, + * or the padding is incorrect, or the plaintext message length + * is not exactly 48 bytes. + * + * - This callback needs not check the two first bytes of the + * obtained pre-master secret (the caller will do that). + * + * - If an error is reported (0), then what the callback put + * in the first 48 bytes of `data` is unimportant (the caller + * will use random bytes instead). + * + * **For ECDH key exchange**, the provided `data` (of length `*len` + * bytes) is the elliptic curve point from the client. The + * callback shall multiply it with its private key, and store + * the resulting X coordinate in `data`, starting at offset 0, + * and set `*len` to the length of the X coordinate. + * + * - If the input array does not have the proper length for + * an encoded curve point, then an error (0) shall be reported. + * + * - If the input array has the proper length, then processing + * MUST be constant-time, even if the data is not a valid + * encoded point. + * + * - This callback MUST check that the input point is valid. + * + * Returned value is 1 on success, 0 on error. + * + * \param pctx policy context. + * \param data key exchange data from the client. + * \param len key exchange data length (in bytes). + * \return 1 on success, 0 on error. + */ + uint32_t (*do_keyx)(const br_ssl_server_policy_class **pctx, + unsigned char *data, size_t *len); + + /** + * \brief Perform a signature (for a ServerKeyExchange message). + * + * This callback function is invoked for ECDHE cipher suites. On + * input, the hash value or message to sign is in `data`, of + * size `hv_len`; the involved hash function or algorithm is + * identified by `algo_id`. The signature shall be computed and + * written back into `data`; the total size of that buffer is + * `len` bytes. + * + * This callback shall verify that the signature length does not + * exceed `len` bytes, and abstain from writing the signature if + * it does not fit. + * + * The `algo_id` value matches that which was written in the + * `choices` structures by the `choose()` callback. This will be + * one of the following: + * + * - `0xFF00 + id` for a hash function identifier `id`. In + * that case, the `data` buffer contains a hash value + * already computed over the data that is to be signed, + * of length `hv_len`. The `id` may be 0 to designate the + * special MD5+SHA-1 concatenation (old-style RSA signing). + * + * - Another value, lower than `0xFF00`. The `data` buffer + * then contains the raw, non-hashed data to be signed + * (concatenation of the client and server randoms and + * ECDH parameters). The callback is responsible to apply + * any relevant hashing as part of the signing process. + * + * Returned value is the signature length (in bytes), or 0 on error. + * + * \param pctx policy context. + * \param algo_id hash function / algorithm identifier. + * \param data input/output buffer (message/hash, then signature). + * \param hv_len hash value or message length (in bytes). + * \param len total buffer length (in bytes). + * \return signature length (in bytes) on success, or 0 on error. + */ + size_t (*do_sign)(const br_ssl_server_policy_class **pctx, unsigned algo_id, + unsigned char *data, size_t hv_len, size_t len); }; /** @@ -3244,15 +3176,15 @@ struct br_ssl_server_policy_class_ { * opaque and shall not be accessed directly. */ typedef struct { - /** \brief Pointer to vtable. */ - const br_ssl_server_policy_class *vtable; + /** \brief Pointer to vtable. */ + const br_ssl_server_policy_class *vtable; #ifndef BR_DOXYGEN_IGNORE - const br_x509_certificate *chain; - size_t chain_len; - const br_rsa_private_key *sk; - unsigned allowed_usages; - br_rsa_private irsacore; - br_rsa_pkcs1_sign irsasign; + const br_x509_certificate *chain; + size_t chain_len; + const br_rsa_private_key *sk; + unsigned allowed_usages; + br_rsa_private irsacore; + br_rsa_pkcs1_sign irsasign; #endif } br_ssl_server_policy_rsa_context; @@ -3271,17 +3203,17 @@ typedef struct { * opaque and shall not be accessed directly. */ typedef struct { - /** \brief Pointer to vtable. */ - const br_ssl_server_policy_class *vtable; + /** \brief Pointer to vtable. */ + const br_ssl_server_policy_class *vtable; #ifndef BR_DOXYGEN_IGNORE - const br_x509_certificate *chain; - size_t chain_len; - const br_ec_private_key *sk; - unsigned allowed_usages; - unsigned cert_issuer_key_type; - const br_multihash_context *mhash; - const br_ec_impl *iec; - br_ecdsa_sign iecdsa; + const br_x509_certificate *chain; + size_t chain_len; + const br_ec_private_key *sk; + unsigned allowed_usages; + unsigned cert_issuer_key_type; + const br_multihash_context *mhash; + const br_ec_impl *iec; + br_ecdsa_sign iecdsa; #endif } br_ssl_server_policy_ec_context; @@ -3297,44 +3229,44 @@ typedef struct { */ typedef struct br_ssl_session_cache_class_ br_ssl_session_cache_class; struct br_ssl_session_cache_class_ { - /** - * \brief Context size (in bytes). - */ - size_t context_size; - - /** - * \brief Record a session. - * - * This callback should record the provided session parameters. - * The `params` structure is transient, so its contents shall - * be copied into the cache. The session ID has been randomly - * generated and always has length exactly 32 bytes. - * - * \param ctx session cache context. - * \param server_ctx SSL server context. - * \param params session parameters to save. - */ - void (*save)(const br_ssl_session_cache_class **ctx, - br_ssl_server_context *server_ctx, - const br_ssl_session_parameters *params); - - /** - * \brief Lookup a session in the cache. - * - * The session ID to lookup is in `params` and always has length - * exactly 32 bytes. If the session parameters are found in the - * cache, then the parameters shall be copied into the `params` - * structure. Returned value is 1 on successful lookup, 0 - * otherwise. - * - * \param ctx session cache context. - * \param server_ctx SSL server context. - * \param params destination for session parameters. - * \return 1 if found, 0 otherwise. - */ - int (*load)(const br_ssl_session_cache_class **ctx, - br_ssl_server_context *server_ctx, - br_ssl_session_parameters *params); + /** + * \brief Context size (in bytes). + */ + size_t context_size; + + /** + * \brief Record a session. + * + * This callback should record the provided session parameters. + * The `params` structure is transient, so its contents shall + * be copied into the cache. The session ID has been randomly + * generated and always has length exactly 32 bytes. + * + * \param ctx session cache context. + * \param server_ctx SSL server context. + * \param params session parameters to save. + */ + void (*save)(const br_ssl_session_cache_class **ctx, + br_ssl_server_context *server_ctx, + const br_ssl_session_parameters *params); + + /** + * \brief Lookup a session in the cache. + * + * The session ID to lookup is in `params` and always has length + * exactly 32 bytes. If the session parameters are found in the + * cache, then the parameters shall be copied into the `params` + * structure. Returned value is 1 on successful lookup, 0 + * otherwise. + * + * \param ctx session cache context. + * \param server_ctx SSL server context. + * \param params destination for session parameters. + * \return 1 if found, 0 otherwise. + */ + int (*load)(const br_ssl_session_cache_class **ctx, + br_ssl_server_context *server_ctx, + br_ssl_session_parameters *params); }; /** @@ -3352,15 +3284,15 @@ struct br_ssl_session_cache_class_ { * contents are opaque and shall not be accessed directly. */ typedef struct { - /** \brief Pointer to vtable. */ - const br_ssl_session_cache_class *vtable; + /** \brief Pointer to vtable. */ + const br_ssl_session_cache_class *vtable; #ifndef BR_DOXYGEN_IGNORE - unsigned char *store; - size_t store_len, store_ptr; - unsigned char index_key[32]; - const br_hash_class *hash; - int init_done; - uint32_t head, tail, root; + unsigned char *store; + size_t store_len, store_ptr; + unsigned char index_key[32]; + const br_hash_class *hash; + int init_done; + uint32_t head, tail, root; #endif } br_ssl_session_cache_lru; @@ -3376,7 +3308,7 @@ typedef struct { * \param store_len storage space length (in bytes). */ void br_ssl_session_cache_lru_init(br_ssl_session_cache_lru *cc, - unsigned char *store, size_t store_len); + unsigned char *store, size_t store_len); /** * \brief Forget an entry in an LRU session cache. @@ -3388,8 +3320,8 @@ void br_ssl_session_cache_lru_init(br_ssl_session_cache_lru *cc, * \param cc session cache context. * \param id session ID to forget. */ -void br_ssl_session_cache_lru_forget( - br_ssl_session_cache_lru *cc, const unsigned char *id); +void br_ssl_session_cache_lru_forget(br_ssl_session_cache_lru *cc, + const unsigned char *id); /** * \brief Context structure for a SSL server. @@ -3400,89 +3332,89 @@ void br_ssl_session_cache_lru_forget( * must not be accessed directly. */ struct br_ssl_server_context_ { - /** - * \brief The encapsulated engine context. - */ - br_ssl_engine_context eng; + /** + * \brief The encapsulated engine context. + */ + br_ssl_engine_context eng; #ifndef BR_DOXYGEN_IGNORE - /* - * Maximum version from the client. - */ - uint16_t client_max_version; - - /* - * Session cache. - */ - const br_ssl_session_cache_class **cache_vtable; - - /* - * Translated cipher suites supported by the client. The list - * is trimmed to include only the cipher suites that the - * server also supports; they are in the same order as in the - * client message. - */ - br_suite_translated client_suites[BR_MAX_CIPHER_SUITES]; - unsigned char client_suites_num; - - /* - * Hash functions supported by the client, with ECDSA and RSA - * (bit mask). For hash function with id 'x', set bit index is - * x for RSA, x+8 for ECDSA. For newer algorithms, with ID - * 0x08**, bit 16+k is set for algorithm 0x0800+k. - */ - uint32_t hashes; - - /* - * Curves supported by the client (bit mask, for named curves). - */ - uint32_t curves; - - /* - * Context for chain handler. - */ - const br_ssl_server_policy_class **policy_vtable; - uint16_t sign_hash_id; - - /* - * For the core handlers, thus avoiding (in most cases) the - * need for an externally provided policy context. - */ - union { - const br_ssl_server_policy_class *vtable; - br_ssl_server_policy_rsa_context single_rsa; - br_ssl_server_policy_ec_context single_ec; - } chain_handler; - - /* - * Buffer for the ECDHE private key. - */ - unsigned char ecdhe_key[70]; - size_t ecdhe_key_len; - - /* - * Trust anchor names for client authentication. "ta_names" and - * "tas" cannot be both non-NULL. - */ - const br_x500_name *ta_names; - const br_x509_trust_anchor *tas; - size_t num_tas; - size_t cur_dn_index; - const unsigned char *cur_dn; - size_t cur_dn_len; - - /* - * Buffer for the hash value computed over all handshake messages - * prior to CertificateVerify, and identifier for the hash function. - */ - unsigned char hash_CV[64]; - size_t hash_CV_len; - int hash_CV_id; - - /* - * Server-specific implementations. - * (none for now) - */ + /* + * Maximum version from the client. + */ + uint16_t client_max_version; + + /* + * Session cache. + */ + const br_ssl_session_cache_class **cache_vtable; + + /* + * Translated cipher suites supported by the client. The list + * is trimmed to include only the cipher suites that the + * server also supports; they are in the same order as in the + * client message. + */ + br_suite_translated client_suites[BR_MAX_CIPHER_SUITES]; + unsigned char client_suites_num; + + /* + * Hash functions supported by the client, with ECDSA and RSA + * (bit mask). For hash function with id 'x', set bit index is + * x for RSA, x+8 for ECDSA. For newer algorithms, with ID + * 0x08**, bit 16+k is set for algorithm 0x0800+k. + */ + uint32_t hashes; + + /* + * Curves supported by the client (bit mask, for named curves). + */ + uint32_t curves; + + /* + * Context for chain handler. + */ + const br_ssl_server_policy_class **policy_vtable; + uint16_t sign_hash_id; + + /* + * For the core handlers, thus avoiding (in most cases) the + * need for an externally provided policy context. + */ + union { + const br_ssl_server_policy_class *vtable; + br_ssl_server_policy_rsa_context single_rsa; + br_ssl_server_policy_ec_context single_ec; + } chain_handler; + + /* + * Buffer for the ECDHE private key. + */ + unsigned char ecdhe_key[70]; + size_t ecdhe_key_len; + + /* + * Trust anchor names for client authentication. "ta_names" and + * "tas" cannot be both non-NULL. + */ + const br_x500_name *ta_names; + const br_x509_trust_anchor *tas; + size_t num_tas; + size_t cur_dn_index; + const unsigned char *cur_dn; + size_t cur_dn_len; + + /* + * Buffer for the hash value computed over all handshake messages + * prior to CertificateVerify, and identifier for the hash function. + */ + unsigned char hash_CV[64]; + size_t hash_CV_len; + int hash_CV_id; + + /* + * Server-specific implementations. + * (none for now) + */ #endif }; @@ -3527,8 +3459,9 @@ struct br_ssl_server_context_ { * \param sk RSA private key. */ void br_ssl_server_init_full_rsa(br_ssl_server_context *cc, - const br_x509_certificate *chain, size_t chain_len, - const br_rsa_private_key *sk); + const br_x509_certificate *chain, + size_t chain_len, + const br_rsa_private_key *sk); /** * \brief SSL server profile: full_ec. @@ -3549,8 +3482,9 @@ void br_ssl_server_init_full_rsa(br_ssl_server_context *cc, * \param sk EC private key. */ void br_ssl_server_init_full_ec(br_ssl_server_context *cc, - const br_x509_certificate *chain, size_t chain_len, - unsigned cert_issuer_key_type, const br_ec_private_key *sk); + const br_x509_certificate *chain, + size_t chain_len, unsigned cert_issuer_key_type, + const br_ec_private_key *sk); /** * \brief SSL server profile: minr2g. @@ -3565,8 +3499,8 @@ void br_ssl_server_init_full_ec(br_ssl_server_context *cc, * \param sk RSA private key. */ void br_ssl_server_init_minr2g(br_ssl_server_context *cc, - const br_x509_certificate *chain, size_t chain_len, - const br_rsa_private_key *sk); + const br_x509_certificate *chain, + size_t chain_len, const br_rsa_private_key *sk); /** * \brief SSL server profile: mine2g. @@ -3582,8 +3516,8 @@ void br_ssl_server_init_minr2g(br_ssl_server_context *cc, * \param sk RSA private key. */ void br_ssl_server_init_mine2g(br_ssl_server_context *cc, - const br_x509_certificate *chain, size_t chain_len, - const br_rsa_private_key *sk); + const br_x509_certificate *chain, + size_t chain_len, const br_rsa_private_key *sk); /** * \brief SSL server profile: minf2g. @@ -3600,8 +3534,8 @@ void br_ssl_server_init_mine2g(br_ssl_server_context *cc, * \param sk EC private key. */ void br_ssl_server_init_minf2g(br_ssl_server_context *cc, - const br_x509_certificate *chain, size_t chain_len, - const br_ec_private_key *sk); + const br_x509_certificate *chain, + size_t chain_len, const br_ec_private_key *sk); /** * \brief SSL server profile: minu2g. @@ -3620,8 +3554,8 @@ void br_ssl_server_init_minf2g(br_ssl_server_context *cc, * \param sk EC private key. */ void br_ssl_server_init_minu2g(br_ssl_server_context *cc, - const br_x509_certificate *chain, size_t chain_len, - const br_ec_private_key *sk); + const br_x509_certificate *chain, + size_t chain_len, const br_ec_private_key *sk); /** * \brief SSL server profile: minv2g. @@ -3640,8 +3574,8 @@ void br_ssl_server_init_minu2g(br_ssl_server_context *cc, * \param sk EC private key. */ void br_ssl_server_init_minv2g(br_ssl_server_context *cc, - const br_x509_certificate *chain, size_t chain_len, - const br_ec_private_key *sk); + const br_x509_certificate *chain, + size_t chain_len, const br_ec_private_key *sk); /** * \brief SSL server profile: mine2c. @@ -3656,8 +3590,8 @@ void br_ssl_server_init_minv2g(br_ssl_server_context *cc, * \param sk RSA private key. */ void br_ssl_server_init_mine2c(br_ssl_server_context *cc, - const br_x509_certificate *chain, size_t chain_len, - const br_rsa_private_key *sk); + const br_x509_certificate *chain, + size_t chain_len, const br_rsa_private_key *sk); /** * \brief SSL server profile: minf2c. @@ -3672,8 +3606,8 @@ void br_ssl_server_init_mine2c(br_ssl_server_context *cc, * \param sk EC private key. */ void br_ssl_server_init_minf2c(br_ssl_server_context *cc, - const br_x509_certificate *chain, size_t chain_len, - const br_ec_private_key *sk); + const br_x509_certificate *chain, + size_t chain_len, const br_ec_private_key *sk); /** * \brief Get the supported client suites. @@ -3697,11 +3631,10 @@ void br_ssl_server_init_minf2c(br_ssl_server_context *cc, * \param num receives the array size (number of suites). * \return the translated common cipher suites, in preference order. */ -static inline const br_suite_translated * -br_ssl_server_get_client_suites(const br_ssl_server_context *cc, size_t *num) -{ - *num = cc->client_suites_num; - return cc->client_suites; +static inline const br_suite_translated *br_ssl_server_get_client_suites( + const br_ssl_server_context *cc, size_t *num) { + *num = cc->client_suites_num; + return cc->client_suites; } /** @@ -3734,10 +3667,9 @@ br_ssl_server_get_client_suites(const br_ssl_server_context *cc, size_t *num) * \param cc server context. * \return the client-supported hash functions and signature algorithms. */ -static inline uint32_t -br_ssl_server_get_client_hashes(const br_ssl_server_context *cc) -{ - return cc->hashes; +static inline uint32_t br_ssl_server_get_client_hashes( + const br_ssl_server_context *cc) { + return cc->hashes; } /** @@ -3748,10 +3680,9 @@ br_ssl_server_get_client_hashes(const br_ssl_server_context *cc) * \param cc server context. * \return the client-supported elliptic curves. */ -static inline uint32_t -br_ssl_server_get_client_curves(const br_ssl_server_context *cc) -{ - return cc->curves; +static inline uint32_t br_ssl_server_get_client_curves( + const br_ssl_server_context *cc) { + return cc->curves; } /** @@ -3775,11 +3706,9 @@ void br_ssl_server_zero(br_ssl_server_context *cc); * \param cc server context. * \param pctx policy context (pointer to its vtable field). */ -static inline void -br_ssl_server_set_policy(br_ssl_server_context *cc, - const br_ssl_server_policy_class **pctx) -{ - cc->policy_vtable = pctx; +static inline void br_ssl_server_set_policy( + br_ssl_server_context *cc, const br_ssl_server_policy_class **pctx) { + cc->policy_vtable = pctx; } /** @@ -3800,10 +3729,10 @@ br_ssl_server_set_policy(br_ssl_server_context *cc, * \param irsacore RSA core implementation. * \param irsasign RSA signature implementation (PKCS#1 v1.5). */ -void br_ssl_server_set_single_rsa(br_ssl_server_context *cc, - const br_x509_certificate *chain, size_t chain_len, - const br_rsa_private_key *sk, unsigned allowed_usages, - br_rsa_private irsacore, br_rsa_pkcs1_sign irsasign); +void br_ssl_server_set_single_rsa( + br_ssl_server_context *cc, const br_x509_certificate *chain, + size_t chain_len, const br_rsa_private_key *sk, unsigned allowed_usages, + br_rsa_private irsacore, br_rsa_pkcs1_sign irsasign); /** * \brief Set the server certificate chain and key (single EC case). @@ -3830,10 +3759,11 @@ void br_ssl_server_set_single_rsa(br_ssl_server_context *cc, * \param iecdsa ECDSA signature implementation ("asn1" format). */ void br_ssl_server_set_single_ec(br_ssl_server_context *cc, - const br_x509_certificate *chain, size_t chain_len, - const br_ec_private_key *sk, unsigned allowed_usages, - unsigned cert_issuer_key_type, - const br_ec_impl *iec, br_ecdsa_sign iecdsa); + const br_x509_certificate *chain, + size_t chain_len, const br_ec_private_key *sk, + unsigned allowed_usages, + unsigned cert_issuer_key_type, + const br_ec_impl *iec, br_ecdsa_sign iecdsa); /** * \brief Activate client certificate authentication. @@ -3854,13 +3784,11 @@ void br_ssl_server_set_single_ec(br_ssl_server_context *cc, * \param ta_names encoded trust anchor names. * \param num number of encoded trust anchor names. */ -static inline void -br_ssl_server_set_trust_anchor_names(br_ssl_server_context *cc, - const br_x500_name *ta_names, size_t num) -{ - cc->ta_names = ta_names; - cc->tas = NULL; - cc->num_tas = num; +static inline void br_ssl_server_set_trust_anchor_names( + br_ssl_server_context *cc, const br_x500_name *ta_names, size_t num) { + cc->ta_names = ta_names; + cc->tas = NULL; + cc->num_tas = num; } /** @@ -3881,13 +3809,11 @@ br_ssl_server_set_trust_anchor_names(br_ssl_server_context *cc, * \param tas trust anchors (only names are used). * \param num number of trust anchors. */ -static inline void -br_ssl_server_set_trust_anchor_names_alt(br_ssl_server_context *cc, - const br_x509_trust_anchor *tas, size_t num) -{ - cc->ta_names = NULL; - cc->tas = tas; - cc->num_tas = num; +static inline void br_ssl_server_set_trust_anchor_names_alt( + br_ssl_server_context *cc, const br_x509_trust_anchor *tas, size_t num) { + cc->ta_names = NULL; + cc->tas = tas; + cc->num_tas = num; } /** @@ -3899,11 +3825,9 @@ br_ssl_server_set_trust_anchor_names_alt(br_ssl_server_context *cc, * \param cc server context. * \param vtable session cache context. */ -static inline void -br_ssl_server_set_cache(br_ssl_server_context *cc, - const br_ssl_session_cache_class **vtable) -{ - cc->cache_vtable = vtable; +static inline void br_ssl_server_set_cache( + br_ssl_server_context *cc, const br_ssl_session_cache_class **vtable) { + cc->cache_vtable = vtable; } /** @@ -3950,13 +3874,11 @@ int br_ssl_server_reset(br_ssl_server_context *cc); */ typedef struct { #ifndef BR_DOXYGEN_IGNORE - br_ssl_engine_context *engine; - int (*low_read)(void *read_context, - unsigned char *data, size_t len); - void *read_context; - int (*low_write)(void *write_context, - const unsigned char *data, size_t len); - void *write_context; + br_ssl_engine_context *engine; + int (*low_read)(void *read_context, unsigned char *data, size_t len); + void *read_context; + int (*low_write)(void *write_context, const unsigned char *data, size_t len); + void *write_context; #endif } br_sslio_context; @@ -4007,14 +3929,13 @@ typedef struct { * \param low_write callback for writing data on the transport. * \param write_context context pointer for `low_write()`. */ -void br_sslio_init(br_sslio_context *ctx, - br_ssl_engine_context *engine, - int (*low_read)(void *read_context, - unsigned char *data, size_t len), - void *read_context, - int (*low_write)(void *write_context, - const unsigned char *data, size_t len), - void *write_context); +void br_sslio_init(br_sslio_context *ctx, br_ssl_engine_context *engine, + int (*low_read)(void *read_context, unsigned char *data, + size_t len), + void *read_context, + int (*low_write)(void *write_context, + const unsigned char *data, size_t len), + void *write_context); /** * \brief Read some application data from a SSL connection. @@ -4143,151 +4064,151 @@ int br_sslio_close(br_sslio_context *cc); */ /* From RFC 5246 */ -#define BR_TLS_NULL_WITH_NULL_NULL 0x0000 -#define BR_TLS_RSA_WITH_NULL_MD5 0x0001 -#define BR_TLS_RSA_WITH_NULL_SHA 0x0002 -#define BR_TLS_RSA_WITH_NULL_SHA256 0x003B -#define BR_TLS_RSA_WITH_RC4_128_MD5 0x0004 -#define BR_TLS_RSA_WITH_RC4_128_SHA 0x0005 -#define BR_TLS_RSA_WITH_3DES_EDE_CBC_SHA 0x000A -#define BR_TLS_RSA_WITH_AES_128_CBC_SHA 0x002F -#define BR_TLS_RSA_WITH_AES_256_CBC_SHA 0x0035 -#define BR_TLS_RSA_WITH_AES_128_CBC_SHA256 0x003C -#define BR_TLS_RSA_WITH_AES_256_CBC_SHA256 0x003D -#define BR_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA 0x000D -#define BR_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA 0x0010 -#define BR_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA 0x0013 -#define BR_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA 0x0016 -#define BR_TLS_DH_DSS_WITH_AES_128_CBC_SHA 0x0030 -#define BR_TLS_DH_RSA_WITH_AES_128_CBC_SHA 0x0031 -#define BR_TLS_DHE_DSS_WITH_AES_128_CBC_SHA 0x0032 -#define BR_TLS_DHE_RSA_WITH_AES_128_CBC_SHA 0x0033 -#define BR_TLS_DH_DSS_WITH_AES_256_CBC_SHA 0x0036 -#define BR_TLS_DH_RSA_WITH_AES_256_CBC_SHA 0x0037 -#define BR_TLS_DHE_DSS_WITH_AES_256_CBC_SHA 0x0038 -#define BR_TLS_DHE_RSA_WITH_AES_256_CBC_SHA 0x0039 -#define BR_TLS_DH_DSS_WITH_AES_128_CBC_SHA256 0x003E -#define BR_TLS_DH_RSA_WITH_AES_128_CBC_SHA256 0x003F -#define BR_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 0x0040 -#define BR_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 0x0067 -#define BR_TLS_DH_DSS_WITH_AES_256_CBC_SHA256 0x0068 -#define BR_TLS_DH_RSA_WITH_AES_256_CBC_SHA256 0x0069 -#define BR_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 0x006A -#define BR_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 0x006B -#define BR_TLS_DH_anon_WITH_RC4_128_MD5 0x0018 -#define BR_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA 0x001B -#define BR_TLS_DH_anon_WITH_AES_128_CBC_SHA 0x0034 -#define BR_TLS_DH_anon_WITH_AES_256_CBC_SHA 0x003A -#define BR_TLS_DH_anon_WITH_AES_128_CBC_SHA256 0x006C -#define BR_TLS_DH_anon_WITH_AES_256_CBC_SHA256 0x006D +#define BR_TLS_NULL_WITH_NULL_NULL 0x0000 +#define BR_TLS_RSA_WITH_NULL_MD5 0x0001 +#define BR_TLS_RSA_WITH_NULL_SHA 0x0002 +#define BR_TLS_RSA_WITH_NULL_SHA256 0x003B +#define BR_TLS_RSA_WITH_RC4_128_MD5 0x0004 +#define BR_TLS_RSA_WITH_RC4_128_SHA 0x0005 +#define BR_TLS_RSA_WITH_3DES_EDE_CBC_SHA 0x000A +#define BR_TLS_RSA_WITH_AES_128_CBC_SHA 0x002F +#define BR_TLS_RSA_WITH_AES_256_CBC_SHA 0x0035 +#define BR_TLS_RSA_WITH_AES_128_CBC_SHA256 0x003C +#define BR_TLS_RSA_WITH_AES_256_CBC_SHA256 0x003D +#define BR_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA 0x000D +#define BR_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA 0x0010 +#define BR_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA 0x0013 +#define BR_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA 0x0016 +#define BR_TLS_DH_DSS_WITH_AES_128_CBC_SHA 0x0030 +#define BR_TLS_DH_RSA_WITH_AES_128_CBC_SHA 0x0031 +#define BR_TLS_DHE_DSS_WITH_AES_128_CBC_SHA 0x0032 +#define BR_TLS_DHE_RSA_WITH_AES_128_CBC_SHA 0x0033 +#define BR_TLS_DH_DSS_WITH_AES_256_CBC_SHA 0x0036 +#define BR_TLS_DH_RSA_WITH_AES_256_CBC_SHA 0x0037 +#define BR_TLS_DHE_DSS_WITH_AES_256_CBC_SHA 0x0038 +#define BR_TLS_DHE_RSA_WITH_AES_256_CBC_SHA 0x0039 +#define BR_TLS_DH_DSS_WITH_AES_128_CBC_SHA256 0x003E +#define BR_TLS_DH_RSA_WITH_AES_128_CBC_SHA256 0x003F +#define BR_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 0x0040 +#define BR_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 0x0067 +#define BR_TLS_DH_DSS_WITH_AES_256_CBC_SHA256 0x0068 +#define BR_TLS_DH_RSA_WITH_AES_256_CBC_SHA256 0x0069 +#define BR_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 0x006A +#define BR_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 0x006B +#define BR_TLS_DH_anon_WITH_RC4_128_MD5 0x0018 +#define BR_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA 0x001B +#define BR_TLS_DH_anon_WITH_AES_128_CBC_SHA 0x0034 +#define BR_TLS_DH_anon_WITH_AES_256_CBC_SHA 0x003A +#define BR_TLS_DH_anon_WITH_AES_128_CBC_SHA256 0x006C +#define BR_TLS_DH_anon_WITH_AES_256_CBC_SHA256 0x006D /* From RFC 4492 */ -#define BR_TLS_ECDH_ECDSA_WITH_NULL_SHA 0xC001 -#define BR_TLS_ECDH_ECDSA_WITH_RC4_128_SHA 0xC002 -#define BR_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA 0xC003 -#define BR_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0xC004 -#define BR_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0xC005 -#define BR_TLS_ECDHE_ECDSA_WITH_NULL_SHA 0xC006 -#define BR_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA 0xC007 -#define BR_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA 0xC008 -#define BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0xC009 -#define BR_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0xC00A -#define BR_TLS_ECDH_RSA_WITH_NULL_SHA 0xC00B -#define BR_TLS_ECDH_RSA_WITH_RC4_128_SHA 0xC00C -#define BR_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA 0xC00D -#define BR_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA 0xC00E -#define BR_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA 0xC00F -#define BR_TLS_ECDHE_RSA_WITH_NULL_SHA 0xC010 -#define BR_TLS_ECDHE_RSA_WITH_RC4_128_SHA 0xC011 -#define BR_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA 0xC012 -#define BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 0xC013 -#define BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 0xC014 -#define BR_TLS_ECDH_anon_WITH_NULL_SHA 0xC015 -#define BR_TLS_ECDH_anon_WITH_RC4_128_SHA 0xC016 -#define BR_TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA 0xC017 -#define BR_TLS_ECDH_anon_WITH_AES_128_CBC_SHA 0xC018 -#define BR_TLS_ECDH_anon_WITH_AES_256_CBC_SHA 0xC019 +#define BR_TLS_ECDH_ECDSA_WITH_NULL_SHA 0xC001 +#define BR_TLS_ECDH_ECDSA_WITH_RC4_128_SHA 0xC002 +#define BR_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA 0xC003 +#define BR_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0xC004 +#define BR_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0xC005 +#define BR_TLS_ECDHE_ECDSA_WITH_NULL_SHA 0xC006 +#define BR_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA 0xC007 +#define BR_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA 0xC008 +#define BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0xC009 +#define BR_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0xC00A +#define BR_TLS_ECDH_RSA_WITH_NULL_SHA 0xC00B +#define BR_TLS_ECDH_RSA_WITH_RC4_128_SHA 0xC00C +#define BR_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA 0xC00D +#define BR_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA 0xC00E +#define BR_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA 0xC00F +#define BR_TLS_ECDHE_RSA_WITH_NULL_SHA 0xC010 +#define BR_TLS_ECDHE_RSA_WITH_RC4_128_SHA 0xC011 +#define BR_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA 0xC012 +#define BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 0xC013 +#define BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 0xC014 +#define BR_TLS_ECDH_anon_WITH_NULL_SHA 0xC015 +#define BR_TLS_ECDH_anon_WITH_RC4_128_SHA 0xC016 +#define BR_TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA 0xC017 +#define BR_TLS_ECDH_anon_WITH_AES_128_CBC_SHA 0xC018 +#define BR_TLS_ECDH_anon_WITH_AES_256_CBC_SHA 0xC019 /* From RFC 5288 */ -#define BR_TLS_RSA_WITH_AES_128_GCM_SHA256 0x009C -#define BR_TLS_RSA_WITH_AES_256_GCM_SHA384 0x009D -#define BR_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 0x009E -#define BR_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 0x009F -#define BR_TLS_DH_RSA_WITH_AES_128_GCM_SHA256 0x00A0 -#define BR_TLS_DH_RSA_WITH_AES_256_GCM_SHA384 0x00A1 -#define BR_TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 0x00A2 -#define BR_TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 0x00A3 -#define BR_TLS_DH_DSS_WITH_AES_128_GCM_SHA256 0x00A4 -#define BR_TLS_DH_DSS_WITH_AES_256_GCM_SHA384 0x00A5 -#define BR_TLS_DH_anon_WITH_AES_128_GCM_SHA256 0x00A6 -#define BR_TLS_DH_anon_WITH_AES_256_GCM_SHA384 0x00A7 +#define BR_TLS_RSA_WITH_AES_128_GCM_SHA256 0x009C +#define BR_TLS_RSA_WITH_AES_256_GCM_SHA384 0x009D +#define BR_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 0x009E +#define BR_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 0x009F +#define BR_TLS_DH_RSA_WITH_AES_128_GCM_SHA256 0x00A0 +#define BR_TLS_DH_RSA_WITH_AES_256_GCM_SHA384 0x00A1 +#define BR_TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 0x00A2 +#define BR_TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 0x00A3 +#define BR_TLS_DH_DSS_WITH_AES_128_GCM_SHA256 0x00A4 +#define BR_TLS_DH_DSS_WITH_AES_256_GCM_SHA384 0x00A5 +#define BR_TLS_DH_anon_WITH_AES_128_GCM_SHA256 0x00A6 +#define BR_TLS_DH_anon_WITH_AES_256_GCM_SHA384 0x00A7 /* From RFC 5289 */ -#define BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 0xC023 -#define BR_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 0xC024 -#define BR_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 0xC025 -#define BR_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 0xC026 -#define BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 0xC027 -#define BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 0xC028 -#define BR_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 0xC029 -#define BR_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 0xC02A -#define BR_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0xC02B -#define BR_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0xC02C -#define BR_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0xC02D -#define BR_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0xC02E -#define BR_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0xC02F -#define BR_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0xC030 -#define BR_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 0xC031 -#define BR_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 0xC032 +#define BR_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 0xC023 +#define BR_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 0xC024 +#define BR_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 0xC025 +#define BR_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 0xC026 +#define BR_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 0xC027 +#define BR_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 0xC028 +#define BR_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 0xC029 +#define BR_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 0xC02A +#define BR_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0xC02B +#define BR_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0xC02C +#define BR_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0xC02D +#define BR_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0xC02E +#define BR_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0xC02F +#define BR_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0xC030 +#define BR_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 0xC031 +#define BR_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 0xC032 /* From RFC 6655 and 7251 */ -#define BR_TLS_RSA_WITH_AES_128_CCM 0xC09C -#define BR_TLS_RSA_WITH_AES_256_CCM 0xC09D -#define BR_TLS_RSA_WITH_AES_128_CCM_8 0xC0A0 -#define BR_TLS_RSA_WITH_AES_256_CCM_8 0xC0A1 -#define BR_TLS_ECDHE_ECDSA_WITH_AES_128_CCM 0xC0AC -#define BR_TLS_ECDHE_ECDSA_WITH_AES_256_CCM 0xC0AD -#define BR_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 0xC0AE -#define BR_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 0xC0AF +#define BR_TLS_RSA_WITH_AES_128_CCM 0xC09C +#define BR_TLS_RSA_WITH_AES_256_CCM 0xC09D +#define BR_TLS_RSA_WITH_AES_128_CCM_8 0xC0A0 +#define BR_TLS_RSA_WITH_AES_256_CCM_8 0xC0A1 +#define BR_TLS_ECDHE_ECDSA_WITH_AES_128_CCM 0xC0AC +#define BR_TLS_ECDHE_ECDSA_WITH_AES_256_CCM 0xC0AD +#define BR_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 0xC0AE +#define BR_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8 0xC0AF /* From RFC 7905 */ -#define BR_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 0xCCA8 -#define BR_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 0xCCA9 -#define BR_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 0xCCAA -#define BR_TLS_PSK_WITH_CHACHA20_POLY1305_SHA256 0xCCAB -#define BR_TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 0xCCAC -#define BR_TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 0xCCAD -#define BR_TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256 0xCCAE +#define BR_TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 0xCCA8 +#define BR_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 0xCCA9 +#define BR_TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 0xCCAA +#define BR_TLS_PSK_WITH_CHACHA20_POLY1305_SHA256 0xCCAB +#define BR_TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 0xCCAC +#define BR_TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256 0xCCAD +#define BR_TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256 0xCCAE /* From RFC 7507 */ -#define BR_TLS_FALLBACK_SCSV 0x5600 +#define BR_TLS_FALLBACK_SCSV 0x5600 /* * Symbolic constants for alerts. */ -#define BR_ALERT_CLOSE_NOTIFY 0 -#define BR_ALERT_UNEXPECTED_MESSAGE 10 -#define BR_ALERT_BAD_RECORD_MAC 20 -#define BR_ALERT_RECORD_OVERFLOW 22 -#define BR_ALERT_DECOMPRESSION_FAILURE 30 -#define BR_ALERT_HANDSHAKE_FAILURE 40 -#define BR_ALERT_BAD_CERTIFICATE 42 -#define BR_ALERT_UNSUPPORTED_CERTIFICATE 43 -#define BR_ALERT_CERTIFICATE_REVOKED 44 -#define BR_ALERT_CERTIFICATE_EXPIRED 45 -#define BR_ALERT_CERTIFICATE_UNKNOWN 46 -#define BR_ALERT_ILLEGAL_PARAMETER 47 -#define BR_ALERT_UNKNOWN_CA 48 -#define BR_ALERT_ACCESS_DENIED 49 -#define BR_ALERT_DECODE_ERROR 50 -#define BR_ALERT_DECRYPT_ERROR 51 -#define BR_ALERT_PROTOCOL_VERSION 70 -#define BR_ALERT_INSUFFICIENT_SECURITY 71 -#define BR_ALERT_INTERNAL_ERROR 80 -#define BR_ALERT_USER_CANCELED 90 -#define BR_ALERT_NO_RENEGOTIATION 100 -#define BR_ALERT_UNSUPPORTED_EXTENSION 110 -#define BR_ALERT_NO_APPLICATION_PROTOCOL 120 +#define BR_ALERT_CLOSE_NOTIFY 0 +#define BR_ALERT_UNEXPECTED_MESSAGE 10 +#define BR_ALERT_BAD_RECORD_MAC 20 +#define BR_ALERT_RECORD_OVERFLOW 22 +#define BR_ALERT_DECOMPRESSION_FAILURE 30 +#define BR_ALERT_HANDSHAKE_FAILURE 40 +#define BR_ALERT_BAD_CERTIFICATE 42 +#define BR_ALERT_UNSUPPORTED_CERTIFICATE 43 +#define BR_ALERT_CERTIFICATE_REVOKED 44 +#define BR_ALERT_CERTIFICATE_EXPIRED 45 +#define BR_ALERT_CERTIFICATE_UNKNOWN 46 +#define BR_ALERT_ILLEGAL_PARAMETER 47 +#define BR_ALERT_UNKNOWN_CA 48 +#define BR_ALERT_ACCESS_DENIED 49 +#define BR_ALERT_DECODE_ERROR 50 +#define BR_ALERT_DECRYPT_ERROR 51 +#define BR_ALERT_PROTOCOL_VERSION 70 +#define BR_ALERT_INSUFFICIENT_SECURITY 71 +#define BR_ALERT_INTERNAL_ERROR 80 +#define BR_ALERT_USER_CANCELED 90 +#define BR_ALERT_NO_RENEGOTIATION 100 +#define BR_ALERT_UNSUPPORTED_EXTENSION 110 +#define BR_ALERT_NO_APPLICATION_PROTOCOL 120 #ifdef __cplusplus } diff --git a/vendor/hydra/vendor/bearssl/inc/bearssl_x509.h b/vendor/hydra/vendor/bearssl/inc/bearssl_x509.h index 49d2fba0..11b41d75 100644 --- a/vendor/hydra/vendor/bearssl/inc/bearssl_x509.h +++ b/vendor/hydra/vendor/bearssl/inc/bearssl_x509.h @@ -1,7 +1,7 @@ /* * Copyright (c) 2016 Thomas Pornin * - * Permission is hereby granted, free of charge, to any person obtaining + * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, @@ -9,12 +9,12 @@ * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * - * The above copyright notice and this permission notice shall be + * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN @@ -127,114 +127,114 @@ extern "C" { /** \brief X.509 status: validation was successful; this is not actually an error. */ -#define BR_ERR_X509_OK 32 +#define BR_ERR_X509_OK 32 /** \brief X.509 status: invalid value in an ASN.1 structure. */ -#define BR_ERR_X509_INVALID_VALUE 33 +#define BR_ERR_X509_INVALID_VALUE 33 /** \brief X.509 status: truncated certificate. */ -#define BR_ERR_X509_TRUNCATED 34 +#define BR_ERR_X509_TRUNCATED 34 /** \brief X.509 status: empty certificate chain (no certificate at all). */ -#define BR_ERR_X509_EMPTY_CHAIN 35 +#define BR_ERR_X509_EMPTY_CHAIN 35 /** \brief X.509 status: decoding error: inner element extends beyond outer element size. */ -#define BR_ERR_X509_INNER_TRUNC 36 +#define BR_ERR_X509_INNER_TRUNC 36 /** \brief X.509 status: decoding error: unsupported tag class (application or private). */ -#define BR_ERR_X509_BAD_TAG_CLASS 37 +#define BR_ERR_X509_BAD_TAG_CLASS 37 /** \brief X.509 status: decoding error: unsupported tag value. */ -#define BR_ERR_X509_BAD_TAG_VALUE 38 +#define BR_ERR_X509_BAD_TAG_VALUE 38 /** \brief X.509 status: decoding error: indefinite length. */ -#define BR_ERR_X509_INDEFINITE_LENGTH 39 +#define BR_ERR_X509_INDEFINITE_LENGTH 39 /** \brief X.509 status: decoding error: extraneous element. */ -#define BR_ERR_X509_EXTRA_ELEMENT 40 +#define BR_ERR_X509_EXTRA_ELEMENT 40 /** \brief X.509 status: decoding error: unexpected element. */ -#define BR_ERR_X509_UNEXPECTED 41 +#define BR_ERR_X509_UNEXPECTED 41 /** \brief X.509 status: decoding error: expected constructed element, but is primitive. */ -#define BR_ERR_X509_NOT_CONSTRUCTED 42 +#define BR_ERR_X509_NOT_CONSTRUCTED 42 /** \brief X.509 status: decoding error: expected primitive element, but is constructed. */ -#define BR_ERR_X509_NOT_PRIMITIVE 43 +#define BR_ERR_X509_NOT_PRIMITIVE 43 /** \brief X.509 status: decoding error: BIT STRING length is not multiple of 8. */ -#define BR_ERR_X509_PARTIAL_BYTE 44 +#define BR_ERR_X509_PARTIAL_BYTE 44 /** \brief X.509 status: decoding error: BOOLEAN value has invalid length. */ -#define BR_ERR_X509_BAD_BOOLEAN 45 +#define BR_ERR_X509_BAD_BOOLEAN 45 /** \brief X.509 status: decoding error: value is off-limits. */ -#define BR_ERR_X509_OVERFLOW 46 +#define BR_ERR_X509_OVERFLOW 46 /** \brief X.509 status: invalid distinguished name. */ -#define BR_ERR_X509_BAD_DN 47 +#define BR_ERR_X509_BAD_DN 47 /** \brief X.509 status: invalid date/time representation. */ -#define BR_ERR_X509_BAD_TIME 48 +#define BR_ERR_X509_BAD_TIME 48 /** \brief X.509 status: certificate contains unsupported features that cannot be ignored. */ -#define BR_ERR_X509_UNSUPPORTED 49 +#define BR_ERR_X509_UNSUPPORTED 49 /** \brief X.509 status: key or signature size exceeds internal limits. */ -#define BR_ERR_X509_LIMIT_EXCEEDED 50 +#define BR_ERR_X509_LIMIT_EXCEEDED 50 /** \brief X.509 status: key type does not match that which was expected. */ -#define BR_ERR_X509_WRONG_KEY_TYPE 51 +#define BR_ERR_X509_WRONG_KEY_TYPE 51 /** \brief X.509 status: signature is invalid. */ -#define BR_ERR_X509_BAD_SIGNATURE 52 +#define BR_ERR_X509_BAD_SIGNATURE 52 /** \brief X.509 status: validation time is unknown. */ -#define BR_ERR_X509_TIME_UNKNOWN 53 +#define BR_ERR_X509_TIME_UNKNOWN 53 /** \brief X.509 status: certificate is expired or not yet valid. */ -#define BR_ERR_X509_EXPIRED 54 +#define BR_ERR_X509_EXPIRED 54 /** \brief X.509 status: issuer/subject DN mismatch in the chain. */ -#define BR_ERR_X509_DN_MISMATCH 55 +#define BR_ERR_X509_DN_MISMATCH 55 /** \brief X.509 status: expected server name was not found in the chain. */ -#define BR_ERR_X509_BAD_SERVER_NAME 56 +#define BR_ERR_X509_BAD_SERVER_NAME 56 /** \brief X.509 status: unknown critical extension in certificate. */ -#define BR_ERR_X509_CRITICAL_EXTENSION 57 +#define BR_ERR_X509_CRITICAL_EXTENSION 57 /** \brief X.509 status: not a CA, or path length constraint violation */ -#define BR_ERR_X509_NOT_CA 58 +#define BR_ERR_X509_NOT_CA 58 /** \brief X.509 status: Key Usage extension prohibits intended usage. */ -#define BR_ERR_X509_FORBIDDEN_KEY_USAGE 59 +#define BR_ERR_X509_FORBIDDEN_KEY_USAGE 59 /** \brief X.509 status: public key found in certificate is too small. */ -#define BR_ERR_X509_WEAK_PUBLIC_KEY 60 +#define BR_ERR_X509_WEAK_PUBLIC_KEY 60 /** \brief X.509 status: chain could not be linked to a trust anchor. */ -#define BR_ERR_X509_NOT_TRUSTED 62 +#define BR_ERR_X509_NOT_TRUSTED 62 /** * \brief Aggregate structure for public keys. */ typedef struct { - /** \brief Key type: `BR_KEYTYPE_RSA` or `BR_KEYTYPE_EC` */ - unsigned char key_type; - /** \brief Actual public key. */ - union { - /** \brief RSA public key. */ - br_rsa_public_key rsa; - /** \brief EC public key. */ - br_ec_public_key ec; - } key; + /** \brief Key type: `BR_KEYTYPE_RSA` or `BR_KEYTYPE_EC` */ + unsigned char key_type; + /** \brief Actual public key. */ + union { + /** \brief RSA public key. */ + br_rsa_public_key rsa; + /** \brief EC public key. */ + br_ec_public_key ec; + } key; } br_x509_pkey; /** @@ -243,22 +243,22 @@ typedef struct { * The DN is DER-encoded. */ typedef struct { - /** \brief Encoded DN data. */ - unsigned char *data; - /** \brief Encoded DN length (in bytes). */ - size_t len; + /** \brief Encoded DN data. */ + unsigned char *data; + /** \brief Encoded DN length (in bytes). */ + size_t len; } br_x500_name; /** * \brief Trust anchor structure. */ typedef struct { - /** \brief Encoded DN (X.500 name). */ - br_x500_name dn; - /** \brief Anchor flags (e.g. `BR_X509_TA_CA`). */ - unsigned flags; - /** \brief Anchor public key. */ - br_x509_pkey pkey; + /** \brief Encoded DN (X.500 name). */ + br_x500_name dn; + /** \brief Anchor flags (e.g. `BR_X509_TA_CA`). */ + unsigned flags; + /** \brief Anchor public key. */ + br_x509_pkey pkey; } br_x509_trust_anchor; /** @@ -268,7 +268,7 @@ typedef struct { * A "non-CA" anchor is accepted only for direct trust (server's * certificate name and key match the anchor). */ -#define BR_X509_TA_CA 0x0001 +#define BR_X509_TA_CA 0x0001 /* * Key type: combination of a basic key type (low 4 bits) and some @@ -281,9 +281,9 @@ typedef struct { * key type compatible with the indicated purpose is acceptable. */ /** \brief Key type: algorithm is RSA. */ -#define BR_KEYTYPE_RSA 1 +#define BR_KEYTYPE_RSA 1 /** \brief Key type: algorithm is EC. */ -#define BR_KEYTYPE_EC 2 +#define BR_KEYTYPE_EC 2 /** * \brief Key type: usage is "key exchange". @@ -294,7 +294,7 @@ typedef struct { * fit for key exchanges (e.g. `TLS_RSA_*` and `TLS_ECDH_*` cipher * suites). */ -#define BR_KEYTYPE_KEYX 0x10 +#define BR_KEYTYPE_KEYX 0x10 /** * \brief Key type: usage is "signature". @@ -304,7 +304,7 @@ typedef struct { * validation engine that it should find a public key of that type, * fit for signatures (e.g. `TLS_ECDHE_*` cipher suites). */ -#define BR_KEYTYPE_SIGN 0x20 +#define BR_KEYTYPE_SIGN 0x20 /* * start_chain Called when a new chain is started. If 'server_name' @@ -367,104 +367,103 @@ typedef struct { */ typedef struct br_x509_class_ br_x509_class; struct br_x509_class_ { - /** - * \brief X.509 context size, in bytes. - */ - size_t context_size; - - /** - * \brief Start a new chain. - * - * This method shall set the vtable (first field) of the context - * structure. - * - * The `server_name`, if not `NULL`, will be considered as a - * fully qualified domain name, to be matched against the `dNSName` - * elements of the end-entity certificate's SAN extension (if there - * is no SAN, then the Common Name from the subjectDN will be used). - * If `server_name` is `NULL` then no such matching is performed. - * - * \param ctx validation context. - * \param server_name server name to match (or `NULL`). - */ - void (*start_chain)(const br_x509_class **ctx, - const char *server_name); - - /** - * \brief Start a new certificate. - * - * \param ctx validation context. - * \param length new certificate length (in bytes). - */ - void (*start_cert)(const br_x509_class **ctx, uint32_t length); - - /** - * \brief Receive some bytes for the current certificate. - * - * This function may be called several times in succession for - * a given certificate. The caller guarantees that for each - * call, `len` is not zero, and the sum of all chunk lengths - * for a certificate matches the total certificate length which - * was provided in the previous `start_cert()` call. - * - * If the new certificate is empty (no byte at all) then this - * function won't be called at all. - * - * \param ctx validation context. - * \param buf certificate data chunk. - * \param len certificate data chunk length (in bytes). - */ - void (*append)(const br_x509_class **ctx, - const unsigned char *buf, size_t len); - - /** - * \brief Finish the current certificate. - * - * This function is called when the end of the current certificate - * is reached. - * - * \param ctx validation context. - */ - void (*end_cert)(const br_x509_class **ctx); - - /** - * \brief Finish the chain. - * - * This function is called at the end of the chain. It shall - * return either 0 if the validation was successful, or a - * non-zero error code. The `BR_ERR_X509_*` constants are - * error codes, though other values may be possible. - * - * \param ctx validation context. - * \return 0 on success, or a non-zero error code. - */ - unsigned (*end_chain)(const br_x509_class **ctx); - - /** - * \brief Get the resulting end-entity public key. - * - * The decoded public key is returned. The returned pointer - * may be valid only as long as the context structure is - * unmodified, i.e. it may cease to be valid if the context - * is released or reused. - * - * This function _may_ return `NULL` if the validation failed. - * However, returning a public key does not mean that the - * validation was wholly successful; some engines may return - * a decoded public key even if the chain did not end on a - * trusted anchor. - * - * If validation succeeded and `usage` is not `NULL`, then - * `*usage` is filled with a combination of `BR_KEYTYPE_SIGN` - * and/or `BR_KEYTYPE_KEYX` that specifies the validated key - * usage types. It is the caller's responsibility to check - * that value against the intended use of the public key. - * - * \param ctx validation context. - * \return the end-entity public key, or `NULL`. - */ - const br_x509_pkey *(*get_pkey)( - const br_x509_class *const *ctx, unsigned *usages); + /** + * \brief X.509 context size, in bytes. + */ + size_t context_size; + + /** + * \brief Start a new chain. + * + * This method shall set the vtable (first field) of the context + * structure. + * + * The `server_name`, if not `NULL`, will be considered as a + * fully qualified domain name, to be matched against the `dNSName` + * elements of the end-entity certificate's SAN extension (if there + * is no SAN, then the Common Name from the subjectDN will be used). + * If `server_name` is `NULL` then no such matching is performed. + * + * \param ctx validation context. + * \param server_name server name to match (or `NULL`). + */ + void (*start_chain)(const br_x509_class **ctx, const char *server_name); + + /** + * \brief Start a new certificate. + * + * \param ctx validation context. + * \param length new certificate length (in bytes). + */ + void (*start_cert)(const br_x509_class **ctx, uint32_t length); + + /** + * \brief Receive some bytes for the current certificate. + * + * This function may be called several times in succession for + * a given certificate. The caller guarantees that for each + * call, `len` is not zero, and the sum of all chunk lengths + * for a certificate matches the total certificate length which + * was provided in the previous `start_cert()` call. + * + * If the new certificate is empty (no byte at all) then this + * function won't be called at all. + * + * \param ctx validation context. + * \param buf certificate data chunk. + * \param len certificate data chunk length (in bytes). + */ + void (*append)(const br_x509_class **ctx, const unsigned char *buf, + size_t len); + + /** + * \brief Finish the current certificate. + * + * This function is called when the end of the current certificate + * is reached. + * + * \param ctx validation context. + */ + void (*end_cert)(const br_x509_class **ctx); + + /** + * \brief Finish the chain. + * + * This function is called at the end of the chain. It shall + * return either 0 if the validation was successful, or a + * non-zero error code. The `BR_ERR_X509_*` constants are + * error codes, though other values may be possible. + * + * \param ctx validation context. + * \return 0 on success, or a non-zero error code. + */ + unsigned (*end_chain)(const br_x509_class **ctx); + + /** + * \brief Get the resulting end-entity public key. + * + * The decoded public key is returned. The returned pointer + * may be valid only as long as the context structure is + * unmodified, i.e. it may cease to be valid if the context + * is released or reused. + * + * This function _may_ return `NULL` if the validation failed. + * However, returning a public key does not mean that the + * validation was wholly successful; some engines may return + * a decoded public key even if the chain did not end on a + * trusted anchor. + * + * If validation succeeded and `usage` is not `NULL`, then + * `*usage` is filled with a combination of `BR_KEYTYPE_SIGN` + * and/or `BR_KEYTYPE_KEYX` that specifies the validated key + * usage types. It is the caller's responsibility to check + * that value against the intended use of the public key. + * + * \param ctx validation context. + * \return the end-entity public key, or `NULL`. + */ + const br_x509_pkey *(*get_pkey)(const br_x509_class *const *ctx, + unsigned *usages); }; /** @@ -477,11 +476,11 @@ struct br_x509_class_ { * and totally ignores the certificate contents. */ typedef struct { - /** \brief Reference to the context vtable. */ - const br_x509_class *vtable; + /** \brief Reference to the context vtable. */ + const br_x509_class *vtable; #ifndef BR_DOXYGEN_IGNORE - br_x509_pkey pkey; - unsigned usages; + br_x509_pkey pkey; + unsigned usages; #endif } br_x509_knownkey_context; @@ -504,7 +503,7 @@ extern const br_x509_class br_x509_knownkey_vtable; * \param usages allowed key usages. */ void br_x509_knownkey_init_rsa(br_x509_knownkey_context *ctx, - const br_rsa_public_key *pk, unsigned usages); + const br_rsa_public_key *pk, unsigned usages); /** * \brief Initialize a "known key" X.509 engine with a known EC public key. @@ -520,7 +519,7 @@ void br_x509_knownkey_init_rsa(br_x509_knownkey_context *ctx, * \param usages allowed key usages. */ void br_x509_knownkey_init_ec(br_x509_knownkey_context *ctx, - const br_ec_public_key *pk, unsigned usages); + const br_ec_public_key *pk, unsigned usages); #ifndef BR_DOXYGEN_IGNORE /* @@ -551,8 +550,8 @@ void br_x509_knownkey_init_ec(br_x509_knownkey_context *ctx, * NIST P-521 (the largest curve we care to support), a public key is * encoded over 133 bytes only. */ -#define BR_X509_BUFSIZE_KEY 520 -#define BR_X509_BUFSIZE_SIG 512 +#define BR_X509_BUFSIZE_KEY 520 +#define BR_X509_BUFSIZE_SIG 512 #endif /** @@ -569,59 +568,59 @@ void br_x509_knownkey_init_ec(br_x509_knownkey_context *ctx, * error is reported. */ typedef struct { - /** - * \brief Element OID. - * - * For X.500 name elements (to be extracted from the subject DN), - * this is the encoded OID for the requested name element; the - * first byte shall contain the length of the DER-encoded OID - * value, followed by the OID value (for instance, OID 2.5.4.3, - * for id-at-commonName, will be `03 55 04 03`). This is - * equivalent to full DER encoding with the length but without - * the tag. - * - * For SAN name elements, the first byte (`oid[0]`) has value 0, - * followed by another byte that matches the expected GeneralName - * tag. Allowed second byte values are then: - * - * - 1: `rfc822Name` - * - * - 2: `dNSName` - * - * - 6: `uniformResourceIdentifier` - * - * - 0: `otherName` - * - * If first and second byte are 0, then this is a SAN element of - * type `otherName`; the `oid[]` array should then contain, right - * after the two bytes of value 0, an encoded OID (with the same - * conventions as for X.500 name elements). If a match is found - * for that OID, then the corresponding name element will be - * extracted, as long as it is a supported string type. - */ - const unsigned char *oid; - - /** - * \brief Destination buffer. - */ - char *buf; - - /** - * \brief Length (in bytes) of the destination buffer. - * - * The buffer MUST NOT be smaller than 1 byte. - */ - size_t len; - - /** - * \brief Decoding status. - * - * Status is 0 if the name element was not found, 1 if it was - * found and decoded, or -1 on error. Error conditions include - * an unrecognised encoding, an invalid encoding, or a string - * too large for the destination buffer. - */ - int status; + /** + * \brief Element OID. + * + * For X.500 name elements (to be extracted from the subject DN), + * this is the encoded OID for the requested name element; the + * first byte shall contain the length of the DER-encoded OID + * value, followed by the OID value (for instance, OID 2.5.4.3, + * for id-at-commonName, will be `03 55 04 03`). This is + * equivalent to full DER encoding with the length but without + * the tag. + * + * For SAN name elements, the first byte (`oid[0]`) has value 0, + * followed by another byte that matches the expected GeneralName + * tag. Allowed second byte values are then: + * + * - 1: `rfc822Name` + * + * - 2: `dNSName` + * + * - 6: `uniformResourceIdentifier` + * + * - 0: `otherName` + * + * If first and second byte are 0, then this is a SAN element of + * type `otherName`; the `oid[]` array should then contain, right + * after the two bytes of value 0, an encoded OID (with the same + * conventions as for X.500 name elements). If a match is found + * for that OID, then the corresponding name element will be + * extracted, as long as it is a supported string type. + */ + const unsigned char *oid; + + /** + * \brief Destination buffer. + */ + char *buf; + + /** + * \brief Length (in bytes) of the destination buffer. + * + * The buffer MUST NOT be smaller than 1 byte. + */ + size_t len; + + /** + * \brief Decoding status. + * + * Status is 0 if the name element was not found, 1 if it was + * found and decoded, or -1 on error. Error conditions include + * an unrecognised encoding, an invalid encoding, or a string + * too large for the destination buffer. + */ + int status; } br_name_element; @@ -635,100 +634,100 @@ typedef struct { * validation. */ typedef struct { - const br_x509_class *vtable; + const br_x509_class *vtable; #ifndef BR_DOXYGEN_IGNORE - /* Structure for returning the EE public key. */ - br_x509_pkey pkey; - - /* CPU for the T0 virtual machine. */ - struct { - uint32_t *dp; - uint32_t *rp; - const unsigned char *ip; - } cpu; - uint32_t dp_stack[32]; - uint32_t rp_stack[32]; - int err; - - /* Server name to match with the SAN / CN of the EE certificate. */ - const char *server_name; - - /* Validated key usages. */ - unsigned char key_usages; - - /* Explicitly set date and time. */ - uint32_t days, seconds; - - /* Current certificate length (in bytes). Set to 0 when the - certificate has been fully processed. */ - uint32_t cert_length; - - /* Number of certificates processed so far in the current chain. - It is incremented at the end of the processing of a certificate, - so it is 0 for the EE. */ - uint32_t num_certs; - - /* Certificate data chunk. */ - const unsigned char *hbuf; - size_t hlen; - - /* The pad serves as destination for various operations. */ - unsigned char pad[256]; - - /* Buffer for EE public key data. */ - unsigned char ee_pkey_data[BR_X509_BUFSIZE_KEY]; - - /* Buffer for currently decoded public key. */ - unsigned char pkey_data[BR_X509_BUFSIZE_KEY]; - - /* Signature type: signer key type, offset to the hash - function OID (in the T0 data block) and hash function - output length (TBS hash length). */ - unsigned char cert_signer_key_type; - uint16_t cert_sig_hash_oid; - unsigned char cert_sig_hash_len; - - /* Current/last certificate signature. */ - unsigned char cert_sig[BR_X509_BUFSIZE_SIG]; - uint16_t cert_sig_len; - - /* Minimum RSA key length (difference in bytes from 128). */ - int16_t min_rsa_size; - - /* Configured trust anchors. */ - const br_x509_trust_anchor *trust_anchors; - size_t trust_anchors_num; - - /* - * Multi-hasher for the TBS. - */ - unsigned char do_mhash; - br_multihash_context mhash; - unsigned char tbs_hash[64]; - - /* - * Simple hasher for the subject/issuer DN. - */ - unsigned char do_dn_hash; - const br_hash_class *dn_hash_impl; - br_hash_compat_context dn_hash; - unsigned char current_dn_hash[64]; - unsigned char next_dn_hash[64]; - unsigned char saved_dn_hash[64]; - - /* - * Name elements to gather. - */ - br_name_element *name_elts; - size_t num_name_elts; - - /* - * Public key cryptography implementations (signature verification). - */ - br_rsa_pkcs1_vrfy irsa; - br_ecdsa_vrfy iecdsa; - const br_ec_impl *iec; + /* Structure for returning the EE public key. */ + br_x509_pkey pkey; + + /* CPU for the T0 virtual machine. */ + struct { + uint32_t *dp; + uint32_t *rp; + const unsigned char *ip; + } cpu; + uint32_t dp_stack[32]; + uint32_t rp_stack[32]; + int err; + + /* Server name to match with the SAN / CN of the EE certificate. */ + const char *server_name; + + /* Validated key usages. */ + unsigned char key_usages; + + /* Explicitly set date and time. */ + uint32_t days, seconds; + + /* Current certificate length (in bytes). Set to 0 when the + certificate has been fully processed. */ + uint32_t cert_length; + + /* Number of certificates processed so far in the current chain. + It is incremented at the end of the processing of a certificate, + so it is 0 for the EE. */ + uint32_t num_certs; + + /* Certificate data chunk. */ + const unsigned char *hbuf; + size_t hlen; + + /* The pad serves as destination for various operations. */ + unsigned char pad[256]; + + /* Buffer for EE public key data. */ + unsigned char ee_pkey_data[BR_X509_BUFSIZE_KEY]; + + /* Buffer for currently decoded public key. */ + unsigned char pkey_data[BR_X509_BUFSIZE_KEY]; + + /* Signature type: signer key type, offset to the hash + function OID (in the T0 data block) and hash function + output length (TBS hash length). */ + unsigned char cert_signer_key_type; + uint16_t cert_sig_hash_oid; + unsigned char cert_sig_hash_len; + + /* Current/last certificate signature. */ + unsigned char cert_sig[BR_X509_BUFSIZE_SIG]; + uint16_t cert_sig_len; + + /* Minimum RSA key length (difference in bytes from 128). */ + int16_t min_rsa_size; + + /* Configured trust anchors. */ + const br_x509_trust_anchor *trust_anchors; + size_t trust_anchors_num; + + /* + * Multi-hasher for the TBS. + */ + unsigned char do_mhash; + br_multihash_context mhash; + unsigned char tbs_hash[64]; + + /* + * Simple hasher for the subject/issuer DN. + */ + unsigned char do_dn_hash; + const br_hash_class *dn_hash_impl; + br_hash_compat_context dn_hash; + unsigned char current_dn_hash[64]; + unsigned char next_dn_hash[64]; + unsigned char saved_dn_hash[64]; + + /* + * Name elements to gather. + */ + br_name_element *name_elts; + size_t num_name_elts; + + /* + * Public key cryptography implementations (signature verification). + */ + br_rsa_pkcs1_vrfy irsa; + br_ecdsa_vrfy iecdsa; + const br_ec_impl *iec; #endif } br_x509_minimal_context; @@ -755,8 +754,9 @@ extern const br_x509_class br_x509_minimal_vtable; * \param trust_anchors_num number of trust anchors. */ void br_x509_minimal_init(br_x509_minimal_context *ctx, - const br_hash_class *dn_hash_impl, - const br_x509_trust_anchor *trust_anchors, size_t trust_anchors_num); + const br_hash_class *dn_hash_impl, + const br_x509_trust_anchor *trust_anchors, + size_t trust_anchors_num); /** * \brief Set a supported hash function in an X.509 "minimal" engine. @@ -775,11 +775,9 @@ void br_x509_minimal_init(br_x509_minimal_context *ctx, * \param id hash function identifier (from 1 to 6). * \param impl hash function implementation (or `NULL`). */ -static inline void -br_x509_minimal_set_hash(br_x509_minimal_context *ctx, - int id, const br_hash_class *impl) -{ - br_multihash_setimpl(&ctx->mhash, id, impl); +static inline void br_x509_minimal_set_hash(br_x509_minimal_context *ctx, + int id, const br_hash_class *impl) { + br_multihash_setimpl(&ctx->mhash, id, impl); } /** @@ -794,11 +792,9 @@ br_x509_minimal_set_hash(br_x509_minimal_context *ctx, * \param ctx validation context. * \param irsa RSA signature verification implementation (or `0`). */ -static inline void -br_x509_minimal_set_rsa(br_x509_minimal_context *ctx, - br_rsa_pkcs1_vrfy irsa) -{ - ctx->irsa = irsa; +static inline void br_x509_minimal_set_rsa(br_x509_minimal_context *ctx, + br_rsa_pkcs1_vrfy irsa) { + ctx->irsa = irsa; } /** @@ -818,12 +814,11 @@ br_x509_minimal_set_rsa(br_x509_minimal_context *ctx, * \param iec elliptic curve implementation (or `NULL`). * \param iecdsa ECDSA implementation (or `0`). */ -static inline void -br_x509_minimal_set_ecdsa(br_x509_minimal_context *ctx, - const br_ec_impl *iec, br_ecdsa_vrfy iecdsa) -{ - ctx->iecdsa = iecdsa; - ctx->iec = iec; +static inline void br_x509_minimal_set_ecdsa(br_x509_minimal_context *ctx, + const br_ec_impl *iec, + br_ecdsa_vrfy iecdsa) { + ctx->iecdsa = iecdsa; + ctx->iec = iec; } /** @@ -838,7 +833,8 @@ br_x509_minimal_set_ecdsa(br_x509_minimal_context *ctx, * \param trust_anchors_num number of trust anchors. */ void br_x509_minimal_init_full(br_x509_minimal_context *ctx, - const br_x509_trust_anchor *trust_anchors, size_t trust_anchors_num); + const br_x509_trust_anchor *trust_anchors, + size_t trust_anchors_num); /** * \brief Set the validation time for the X.509 "minimal" engine. @@ -865,12 +861,10 @@ void br_x509_minimal_init_full(br_x509_minimal_context *ctx, * \param days days since January 1st, 0 AD (Gregorian calendar). * \param seconds seconds since midnight (0 to 86400). */ -static inline void -br_x509_minimal_set_time(br_x509_minimal_context *ctx, - uint32_t days, uint32_t seconds) -{ - ctx->days = days; - ctx->seconds = seconds; +static inline void br_x509_minimal_set_time(br_x509_minimal_context *ctx, + uint32_t days, uint32_t seconds) { + ctx->days = days; + ctx->seconds = seconds; } /** @@ -886,10 +880,9 @@ br_x509_minimal_set_time(br_x509_minimal_context *ctx, * \param ctx validation context. * \param byte_length minimum RSA key length, **in bytes** (not bits). */ -static inline void -br_x509_minimal_set_minrsa(br_x509_minimal_context *ctx, int byte_length) -{ - ctx->min_rsa_size = (int16_t)(byte_length - 128); +static inline void br_x509_minimal_set_minrsa(br_x509_minimal_context *ctx, + int byte_length) { + ctx->min_rsa_size = (int16_t)(byte_length - 128); } /** @@ -904,12 +897,10 @@ br_x509_minimal_set_minrsa(br_x509_minimal_context *ctx, int byte_length) * \param elts array of name element structures to fill. * \param num_elts number of name element structures to fill. */ -static inline void -br_x509_minimal_set_name_elements(br_x509_minimal_context *ctx, - br_name_element *elts, size_t num_elts) -{ - ctx->name_elts = elts; - ctx->num_name_elts = num_elts; +static inline void br_x509_minimal_set_name_elements( + br_x509_minimal_context *ctx, br_name_element *elts, size_t num_elts) { + ctx->name_elts = elts; + ctx->num_name_elts = num_elts; } /** @@ -922,51 +913,50 @@ br_x509_minimal_set_name_elements(br_x509_minimal_context *ctx, * Contents are opaque and shall not be accessed directly. */ typedef struct { - #ifndef BR_DOXYGEN_IGNORE - /* Structure for returning the public key. */ - br_x509_pkey pkey; - - /* CPU for the T0 virtual machine. */ - struct { - uint32_t *dp; - uint32_t *rp; - const unsigned char *ip; - } cpu; - uint32_t dp_stack[32]; - uint32_t rp_stack[32]; - int err; - - /* The pad serves as destination for various operations. */ - unsigned char pad[256]; - - /* Flag set when decoding succeeds. */ - unsigned char decoded; - - /* Validity dates. */ - uint32_t notbefore_days, notbefore_seconds; - uint32_t notafter_days, notafter_seconds; - - /* The "CA" flag. This is set to true if the certificate contains - a Basic Constraints extension that asserts CA status. */ - unsigned char isCA; - - /* DN processing: the subject DN is extracted and pushed to the - provided callback. */ - unsigned char copy_dn; - void *append_dn_ctx; - void (*append_dn)(void *ctx, const void *buf, size_t len); - - /* Certificate data chunk. */ - const unsigned char *hbuf; - size_t hlen; - - /* Buffer for decoded public key. */ - unsigned char pkey_data[BR_X509_BUFSIZE_KEY]; - - /* Type of key and hash function used in the certificate signature. */ - unsigned char signer_key_type; - unsigned char signer_hash_id; + /* Structure for returning the public key. */ + br_x509_pkey pkey; + + /* CPU for the T0 virtual machine. */ + struct { + uint32_t *dp; + uint32_t *rp; + const unsigned char *ip; + } cpu; + uint32_t dp_stack[32]; + uint32_t rp_stack[32]; + int err; + + /* The pad serves as destination for various operations. */ + unsigned char pad[256]; + + /* Flag set when decoding succeeds. */ + unsigned char decoded; + + /* Validity dates. */ + uint32_t notbefore_days, notbefore_seconds; + uint32_t notafter_days, notafter_seconds; + + /* The "CA" flag. This is set to true if the certificate contains + a Basic Constraints extension that asserts CA status. */ + unsigned char isCA; + + /* DN processing: the subject DN is extracted and pushed to the + provided callback. */ + unsigned char copy_dn; + void *append_dn_ctx; + void (*append_dn)(void *ctx, const void *buf, size_t len); + + /* Certificate data chunk. */ + const unsigned char *hbuf; + size_t hlen; + + /* Buffer for decoded public key. */ + unsigned char pkey_data[BR_X509_BUFSIZE_KEY]; + + /* Type of key and hash function used in the certificate signature. */ + unsigned char signer_key_type; + unsigned char signer_hash_id; #endif } br_x509_decoder_context; @@ -985,8 +975,9 @@ typedef struct { * \param append_dn_ctx context for the DN receiver callback. */ void br_x509_decoder_init(br_x509_decoder_context *ctx, - void (*append_dn)(void *ctx, const void *buf, size_t len), - void *append_dn_ctx); + void (*append_dn)(void *ctx, const void *buf, + size_t len), + void *append_dn_ctx); /** * \brief Push some certificate bytes into a decoder context. @@ -998,8 +989,8 @@ void br_x509_decoder_init(br_x509_decoder_context *ctx, * \param data certificate data chunk. * \param len certificate data chunk length (in bytes). */ -void br_x509_decoder_push(br_x509_decoder_context *ctx, - const void *data, size_t len); +void br_x509_decoder_push(br_x509_decoder_context *ctx, const void *data, + size_t len); /** * \brief Obtain the decoded public key. @@ -1013,14 +1004,13 @@ void br_x509_decoder_push(br_x509_decoder_context *ctx, * \param ctx X.509 decoder context. * \return the public key, or `NULL` on unfinished/error. */ -static inline br_x509_pkey * -br_x509_decoder_get_pkey(br_x509_decoder_context *ctx) -{ - if (ctx->decoded && ctx->err == 0) { - return &ctx->pkey; - } else { - return NULL; - } +static inline br_x509_pkey *br_x509_decoder_get_pkey( + br_x509_decoder_context *ctx) { + if (ctx->decoded && ctx->err == 0) { + return &ctx->pkey; + } else { + return NULL; + } } /** @@ -1033,16 +1023,14 @@ br_x509_decoder_get_pkey(br_x509_decoder_context *ctx) * \param ctx X.509 decoder context. * \return 0 on successful decoding, or a non-zero error code. */ -static inline int -br_x509_decoder_last_error(br_x509_decoder_context *ctx) -{ - if (ctx->err != 0) { - return ctx->err; - } - if (!ctx->decoded) { - return BR_ERR_X509_TRUNCATED; - } - return 0; +static inline int br_x509_decoder_last_error(br_x509_decoder_context *ctx) { + if (ctx->err != 0) { + return ctx->err; + } + if (!ctx->decoded) { + return BR_ERR_X509_TRUNCATED; + } + return 0; } /** @@ -1055,10 +1043,8 @@ br_x509_decoder_last_error(br_x509_decoder_context *ctx) * \param ctx X.509 decoder context. * \return the "isCA" flag. */ -static inline int -br_x509_decoder_isCA(br_x509_decoder_context *ctx) -{ - return ctx->isCA; +static inline int br_x509_decoder_isCA(br_x509_decoder_context *ctx) { + return ctx->isCA; } /** @@ -1071,10 +1057,9 @@ br_x509_decoder_isCA(br_x509_decoder_context *ctx) * \param ctx X.509 decoder context. * \return the issuing CA key type. */ -static inline int -br_x509_decoder_get_signer_key_type(br_x509_decoder_context *ctx) -{ - return ctx->signer_key_type; +static inline int br_x509_decoder_get_signer_key_type( + br_x509_decoder_context *ctx) { + return ctx->signer_key_type; } /** @@ -1086,20 +1071,19 @@ br_x509_decoder_get_signer_key_type(br_x509_decoder_context *ctx) * \param ctx X.509 decoder context. * \return the signature hash function identifier. */ -static inline int -br_x509_decoder_get_signer_hash_id(br_x509_decoder_context *ctx) -{ - return ctx->signer_hash_id; +static inline int br_x509_decoder_get_signer_hash_id( + br_x509_decoder_context *ctx) { + return ctx->signer_hash_id; } /** * \brief Type for an X.509 certificate (DER-encoded). */ typedef struct { - /** \brief The DER-encoded certificate data. */ - unsigned char *data; - /** \brief The DER-encoded certificate length (in bytes). */ - size_t data_len; + /** \brief The DER-encoded certificate data. */ + unsigned char *data; + /** \brief The DER-encoded certificate length (in bytes). */ + size_t data_len; } br_x509_certificate; /** @@ -1113,36 +1097,36 @@ typedef struct { */ typedef struct { #ifndef BR_DOXYGEN_IGNORE - /* Structure for returning the private key. */ - union { - br_rsa_private_key rsa; - br_ec_private_key ec; - } key; - - /* CPU for the T0 virtual machine. */ - struct { - uint32_t *dp; - uint32_t *rp; - const unsigned char *ip; - } cpu; - uint32_t dp_stack[32]; - uint32_t rp_stack[32]; - int err; - - /* Private key data chunk. */ - const unsigned char *hbuf; - size_t hlen; - - /* The pad serves as destination for various operations. */ - unsigned char pad[256]; - - /* Decoded key type; 0 until decoding is complete. */ - unsigned char key_type; - - /* Buffer for the private key elements. It shall be large enough - to accommodate all elements for a RSA-4096 private key (roughly - five 2048-bit integers, possibly a bit more). */ - unsigned char key_data[3 * BR_X509_BUFSIZE_SIG]; + /* Structure for returning the private key. */ + union { + br_rsa_private_key rsa; + br_ec_private_key ec; + } key; + + /* CPU for the T0 virtual machine. */ + struct { + uint32_t *dp; + uint32_t *rp; + const unsigned char *ip; + } cpu; + uint32_t dp_stack[32]; + uint32_t rp_stack[32]; + int err; + + /* Private key data chunk. */ + const unsigned char *hbuf; + size_t hlen; + + /* The pad serves as destination for various operations. */ + unsigned char pad[256]; + + /* Decoded key type; 0 until decoding is complete. */ + unsigned char key_type; + + /* Buffer for the private key elements. It shall be large enough + to accommodate all elements for a RSA-4096 private key (roughly + five 2048-bit integers, possibly a bit more). */ + unsigned char key_data[3 * BR_X509_BUFSIZE_SIG]; #endif } br_skey_decoder_context; @@ -1163,8 +1147,8 @@ void br_skey_decoder_init(br_skey_decoder_context *ctx); * \param data private key data chunk. * \param len private key data chunk length (in bytes). */ -void br_skey_decoder_push(br_skey_decoder_context *ctx, - const void *data, size_t len); +void br_skey_decoder_push(br_skey_decoder_context *ctx, const void *data, + size_t len); /** * \brief Get the decoding status for a private key. @@ -1176,16 +1160,15 @@ void br_skey_decoder_push(br_skey_decoder_context *ctx, * \param ctx key decoder context. * \return 0 on successful decoding, or a non-zero error code. */ -static inline int -br_skey_decoder_last_error(const br_skey_decoder_context *ctx) -{ - if (ctx->err != 0) { - return ctx->err; - } - if (ctx->key_type == 0) { - return BR_ERR_X509_TRUNCATED; - } - return 0; +static inline int br_skey_decoder_last_error( + const br_skey_decoder_context *ctx) { + if (ctx->err != 0) { + return ctx->err; + } + if (ctx->key_type == 0) { + return BR_ERR_X509_TRUNCATED; + } + return 0; } /** @@ -1197,14 +1180,12 @@ br_skey_decoder_last_error(const br_skey_decoder_context *ctx) * \param ctx key decoder context. * \return decoded private key type, or 0. */ -static inline int -br_skey_decoder_key_type(const br_skey_decoder_context *ctx) -{ - if (ctx->err == 0) { - return ctx->key_type; - } else { - return 0; - } +static inline int br_skey_decoder_key_type(const br_skey_decoder_context *ctx) { + if (ctx->err == 0) { + return ctx->key_type; + } else { + return 0; + } } /** @@ -1218,14 +1199,13 @@ br_skey_decoder_key_type(const br_skey_decoder_context *ctx) * \param ctx key decoder context. * \return decoded RSA private key, or `NULL`. */ -static inline const br_rsa_private_key * -br_skey_decoder_get_rsa(const br_skey_decoder_context *ctx) -{ - if (ctx->err == 0 && ctx->key_type == BR_KEYTYPE_RSA) { - return &ctx->key.rsa; - } else { - return NULL; - } +static inline const br_rsa_private_key *br_skey_decoder_get_rsa( + const br_skey_decoder_context *ctx) { + if (ctx->err == 0 && ctx->key_type == BR_KEYTYPE_RSA) { + return &ctx->key.rsa; + } else { + return NULL; + } } /** @@ -1239,14 +1219,13 @@ br_skey_decoder_get_rsa(const br_skey_decoder_context *ctx) * \param ctx key decoder context. * \return decoded EC private key, or `NULL`. */ -static inline const br_ec_private_key * -br_skey_decoder_get_ec(const br_skey_decoder_context *ctx) -{ - if (ctx->err == 0 && ctx->key_type == BR_KEYTYPE_EC) { - return &ctx->key.ec; - } else { - return NULL; - } +static inline const br_ec_private_key *br_skey_decoder_get_ec( + const br_skey_decoder_context *ctx) { + if (ctx->err == 0 && ctx->key_type == BR_KEYTYPE_EC) { + return &ctx->key.ec; + } else { + return NULL; + } } /** @@ -1281,7 +1260,8 @@ br_skey_decoder_get_ec(const br_skey_decoder_context *ctx) * \return the encoded key length (in bytes). */ size_t br_encode_rsa_raw_der(void *dest, const br_rsa_private_key *sk, - const br_rsa_public_key *pk, const void *d, size_t dlen); + const br_rsa_public_key *pk, const void *d, + size_t dlen); /** * \brief Encode an RSA private key (PKCS#8 DER format). @@ -1315,7 +1295,8 @@ size_t br_encode_rsa_raw_der(void *dest, const br_rsa_private_key *sk, * \return the encoded key length (in bytes). */ size_t br_encode_rsa_pkcs8_der(void *dest, const br_rsa_private_key *sk, - const br_rsa_public_key *pk, const void *d, size_t dlen); + const br_rsa_public_key *pk, const void *d, + size_t dlen); /** * \brief Encode an EC private key (raw DER format). @@ -1340,8 +1321,8 @@ size_t br_encode_rsa_pkcs8_der(void *dest, const br_rsa_private_key *sk, * \param pk the EC public key (or `NULL`). * \return the encoded key length (in bytes), or 0. */ -size_t br_encode_ec_raw_der(void *dest, - const br_ec_private_key *sk, const br_ec_public_key *pk); +size_t br_encode_ec_raw_der(void *dest, const br_ec_private_key *sk, + const br_ec_public_key *pk); /** * \brief Encode an EC private key (PKCS#8 DER format). @@ -1372,23 +1353,23 @@ size_t br_encode_ec_raw_der(void *dest, * \param pk the EC public key (or `NULL`). * \return the encoded key length (in bytes), or 0. */ -size_t br_encode_ec_pkcs8_der(void *dest, - const br_ec_private_key *sk, const br_ec_public_key *pk); +size_t br_encode_ec_pkcs8_der(void *dest, const br_ec_private_key *sk, + const br_ec_public_key *pk); /** * \brief PEM banner for RSA private key (raw). */ -#define BR_ENCODE_PEM_RSA_RAW "RSA PRIVATE KEY" +#define BR_ENCODE_PEM_RSA_RAW "RSA PRIVATE KEY" /** * \brief PEM banner for EC private key (raw). */ -#define BR_ENCODE_PEM_EC_RAW "EC PRIVATE KEY" +#define BR_ENCODE_PEM_EC_RAW "EC PRIVATE KEY" /** * \brief PEM banner for an RSA or EC private key in PKCS#8 format. */ -#define BR_ENCODE_PEM_PKCS8 "PRIVATE KEY" +#define BR_ENCODE_PEM_PKCS8 "PRIVATE KEY" #ifdef __cplusplus } diff --git a/vendor/hydra/vendor/bearssl/src/config.h b/vendor/hydra/vendor/bearssl/src/config.h index 8ea4d8af..dec2a69e 100644 --- a/vendor/hydra/vendor/bearssl/src/config.h +++ b/vendor/hydra/vendor/bearssl/src/config.h @@ -1,7 +1,7 @@ /* * Copyright (c) 2016 Thomas Pornin * - * Permission is hereby granted, free of charge, to any person obtaining + * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, @@ -9,12 +9,12 @@ * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * - * The above copyright notice and this permission notice shall be + * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN diff --git a/vendor/hydra/vendor/bearssl/src/inner.h b/vendor/hydra/vendor/bearssl/src/inner.h index 8c7f04e1..5e7af6cf 100644 --- a/vendor/hydra/vendor/bearssl/src/inner.h +++ b/vendor/hydra/vendor/bearssl/src/inner.h @@ -1,7 +1,7 @@ /* * Copyright (c) 2016 Thomas Pornin * - * Permission is hereby granted, free of charge, to any person obtaining + * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, @@ -9,12 +9,12 @@ * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * - * The above copyright notice and this permission notice shall be + * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN @@ -25,11 +25,11 @@ #ifndef INNER_H__ #define INNER_H__ -#include #include +#include -#include "config.h" #include "bearssl.h" +#include "config.h" /* * On MSVC, disable the warning about applying unary minus on an @@ -37,7 +37,7 @@ * good reasons. */ #if _MSC_VER -#pragma warning( disable : 4146 ) +#pragma warning(disable : 4146) #endif /* @@ -53,7 +53,7 @@ * no more than 23833 bits). RSA key sizes beyond 3072 bits don't make a * lot of sense anyway. */ -#define BR_MAX_RSA_SIZE 4096 +#define BR_MAX_RSA_SIZE 4096 /* * Minimum size for a RSA modulus (in bits); this value is used only to @@ -62,7 +62,7 @@ * specific cases might need shorter keys, for legacy or research * purposes. */ -#define BR_MIN_RSA_SIZE 512 +#define BR_MIN_RSA_SIZE 512 /* * Maximum size for a RSA factor (in bits). This is for RSA private-key @@ -71,7 +71,7 @@ * * This value MUST be a multiple of 32. */ -#define BR_MAX_RSA_FACTOR ((BR_MAX_RSA_SIZE + 64) >> 1) +#define BR_MAX_RSA_FACTOR ((BR_MAX_RSA_SIZE + 64) >> 1) /* * Maximum size for an EC curve (modulus or order), in bits. Size of @@ -79,7 +79,7 @@ * of 8 (so that decoding an integer with that many bytes does not * overflow). */ -#define BR_MAX_EC_SIZE 528 +#define BR_MAX_EC_SIZE 528 /* * Some macros to recognize the current architecture. Right now, we are @@ -100,20 +100,21 @@ * 32-bit for compatibility with all the legacy code that liberally uses * the 'DWORD' type for 32-bit values. * - * Macro names are taken from: http://nadeausoftware.com/articles/2012/02/c_c_tip_how_detect_processor_type_using_compiler_predefined_macros + * Macro names are taken from: + * http://nadeausoftware.com/articles/2012/02/c_c_tip_how_detect_processor_type_using_compiler_predefined_macros */ #ifndef BR_64 #if ((ULONG_MAX >> 31) >> 31) == 3 -#define BR_64 1 +#define BR_64 1 #elif defined(__ia64) || defined(__itanium__) || defined(_M_IA64) -#define BR_64 1 -#elif defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) \ - || defined(__64BIT__) || defined(_LP64) || defined(__LP64__) -#define BR_64 1 +#define BR_64 1 +#elif defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) || \ + defined(__64BIT__) || defined(_LP64) || defined(__LP64__) +#define BR_64 1 #elif defined(__sparc64__) -#define BR_64 1 +#define BR_64 1 #elif defined(__x86_64__) || defined(_M_X64) -#define BR_64 1 +#define BR_64 1 #endif #endif @@ -122,7 +123,7 @@ */ #ifndef BR_LOMUL #if BR_ARMEL_CORTEXM_GCC -#define BR_LOMUL 1 +#define BR_LOMUL 1 #endif #endif @@ -131,13 +132,13 @@ */ #ifndef BR_i386 #if __i386__ || _M_IX86 -#define BR_i386 1 +#define BR_i386 1 #endif #endif #ifndef BR_amd64 #if __x86_64__ || _M_X64 -#define BR_amd64 1 +#define BR_amd64 1 #endif #endif @@ -160,41 +161,41 @@ */ #ifndef BR_GCC #if __GNUC__ && !__clang__ -#define BR_GCC 1 +#define BR_GCC 1 #if __GNUC__ > 4 -#define BR_GCC_5_0 1 +#define BR_GCC_5_0 1 #elif __GNUC__ == 4 && __GNUC_MINOR__ >= 9 -#define BR_GCC_4_9 1 +#define BR_GCC_4_9 1 #elif __GNUC__ == 4 && __GNUC_MINOR__ >= 8 -#define BR_GCC_4_8 1 +#define BR_GCC_4_8 1 #elif __GNUC__ == 4 && __GNUC_MINOR__ >= 7 -#define BR_GCC_4_7 1 +#define BR_GCC_4_7 1 #elif __GNUC__ == 4 && __GNUC_MINOR__ >= 6 -#define BR_GCC_4_6 1 +#define BR_GCC_4_6 1 #elif __GNUC__ == 4 && __GNUC_MINOR__ >= 5 -#define BR_GCC_4_5 1 +#define BR_GCC_4_5 1 #elif __GNUC__ == 4 && __GNUC_MINOR__ >= 4 -#define BR_GCC_4_4 1 +#define BR_GCC_4_4 1 #endif #if BR_GCC_5_0 -#define BR_GCC_4_9 1 +#define BR_GCC_4_9 1 #endif #if BR_GCC_4_9 -#define BR_GCC_4_8 1 +#define BR_GCC_4_8 1 #endif #if BR_GCC_4_8 -#define BR_GCC_4_7 1 +#define BR_GCC_4_7 1 #endif #if BR_GCC_4_7 -#define BR_GCC_4_6 1 +#define BR_GCC_4_6 1 #endif #if BR_GCC_4_6 -#define BR_GCC_4_5 1 +#define BR_GCC_4_5 1 #endif #if BR_GCC_4_5 -#define BR_GCC_4_4 1 +#define BR_GCC_4_4 1 #endif #endif @@ -205,16 +206,16 @@ */ #ifndef BR_CLANG #if __clang__ -#define BR_CLANG 1 +#define BR_CLANG 1 #if __clang_major__ > 3 || (__clang_major__ == 3 && __clang_minor__ >= 8) -#define BR_CLANG_3_8 1 +#define BR_CLANG_3_8 1 #elif __clang_major__ == 3 && __clang_minor__ >= 7 -#define BR_CLANG_3_7 1 +#define BR_CLANG_3_7 1 #endif #if BR_CLANG_3_8 -#define BR_CLANG_3_7 1 +#define BR_CLANG_3_7 1 #endif #endif @@ -225,36 +226,36 @@ */ #ifndef BR_MSC #if _MSC_VER -#define BR_MSC 1 +#define BR_MSC 1 #if _MSC_VER >= 1900 -#define BR_MSC_2015 1 +#define BR_MSC_2015 1 #elif _MSC_VER >= 1800 -#define BR_MSC_2013 1 +#define BR_MSC_2013 1 #elif _MSC_VER >= 1700 -#define BR_MSC_2012 1 +#define BR_MSC_2012 1 #elif _MSC_VER >= 1600 -#define BR_MSC_2010 1 +#define BR_MSC_2010 1 #elif _MSC_VER >= 1500 -#define BR_MSC_2008 1 +#define BR_MSC_2008 1 #elif _MSC_VER >= 1400 -#define BR_MSC_2005 1 +#define BR_MSC_2005 1 #endif #if BR_MSC_2015 -#define BR_MSC_2013 1 +#define BR_MSC_2013 1 #endif #if BR_MSC_2013 -#define BR_MSC_2012 1 +#define BR_MSC_2012 1 #endif #if BR_MSC_2012 -#define BR_MSC_2010 1 +#define BR_MSC_2010 1 #endif #if BR_MSC_2010 -#define BR_MSC_2008 1 +#define BR_MSC_2008 1 #endif #if BR_MSC_2008 -#define BR_MSC_2005 1 +#define BR_MSC_2005 1 #endif #endif @@ -265,7 +266,7 @@ * 'target' attribute that activates support for specific opcodes. */ #if BR_GCC_4_4 || BR_CLANG_3_7 -#define BR_TARGET(x) __attribute__((target(x))) +#define BR_TARGET(x) __attribute__((target(x))) #else #define BR_TARGET(x) #endif @@ -276,7 +277,7 @@ */ #ifndef BR_AES_X86NI #if (BR_i386 || BR_amd64) && (BR_GCC_4_8 || BR_CLANG_3_7 || BR_MSC_2012) -#define BR_AES_X86NI 1 +#define BR_AES_X86NI 1 #endif #endif @@ -286,7 +287,7 @@ */ #ifndef BR_SSE2 #if (BR_i386 || BR_amd64) && (BR_GCC_4_4 || BR_CLANG_3_7 || BR_MSC_2005) -#define BR_SSE2 1 +#define BR_SSE2 1 #endif #endif @@ -296,7 +297,7 @@ */ #ifndef BR_RDRAND #if (BR_i386 || BR_amd64) && (BR_GCC_4_6 || BR_CLANG_3_7 || BR_MSC_2012) -#define BR_RDRAND 1 +#define BR_RDRAND 1 #endif #endif @@ -311,22 +312,18 @@ */ #ifndef BR_USE_URANDOM -#if defined _AIX \ - || defined __ANDROID__ \ - || defined __FreeBSD__ \ - || defined __NetBSD__ \ - || defined __OpenBSD__ \ - || defined __DragonFly__ \ - || defined __linux__ \ - || (defined __sun && (defined __SVR4 || defined __svr4__)) \ - || (defined __APPLE__ && defined __MACH__) -#define BR_USE_URANDOM 1 +#if defined _AIX || defined __ANDROID__ || defined __FreeBSD__ || \ + defined __NetBSD__ || defined __OpenBSD__ || defined __DragonFly__ || \ + defined __linux__ || \ + (defined __sun && (defined __SVR4 || defined __svr4__)) || \ + (defined __APPLE__ && defined __MACH__) +#define BR_USE_URANDOM 1 #endif #endif #ifndef BR_USE_WIN32_RAND #if defined _WIN32 || defined _WIN64 -#define BR_USE_WIN32_RAND 1 +#define BR_USE_WIN32_RAND 1 #endif #endif @@ -340,7 +337,7 @@ */ #ifndef BR_POWER8 #if __GNUC__ && ((_ARCH_PWR8 || _ARCH_PPC) && __CRYPTO__) -#define BR_POWER8 1 +#define BR_POWER8 1 #endif #endif @@ -351,24 +348,24 @@ #if defined BR_POWER8_LE #undef BR_POWER8_BE #if BR_POWER8_LE -#define BR_POWER8_BE 0 +#define BR_POWER8_BE 0 #else -#define BR_POWER8_BE 1 +#define BR_POWER8_BE 1 #endif #elif defined BR_POWER8_BE #undef BR_POWER8_LE #if BR_POWER8_BE -#define BR_POWER8_LE 0 +#define BR_POWER8_LE 0 #else -#define BR_POWER8_LE 1 +#define BR_POWER8_LE 1 #endif #else #if __LITTLE_ENDIAN__ -#define BR_POWER8_LE 1 -#define BR_POWER8_BE 0 +#define BR_POWER8_LE 1 +#define BR_POWER8_BE 0 #else -#define BR_POWER8_LE 0 -#define BR_POWER8_BE 1 +#define BR_POWER8_LE 0 +#define BR_POWER8_BE 1 #endif #endif #endif @@ -378,9 +375,9 @@ */ #if !defined BR_INT128 && !defined BR_UMUL128 #ifdef __SIZEOF_INT128__ -#define BR_INT128 1 +#define BR_INT128 1 #elif _M_X64 -#define BR_UMUL128 1 +#define BR_UMUL128 1 #endif #endif @@ -396,14 +393,14 @@ #if !defined BR_LE_UNALIGNED && !defined BR_BE_UNALIGNED #if __i386 || __i386__ || __x86_64__ || _M_IX86 || _M_X64 -#define BR_LE_UNALIGNED 1 +#define BR_LE_UNALIGNED 1 #elif BR_POWER8_BE -#define BR_BE_UNALIGNED 1 +#define BR_BE_UNALIGNED 1 #elif BR_POWER8_LE -#define BR_LE_UNALIGNED 1 -#elif (__powerpc__ || __powerpc64__ || _M_PPC || _ARCH_PPC || _ARCH_PPC64) \ - && __BIG_ENDIAN__ -#define BR_BE_UNALIGNED 1 +#define BR_LE_UNALIGNED 1 +#elif (__powerpc__ || __powerpc64__ || _M_PPC || _ARCH_PPC || _ARCH_PPC64) && \ + __BIG_ENDIAN__ +#define BR_BE_UNALIGNED 1 #endif #endif @@ -413,16 +410,15 @@ */ #ifndef BR_USE_UNIX_TIME -#if defined __unix__ || defined __linux__ \ - || defined _POSIX_SOURCE || defined _POSIX_C_SOURCE \ - || (defined __APPLE__ && defined __MACH__) -#define BR_USE_UNIX_TIME 1 +#if defined __unix__ || defined __linux__ || defined _POSIX_SOURCE || \ + defined _POSIX_C_SOURCE || (defined __APPLE__ && defined __MACH__) +#define BR_USE_UNIX_TIME 1 #endif #endif #ifndef BR_USE_WIN32_TIME #if defined _WIN32 || defined _WIN64 -#define BR_USE_WIN32_TIME 1 +#define BR_USE_WIN32_TIME 1 #endif #endif @@ -446,191 +442,161 @@ */ typedef union { - uint16_t u; - unsigned char b[sizeof(uint16_t)]; + uint16_t u; + unsigned char b[sizeof(uint16_t)]; } br_union_u16; typedef union { - uint32_t u; - unsigned char b[sizeof(uint32_t)]; + uint32_t u; + unsigned char b[sizeof(uint32_t)]; } br_union_u32; typedef union { - uint64_t u; - unsigned char b[sizeof(uint64_t)]; + uint64_t u; + unsigned char b[sizeof(uint64_t)]; } br_union_u64; -static inline void -br_enc16le(void *dst, unsigned x) -{ +static inline void br_enc16le(void *dst, unsigned x) { #if BR_LE_UNALIGNED - ((br_union_u16 *)dst)->u = x; + ((br_union_u16 *)dst)->u = x; #else - unsigned char *buf; + unsigned char *buf; - buf = dst; - buf[0] = (unsigned char)x; - buf[1] = (unsigned char)(x >> 8); + buf = dst; + buf[0] = (unsigned char)x; + buf[1] = (unsigned char)(x >> 8); #endif } -static inline void -br_enc16be(void *dst, unsigned x) -{ +static inline void br_enc16be(void *dst, unsigned x) { #if BR_BE_UNALIGNED - ((br_union_u16 *)dst)->u = x; + ((br_union_u16 *)dst)->u = x; #else - unsigned char *buf; + unsigned char *buf; - buf = dst; - buf[0] = (unsigned char)(x >> 8); - buf[1] = (unsigned char)x; + buf = dst; + buf[0] = (unsigned char)(x >> 8); + buf[1] = (unsigned char)x; #endif } -static inline unsigned -br_dec16le(const void *src) -{ +static inline unsigned br_dec16le(const void *src) { #if BR_LE_UNALIGNED - return ((const br_union_u16 *)src)->u; + return ((const br_union_u16 *)src)->u; #else - const unsigned char *buf; + const unsigned char *buf; - buf = src; - return (unsigned)buf[0] | ((unsigned)buf[1] << 8); + buf = src; + return (unsigned)buf[0] | ((unsigned)buf[1] << 8); #endif } -static inline unsigned -br_dec16be(const void *src) -{ +static inline unsigned br_dec16be(const void *src) { #if BR_BE_UNALIGNED - return ((const br_union_u16 *)src)->u; + return ((const br_union_u16 *)src)->u; #else - const unsigned char *buf; + const unsigned char *buf; - buf = src; - return ((unsigned)buf[0] << 8) | (unsigned)buf[1]; + buf = src; + return ((unsigned)buf[0] << 8) | (unsigned)buf[1]; #endif } -static inline void -br_enc32le(void *dst, uint32_t x) -{ +static inline void br_enc32le(void *dst, uint32_t x) { #if BR_LE_UNALIGNED - ((br_union_u32 *)dst)->u = x; + ((br_union_u32 *)dst)->u = x; #else - unsigned char *buf; + unsigned char *buf; - buf = dst; - buf[0] = (unsigned char)x; - buf[1] = (unsigned char)(x >> 8); - buf[2] = (unsigned char)(x >> 16); - buf[3] = (unsigned char)(x >> 24); + buf = dst; + buf[0] = (unsigned char)x; + buf[1] = (unsigned char)(x >> 8); + buf[2] = (unsigned char)(x >> 16); + buf[3] = (unsigned char)(x >> 24); #endif } -static inline void -br_enc32be(void *dst, uint32_t x) -{ +static inline void br_enc32be(void *dst, uint32_t x) { #if BR_BE_UNALIGNED - ((br_union_u32 *)dst)->u = x; + ((br_union_u32 *)dst)->u = x; #else - unsigned char *buf; + unsigned char *buf; - buf = dst; - buf[0] = (unsigned char)(x >> 24); - buf[1] = (unsigned char)(x >> 16); - buf[2] = (unsigned char)(x >> 8); - buf[3] = (unsigned char)x; + buf = dst; + buf[0] = (unsigned char)(x >> 24); + buf[1] = (unsigned char)(x >> 16); + buf[2] = (unsigned char)(x >> 8); + buf[3] = (unsigned char)x; #endif } -static inline uint32_t -br_dec32le(const void *src) -{ +static inline uint32_t br_dec32le(const void *src) { #if BR_LE_UNALIGNED - return ((const br_union_u32 *)src)->u; + return ((const br_union_u32 *)src)->u; #else - const unsigned char *buf; + const unsigned char *buf; - buf = src; - return (uint32_t)buf[0] - | ((uint32_t)buf[1] << 8) - | ((uint32_t)buf[2] << 16) - | ((uint32_t)buf[3] << 24); + buf = src; + return (uint32_t)buf[0] | ((uint32_t)buf[1] << 8) | ((uint32_t)buf[2] << 16) | + ((uint32_t)buf[3] << 24); #endif } -static inline uint32_t -br_dec32be(const void *src) -{ +static inline uint32_t br_dec32be(const void *src) { #if BR_BE_UNALIGNED - return ((const br_union_u32 *)src)->u; + return ((const br_union_u32 *)src)->u; #else - const unsigned char *buf; + const unsigned char *buf; - buf = src; - return ((uint32_t)buf[0] << 24) - | ((uint32_t)buf[1] << 16) - | ((uint32_t)buf[2] << 8) - | (uint32_t)buf[3]; + buf = src; + return ((uint32_t)buf[0] << 24) | ((uint32_t)buf[1] << 16) | + ((uint32_t)buf[2] << 8) | (uint32_t)buf[3]; #endif } -static inline void -br_enc64le(void *dst, uint64_t x) -{ +static inline void br_enc64le(void *dst, uint64_t x) { #if BR_LE_UNALIGNED - ((br_union_u64 *)dst)->u = x; + ((br_union_u64 *)dst)->u = x; #else - unsigned char *buf; + unsigned char *buf; - buf = dst; - br_enc32le(buf, (uint32_t)x); - br_enc32le(buf + 4, (uint32_t)(x >> 32)); + buf = dst; + br_enc32le(buf, (uint32_t)x); + br_enc32le(buf + 4, (uint32_t)(x >> 32)); #endif } -static inline void -br_enc64be(void *dst, uint64_t x) -{ +static inline void br_enc64be(void *dst, uint64_t x) { #if BR_BE_UNALIGNED - ((br_union_u64 *)dst)->u = x; + ((br_union_u64 *)dst)->u = x; #else - unsigned char *buf; + unsigned char *buf; - buf = dst; - br_enc32be(buf, (uint32_t)(x >> 32)); - br_enc32be(buf + 4, (uint32_t)x); + buf = dst; + br_enc32be(buf, (uint32_t)(x >> 32)); + br_enc32be(buf + 4, (uint32_t)x); #endif } -static inline uint64_t -br_dec64le(const void *src) -{ +static inline uint64_t br_dec64le(const void *src) { #if BR_LE_UNALIGNED - return ((const br_union_u64 *)src)->u; + return ((const br_union_u64 *)src)->u; #else - const unsigned char *buf; + const unsigned char *buf; - buf = src; - return (uint64_t)br_dec32le(buf) - | ((uint64_t)br_dec32le(buf + 4) << 32); + buf = src; + return (uint64_t)br_dec32le(buf) | ((uint64_t)br_dec32le(buf + 4) << 32); #endif } -static inline uint64_t -br_dec64be(const void *src) -{ +static inline uint64_t br_dec64be(const void *src) { #if BR_BE_UNALIGNED - return ((const br_union_u64 *)src)->u; + return ((const br_union_u64 *)src)->u; #else - const unsigned char *buf; + const unsigned char *buf; - buf = src; - return ((uint64_t)br_dec32be(buf) << 32) - | (uint64_t)br_dec32be(buf + 4); + buf = src; + return ((uint64_t)br_dec32be(buf) << 32) | (uint64_t)br_dec32be(buf + 4); #endif } @@ -655,12 +621,9 @@ void br_range_enc64be(void *dst, const uint64_t *v, size_t num); /* * Byte-swap a 32-bit integer. */ -static inline uint32_t -br_swap32(uint32_t x) -{ - x = ((x & (uint32_t)0x00FF00FF) << 8) - | ((x >> 8) & (uint32_t)0x00FF00FF); - return (x << 16) | (x >> 16); +static inline uint32_t br_swap32(uint32_t x) { + x = ((x & (uint32_t)0x00FF00FF) << 8) | ((x >> 8) & (uint32_t)0x00FF00FF); + return (x << 16) | (x >> 16); } /* ==================================================================== */ @@ -688,20 +651,17 @@ void br_sha2small_round(const unsigned char *buf, uint32_t *val); * The core function for the TLS PRF. It computes * P_hash(secret, label + seed), and XORs the result into the dst buffer. */ -void br_tls_phash(void *dst, size_t len, - const br_hash_class *dig, - const void *secret, size_t secret_len, const char *label, - size_t seed_num, const br_tls_prf_seed_chunk *seed); +void br_tls_phash(void *dst, size_t len, const br_hash_class *dig, + const void *secret, size_t secret_len, const char *label, + size_t seed_num, const br_tls_prf_seed_chunk *seed); /* * Copy all configured hash implementations from a multihash context * to another. */ -static inline void -br_multihash_copyimpl(br_multihash_context *dst, - const br_multihash_context *src) -{ - memcpy((void *)dst->impl, src->impl, sizeof src->impl); +static inline void br_multihash_copyimpl(br_multihash_context *dst, + const br_multihash_context *src) { + memcpy((void *)dst->impl, src->impl, sizeof src->impl); } /* ==================================================================== */ @@ -733,146 +693,118 @@ br_multihash_copyimpl(br_multihash_context *dst, /* * Negate a boolean. */ -static inline uint32_t -NOT(uint32_t ctl) -{ - return ctl ^ 1; -} +static inline uint32_t NOT(uint32_t ctl) { return ctl ^ 1; } /* * Multiplexer: returns x if ctl == 1, y if ctl == 0. */ -static inline uint32_t -MUX(uint32_t ctl, uint32_t x, uint32_t y) -{ - return y ^ (-ctl & (x ^ y)); +static inline uint32_t MUX(uint32_t ctl, uint32_t x, uint32_t y) { + return y ^ (-ctl & (x ^ y)); } /* * Equality check: returns 1 if x == y, 0 otherwise. */ -static inline uint32_t -EQ(uint32_t x, uint32_t y) -{ - uint32_t q; +static inline uint32_t EQ(uint32_t x, uint32_t y) { + uint32_t q; - q = x ^ y; - return NOT((q | -q) >> 31); + q = x ^ y; + return NOT((q | -q) >> 31); } /* * Inequality check: returns 1 if x != y, 0 otherwise. */ -static inline uint32_t -NEQ(uint32_t x, uint32_t y) -{ - uint32_t q; +static inline uint32_t NEQ(uint32_t x, uint32_t y) { + uint32_t q; - q = x ^ y; - return (q | -q) >> 31; + q = x ^ y; + return (q | -q) >> 31; } /* * Comparison: returns 1 if x > y, 0 otherwise. */ -static inline uint32_t -GT(uint32_t x, uint32_t y) -{ - /* - * If both x < 2^31 and x < 2^31, then y-x will have its high - * bit set if x > y, cleared otherwise. - * - * If either x >= 2^31 or y >= 2^31 (but not both), then the - * result is the high bit of x. - * - * If both x >= 2^31 and y >= 2^31, then we can virtually - * subtract 2^31 from both, and we are back to the first case. - * Since (y-2^31)-(x-2^31) = y-x, the subtraction is already - * fine. - */ - uint32_t z; - - z = y - x; - return (z ^ ((x ^ y) & (x ^ z))) >> 31; +static inline uint32_t GT(uint32_t x, uint32_t y) { + /* + * If both x < 2^31 and x < 2^31, then y-x will have its high + * bit set if x > y, cleared otherwise. + * + * If either x >= 2^31 or y >= 2^31 (but not both), then the + * result is the high bit of x. + * + * If both x >= 2^31 and y >= 2^31, then we can virtually + * subtract 2^31 from both, and we are back to the first case. + * Since (y-2^31)-(x-2^31) = y-x, the subtraction is already + * fine. + */ + uint32_t z; + + z = y - x; + return (z ^ ((x ^ y) & (x ^ z))) >> 31; } /* * Other comparisons (greater-or-equal, lower-than, lower-or-equal). */ -#define GE(x, y) NOT(GT(y, x)) -#define LT(x, y) GT(y, x) -#define LE(x, y) NOT(GT(x, y)) +#define GE(x, y) NOT(GT(y, x)) +#define LT(x, y) GT(y, x) +#define LE(x, y) NOT(GT(x, y)) /* * General comparison: returned value is -1, 0 or 1, depending on * whether x is lower than, equal to, or greater than y. */ -static inline int32_t -CMP(uint32_t x, uint32_t y) -{ - return (int32_t)GT(x, y) | -(int32_t)GT(y, x); +static inline int32_t CMP(uint32_t x, uint32_t y) { + return (int32_t)GT(x, y) | -(int32_t)GT(y, x); } /* * Returns 1 if x == 0, 0 otherwise. Take care that the operand is signed. */ -static inline uint32_t -EQ0(int32_t x) -{ - uint32_t q; +static inline uint32_t EQ0(int32_t x) { + uint32_t q; - q = (uint32_t)x; - return ~(q | -q) >> 31; + q = (uint32_t)x; + return ~(q | -q) >> 31; } /* * Returns 1 if x > 0, 0 otherwise. Take care that the operand is signed. */ -static inline uint32_t -GT0(int32_t x) -{ - /* - * High bit of -x is 0 if x == 0, but 1 if x > 0. - */ - uint32_t q; +static inline uint32_t GT0(int32_t x) { + /* + * High bit of -x is 0 if x == 0, but 1 if x > 0. + */ + uint32_t q; - q = (uint32_t)x; - return (~q & -q) >> 31; + q = (uint32_t)x; + return (~q & -q) >> 31; } /* * Returns 1 if x >= 0, 0 otherwise. Take care that the operand is signed. */ -static inline uint32_t -GE0(int32_t x) -{ - return ~(uint32_t)x >> 31; -} +static inline uint32_t GE0(int32_t x) { return ~(uint32_t)x >> 31; } /* * Returns 1 if x < 0, 0 otherwise. Take care that the operand is signed. */ -static inline uint32_t -LT0(int32_t x) -{ - return (uint32_t)x >> 31; -} +static inline uint32_t LT0(int32_t x) { return (uint32_t)x >> 31; } /* * Returns 1 if x <= 0, 0 otherwise. Take care that the operand is signed. */ -static inline uint32_t -LE0(int32_t x) -{ - uint32_t q; - - /* - * ~-x has its high bit set if and only if -x is nonnegative (as - * a signed int), i.e. x is in the -(2^31-1) to 0 range. We must - * do an OR with x itself to account for x = -2^31. - */ - q = (uint32_t)x; - return (q | ~-q) >> 31; +static inline uint32_t LE0(int32_t x) { + uint32_t q; + + /* + * ~-x has its high bit set if and only if -x is nonnegative (as + * a signed int), i.e. x is in the -(2^31-1) to 0 range. We must + * do an OR with x itself to account for x = -2^31. + */ + q = (uint32_t)x; + return (q | ~-q) >> 31; } /* @@ -881,42 +813,44 @@ LE0(int32_t x) */ void br_ccopy(uint32_t ctl, void *dst, const void *src, size_t len); -#define CCOPY br_ccopy +#define CCOPY br_ccopy /* * Compute the bit length of a 32-bit integer. Returned value is between 0 * and 32 (inclusive). */ -static inline uint32_t -BIT_LENGTH(uint32_t x) -{ - uint32_t k, c; - - k = NEQ(x, 0); - c = GT(x, 0xFFFF); x = MUX(c, x >> 16, x); k += c << 4; - c = GT(x, 0x00FF); x = MUX(c, x >> 8, x); k += c << 3; - c = GT(x, 0x000F); x = MUX(c, x >> 4, x); k += c << 2; - c = GT(x, 0x0003); x = MUX(c, x >> 2, x); k += c << 1; - k += GT(x, 0x0001); - return k; +static inline uint32_t BIT_LENGTH(uint32_t x) { + uint32_t k, c; + + k = NEQ(x, 0); + c = GT(x, 0xFFFF); + x = MUX(c, x >> 16, x); + k += c << 4; + c = GT(x, 0x00FF); + x = MUX(c, x >> 8, x); + k += c << 3; + c = GT(x, 0x000F); + x = MUX(c, x >> 4, x); + k += c << 2; + c = GT(x, 0x0003); + x = MUX(c, x >> 2, x); + k += c << 1; + k += GT(x, 0x0001); + return k; } /* * Compute the minimum of x and y. */ -static inline uint32_t -MIN(uint32_t x, uint32_t y) -{ - return MUX(GT(x, y), y, x); +static inline uint32_t MIN(uint32_t x, uint32_t y) { + return MUX(GT(x, y), y, x); } /* * Compute the maximum of x and y. */ -static inline uint32_t -MAX(uint32_t x, uint32_t y) -{ - return MUX(GT(x, y), x, y); +static inline uint32_t MAX(uint32_t x, uint32_t y) { + return MUX(GT(x, y), x, y); } /* @@ -924,7 +858,7 @@ MAX(uint32_t x, uint32_t y) * implementation assumes that the basic multiplication operator * yields constant-time code. */ -#define MUL(x, y) ((uint64_t)(x) * (uint64_t)(y)) +#define MUL(x, y) ((uint64_t)(x) * (uint64_t)(y)) #if BR_CT_MUL31 @@ -941,21 +875,19 @@ MAX(uint32_t x, uint32_t y) * word, and then replace automatically the unsigned multiplication with * a signed multiplication opcode. */ -#define MUL31(x, y) ((uint64_t)((x) | (uint32_t)0x80000000) \ - * (uint64_t)((y) | (uint32_t)0x80000000) \ - - ((uint64_t)(x) << 31) - ((uint64_t)(y) << 31) \ - - ((uint64_t)1 << 62)) -static inline uint32_t -MUL31_lo(uint32_t x, uint32_t y) -{ - uint32_t xl, xh; - uint32_t yl, yh; - - xl = (x & 0xFFFF) | (uint32_t)0x80000000; - xh = (x >> 16) | (uint32_t)0x80000000; - yl = (y & 0xFFFF) | (uint32_t)0x80000000; - yh = (y >> 16) | (uint32_t)0x80000000; - return (xl * yl + ((xl * yh + xh * yl) << 16)) & (uint32_t)0x7FFFFFFF; +#define MUL31(x, y) \ + ((uint64_t)((x) | (uint32_t)0x80000000) * \ + (uint64_t)((y) | (uint32_t)0x80000000) - \ + ((uint64_t)(x) << 31) - ((uint64_t)(y) << 31) - ((uint64_t)1 << 62)) +static inline uint32_t MUL31_lo(uint32_t x, uint32_t y) { + uint32_t xl, xh; + uint32_t yl, yh; + + xl = (x & 0xFFFF) | (uint32_t)0x80000000; + xh = (x >> 16) | (uint32_t)0x80000000; + yl = (y & 0xFFFF) | (uint32_t)0x80000000; + yh = (y >> 16) | (uint32_t)0x80000000; + return (xl * yl + ((xl * yh + xh * yl) << 16)) & (uint32_t)0x7FFFFFFF; } #else @@ -966,8 +898,8 @@ MUL31_lo(uint32_t x, uint32_t y) * yields constant-time code. * The MUL31_lo() macro returns only the low 31 bits of the product. */ -#define MUL31(x, y) ((uint64_t)(x) * (uint64_t)(y)) -#define MUL31_lo(x, y) (((uint32_t)(x) * (uint32_t)(y)) & (uint32_t)0x7FFFFFFF) +#define MUL31(x, y) ((uint64_t)(x) * (uint64_t)(y)) +#define MUL31_lo(x, y) (((uint32_t)(x) * (uint32_t)(y)) & (uint32_t)0x7FFFFFFF) #endif @@ -980,11 +912,12 @@ MUL31_lo(uint32_t x, uint32_t y) * multiplication is not constant-time. */ #if BR_CT_MUL15 -#define MUL15(x, y) (((uint32_t)(x) | (uint32_t)0x80000000) \ - * ((uint32_t)(y) | (uint32_t)0x80000000) \ - & (uint32_t)0x7FFFFFFF) +#define MUL15(x, y) \ + (((uint32_t)(x) | (uint32_t)0x80000000) * \ + ((uint32_t)(y) | (uint32_t)0x80000000) & \ + (uint32_t)0x7FFFFFFF) #else -#define MUL15(x, y) ((uint32_t)(x) * (uint32_t)(y)) +#define MUL15(x, y) ((uint32_t)(x) * (uint32_t)(y)) #endif /* @@ -1003,10 +936,10 @@ MUL31_lo(uint32_t x, uint32_t y) * and yields bigger code, which is why it is deactivated by default. */ #if BR_NO_ARITH_SHIFT -#define ARSH(x, n) (((uint32_t)(x) >> (n)) \ - | ((-((uint32_t)(x) >> 31)) << (32 - (n)))) +#define ARSH(x, n) \ + (((uint32_t)(x) >> (n)) | ((-((uint32_t)(x) >> 31)) << (32 - (n)))) #else -#define ARSH(x, n) ((*(int32_t *)&(x)) >> (n)) +#define ARSH(x, n) ((*(int32_t *)&(x)) >> (n)) #endif /* @@ -1022,25 +955,21 @@ uint32_t br_divrem(uint32_t hi, uint32_t lo, uint32_t d, uint32_t *r); * Wrapper for br_divrem(); the remainder is returned, and the quotient * is discarded. */ -static inline uint32_t -br_rem(uint32_t hi, uint32_t lo, uint32_t d) -{ - uint32_t r; +static inline uint32_t br_rem(uint32_t hi, uint32_t lo, uint32_t d) { + uint32_t r; - br_divrem(hi, lo, d, &r); - return r; + br_divrem(hi, lo, d, &r); + return r; } /* * Wrapper for br_divrem(); the quotient is returned, and the remainder * is discarded. */ -static inline uint32_t -br_div(uint32_t hi, uint32_t lo, uint32_t d) -{ - uint32_t r; +static inline uint32_t br_div(uint32_t hi, uint32_t lo, uint32_t d) { + uint32_t r; - return br_divrem(hi, lo, d, &r); + return br_divrem(hi, lo, d, &r); } /* ==================================================================== */ @@ -1103,8 +1032,8 @@ void br_i32_decode(uint32_t *x, const void *src, size_t len); * only of 'len' and the announced bit length of m. Whether x fits or * not does not leak either. */ -uint32_t br_i32_decode_mod(uint32_t *x, - const void *src, size_t len, const uint32_t *m); +uint32_t br_i32_decode_mod(uint32_t *x, const void *src, size_t len, + const uint32_t *m); /* * Reduce an integer (a[]) modulo another (m[]). The result is written @@ -1123,8 +1052,8 @@ void br_i32_reduce(uint32_t *x, const uint32_t *a, const uint32_t *m); * * x[] MUST be distinct from m[]. */ -void br_i32_decode_reduce(uint32_t *x, - const void *src, size_t len, const uint32_t *m); +void br_i32_decode_reduce(uint32_t *x, const void *src, size_t len, + const uint32_t *m); /* * Encode an integer into its big-endian unsigned representation. The @@ -1152,19 +1081,17 @@ void br_i32_muladd_small(uint32_t *x, uint32_t z, const uint32_t *m); * The word MUST entirely fit within the word elements corresponding * to the announced bit length of a[]. */ -static inline uint32_t -br_i32_word(const uint32_t *a, uint32_t off) -{ - size_t u; - unsigned j; - - u = (size_t)(off >> 5) + 1; - j = (unsigned)off & 31; - if (j == 0) { - return a[u]; - } else { - return (a[u] >> j) | (a[u + 1] << (32 - j)); - } +static inline uint32_t br_i32_word(const uint32_t *a, uint32_t off) { + size_t u; + unsigned j; + + u = (size_t)(off >> 5) + 1; + j = (unsigned)off & 31; + if (j == 0) { + return a[u]; + } else { + return (a[u] >> j) | (a[u + 1] << (32 - j)); + } } /* @@ -1207,11 +1134,9 @@ void br_i32_mulacc(uint32_t *d, const uint32_t *a, const uint32_t *b); * Zeroize an integer. The announced bit length is set to the provided * value, and the corresponding words are set to 0. */ -static inline void -br_i32_zero(uint32_t *x, uint32_t bit_len) -{ - *x ++ = bit_len; - memset(x, 0, ((bit_len + 31) >> 5) * sizeof *x); +static inline void br_i32_zero(uint32_t *x, uint32_t bit_len) { + *x++ = bit_len; + memset(x, 0, ((bit_len + 31) >> 5) * sizeof *x); } /* @@ -1244,7 +1169,7 @@ void br_i32_from_monty(uint32_t *x, const uint32_t *m, uint32_t m0i); * integer). */ void br_i32_montymul(uint32_t *d, const uint32_t *x, const uint32_t *y, - const uint32_t *m, uint32_t m0i); + const uint32_t *m, uint32_t m0i); /* * Compute a modular exponentiation. x[] MUST be an integer modulo m[] @@ -1256,7 +1181,7 @@ void br_i32_montymul(uint32_t *d, const uint32_t *x, const uint32_t *y, * each large enough to accommodate an integer with the same size as m[]. */ void br_i32_modpow(uint32_t *x, const unsigned char *e, size_t elen, - const uint32_t *m, uint32_t m0i, uint32_t *t1, uint32_t *t2); + const uint32_t *m, uint32_t m0i, uint32_t *t1, uint32_t *t2); /* ==================================================================== */ @@ -1347,19 +1272,17 @@ void br_i31_decode(uint32_t *x, const void *src, size_t len); * only of 'len' and the announced bit length of m. Whether x fits or * not does not leak either. */ -uint32_t br_i31_decode_mod(uint32_t *x, - const void *src, size_t len, const uint32_t *m); +uint32_t br_i31_decode_mod(uint32_t *x, const void *src, size_t len, + const uint32_t *m); /* * Zeroize an integer. The announced bit length is set to the provided * value, and the corresponding words are set to 0. The ENCODED bit length * is expected here. */ -static inline void -br_i31_zero(uint32_t *x, uint32_t bit_len) -{ - *x ++ = bit_len; - memset(x, 0, ((bit_len + 31) >> 5) * sizeof *x); +static inline void br_i31_zero(uint32_t *x, uint32_t bit_len) { + *x++ = bit_len; + memset(x, 0, ((bit_len + 31) >> 5) * sizeof *x); } /* @@ -1385,8 +1308,8 @@ void br_i31_reduce(uint32_t *x, const uint32_t *a, const uint32_t *m); * * x[] MUST be distinct from m[]. */ -void br_i31_decode_reduce(uint32_t *x, - const void *src, size_t len, const uint32_t *m); +void br_i31_decode_reduce(uint32_t *x, const void *src, size_t len, + const uint32_t *m); /* * Multiply x[] by 2^31 and then add integer z, modulo m[]. This @@ -1425,7 +1348,7 @@ uint32_t br_i31_ninv31(uint32_t x); * integer). */ void br_i31_montymul(uint32_t *d, const uint32_t *x, const uint32_t *y, - const uint32_t *m, uint32_t m0i); + const uint32_t *m, uint32_t m0i); /* * Convert a modular integer to Montgomery representation. The integer x[] @@ -1452,7 +1375,7 @@ void br_i31_from_monty(uint32_t *x, const uint32_t *m, uint32_t m0i); * each large enough to accommodate an integer with the same size as m[]. */ void br_i31_modpow(uint32_t *x, const unsigned char *e, size_t elen, - const uint32_t *m, uint32_t m0i, uint32_t *t1, uint32_t *t2); + const uint32_t *m, uint32_t m0i, uint32_t *t1, uint32_t *t2); /* * Compute a modular exponentiation. x[] MUST be an integer modulo m[] @@ -1471,7 +1394,8 @@ void br_i31_modpow(uint32_t *x, const unsigned char *e, size_t elen, * the provided tmp[] array is too short. */ uint32_t br_i31_modpow_opt(uint32_t *x, const unsigned char *e, size_t elen, - const uint32_t *m, uint32_t m0i, uint32_t *tmp, size_t twlen); + const uint32_t *m, uint32_t m0i, uint32_t *tmp, + size_t twlen); /* * Compute d+a*b, result in d. The initial announced bit length of d[] @@ -1500,8 +1424,8 @@ void br_i31_mulacc(uint32_t *d, const uint32_t *a, const uint32_t *b); * Returned value is 1 on success, 0 otherwise. Success is attained if * y is invertible modulo m. */ -uint32_t br_i31_moddiv(uint32_t *x, const uint32_t *y, - const uint32_t *m, uint32_t m0i, uint32_t *t); +uint32_t br_i31_moddiv(uint32_t *x, const uint32_t *y, const uint32_t *m, + uint32_t m0i, uint32_t *t); /* ==================================================================== */ @@ -1509,11 +1433,9 @@ uint32_t br_i31_moddiv(uint32_t *x, const uint32_t *y, * FIXME: document "i15" functions. */ -static inline void -br_i15_zero(uint16_t *x, uint16_t bit_len) -{ - *x ++ = bit_len; - memset(x, 0, ((bit_len + 15) >> 4) * sizeof *x); +static inline void br_i15_zero(uint16_t *x, uint16_t bit_len) { + *x++ = bit_len; + memset(x, 0, ((bit_len + 15) >> 4) * sizeof *x); } uint32_t br_i15_iszero(const uint16_t *x); @@ -1527,20 +1449,21 @@ uint32_t br_i15_sub(uint16_t *a, const uint16_t *b, uint32_t ctl); void br_i15_muladd_small(uint16_t *x, uint16_t z, const uint16_t *m); void br_i15_montymul(uint16_t *d, const uint16_t *x, const uint16_t *y, - const uint16_t *m, uint16_t m0i); + const uint16_t *m, uint16_t m0i); void br_i15_to_monty(uint16_t *x, const uint16_t *m); void br_i15_modpow(uint16_t *x, const unsigned char *e, size_t elen, - const uint16_t *m, uint16_t m0i, uint16_t *t1, uint16_t *t2); + const uint16_t *m, uint16_t m0i, uint16_t *t1, uint16_t *t2); uint32_t br_i15_modpow_opt(uint16_t *x, const unsigned char *e, size_t elen, - const uint16_t *m, uint16_t m0i, uint16_t *tmp, size_t twlen); + const uint16_t *m, uint16_t m0i, uint16_t *tmp, + size_t twlen); void br_i15_encode(void *dst, size_t len, const uint16_t *x); -uint32_t br_i15_decode_mod(uint16_t *x, - const void *src, size_t len, const uint16_t *m); +uint32_t br_i15_decode_mod(uint16_t *x, const void *src, size_t len, + const uint16_t *m); void br_i15_rshift(uint16_t *x, int count); @@ -1550,15 +1473,15 @@ void br_i15_decode(uint16_t *x, const void *src, size_t len); void br_i15_from_monty(uint16_t *x, const uint16_t *m, uint16_t m0i); -void br_i15_decode_reduce(uint16_t *x, - const void *src, size_t len, const uint16_t *m); +void br_i15_decode_reduce(uint16_t *x, const void *src, size_t len, + const uint16_t *m); void br_i15_reduce(uint16_t *x, const uint16_t *a, const uint16_t *m); void br_i15_mulacc(uint16_t *d, const uint16_t *a, const uint16_t *b); -uint32_t br_i15_moddiv(uint16_t *x, const uint16_t *y, - const uint16_t *m, uint16_t m0i, uint16_t *t); +uint32_t br_i15_moddiv(uint16_t *x, const uint16_t *y, const uint16_t *m, + uint16_t m0i, uint16_t *t); /* * Variant of br_i31_modpow_opt() that internally uses 64x64->128 @@ -1567,33 +1490,33 @@ uint32_t br_i15_moddiv(uint16_t *x, const uint16_t *y, * integers. */ uint32_t br_i62_modpow_opt(uint32_t *x31, const unsigned char *e, size_t elen, - const uint32_t *m31, uint32_t m0i31, uint64_t *tmp, size_t twlen); + const uint32_t *m31, uint32_t m0i31, uint64_t *tmp, + size_t twlen); /* * Type for a function with the same API as br_i31_modpow_opt() (some * implementations of this type may have stricter alignment requirements * on the temporaries). */ -typedef uint32_t (*br_i31_modpow_opt_type)(uint32_t *x, - const unsigned char *e, size_t elen, - const uint32_t *m, uint32_t m0i, uint32_t *tmp, size_t twlen); +typedef uint32_t (*br_i31_modpow_opt_type)(uint32_t *x, const unsigned char *e, + size_t elen, const uint32_t *m, + uint32_t m0i, uint32_t *tmp, + size_t twlen); /* * Wrapper for br_i62_modpow_opt() that uses the same type as * br_i31_modpow_opt(); however, it requires its 'tmp' argument to the * 64-bit aligned. */ -uint32_t br_i62_modpow_opt_as_i31(uint32_t *x, - const unsigned char *e, size_t elen, - const uint32_t *m, uint32_t m0i, uint32_t *tmp, size_t twlen); +uint32_t br_i62_modpow_opt_as_i31(uint32_t *x, const unsigned char *e, + size_t elen, const uint32_t *m, uint32_t m0i, + uint32_t *tmp, size_t twlen); /* ==================================================================== */ -static inline size_t -br_digest_size(const br_hash_class *digest_class) -{ - return (size_t)(digest_class->desc >> BR_HASHDESC_OUT_OFF) - & BR_HASHDESC_OUT_MASK; +static inline size_t br_digest_size(const br_hash_class *digest_class) { + return (size_t)(digest_class->desc >> BR_HASHDESC_OUT_OFF) & + BR_HASHDESC_OUT_MASK; } /* @@ -1651,20 +1574,20 @@ unsigned br_des_ct_keysched(uint32_t *skey, const void *key, size_t key_len); /* * DES/3DES subkey decompression (from the compressed bitsliced subkeys). */ -void br_des_ct_skey_expand(uint32_t *sk_exp, - unsigned num_rounds, const uint32_t *skey); +void br_des_ct_skey_expand(uint32_t *sk_exp, unsigned num_rounds, + const uint32_t *skey); /* * DES/3DES block encryption/decryption ('des_tab'). */ -void br_des_tab_process_block(unsigned num_rounds, - const uint32_t *skey, void *block); +void br_des_tab_process_block(unsigned num_rounds, const uint32_t *skey, + void *block); /* * DES/3DES block encryption/decryption ('des_ct'). */ -void br_des_ct_process_block(unsigned num_rounds, - const uint32_t *skey, void *block); +void br_des_ct_process_block(unsigned num_rounds, const uint32_t *skey, + void *block); /* ==================================================================== */ /* @@ -1689,8 +1612,8 @@ unsigned br_aes_keysched(uint32_t *skey, const void *key, size_t key_len); /* * AES key schedule for decryption ('aes_big' implementation). */ -unsigned br_aes_big_keysched_inv(uint32_t *skey, - const void *key, size_t key_len); +unsigned br_aes_big_keysched_inv(uint32_t *skey, const void *key, + size_t key_len); /* * AES block encryption with the 'aes_big' implementation (fast, but @@ -1709,16 +1632,16 @@ void br_aes_big_decrypt(unsigned num_rounds, const uint32_t *skey, void *data); * slow and not constant-time). This function encrypts a single block * "in place". */ -void br_aes_small_encrypt(unsigned num_rounds, - const uint32_t *skey, void *data); +void br_aes_small_encrypt(unsigned num_rounds, const uint32_t *skey, + void *data); /* * AES block decryption with the 'aes_small' implementation (small, but * slow and not constant-time). This function decrypts a single block * "in place". */ -void br_aes_small_decrypt(unsigned num_rounds, - const uint32_t *skey, void *data); +void br_aes_small_decrypt(unsigned num_rounds, const uint32_t *skey, + void *data); /* * The constant-time implementation is "bitsliced": the 128-bit state is @@ -1780,16 +1703,16 @@ void br_aes_ct_bitslice_invSbox(uint32_t *q); * eight 32-bit words, two block encryptions are actually performed * in parallel. */ -void br_aes_ct_bitslice_encrypt(unsigned num_rounds, - const uint32_t *skey, uint32_t *q); +void br_aes_ct_bitslice_encrypt(unsigned num_rounds, const uint32_t *skey, + uint32_t *q); /* * Compute AES decryption on bitsliced data. Since input is stored on * eight 32-bit words, two block decryptions are actually performed * in parallel. */ -void br_aes_ct_bitslice_decrypt(unsigned num_rounds, - const uint32_t *skey, uint32_t *q); +void br_aes_ct_bitslice_decrypt(unsigned num_rounds, const uint32_t *skey, + uint32_t *q); /* * AES key schedule, constant-time version. skey[] is filled with n+1 @@ -1797,16 +1720,16 @@ void br_aes_ct_bitslice_decrypt(unsigned num_rounds, * on key size). The number of rounds is returned. If the key size is * invalid (not 16, 24 or 32), then 0 is returned. */ -unsigned br_aes_ct_keysched(uint32_t *comp_skey, - const void *key, size_t key_len); +unsigned br_aes_ct_keysched(uint32_t *comp_skey, const void *key, + size_t key_len); /* * Expand AES subkeys as produced by br_aes_ct_keysched(), into * a larger array suitable for br_aes_ct_bitslice_encrypt() and * br_aes_ct_bitslice_decrypt(). */ -void br_aes_ct_skey_expand(uint32_t *skey, - unsigned num_rounds, const uint32_t *comp_skey); +void br_aes_ct_skey_expand(uint32_t *skey, unsigned num_rounds, + const uint32_t *comp_skey); /* * For the ct64 implementation, the same bitslicing technique is used, @@ -1858,16 +1781,16 @@ void br_aes_ct64_bitslice_invSbox(uint64_t *q); * eight 64-bit words, four block encryptions are actually performed * in parallel. */ -void br_aes_ct64_bitslice_encrypt(unsigned num_rounds, - const uint64_t *skey, uint64_t *q); +void br_aes_ct64_bitslice_encrypt(unsigned num_rounds, const uint64_t *skey, + uint64_t *q); /* * Compute AES decryption on bitsliced data. Since input is stored on * eight 64-bit words, four block decryptions are actually performed * in parallel. */ -void br_aes_ct64_bitslice_decrypt(unsigned num_rounds, - const uint64_t *skey, uint64_t *q); +void br_aes_ct64_bitslice_decrypt(unsigned num_rounds, const uint64_t *skey, + uint64_t *q); /* * AES key schedule, constant-time version. skey[] is filled with n+1 @@ -1875,16 +1798,16 @@ void br_aes_ct64_bitslice_decrypt(unsigned num_rounds, * on key size). The number of rounds is returned. If the key size is * invalid (not 16, 24 or 32), then 0 is returned. */ -unsigned br_aes_ct64_keysched(uint64_t *comp_skey, - const void *key, size_t key_len); +unsigned br_aes_ct64_keysched(uint64_t *comp_skey, const void *key, + size_t key_len); /* * Expand AES subkeys as produced by br_aes_ct64_keysched(), into * a larger array suitable for br_aes_ct64_bitslice_encrypt() and * br_aes_ct64_bitslice_decrypt(). */ -void br_aes_ct64_skey_expand(uint64_t *skey, - unsigned num_rounds, const uint64_t *comp_skey); +void br_aes_ct64_skey_expand(uint64_t *skey, unsigned num_rounds, + const uint64_t *comp_skey); /* * Test support for AES-NI opcodes. @@ -1896,16 +1819,16 @@ int br_aes_x86ni_supported(void); * subkeys in the encryption direction. Number of rounds is returned. * Key size MUST be 16, 24 or 32 bytes; otherwise, 0 is returned. */ -unsigned br_aes_x86ni_keysched_enc(unsigned char *skni, - const void *key, size_t len); +unsigned br_aes_x86ni_keysched_enc(unsigned char *skni, const void *key, + size_t len); /* * AES key schedule, using x86 AES-NI instructions. This yields the * subkeys in the decryption direction. Number of rounds is returned. * Key size MUST be 16, 24 or 32 bytes; otherwise, 0 is returned. */ -unsigned br_aes_x86ni_keysched_dec(unsigned char *skni, - const void *key, size_t len); +unsigned br_aes_x86ni_keysched_dec(unsigned char *skni, const void *key, + size_t len); /* * Test support for AES POWER8 opcodes. @@ -1917,8 +1840,7 @@ int br_aes_pwr8_supported(void); * subkeys in the encryption direction. Number of rounds is returned. * Key size MUST be 16, 24 or 32 bytes; otherwise, 0 is returned. */ -unsigned br_aes_pwr8_keysched(unsigned char *skni, - const void *key, size_t len); +unsigned br_aes_pwr8_keysched(unsigned char *skni, const void *key, size_t len); /* ==================================================================== */ /* @@ -1930,8 +1852,8 @@ unsigned br_aes_pwr8_keysched(unsigned char *skni, * the encoded hash function OID, or NULL. */ uint32_t br_rsa_pkcs1_sig_pad(const unsigned char *hash_oid, - const unsigned char *hash, size_t hash_len, - uint32_t n_bitlen, unsigned char *x); + const unsigned char *hash, size_t hash_len, + uint32_t n_bitlen, unsigned char *x); /* * Check PKCS#1 v1.5 padding (for signatures). 'hash_oid' is the encoded @@ -1940,16 +1862,17 @@ uint32_t br_rsa_pkcs1_sig_pad(const unsigned char *hash_oid, * success, the hashed message is extracted. */ uint32_t br_rsa_pkcs1_sig_unpad(const unsigned char *sig, size_t sig_len, - const unsigned char *hash_oid, size_t hash_len, - unsigned char *hash_out); + const unsigned char *hash_oid, size_t hash_len, + unsigned char *hash_out); /* * Apply OAEP padding. Returned value is the actual padded string length, * or zero on error. */ size_t br_rsa_oaep_pad(const br_prng_class **rnd, const br_hash_class *dig, - const void *label, size_t label_len, const br_rsa_public_key *pk, - void *dst, size_t dst_nax_len, const void *src, size_t src_len); + const void *label, size_t label_len, + const br_rsa_public_key *pk, void *dst, + size_t dst_nax_len, const void *src, size_t src_len); /* * Unravel and check OAEP padding. If the padding is correct, then 1 is @@ -1958,24 +1881,25 @@ size_t br_rsa_oaep_pad(const br_prng_class **rnd, const br_hash_class *dig, * incorrect, then 0 is returned and '*len' is untouched. Either way, * the complete buffer contents are altered. */ -uint32_t br_rsa_oaep_unpad(const br_hash_class *dig, - const void *label, size_t label_len, void *data, size_t *len); +uint32_t br_rsa_oaep_unpad(const br_hash_class *dig, const void *label, + size_t label_len, void *data, size_t *len); /* * Compute MGF1 for a given seed, and XOR the output into the provided * buffer. */ -void br_mgf1_xor(void *data, size_t len, - const br_hash_class *dig, const void *seed, size_t seed_len); +void br_mgf1_xor(void *data, size_t len, const br_hash_class *dig, + const void *seed, size_t seed_len); /* * Inner function for RSA key generation; used by the "i31" and "i62" * implementations. */ uint32_t br_rsa_i31_keygen_inner(const br_prng_class **rng, - br_rsa_private_key *sk, void *kbuf_priv, - br_rsa_public_key *pk, void *kbuf_pub, - unsigned size, uint32_t pubexp, br_i31_modpow_opt_type mp31); + br_rsa_private_key *sk, void *kbuf_priv, + br_rsa_public_key *pk, void *kbuf_pub, + unsigned size, uint32_t pubexp, + br_i31_modpow_opt_type mp31); /* ==================================================================== */ /* @@ -1987,11 +1911,11 @@ uint32_t br_rsa_i31_keygen_inner(const br_prng_class **rng, * encoding) and encoded conventional generator. */ typedef struct { - int curve; - const unsigned char *order; - size_t order_len; - const unsigned char *generator; - size_t generator_len; + int curve; + const unsigned char *order; + size_t order_len; + const unsigned char *generator; + size_t generator_len; } br_ec_curve_def; extern const br_ec_curve_def br_secp256r1; @@ -2014,8 +1938,8 @@ extern const br_ec_curve_def br_curve25519; * this declared bit length, and consists the big-endian unsigned decoding * of exactly that many bits in the source (capped at the source length). */ -void br_ecdsa_i31_bits2int(uint32_t *x, - const void *src, size_t len, uint32_t ebitlen); +void br_ecdsa_i31_bits2int(uint32_t *x, const void *src, size_t len, + uint32_t ebitlen); /* * Decode some bytes as an i15 integer, with truncation (corresponding @@ -2024,8 +1948,8 @@ void br_ecdsa_i31_bits2int(uint32_t *x, * this declared bit length, and consists the big-endian unsigned decoding * of exactly that many bits in the source (capped at the source length). */ -void br_ecdsa_i15_bits2int(uint16_t *x, - const void *src, size_t len, uint32_t ebitlen); +void br_ecdsa_i15_bits2int(uint16_t *x, const void *src, size_t len, + uint32_t ebitlen); /* ==================================================================== */ /* @@ -2044,9 +1968,9 @@ void br_ecdsa_i15_bits2int(uint16_t *x, * or len+1. */ typedef struct { - const unsigned char *data; - size_t len; - size_t asn1len; + const unsigned char *data; + size_t len; + size_t asn1len; } br_asn1_uint; /* @@ -2065,7 +1989,7 @@ size_t br_asn1_encode_length(void *dest, size_t len); /* * Convenient macro for computing lengths of lengths. */ -#define len_of_len(len) br_asn1_encode_length(NULL, len) +#define len_of_len(len) br_asn1_encode_length(NULL, len) /* * Encode a (prepared) ASN.1 INTEGER. The encoded length is returned. @@ -2089,9 +2013,9 @@ const unsigned char *br_get_curve_OID(int curve); * parameter: if 'include_curve_oid' is zero, then the curve OID is * _not_ included in the output blob (this is for PKCS#8 support). */ -size_t br_encode_ec_raw_der_inner(void *dest, - const br_ec_private_key *sk, const br_ec_public_key *pk, - int include_curve_oid); +size_t br_encode_ec_raw_der_inner(void *dest, const br_ec_private_key *sk, + const br_ec_public_key *pk, + int include_curve_oid); /* ==================================================================== */ /* @@ -2101,38 +2025,38 @@ size_t br_encode_ec_raw_der_inner(void *dest, /* * Record types. */ -#define BR_SSL_CHANGE_CIPHER_SPEC 20 -#define BR_SSL_ALERT 21 -#define BR_SSL_HANDSHAKE 22 -#define BR_SSL_APPLICATION_DATA 23 +#define BR_SSL_CHANGE_CIPHER_SPEC 20 +#define BR_SSL_ALERT 21 +#define BR_SSL_HANDSHAKE 22 +#define BR_SSL_APPLICATION_DATA 23 /* * Handshake message types. */ -#define BR_SSL_HELLO_REQUEST 0 -#define BR_SSL_CLIENT_HELLO 1 -#define BR_SSL_SERVER_HELLO 2 -#define BR_SSL_CERTIFICATE 11 -#define BR_SSL_SERVER_KEY_EXCHANGE 12 -#define BR_SSL_CERTIFICATE_REQUEST 13 -#define BR_SSL_SERVER_HELLO_DONE 14 -#define BR_SSL_CERTIFICATE_VERIFY 15 -#define BR_SSL_CLIENT_KEY_EXCHANGE 16 -#define BR_SSL_FINISHED 20 +#define BR_SSL_HELLO_REQUEST 0 +#define BR_SSL_CLIENT_HELLO 1 +#define BR_SSL_SERVER_HELLO 2 +#define BR_SSL_CERTIFICATE 11 +#define BR_SSL_SERVER_KEY_EXCHANGE 12 +#define BR_SSL_CERTIFICATE_REQUEST 13 +#define BR_SSL_SERVER_HELLO_DONE 14 +#define BR_SSL_CERTIFICATE_VERIFY 15 +#define BR_SSL_CLIENT_KEY_EXCHANGE 16 +#define BR_SSL_FINISHED 20 /* * Alert levels. */ -#define BR_LEVEL_WARNING 1 -#define BR_LEVEL_FATAL 2 +#define BR_LEVEL_WARNING 1 +#define BR_LEVEL_FATAL 2 /* * Low-level I/O state. */ -#define BR_IO_FAILED 0 -#define BR_IO_IN 1 -#define BR_IO_OUT 2 -#define BR_IO_INOUT 3 +#define BR_IO_FAILED 0 +#define BR_IO_IN 1 +#define BR_IO_OUT 2 +#define BR_IO_INOUT 3 /* * Mark a SSL engine as failed. The provided error code is recorded if @@ -2144,10 +2068,8 @@ void br_ssl_engine_fail(br_ssl_engine_context *cc, int err); /* * Test whether the engine is closed (normally or as a failure). */ -static inline int -br_ssl_engine_closed(const br_ssl_engine_context *cc) -{ - return cc->iomode == BR_IO_FAILED; +static inline int br_ssl_engine_closed(const br_ssl_engine_context *cc) { + return cc->iomode == BR_IO_FAILED; } /* @@ -2155,8 +2077,8 @@ br_ssl_engine_closed(const br_ssl_engine_context *cc) * length for outgoing records is immediately adjusted (if there are * not already too many buffered bytes for that). */ -void br_ssl_engine_new_max_frag_len( - br_ssl_engine_context *rc, unsigned max_frag_len); +void br_ssl_engine_new_max_frag_len(br_ssl_engine_context *rc, + unsigned max_frag_len); /* * Test whether the current incoming record has been fully received @@ -2175,10 +2097,9 @@ void br_ssl_engine_flush_record(br_ssl_engine_context *cc); /* * Test whether there is some accumulated payload to send. */ -static inline int -br_ssl_engine_has_pld_to_send(const br_ssl_engine_context *rc) -{ - return rc->oxa != rc->oxb && rc->oxa != rc->oxc; +static inline int br_ssl_engine_has_pld_to_send( + const br_ssl_engine_context *rc) { + return rc->oxa != rc->oxb && rc->oxa != rc->oxc; } /* @@ -2193,8 +2114,8 @@ int br_ssl_engine_init_rand(br_ssl_engine_context *cc); /* * Reset the handshake-related parts of the engine. */ -void br_ssl_engine_hs_reset(br_ssl_engine_context *cc, - void (*hsinit)(void *), void (*hsrun)(void *)); +void br_ssl_engine_hs_reset(br_ssl_engine_context *cc, void (*hsinit)(void *), + void (*hsrun)(void *)); /* * Get the PRF to use for this context, for the provided PRF hash @@ -2207,8 +2128,8 @@ br_tls_prf_impl br_ssl_engine_get_PRF(br_ssl_engine_context *cc, int prf_id); * master secret. The 'prf_id' is the ID of the hash function to use * with the TLS 1.2 PRF (ignored if the version is TLS 1.0 or 1.1). */ -void br_ssl_engine_compute_master(br_ssl_engine_context *cc, - int prf_id, const void *pms, size_t len); +void br_ssl_engine_compute_master(br_ssl_engine_context *cc, int prf_id, + const void *pms, size_t len); /* * Switch to CBC decryption for incoming records. @@ -2219,9 +2140,10 @@ void br_ssl_engine_compute_master(br_ssl_engine_context *cc, * bc_impl block cipher implementation (CBC decryption) * cipher_key_len block cipher key length (in bytes) */ -void br_ssl_engine_switch_cbc_in(br_ssl_engine_context *cc, - int is_client, int prf_id, int mac_id, - const br_block_cbcdec_class *bc_impl, size_t cipher_key_len); +void br_ssl_engine_switch_cbc_in(br_ssl_engine_context *cc, int is_client, + int prf_id, int mac_id, + const br_block_cbcdec_class *bc_impl, + size_t cipher_key_len); /* * Switch to CBC encryption for outgoing records. @@ -2232,9 +2154,10 @@ void br_ssl_engine_switch_cbc_in(br_ssl_engine_context *cc, * bc_impl block cipher implementation (CBC encryption) * cipher_key_len block cipher key length (in bytes) */ -void br_ssl_engine_switch_cbc_out(br_ssl_engine_context *cc, - int is_client, int prf_id, int mac_id, - const br_block_cbcenc_class *bc_impl, size_t cipher_key_len); +void br_ssl_engine_switch_cbc_out(br_ssl_engine_context *cc, int is_client, + int prf_id, int mac_id, + const br_block_cbcenc_class *bc_impl, + size_t cipher_key_len); /* * Switch to GCM decryption for incoming records. @@ -2244,9 +2167,9 @@ void br_ssl_engine_switch_cbc_out(br_ssl_engine_context *cc, * bc_impl block cipher implementation (CTR) * cipher_key_len block cipher key length (in bytes) */ -void br_ssl_engine_switch_gcm_in(br_ssl_engine_context *cc, - int is_client, int prf_id, - const br_block_ctr_class *bc_impl, size_t cipher_key_len); +void br_ssl_engine_switch_gcm_in(br_ssl_engine_context *cc, int is_client, + int prf_id, const br_block_ctr_class *bc_impl, + size_t cipher_key_len); /* * Switch to GCM encryption for outgoing records. @@ -2256,9 +2179,9 @@ void br_ssl_engine_switch_gcm_in(br_ssl_engine_context *cc, * bc_impl block cipher implementation (CTR) * cipher_key_len block cipher key length (in bytes) */ -void br_ssl_engine_switch_gcm_out(br_ssl_engine_context *cc, - int is_client, int prf_id, - const br_block_ctr_class *bc_impl, size_t cipher_key_len); +void br_ssl_engine_switch_gcm_out(br_ssl_engine_context *cc, int is_client, + int prf_id, const br_block_ctr_class *bc_impl, + size_t cipher_key_len); /* * Switch to ChaCha20+Poly1305 decryption for incoming records. @@ -2266,8 +2189,8 @@ void br_ssl_engine_switch_gcm_out(br_ssl_engine_context *cc, * is_client non-zero for a client, zero for a server * prf_id id of hash function for PRF */ -void br_ssl_engine_switch_chapol_in(br_ssl_engine_context *cc, - int is_client, int prf_id); +void br_ssl_engine_switch_chapol_in(br_ssl_engine_context *cc, int is_client, + int prf_id); /* * Switch to ChaCha20+Poly1305 encryption for outgoing records. @@ -2275,8 +2198,8 @@ void br_ssl_engine_switch_chapol_in(br_ssl_engine_context *cc, * is_client non-zero for a client, zero for a server * prf_id id of hash function for PRF */ -void br_ssl_engine_switch_chapol_out(br_ssl_engine_context *cc, - int is_client, int prf_id); +void br_ssl_engine_switch_chapol_out(br_ssl_engine_context *cc, int is_client, + int prf_id); /* * Switch to CCM decryption for incoming records. @@ -2287,10 +2210,10 @@ void br_ssl_engine_switch_chapol_out(br_ssl_engine_context *cc, * cipher_key_len block cipher key length (in bytes) * tag_len tag length (in bytes) */ -void br_ssl_engine_switch_ccm_in(br_ssl_engine_context *cc, - int is_client, int prf_id, - const br_block_ctrcbc_class *bc_impl, - size_t cipher_key_len, size_t tag_len); +void br_ssl_engine_switch_ccm_in(br_ssl_engine_context *cc, int is_client, + int prf_id, + const br_block_ctrcbc_class *bc_impl, + size_t cipher_key_len, size_t tag_len); /* * Switch to GCM encryption for outgoing records. @@ -2301,10 +2224,10 @@ void br_ssl_engine_switch_ccm_in(br_ssl_engine_context *cc, * cipher_key_len block cipher key length (in bytes) * tag_len tag length (in bytes) */ -void br_ssl_engine_switch_ccm_out(br_ssl_engine_context *cc, - int is_client, int prf_id, - const br_block_ctrcbc_class *bc_impl, - size_t cipher_key_len, size_t tag_len); +void br_ssl_engine_switch_ccm_out(br_ssl_engine_context *cc, int is_client, + int prf_id, + const br_block_ctrcbc_class *bc_impl, + size_t cipher_key_len, size_t tag_len); /* * Calls to T0-generated code. @@ -2333,78 +2256,78 @@ int br_ssl_choose_hash(unsigned bf); #if BR_POWER_ASM_MACROS -#define lxvw4x(xt, ra, rb) lxvw4x_(xt, ra, rb) -#define stxvw4x(xt, ra, rb) stxvw4x_(xt, ra, rb) - -#define bdnz(foo) bdnz_(foo) -#define bdz(foo) bdz_(foo) -#define beq(foo) beq_(foo) - -#define li(rx, value) li_(rx, value) -#define addi(rx, ra, imm) addi_(rx, ra, imm) -#define cmpldi(rx, imm) cmpldi_(rx, imm) -#define mtctr(rx) mtctr_(rx) -#define vspltb(vrt, vrb, uim) vspltb_(vrt, vrb, uim) -#define vspltw(vrt, vrb, uim) vspltw_(vrt, vrb, uim) -#define vspltisb(vrt, imm) vspltisb_(vrt, imm) -#define vspltisw(vrt, imm) vspltisw_(vrt, imm) -#define vrlw(vrt, vra, vrb) vrlw_(vrt, vra, vrb) -#define vsbox(vrt, vra) vsbox_(vrt, vra) -#define vxor(vrt, vra, vrb) vxor_(vrt, vra, vrb) -#define vand(vrt, vra, vrb) vand_(vrt, vra, vrb) -#define vsro(vrt, vra, vrb) vsro_(vrt, vra, vrb) -#define vsl(vrt, vra, vrb) vsl_(vrt, vra, vrb) -#define vsldoi(vt, va, vb, sh) vsldoi_(vt, va, vb, sh) -#define vsr(vrt, vra, vrb) vsr_(vrt, vra, vrb) -#define vaddcuw(vrt, vra, vrb) vaddcuw_(vrt, vra, vrb) -#define vadduwm(vrt, vra, vrb) vadduwm_(vrt, vra, vrb) -#define vsububm(vrt, vra, vrb) vsububm_(vrt, vra, vrb) -#define vsubuwm(vrt, vra, vrb) vsubuwm_(vrt, vra, vrb) -#define vsrw(vrt, vra, vrb) vsrw_(vrt, vra, vrb) -#define vcipher(vt, va, vb) vcipher_(vt, va, vb) -#define vcipherlast(vt, va, vb) vcipherlast_(vt, va, vb) -#define vncipher(vt, va, vb) vncipher_(vt, va, vb) -#define vncipherlast(vt, va, vb) vncipherlast_(vt, va, vb) -#define vperm(vt, va, vb, vc) vperm_(vt, va, vb, vc) -#define vpmsumd(vt, va, vb) vpmsumd_(vt, va, vb) -#define xxpermdi(vt, va, vb, d) xxpermdi_(vt, va, vb, d) - -#define lxvw4x_(xt, ra, rb) "\tlxvw4x\t" #xt "," #ra "," #rb "\n" -#define stxvw4x_(xt, ra, rb) "\tstxvw4x\t" #xt "," #ra "," #rb "\n" - -#define label(foo) #foo "%=:\n" -#define bdnz_(foo) "\tbdnz\t" #foo "%=\n" -#define bdz_(foo) "\tbdz\t" #foo "%=\n" -#define beq_(foo) "\tbeq\t" #foo "%=\n" - -#define li_(rx, value) "\tli\t" #rx "," #value "\n" -#define addi_(rx, ra, imm) "\taddi\t" #rx "," #ra "," #imm "\n" -#define cmpldi_(rx, imm) "\tcmpldi\t" #rx "," #imm "\n" -#define mtctr_(rx) "\tmtctr\t" #rx "\n" -#define vspltb_(vrt, vrb, uim) "\tvspltb\t" #vrt "," #vrb "," #uim "\n" -#define vspltw_(vrt, vrb, uim) "\tvspltw\t" #vrt "," #vrb "," #uim "\n" -#define vspltisb_(vrt, imm) "\tvspltisb\t" #vrt "," #imm "\n" -#define vspltisw_(vrt, imm) "\tvspltisw\t" #vrt "," #imm "\n" -#define vrlw_(vrt, vra, vrb) "\tvrlw\t" #vrt "," #vra "," #vrb "\n" -#define vsbox_(vrt, vra) "\tvsbox\t" #vrt "," #vra "\n" -#define vxor_(vrt, vra, vrb) "\tvxor\t" #vrt "," #vra "," #vrb "\n" -#define vand_(vrt, vra, vrb) "\tvand\t" #vrt "," #vra "," #vrb "\n" -#define vsro_(vrt, vra, vrb) "\tvsro\t" #vrt "," #vra "," #vrb "\n" -#define vsl_(vrt, vra, vrb) "\tvsl\t" #vrt "," #vra "," #vrb "\n" -#define vsldoi_(vt, va, vb, sh) "\tvsldoi\t" #vt "," #va "," #vb "," #sh "\n" -#define vsr_(vrt, vra, vrb) "\tvsr\t" #vrt "," #vra "," #vrb "\n" -#define vaddcuw_(vrt, vra, vrb) "\tvaddcuw\t" #vrt "," #vra "," #vrb "\n" -#define vadduwm_(vrt, vra, vrb) "\tvadduwm\t" #vrt "," #vra "," #vrb "\n" -#define vsububm_(vrt, vra, vrb) "\tvsububm\t" #vrt "," #vra "," #vrb "\n" -#define vsubuwm_(vrt, vra, vrb) "\tvsubuwm\t" #vrt "," #vra "," #vrb "\n" -#define vsrw_(vrt, vra, vrb) "\tvsrw\t" #vrt "," #vra "," #vrb "\n" -#define vcipher_(vt, va, vb) "\tvcipher\t" #vt "," #va "," #vb "\n" -#define vcipherlast_(vt, va, vb) "\tvcipherlast\t" #vt "," #va "," #vb "\n" -#define vncipher_(vt, va, vb) "\tvncipher\t" #vt "," #va "," #vb "\n" +#define lxvw4x(xt, ra, rb) lxvw4x_(xt, ra, rb) +#define stxvw4x(xt, ra, rb) stxvw4x_(xt, ra, rb) + +#define bdnz(foo) bdnz_(foo) +#define bdz(foo) bdz_(foo) +#define beq(foo) beq_(foo) + +#define li(rx, value) li_(rx, value) +#define addi(rx, ra, imm) addi_(rx, ra, imm) +#define cmpldi(rx, imm) cmpldi_(rx, imm) +#define mtctr(rx) mtctr_(rx) +#define vspltb(vrt, vrb, uim) vspltb_(vrt, vrb, uim) +#define vspltw(vrt, vrb, uim) vspltw_(vrt, vrb, uim) +#define vspltisb(vrt, imm) vspltisb_(vrt, imm) +#define vspltisw(vrt, imm) vspltisw_(vrt, imm) +#define vrlw(vrt, vra, vrb) vrlw_(vrt, vra, vrb) +#define vsbox(vrt, vra) vsbox_(vrt, vra) +#define vxor(vrt, vra, vrb) vxor_(vrt, vra, vrb) +#define vand(vrt, vra, vrb) vand_(vrt, vra, vrb) +#define vsro(vrt, vra, vrb) vsro_(vrt, vra, vrb) +#define vsl(vrt, vra, vrb) vsl_(vrt, vra, vrb) +#define vsldoi(vt, va, vb, sh) vsldoi_(vt, va, vb, sh) +#define vsr(vrt, vra, vrb) vsr_(vrt, vra, vrb) +#define vaddcuw(vrt, vra, vrb) vaddcuw_(vrt, vra, vrb) +#define vadduwm(vrt, vra, vrb) vadduwm_(vrt, vra, vrb) +#define vsububm(vrt, vra, vrb) vsububm_(vrt, vra, vrb) +#define vsubuwm(vrt, vra, vrb) vsubuwm_(vrt, vra, vrb) +#define vsrw(vrt, vra, vrb) vsrw_(vrt, vra, vrb) +#define vcipher(vt, va, vb) vcipher_(vt, va, vb) +#define vcipherlast(vt, va, vb) vcipherlast_(vt, va, vb) +#define vncipher(vt, va, vb) vncipher_(vt, va, vb) +#define vncipherlast(vt, va, vb) vncipherlast_(vt, va, vb) +#define vperm(vt, va, vb, vc) vperm_(vt, va, vb, vc) +#define vpmsumd(vt, va, vb) vpmsumd_(vt, va, vb) +#define xxpermdi(vt, va, vb, d) xxpermdi_(vt, va, vb, d) + +#define lxvw4x_(xt, ra, rb) "\tlxvw4x\t" #xt "," #ra "," #rb "\n" +#define stxvw4x_(xt, ra, rb) "\tstxvw4x\t" #xt "," #ra "," #rb "\n" + +#define label(foo) #foo "%=:\n" +#define bdnz_(foo) "\tbdnz\t" #foo "%=\n" +#define bdz_(foo) "\tbdz\t" #foo "%=\n" +#define beq_(foo) "\tbeq\t" #foo "%=\n" + +#define li_(rx, value) "\tli\t" #rx "," #value "\n" +#define addi_(rx, ra, imm) "\taddi\t" #rx "," #ra "," #imm "\n" +#define cmpldi_(rx, imm) "\tcmpldi\t" #rx "," #imm "\n" +#define mtctr_(rx) "\tmtctr\t" #rx "\n" +#define vspltb_(vrt, vrb, uim) "\tvspltb\t" #vrt "," #vrb "," #uim "\n" +#define vspltw_(vrt, vrb, uim) "\tvspltw\t" #vrt "," #vrb "," #uim "\n" +#define vspltisb_(vrt, imm) "\tvspltisb\t" #vrt "," #imm "\n" +#define vspltisw_(vrt, imm) "\tvspltisw\t" #vrt "," #imm "\n" +#define vrlw_(vrt, vra, vrb) "\tvrlw\t" #vrt "," #vra "," #vrb "\n" +#define vsbox_(vrt, vra) "\tvsbox\t" #vrt "," #vra "\n" +#define vxor_(vrt, vra, vrb) "\tvxor\t" #vrt "," #vra "," #vrb "\n" +#define vand_(vrt, vra, vrb) "\tvand\t" #vrt "," #vra "," #vrb "\n" +#define vsro_(vrt, vra, vrb) "\tvsro\t" #vrt "," #vra "," #vrb "\n" +#define vsl_(vrt, vra, vrb) "\tvsl\t" #vrt "," #vra "," #vrb "\n" +#define vsldoi_(vt, va, vb, sh) "\tvsldoi\t" #vt "," #va "," #vb "," #sh "\n" +#define vsr_(vrt, vra, vrb) "\tvsr\t" #vrt "," #vra "," #vrb "\n" +#define vaddcuw_(vrt, vra, vrb) "\tvaddcuw\t" #vrt "," #vra "," #vrb "\n" +#define vadduwm_(vrt, vra, vrb) "\tvadduwm\t" #vrt "," #vra "," #vrb "\n" +#define vsububm_(vrt, vra, vrb) "\tvsububm\t" #vrt "," #vra "," #vrb "\n" +#define vsubuwm_(vrt, vra, vrb) "\tvsubuwm\t" #vrt "," #vra "," #vrb "\n" +#define vsrw_(vrt, vra, vrb) "\tvsrw\t" #vrt "," #vra "," #vrb "\n" +#define vcipher_(vt, va, vb) "\tvcipher\t" #vt "," #va "," #vb "\n" +#define vcipherlast_(vt, va, vb) "\tvcipherlast\t" #vt "," #va "," #vb "\n" +#define vncipher_(vt, va, vb) "\tvncipher\t" #vt "," #va "," #vb "\n" #define vncipherlast_(vt, va, vb) "\tvncipherlast\t" #vt "," #va "," #vb "\n" -#define vperm_(vt, va, vb, vc) "\tvperm\t" #vt "," #va "," #vb "," #vc "\n" -#define vpmsumd_(vt, va, vb) "\tvpmsumd\t" #vt "," #va "," #vb "\n" -#define xxpermdi_(vt, va, vb, d) "\txxpermdi\t" #vt "," #va "," #vb "," #d "\n" +#define vperm_(vt, va, vb, vc) "\tvperm\t" #vt "," #va "," #vb "," #vc "\n" +#define vpmsumd_(vt, va, vb) "\tvpmsumd\t" #vt "," #va "," #vb "\n" +#define xxpermdi_(vt, va, vb, d) "\txxpermdi\t" #vt "," #va "," #vb "," #d "\n" #endif @@ -2440,14 +2363,13 @@ int br_ssl_choose_hash(unsigned bf); */ #if BR_GCC && !BR_GCC_5_0 #if BR_GCC_4_6 -#define BR_TARGETS_X86_UP \ - _Pragma("GCC push_options") \ - _Pragma("GCC target(\"sse2,ssse3,sse4.1,aes,pclmul,rdrnd\")") -#define BR_TARGETS_X86_DOWN \ - _Pragma("GCC pop_options") +#define BR_TARGETS_X86_UP \ + _Pragma("GCC push_options") \ + _Pragma("GCC target(\"sse2,ssse3,sse4.1,aes,pclmul,rdrnd\")") +#define BR_TARGETS_X86_DOWN _Pragma("GCC pop_options") #else #define BR_TARGETS_X86_UP \ - _Pragma("GCC target(\"sse2,ssse3,sse4.1,aes,pclmul\")") + _Pragma("GCC target(\"sse2,ssse3,sse4.1,aes,pclmul\")") #endif #define BR_TARGETS_X86_DOWN #pragma GCC diagnostic ignored "-Wpsabi" @@ -2461,13 +2383,13 @@ int br_ssl_choose_hash(unsigned bf); #undef __AES__ #undef __PCLMUL__ #undef __RDRND__ -#define __SSE2__ 1 -#define __SSE3__ 1 -#define __SSSE3__ 1 -#define __SSE4_1__ 1 -#define __AES__ 1 -#define __PCLMUL__ 1 -#define __RDRND__ 1 +#define __SSE2__ 1 +#define __SSE3__ 1 +#define __SSSE3__ 1 +#define __SSE4_1__ 1 +#define __AES__ 1 +#define __PCLMUL__ 1 +#define __RDRND__ 1 #endif #ifndef BR_TARGETS_X86_UP @@ -2479,48 +2401,42 @@ int br_ssl_choose_hash(unsigned bf); #if BR_GCC || BR_CLANG BR_TARGETS_X86_UP -#include #include -#define br_bswap32 __builtin_bswap32 +#include +#define br_bswap32 __builtin_bswap32 BR_TARGETS_X86_DOWN #endif #if BR_MSC -#include -#include #include -#define br_bswap32 _byteswap_ulong +#include +#include +#define br_bswap32 _byteswap_ulong #endif -static inline int -br_cpuid(uint32_t mask_eax, uint32_t mask_ebx, - uint32_t mask_ecx, uint32_t mask_edx) -{ +static inline int br_cpuid(uint32_t mask_eax, uint32_t mask_ebx, + uint32_t mask_ecx, uint32_t mask_edx) { #if BR_GCC || BR_CLANG - unsigned eax, ebx, ecx, edx; - - if (__get_cpuid(1, &eax, &ebx, &ecx, &edx)) { - if ((eax & mask_eax) == mask_eax - && (ebx & mask_ebx) == mask_ebx - && (ecx & mask_ecx) == mask_ecx - && (edx & mask_edx) == mask_edx) - { - return 1; - } - } + unsigned eax, ebx, ecx, edx; + + if (__get_cpuid(1, &eax, &ebx, &ecx, &edx)) { + if ((eax & mask_eax) == mask_eax && (ebx & mask_ebx) == mask_ebx && + (ecx & mask_ecx) == mask_ecx && (edx & mask_edx) == mask_edx) { + return 1; + } + } #elif BR_MSC - int info[4]; - - __cpuid(info, 1); - if (((uint32_t)info[0] & mask_eax) == mask_eax - && ((uint32_t)info[1] & mask_ebx) == mask_ebx - && ((uint32_t)info[2] & mask_ecx) == mask_ecx - && ((uint32_t)info[3] & mask_edx) == mask_edx) - { - return 1; - } -#endif - return 0; + int info[4]; + + __cpuid(info, 1); + if (((uint32_t)info[0] & mask_eax) == mask_eax && + ((uint32_t)info[1] & mask_ebx) == mask_ebx && + ((uint32_t)info[2] & mask_ecx) == mask_ecx && + ((uint32_t)info[3] & mask_edx) == mask_edx) { + return 1; + } +#endif + return 0; } #endif diff --git a/vendor/hydra/vendor/curl/include/curl/curl.h b/vendor/hydra/vendor/curl/include/curl/curl.h index c4fae4d4..8d14769f 100644 --- a/vendor/hydra/vendor/curl/include/curl/curl.h +++ b/vendor/hydra/vendor/curl/include/curl/curl.h @@ -34,35 +34,32 @@ #endif /* Compile-time deprecation macros. */ -#if (defined(__GNUC__) && \ - ((__GNUC__ > 12) || ((__GNUC__ == 12) && (__GNUC_MINOR__ >= 1 ))) || \ - defined(__IAR_SYSTEMS_ICC__)) && \ - !defined(__INTEL_COMPILER) && \ - !defined(CURL_DISABLE_DEPRECATION) && !defined(BUILDING_LIBCURL) -#define CURL_DEPRECATED(version, message) \ - __attribute__((deprecated("since " # version ". " message))) +#if (defined(__GNUC__) && \ + ((__GNUC__ > 12) || ((__GNUC__ == 12) && (__GNUC_MINOR__ >= 1))) || \ + defined(__IAR_SYSTEMS_ICC__)) && \ + !defined(__INTEL_COMPILER) && !defined(CURL_DISABLE_DEPRECATION) && \ + !defined(BUILDING_LIBCURL) +#define CURL_DEPRECATED(version, message) \ + __attribute__((deprecated("since " #version ". " message))) #if defined(__IAR_SYSTEMS_ICC__) #define CURL_IGNORE_DEPRECATION(statements) \ - _Pragma("diag_suppress=Pe1444") \ - statements \ - _Pragma("diag_default=Pe1444") + _Pragma("diag_suppress=Pe1444") statements _Pragma("diag_default=Pe1444") #else -#define CURL_IGNORE_DEPRECATION(statements) \ - _Pragma("GCC diagnostic push") \ +#define CURL_IGNORE_DEPRECATION(statements) \ + _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \ - statements \ - _Pragma("GCC diagnostic pop") + statements _Pragma("GCC diagnostic pop") #endif #else #define CURL_DEPRECATED(version, message) -#define CURL_IGNORE_DEPRECATION(statements) statements +#define CURL_IGNORE_DEPRECATION(statements) statements #endif -#include "curlver.h" /* libcurl version defines */ -#include "system.h" /* determine things runtime */ - -#include #include +#include + +#include "curlver.h" /* libcurl version defines */ +#include "system.h" /* determine things runtime */ #if defined(__FreeBSD__) || defined(__MidnightBSD__) /* Needed for __FreeBSD_version or __MidnightBSD_version symbol definition */ @@ -86,12 +83,12 @@ /* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish libc5-based Linux systems. Only include it on systems that are known to require it! */ -#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ - defined(__minix) || defined(__INTEGRITY) || \ - defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \ - defined(__CYGWIN__) || defined(AMIGA) || defined(__NuttX__) || \ - (defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) || \ - (defined(__MidnightBSD_version) && (__MidnightBSD_version < 100000)) || \ +#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \ + defined(__minix) || defined(__INTEGRITY) || defined(ANDROID) || \ + defined(__ANDROID__) || defined(__OpenBSD__) || defined(__CYGWIN__) || \ + defined(AMIGA) || defined(__NuttX__) || \ + (defined(__FreeBSD_version) && (__FreeBSD_version < 800000)) || \ + (defined(__MidnightBSD_version) && (__MidnightBSD_version < 100000)) || \ defined(__sun__) || defined(__serenity__) || defined(__vxworks__) #include #endif @@ -106,10 +103,10 @@ /* Compatibility for non-Clang compilers */ #ifndef __has_declspec_attribute -# define __has_declspec_attribute(x) 0 +#define __has_declspec_attribute(x) 0 #endif -#ifdef __cplusplus +#ifdef __cplusplus extern "C" { #endif @@ -126,19 +123,18 @@ typedef void CURLSH; */ #ifdef CURL_STATICLIB -# define CURL_EXTERN -#elif defined(_WIN32) || \ - (__has_declspec_attribute(dllexport) && \ - __has_declspec_attribute(dllimport)) -# if defined(BUILDING_LIBCURL) -# define CURL_EXTERN __declspec(dllexport) -# else -# define CURL_EXTERN __declspec(dllimport) -# endif +#define CURL_EXTERN +#elif defined(_WIN32) || (__has_declspec_attribute(dllexport) && \ + __has_declspec_attribute(dllimport)) +#if defined(BUILDING_LIBCURL) +#define CURL_EXTERN __declspec(dllexport) +#else +#define CURL_EXTERN __declspec(dllimport) +#endif #elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS) -# define CURL_EXTERN CURL_EXTERN_SYMBOL +#define CURL_EXTERN CURL_EXTERN_SYMBOL #else -# define CURL_EXTERN +#define CURL_EXTERN #endif #ifndef curl_socket_typedef @@ -158,16 +154,16 @@ typedef enum { CURLSSLBACKEND_NONE = 0, CURLSSLBACKEND_OPENSSL = 1, CURLSSLBACKEND_GNUTLS = 2, - CURLSSLBACKEND_NSS CURL_DEPRECATED(8.3.0, "") = 3, - CURLSSLBACKEND_OBSOLETE4 = 4, /* Was QSOSSL. */ - CURLSSLBACKEND_GSKIT CURL_DEPRECATED(8.3.0, "") = 5, - CURLSSLBACKEND_POLARSSL CURL_DEPRECATED(7.69.0, "") = 6, + CURLSSLBACKEND_NSS CURL_DEPRECATED(8.3.0, "") = 3, + CURLSSLBACKEND_OBSOLETE4 = 4, /* Was QSOSSL. */ + CURLSSLBACKEND_GSKIT CURL_DEPRECATED(8.3.0, "") = 5, + CURLSSLBACKEND_POLARSSL CURL_DEPRECATED(7.69.0, "") = 6, CURLSSLBACKEND_WOLFSSL = 7, CURLSSLBACKEND_SCHANNEL = 8, CURLSSLBACKEND_SECURETRANSPORT = 9, - CURLSSLBACKEND_AXTLS CURL_DEPRECATED(7.61.0, "") = 10, + CURLSSLBACKEND_AXTLS CURL_DEPRECATED(7.61.0, "") = 10, CURLSSLBACKEND_MBEDTLS = 11, - CURLSSLBACKEND_MESALINK CURL_DEPRECATED(7.82.0, "") = 12, + CURLSSLBACKEND_MESALINK CURL_DEPRECATED(7.82.0, "") = 12, CURLSSLBACKEND_BEARSSL = 13, CURLSSLBACKEND_RUSTLS = 14 } curl_sslbackend; @@ -198,67 +194,62 @@ struct curl_httppost { long flags; /* as defined below */ /* specified content is a filename */ -#define CURL_HTTPPOST_FILENAME (1<<0) +#define CURL_HTTPPOST_FILENAME (1 << 0) /* specified content is a filename */ -#define CURL_HTTPPOST_READFILE (1<<1) +#define CURL_HTTPPOST_READFILE (1 << 1) /* name is only stored pointer do not free in formfree */ -#define CURL_HTTPPOST_PTRNAME (1<<2) +#define CURL_HTTPPOST_PTRNAME (1 << 2) /* contents is only stored pointer do not free in formfree */ -#define CURL_HTTPPOST_PTRCONTENTS (1<<3) +#define CURL_HTTPPOST_PTRCONTENTS (1 << 3) /* upload file from buffer */ -#define CURL_HTTPPOST_BUFFER (1<<4) +#define CURL_HTTPPOST_BUFFER (1 << 4) /* upload file from pointer contents */ -#define CURL_HTTPPOST_PTRBUFFER (1<<5) +#define CURL_HTTPPOST_PTRBUFFER (1 << 5) /* upload file contents by using the regular read callback to get the data and pass the given pointer as custom pointer */ -#define CURL_HTTPPOST_CALLBACK (1<<6) +#define CURL_HTTPPOST_CALLBACK (1 << 6) /* use size in 'contentlen', added in 7.46.0 */ -#define CURL_HTTPPOST_LARGE (1<<7) - - char *showfilename; /* The filename to show. If not set, the - actual filename will be used (if this - is a file part) */ - void *userp; /* custom pointer used for - HTTPPOST_CALLBACK posts */ - curl_off_t contentlen; /* alternative length of contents - field. Used if CURL_HTTPPOST_LARGE is - set. Added in 7.46.0 */ +#define CURL_HTTPPOST_LARGE (1 << 7) + + char *showfilename; /* The filename to show. If not set, the + actual filename will be used (if this + is a file part) */ + void *userp; /* custom pointer used for + HTTPPOST_CALLBACK posts */ + curl_off_t contentlen; /* alternative length of contents + field. Used if CURL_HTTPPOST_LARGE is + set. Added in 7.46.0 */ }; - /* This is a return code for the progress callback that, when returned, will signal libcurl to continue executing the default progress function */ #define CURL_PROGRESSFUNC_CONTINUE 0x10000001 /* This is the CURLOPT_PROGRESSFUNCTION callback prototype. It is now considered deprecated but was the only choice up until 7.31.0 */ -typedef int (*curl_progress_callback)(void *clientp, - double dltotal, - double dlnow, - double ultotal, +typedef int (*curl_progress_callback)(void *clientp, double dltotal, + double dlnow, double ultotal, double ulnow); /* This is the CURLOPT_XFERINFOFUNCTION callback prototype. It was introduced in 7.32.0, avoids the use of floating point numbers and provides more detailed information. */ -typedef int (*curl_xferinfo_callback)(void *clientp, - curl_off_t dltotal, - curl_off_t dlnow, - curl_off_t ultotal, +typedef int (*curl_xferinfo_callback)(void *clientp, curl_off_t dltotal, + curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow); #ifndef CURL_MAX_READ_SIZE - /* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */ -#define CURL_MAX_READ_SIZE (10*1024*1024) +/* The maximum receive buffer size configurable via CURLOPT_BUFFERSIZE. */ +#define CURL_MAX_READ_SIZE (10 * 1024 * 1024) #endif #ifndef CURL_MAX_WRITE_SIZE - /* Tests have proven that 20K is a very bad buffer size for uploads on - Windows, while 16K for some odd reason performed a lot better. - We do the ifndef check to allow this value to easier be changed at build - time for those who feel adventurous. The practical minimum is about - 400 bytes since libcurl uses a buffer of this size as a scratch area - (unrelated to network send operations). */ +/* Tests have proven that 20K is a very bad buffer size for uploads on + Windows, while 16K for some odd reason performed a lot better. + We do the ifndef check to allow this value to easier be changed at build + time for those who feel adventurous. The practical minimum is about + 400 bytes since libcurl uses a buffer of this size as a scratch area + (unrelated to network send operations). */ #define CURL_MAX_WRITE_SIZE 16384 #endif @@ -266,7 +257,7 @@ typedef int (*curl_xferinfo_callback)(void *clientp, /* The only reason to have a max limit for this is to avoid the risk of a bad server feeding libcurl with a never-ending header that will cause reallocs infinitely */ -#define CURL_MAX_HTTP_HEADER (100*1024) +#define CURL_MAX_HTTP_HEADER (100 * 1024) #endif /* This is a magic return code for the write callback that, when returned, @@ -277,9 +268,7 @@ typedef int (*curl_xferinfo_callback)(void *clientp, will signal an error from the callback. */ #define CURL_WRITEFUNC_ERROR 0xFFFFFFFF -typedef size_t (*curl_write_callback)(char *buffer, - size_t size, - size_t nitems, +typedef size_t (*curl_write_callback)(char *buffer, size_t size, size_t nitems, void *outstream); /* This callback will be called when a new resolver request is made */ @@ -300,14 +289,14 @@ typedef enum { CURLFILETYPE_UNKNOWN /* should never occur */ } curlfiletype; -#define CURLFINFOFLAG_KNOWN_FILENAME (1<<0) -#define CURLFINFOFLAG_KNOWN_FILETYPE (1<<1) -#define CURLFINFOFLAG_KNOWN_TIME (1<<2) -#define CURLFINFOFLAG_KNOWN_PERM (1<<3) -#define CURLFINFOFLAG_KNOWN_UID (1<<4) -#define CURLFINFOFLAG_KNOWN_GID (1<<5) -#define CURLFINFOFLAG_KNOWN_SIZE (1<<6) -#define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7) +#define CURLFINFOFLAG_KNOWN_FILENAME (1 << 0) +#define CURLFINFOFLAG_KNOWN_FILETYPE (1 << 1) +#define CURLFINFOFLAG_KNOWN_TIME (1 << 2) +#define CURLFINFOFLAG_KNOWN_PERM (1 << 3) +#define CURLFINFOFLAG_KNOWN_UID (1 << 4) +#define CURLFINFOFLAG_KNOWN_GID (1 << 5) +#define CURLFINFOFLAG_KNOWN_SIZE (1 << 6) +#define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1 << 7) /* Information about a single file, used when doing FTP wildcard matching */ struct curl_fileinfo { @@ -339,20 +328,19 @@ struct curl_fileinfo { }; /* return codes for CURLOPT_CHUNK_BGN_FUNCTION */ -#define CURL_CHUNK_BGN_FUNC_OK 0 -#define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */ -#define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */ +#define CURL_CHUNK_BGN_FUNC_OK 0 +#define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */ +#define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */ /* if splitting of data transfer is enabled, this callback is called before download of an individual chunk started. Note that parameter "remains" works only for FTP wildcard downloading (for now), otherwise is not used */ -typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, - void *ptr, +typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, void *ptr, int remains); /* return codes for CURLOPT_CHUNK_END_FUNCTION */ -#define CURL_CHUNK_END_FUNC_OK 0 -#define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */ +#define CURL_CHUNK_END_FUNC_OK 0 +#define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */ /* If splitting of data transfer is enabled this callback is called after download of an individual chunk finished. @@ -363,23 +351,22 @@ typedef long (*curl_chunk_bgn_callback)(const void *transfer_info, typedef long (*curl_chunk_end_callback)(void *ptr); /* return codes for FNMATCHFUNCTION */ -#define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */ -#define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern does not match the string */ -#define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */ +#define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */ +#define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern does not match the string */ +#define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */ /* callback type for wildcard downloading pattern matching. If the string matches the pattern, return CURL_FNMATCHFUNC_MATCH value, etc. */ -typedef int (*curl_fnmatch_callback)(void *ptr, - const char *pattern, +typedef int (*curl_fnmatch_callback)(void *ptr, const char *pattern, const char *string); /* These are the return codes for the seek callbacks */ -#define CURL_SEEKFUNC_OK 0 -#define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */ -#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking cannot be done, so - libcurl might try other means instead */ -typedef int (*curl_seek_callback)(void *instream, - curl_off_t offset, +#define CURL_SEEKFUNC_OK 0 +#define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */ +#define CURL_SEEKFUNC_CANTSEEK \ + 2 /* tell libcurl seeking cannot be done, so \ + libcurl might try other means instead */ +typedef int (*curl_seek_callback)(void *instream, curl_off_t offset, int origin); /* 'whence' */ /* This is a return code for the read callback that, when returned, will @@ -396,13 +383,10 @@ typedef int (*curl_seek_callback)(void *instream, want to abort the request */ #define CURL_TRAILERFUNC_ABORT 1 -typedef size_t (*curl_read_callback)(char *buffer, - size_t size, - size_t nitems, - void *instream); +typedef size_t (*curl_read_callback)(char *buffer, size_t size, size_t nitems, + void *instream); -typedef int (*curl_trailer_callback)(struct curl_slist **list, - void *userdata); +typedef int (*curl_trailer_callback)(struct curl_slist **list, void *userdata); typedef enum { CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */ @@ -413,12 +397,12 @@ typedef enum { /* The return code from the sockopt_callback can signal information back to libcurl: */ #define CURL_SOCKOPT_OK 0 -#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return - CURLE_ABORTED_BY_CALLBACK */ +#define CURL_SOCKOPT_ERROR \ + 1 /* causes libcurl to abort and return \ + CURLE_ABORTED_BY_CALLBACK */ #define CURL_SOCKOPT_ALREADY_CONNECTED 2 -typedef int (*curl_sockopt_callback)(void *clientp, - curl_socket_t curlfd, +typedef int (*curl_sockopt_callback)(void *clientp, curl_socket_t curlfd, curlsocktype purpose); struct curl_sockaddr { @@ -431,19 +415,16 @@ struct curl_sockaddr { struct sockaddr addr; }; -typedef curl_socket_t -(*curl_opensocket_callback)(void *clientp, - curlsocktype purpose, - struct curl_sockaddr *address); +typedef curl_socket_t (*curl_opensocket_callback)( + void *clientp, curlsocktype purpose, struct curl_sockaddr *address); -typedef int -(*curl_closesocket_callback)(void *clientp, curl_socket_t item); +typedef int (*curl_closesocket_callback)(void *clientp, curl_socket_t item); typedef enum { - CURLIOE_OK, /* I/O operation successful */ - CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ - CURLIOE_FAILRESTART, /* failed to restart the read */ - CURLIOE_LAST /* never use */ + CURLIOE_OK, /* I/O operation successful */ + CURLIOE_UNKNOWNCMD, /* command was unknown to callback */ + CURLIOE_FAILRESTART, /* failed to restart the read */ + CURLIOE_LAST /* never use */ } curlioerr; typedef enum { @@ -452,9 +433,7 @@ typedef enum { CURLIOCMD_LAST /* never use */ } curliocmd; -typedef curlioerr (*curl_ioctl_callback)(CURL *handle, - int cmd, - void *clientp); +typedef curlioerr (*curl_ioctl_callback)(CURL *handle, int cmd, void *clientp); #ifndef CURL_DID_MEMORY_FUNC_TYPEDEFS /* @@ -484,18 +463,16 @@ typedef enum { CURLINFO_END } curl_infotype; -typedef int (*curl_debug_callback) - (CURL *handle, /* the handle/transfer this concerns */ - curl_infotype type, /* what kind of data */ - char *data, /* points to the data */ - size_t size, /* size of the data pointed to */ - void *userptr); /* whatever the user please */ +typedef int (*curl_debug_callback)( + CURL *handle, /* the handle/transfer this concerns */ + curl_infotype type, /* what kind of data */ + char *data, /* points to the data */ + size_t size, /* size of the data pointed to */ + void *userptr); /* whatever the user please */ /* This is the CURLOPT_PREREQFUNCTION callback prototype. */ -typedef int (*curl_prereq_callback)(void *clientp, - char *conn_primary_ip, - char *conn_local_ip, - int conn_primary_port, +typedef int (*curl_prereq_callback)(void *clientp, char *conn_primary_ip, + char *conn_local_ip, int conn_primary_port, int conn_local_port); /* Return code for when the pre-request callback has terminated without @@ -514,137 +491,137 @@ typedef int (*curl_prereq_callback)(void *clientp, typedef enum { CURLE_OK = 0, - CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ - CURLE_FAILED_INIT, /* 2 */ - CURLE_URL_MALFORMAT, /* 3 */ - CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for - 7.17.0, reused in April 2011 for 7.21.5] */ - CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ - CURLE_COULDNT_RESOLVE_HOST, /* 6 */ - CURLE_COULDNT_CONNECT, /* 7 */ - CURLE_WEIRD_SERVER_REPLY, /* 8 */ - CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server - due to lack of access - when login fails - this is not returned. */ - CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for - 7.15.4, reused in Dec 2011 for 7.24.0]*/ - CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ - CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server - [was obsoleted in August 2007 for 7.17.0, - reused in Dec 2011 for 7.24.0]*/ - CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ - CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ - CURLE_FTP_CANT_GET_HOST, /* 15 */ - CURLE_HTTP2, /* 16 - A problem in the http2 framing layer. - [was obsoleted in August 2007 for 7.17.0, - reused in July 2014 for 7.38.0] */ - CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ - CURLE_PARTIAL_FILE, /* 18 */ - CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ - CURLE_OBSOLETE20, /* 20 - NOT USED */ - CURLE_QUOTE_ERROR, /* 21 - quote command failure */ - CURLE_HTTP_RETURNED_ERROR, /* 22 */ - CURLE_WRITE_ERROR, /* 23 */ - CURLE_OBSOLETE24, /* 24 - NOT USED */ - CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ - CURLE_READ_ERROR, /* 26 - could not open/read from file */ - CURLE_OUT_OF_MEMORY, /* 27 */ - CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ - CURLE_OBSOLETE29, /* 29 - NOT USED */ - CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ - CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ - CURLE_OBSOLETE32, /* 32 - NOT USED */ - CURLE_RANGE_ERROR, /* 33 - RANGE "command" did not work */ - CURLE_HTTP_POST_ERROR, /* 34 */ - CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ - CURLE_BAD_DOWNLOAD_RESUME, /* 36 - could not resume download */ - CURLE_FILE_COULDNT_READ_FILE, /* 37 */ - CURLE_LDAP_CANNOT_BIND, /* 38 */ - CURLE_LDAP_SEARCH_FAILED, /* 39 */ - CURLE_OBSOLETE40, /* 40 - NOT USED */ - CURLE_FUNCTION_NOT_FOUND, /* 41 - NOT USED starting with 7.53.0 */ - CURLE_ABORTED_BY_CALLBACK, /* 42 */ - CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ - CURLE_OBSOLETE44, /* 44 - NOT USED */ - CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ - CURLE_OBSOLETE46, /* 46 - NOT USED */ - CURLE_TOO_MANY_REDIRECTS, /* 47 - catch endless re-direct loops */ - CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ - CURLE_SETOPT_OPTION_SYNTAX, /* 49 - Malformed setopt option */ - CURLE_OBSOLETE50, /* 50 - NOT USED */ - CURLE_OBSOLETE51, /* 51 - NOT USED */ - CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ - CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ - CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as - default */ - CURLE_SEND_ERROR, /* 55 - failed sending network data */ - CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ - CURLE_OBSOLETE57, /* 57 - NOT IN USE */ - CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ - CURLE_SSL_CIPHER, /* 59 - could not use specified cipher */ + CURLE_UNSUPPORTED_PROTOCOL, /* 1 */ + CURLE_FAILED_INIT, /* 2 */ + CURLE_URL_MALFORMAT, /* 3 */ + CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for + 7.17.0, reused in April 2011 for 7.21.5] */ + CURLE_COULDNT_RESOLVE_PROXY, /* 5 */ + CURLE_COULDNT_RESOLVE_HOST, /* 6 */ + CURLE_COULDNT_CONNECT, /* 7 */ + CURLE_WEIRD_SERVER_REPLY, /* 8 */ + CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server + due to lack of access - when login fails + this is not returned. */ + CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for + 7.15.4, reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */ + CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server + [was obsoleted in August 2007 for 7.17.0, + reused in Dec 2011 for 7.24.0]*/ + CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */ + CURLE_FTP_WEIRD_227_FORMAT, /* 14 */ + CURLE_FTP_CANT_GET_HOST, /* 15 */ + CURLE_HTTP2, /* 16 - A problem in the http2 framing layer. + [was obsoleted in August 2007 for 7.17.0, + reused in July 2014 for 7.38.0] */ + CURLE_FTP_COULDNT_SET_TYPE, /* 17 */ + CURLE_PARTIAL_FILE, /* 18 */ + CURLE_FTP_COULDNT_RETR_FILE, /* 19 */ + CURLE_OBSOLETE20, /* 20 - NOT USED */ + CURLE_QUOTE_ERROR, /* 21 - quote command failure */ + CURLE_HTTP_RETURNED_ERROR, /* 22 */ + CURLE_WRITE_ERROR, /* 23 */ + CURLE_OBSOLETE24, /* 24 - NOT USED */ + CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */ + CURLE_READ_ERROR, /* 26 - could not open/read from file */ + CURLE_OUT_OF_MEMORY, /* 27 */ + CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */ + CURLE_OBSOLETE29, /* 29 - NOT USED */ + CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */ + CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */ + CURLE_OBSOLETE32, /* 32 - NOT USED */ + CURLE_RANGE_ERROR, /* 33 - RANGE "command" did not work */ + CURLE_HTTP_POST_ERROR, /* 34 */ + CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */ + CURLE_BAD_DOWNLOAD_RESUME, /* 36 - could not resume download */ + CURLE_FILE_COULDNT_READ_FILE, /* 37 */ + CURLE_LDAP_CANNOT_BIND, /* 38 */ + CURLE_LDAP_SEARCH_FAILED, /* 39 */ + CURLE_OBSOLETE40, /* 40 - NOT USED */ + CURLE_FUNCTION_NOT_FOUND, /* 41 - NOT USED starting with 7.53.0 */ + CURLE_ABORTED_BY_CALLBACK, /* 42 */ + CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */ + CURLE_OBSOLETE44, /* 44 - NOT USED */ + CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */ + CURLE_OBSOLETE46, /* 46 - NOT USED */ + CURLE_TOO_MANY_REDIRECTS, /* 47 - catch endless re-direct loops */ + CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */ + CURLE_SETOPT_OPTION_SYNTAX, /* 49 - Malformed setopt option */ + CURLE_OBSOLETE50, /* 50 - NOT USED */ + CURLE_OBSOLETE51, /* 51 - NOT USED */ + CURLE_GOT_NOTHING, /* 52 - when this is a specific error */ + CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */ + CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as + default */ + CURLE_SEND_ERROR, /* 55 - failed sending network data */ + CURLE_RECV_ERROR, /* 56 - failure in receiving network data */ + CURLE_OBSOLETE57, /* 57 - NOT IN USE */ + CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */ + CURLE_SSL_CIPHER, /* 59 - could not use specified cipher */ CURLE_PEER_FAILED_VERIFICATION, /* 60 - peer's certificate or fingerprint was not verified fine */ - CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ - CURLE_OBSOLETE62, /* 62 - NOT IN USE since 7.82.0 */ - CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ - CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ - CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind - that failed */ - CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ - CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not - accepted and we failed to login */ - CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ - CURLE_TFTP_PERM, /* 69 - permission problem on server */ - CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ - CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ - CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ - CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ - CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ - CURLE_OBSOLETE75, /* 75 - NOT IN USE since 7.82.0 */ - CURLE_OBSOLETE76, /* 76 - NOT IN USE since 7.82.0 */ - CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing - or wrong format */ - CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ - CURLE_SSH, /* 79 - error from the SSH layer, somewhat - generic so the error message will be of - interest when this has happened */ - - CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL - connection */ - CURLE_AGAIN, /* 81 - socket is not ready for send/recv, - wait till it is ready and try again (Added - in 7.18.2) */ - CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or - wrong format (Added in 7.19.0) */ - CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in - 7.19.0) */ - CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ - CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ - CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ - CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ - CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ - CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the - session will be queued */ + CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */ + CURLE_OBSOLETE62, /* 62 - NOT IN USE since 7.82.0 */ + CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */ + CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */ + CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind + that failed */ + CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */ + CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not + accepted and we failed to login */ + CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */ + CURLE_TFTP_PERM, /* 69 - permission problem on server */ + CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */ + CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */ + CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */ + CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */ + CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */ + CURLE_OBSOLETE75, /* 75 - NOT IN USE since 7.82.0 */ + CURLE_OBSOLETE76, /* 76 - NOT IN USE since 7.82.0 */ + CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing + or wrong format */ + CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */ + CURLE_SSH, /* 79 - error from the SSH layer, somewhat + generic so the error message will be of + interest when this has happened */ + + CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL + connection */ + CURLE_AGAIN, /* 81 - socket is not ready for send/recv, + wait till it is ready and try again (Added + in 7.18.2) */ + CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or + wrong format (Added in 7.19.0) */ + CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in + 7.19.0) */ + CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */ + CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */ + CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */ + CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */ + CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */ + CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the + session will be queued */ CURLE_SSL_PINNEDPUBKEYNOTMATCH, /* 90 - specified pinned public key did not match */ - CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ - CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer - */ - CURLE_RECURSIVE_API_CALL, /* 93 - an api function was called from - inside a callback */ - CURLE_AUTH_ERROR, /* 94 - an authentication function returned an - error */ - CURLE_HTTP3, /* 95 - An HTTP/3 layer problem */ - CURLE_QUIC_CONNECT_ERROR, /* 96 - QUIC connection error */ - CURLE_PROXY, /* 97 - proxy handshake error */ - CURLE_SSL_CLIENTCERT, /* 98 - client-side certificate required */ - CURLE_UNRECOVERABLE_POLL, /* 99 - poll/select returned fatal error */ - CURLE_TOO_LARGE, /* 100 - a value/data met its maximum */ - CURLE_ECH_REQUIRED, /* 101 - ECH tried but failed */ - CURL_LAST /* never use! */ + CURLE_SSL_INVALIDCERTSTATUS, /* 91 - invalid certificate status */ + CURLE_HTTP2_STREAM, /* 92 - stream error in HTTP/2 framing layer + */ + CURLE_RECURSIVE_API_CALL, /* 93 - an api function was called from + inside a callback */ + CURLE_AUTH_ERROR, /* 94 - an authentication function returned an + error */ + CURLE_HTTP3, /* 95 - An HTTP/3 layer problem */ + CURLE_QUIC_CONNECT_ERROR, /* 96 - QUIC connection error */ + CURLE_PROXY, /* 97 - proxy handshake error */ + CURLE_SSL_CLIENTCERT, /* 98 - client-side certificate required */ + CURLE_UNRECOVERABLE_POLL, /* 99 - poll/select returned fatal error */ + CURLE_TOO_LARGE, /* 100 - a value/data met its maximum */ + CURLE_ECH_REQUIRED, /* 101 - ECH tried but failed */ + CURL_LAST /* never use! */ } CURLcode; -#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all \ the obsolete stuff removed! */ /* Previously obsolete error code reused in 7.38.0 */ @@ -713,7 +690,7 @@ typedef enum { #define CURLE_ALREADY_COMPLETE 99999 /* Provide defines for really old option names */ -#define CURLOPT_FILE CURLOPT_WRITEDATA /* name changed in 7.9.7 */ +#define CURLOPT_FILE CURLOPT_WRITEDATA /* name changed in 7.9.7 */ #define CURLOPT_INFILE CURLOPT_READDATA /* name changed in 7.9.7 */ #define CURLOPT_WRITEHEADER CURLOPT_HEADERDATA @@ -779,20 +756,20 @@ typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */ void *userptr); typedef enum { - CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use - CONNECT HTTP/1.1 */ - CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT - HTTP/1.0 */ - CURLPROXY_HTTPS = 2, /* HTTPS but stick to HTTP/1 added in 7.52.0 */ - CURLPROXY_HTTPS2 = 3, /* HTTPS and attempt HTTP/2 added in 8.2.0 */ - CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already - in 7.10 */ - CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ - CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ + CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use + CONNECT HTTP/1.1 */ + CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT + HTTP/1.0 */ + CURLPROXY_HTTPS = 2, /* HTTPS but stick to HTTP/1 added in 7.52.0 */ + CURLPROXY_HTTPS2 = 3, /* HTTPS and attempt HTTP/2 added in 8.2.0 */ + CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already + in 7.10 */ + CURLPROXY_SOCKS5 = 5, /* added in 7.10 */ + CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */ CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the hostname rather than the IP address. added in 7.18.0 */ -} curl_proxytype; /* this enum was added in 7.10 */ +} curl_proxytype; /* this enum was added in 7.10 */ /* * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options: @@ -812,39 +789,40 @@ typedef enum { * CURLAUTH_ANYSAFE - All fine types except Basic */ -#define CURLAUTH_NONE ((unsigned long)0) -#define CURLAUTH_BASIC (((unsigned long)1)<<0) -#define CURLAUTH_DIGEST (((unsigned long)1)<<1) -#define CURLAUTH_NEGOTIATE (((unsigned long)1)<<2) +#define CURLAUTH_NONE ((unsigned long)0) +#define CURLAUTH_BASIC (((unsigned long)1) << 0) +#define CURLAUTH_DIGEST (((unsigned long)1) << 1) +#define CURLAUTH_NEGOTIATE (((unsigned long)1) << 2) /* Deprecated since the advent of CURLAUTH_NEGOTIATE */ #define CURLAUTH_GSSNEGOTIATE CURLAUTH_NEGOTIATE /* Used for CURLOPT_SOCKS5_AUTH to stay terminologically correct */ #define CURLAUTH_GSSAPI CURLAUTH_NEGOTIATE -#define CURLAUTH_NTLM (((unsigned long)1)<<3) -#define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4) +#define CURLAUTH_NTLM (((unsigned long)1) << 3) +#define CURLAUTH_DIGEST_IE (((unsigned long)1) << 4) #ifndef CURL_NO_OLDIES - /* functionality removed since 8.8.0 */ -#define CURLAUTH_NTLM_WB (((unsigned long)1)<<5) +/* functionality removed since 8.8.0 */ +#define CURLAUTH_NTLM_WB (((unsigned long)1) << 5) #endif -#define CURLAUTH_BEARER (((unsigned long)1)<<6) -#define CURLAUTH_AWS_SIGV4 (((unsigned long)1)<<7) -#define CURLAUTH_ONLY (((unsigned long)1)<<31) -#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) -#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE)) - -#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ -#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ -#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */ -#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */ -#define CURLSSH_AUTH_HOST (1<<2) /* host key files */ -#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */ -#define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */ -#define CURLSSH_AUTH_GSSAPI (1<<5) /* gssapi (kerberos, ...) */ +#define CURLAUTH_BEARER (((unsigned long)1) << 6) +#define CURLAUTH_AWS_SIGV4 (((unsigned long)1) << 7) +#define CURLAUTH_ONLY (((unsigned long)1) << 31) +#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE) +#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC | CURLAUTH_DIGEST_IE)) + +#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */ +#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */ +#define CURLSSH_AUTH_PUBLICKEY (1 << 0) /* public/private key files */ +#define CURLSSH_AUTH_PASSWORD (1 << 1) /* password */ +#define CURLSSH_AUTH_HOST (1 << 2) /* host key files */ +#define CURLSSH_AUTH_KEYBOARD (1 << 3) /* keyboard interactive */ +#define CURLSSH_AUTH_AGENT (1 << 4) /* agent (ssh-agent, pageant...) */ +#define CURLSSH_AUTH_GSSAPI (1 << 5) /* gssapi (kerberos, ...) */ #define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY -#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ -#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */ -#define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */ +#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */ +#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1 << 0) /* if permitted by policy \ + */ +#define CURLGSSAPI_DELEGATION_FLAG (1 << 1) /* delegate always */ #define CURL_ERROR_SIZE 256 @@ -869,12 +847,12 @@ struct curl_khkey { enum curl_khstat { CURLKHSTAT_FINE_ADD_TO_FILE, CURLKHSTAT_FINE, - CURLKHSTAT_REJECT, /* reject the connection, return an error */ - CURLKHSTAT_DEFER, /* do not accept it, but we cannot answer right now. - Causes a CURLE_PEER_FAILED_VERIFICATION error but the - connection will be left intact etc */ + CURLKHSTAT_REJECT, /* reject the connection, return an error */ + CURLKHSTAT_DEFER, /* do not accept it, but we cannot answer right now. + Causes a CURLE_PEER_FAILED_VERIFICATION error but the + connection will be left intact etc */ CURLKHSTAT_FINE_REPLACE, /* accept and replace the wrong key */ - CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */ + CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */ }; /* this is the set of status codes pass in to the callback */ @@ -885,23 +863,22 @@ enum curl_khmatch { CURLKHMATCH_LAST /* not for use, only a marker for last-in-list */ }; -typedef int - (*curl_sshkeycallback) (CURL *easy, /* easy handle */ - const struct curl_khkey *knownkey, /* known */ - const struct curl_khkey *foundkey, /* found */ - enum curl_khmatch, /* libcurl's view on the keys */ - void *clientp); /* custom pointer passed with */ - /* CURLOPT_SSH_KEYDATA */ - -typedef int - (*curl_sshhostkeycallback) (void *clientp,/* custom pointer passed */ - /* with CURLOPT_SSH_HOSTKEYDATA */ - int keytype, /* CURLKHTYPE */ - const char *key, /* hostkey to check */ - size_t keylen); /* length of the key */ - /* return CURLE_OK to accept */ - /* or something else to refuse */ - +typedef int (*curl_sshkeycallback)( + CURL *easy, /* easy handle */ + const struct curl_khkey *knownkey, /* known */ + const struct curl_khkey *foundkey, /* found */ + enum curl_khmatch, /* libcurl's view on the keys */ + void *clientp); /* custom pointer passed with */ + /* CURLOPT_SSH_KEYDATA */ + +typedef int (*curl_sshhostkeycallback)( + void *clientp, /* custom pointer passed */ + /* with CURLOPT_SSH_HOSTKEYDATA */ + int keytype, /* CURLKHTYPE */ + const char *key, /* hostkey to check */ + size_t keylen); /* length of the key */ + /* return CURLE_OK to accept */ + /* or something else to refuse */ /* parameter for the CURLOPT_USE_SSL option */ typedef enum { @@ -919,28 +896,28 @@ typedef enum { have introduced work-arounds for this flaw but those work-arounds sometimes make the SSL communication fail. To regain functionality with those broken servers, a user can this way allow the vulnerability back. */ -#define CURLSSLOPT_ALLOW_BEAST (1<<0) +#define CURLSSLOPT_ALLOW_BEAST (1 << 0) /* - NO_REVOKE tells libcurl to disable certificate revocation checks for those SSL backends where such behavior is present. */ -#define CURLSSLOPT_NO_REVOKE (1<<1) +#define CURLSSLOPT_NO_REVOKE (1 << 1) /* - NO_PARTIALCHAIN tells libcurl to *NOT* accept a partial certificate chain if possible. The OpenSSL backend has this ability. */ -#define CURLSSLOPT_NO_PARTIALCHAIN (1<<2) +#define CURLSSLOPT_NO_PARTIALCHAIN (1 << 2) /* - REVOKE_BEST_EFFORT tells libcurl to ignore certificate revocation offline checks and ignore missing revocation list for those SSL backends where such behavior is present. */ -#define CURLSSLOPT_REVOKE_BEST_EFFORT (1<<3) +#define CURLSSLOPT_REVOKE_BEST_EFFORT (1 << 3) /* - CURLSSLOPT_NATIVE_CA tells libcurl to use standard certificate store of operating system. Currently implemented under MS-Windows. */ -#define CURLSSLOPT_NATIVE_CA (1<<4) +#define CURLSSLOPT_NATIVE_CA (1 << 4) /* - CURLSSLOPT_AUTO_CLIENT_CERT tells libcurl to automatically locate and use a client certificate for authentication. (Schannel) */ -#define CURLSSLOPT_AUTO_CLIENT_CERT (1<<5) +#define CURLSSLOPT_AUTO_CLIENT_CERT (1 << 5) /* The default connection attempt delay in milliseconds for happy eyeballs. CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 and happy-eyeballs-timeout-ms.d document @@ -950,7 +927,7 @@ typedef enum { /* The default connection upkeep interval in milliseconds. */ #define CURL_UPKEEP_INTERVAL_DEFAULT 60000L -#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all \ the obsolete stuff removed! */ /* Backwards compatibility with older names */ @@ -977,7 +954,7 @@ typedef enum { CURLFTPAUTH_DEFAULT, /* let libcurl decide */ CURLFTPAUTH_SSL, /* use "AUTH SSL" */ CURLFTPAUTH_TLS, /* use "AUTH TLS" */ - CURLFTPAUTH_LAST /* not an option, never use */ + CURLFTPAUTH_LAST /* not an option, never use */ } curl_ftpauth; /* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */ @@ -1001,20 +978,19 @@ typedef enum { } curl_ftpmethod; /* bitmask defines for CURLOPT_HEADEROPT */ -#define CURLHEADER_UNIFIED 0 -#define CURLHEADER_SEPARATE (1<<0) +#define CURLHEADER_UNIFIED 0 +#define CURLHEADER_SEPARATE (1 << 0) /* CURLALTSVC_* are bits for the CURLOPT_ALTSVC_CTRL option */ -#define CURLALTSVC_READONLYFILE (1<<2) -#define CURLALTSVC_H1 (1<<3) -#define CURLALTSVC_H2 (1<<4) -#define CURLALTSVC_H3 (1<<5) - +#define CURLALTSVC_READONLYFILE (1 << 2) +#define CURLALTSVC_H1 (1 << 3) +#define CURLALTSVC_H2 (1 << 4) +#define CURLALTSVC_H3 (1 << 5) struct curl_hstsentry { char *name; size_t namelen; - unsigned int includeSubDomains:1; + unsigned int includeSubDomains : 1; char expire[18]; /* YYYYMMDD HH:MM:SS [null-terminated] */ }; @@ -1023,11 +999,7 @@ struct curl_index { size_t total; /* total number of entries to save */ }; -typedef enum { - CURLSTS_OK, - CURLSTS_DONE, - CURLSTS_FAIL -} CURLSTScode; +typedef enum { CURLSTS_OK, CURLSTS_DONE, CURLSTS_FAIL } CURLSTScode; typedef CURLSTScode (*curl_hstsread_callback)(CURL *easy, struct curl_hstsentry *e, @@ -1038,57 +1010,56 @@ typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy, void *userp); /* CURLHSTS_* are bits for the CURLOPT_HSTS option */ -#define CURLHSTS_ENABLE (long)(1<<0) -#define CURLHSTS_READONLYFILE (long)(1<<1) +#define CURLHSTS_ENABLE (long)(1 << 0) +#define CURLHSTS_READONLYFILE (long)(1 << 1) /* The CURLPROTO_ defines below are for the **deprecated** CURLOPT_*PROTOCOLS options. Do not use. */ -#define CURLPROTO_HTTP (1<<0) -#define CURLPROTO_HTTPS (1<<1) -#define CURLPROTO_FTP (1<<2) -#define CURLPROTO_FTPS (1<<3) -#define CURLPROTO_SCP (1<<4) -#define CURLPROTO_SFTP (1<<5) -#define CURLPROTO_TELNET (1<<6) -#define CURLPROTO_LDAP (1<<7) -#define CURLPROTO_LDAPS (1<<8) -#define CURLPROTO_DICT (1<<9) -#define CURLPROTO_FILE (1<<10) -#define CURLPROTO_TFTP (1<<11) -#define CURLPROTO_IMAP (1<<12) -#define CURLPROTO_IMAPS (1<<13) -#define CURLPROTO_POP3 (1<<14) -#define CURLPROTO_POP3S (1<<15) -#define CURLPROTO_SMTP (1<<16) -#define CURLPROTO_SMTPS (1<<17) -#define CURLPROTO_RTSP (1<<18) -#define CURLPROTO_RTMP (1<<19) -#define CURLPROTO_RTMPT (1<<20) -#define CURLPROTO_RTMPE (1<<21) -#define CURLPROTO_RTMPTE (1<<22) -#define CURLPROTO_RTMPS (1<<23) -#define CURLPROTO_RTMPTS (1<<24) -#define CURLPROTO_GOPHER (1<<25) -#define CURLPROTO_SMB (1<<26) -#define CURLPROTO_SMBS (1<<27) -#define CURLPROTO_MQTT (1<<28) -#define CURLPROTO_GOPHERS (1<<29) -#define CURLPROTO_ALL (~0) /* enable everything */ +#define CURLPROTO_HTTP (1 << 0) +#define CURLPROTO_HTTPS (1 << 1) +#define CURLPROTO_FTP (1 << 2) +#define CURLPROTO_FTPS (1 << 3) +#define CURLPROTO_SCP (1 << 4) +#define CURLPROTO_SFTP (1 << 5) +#define CURLPROTO_TELNET (1 << 6) +#define CURLPROTO_LDAP (1 << 7) +#define CURLPROTO_LDAPS (1 << 8) +#define CURLPROTO_DICT (1 << 9) +#define CURLPROTO_FILE (1 << 10) +#define CURLPROTO_TFTP (1 << 11) +#define CURLPROTO_IMAP (1 << 12) +#define CURLPROTO_IMAPS (1 << 13) +#define CURLPROTO_POP3 (1 << 14) +#define CURLPROTO_POP3S (1 << 15) +#define CURLPROTO_SMTP (1 << 16) +#define CURLPROTO_SMTPS (1 << 17) +#define CURLPROTO_RTSP (1 << 18) +#define CURLPROTO_RTMP (1 << 19) +#define CURLPROTO_RTMPT (1 << 20) +#define CURLPROTO_RTMPE (1 << 21) +#define CURLPROTO_RTMPTE (1 << 22) +#define CURLPROTO_RTMPS (1 << 23) +#define CURLPROTO_RTMPTS (1 << 24) +#define CURLPROTO_GOPHER (1 << 25) +#define CURLPROTO_SMB (1 << 26) +#define CURLPROTO_SMBS (1 << 27) +#define CURLPROTO_MQTT (1 << 28) +#define CURLPROTO_GOPHERS (1 << 29) +#define CURLPROTO_ALL (~0) /* enable everything */ /* long may be 32 or 64 bits, but we should never depend on anything else but 32 */ -#define CURLOPTTYPE_LONG 0 -#define CURLOPTTYPE_OBJECTPOINT 10000 +#define CURLOPTTYPE_LONG 0 +#define CURLOPTTYPE_OBJECTPOINT 10000 #define CURLOPTTYPE_FUNCTIONPOINT 20000 -#define CURLOPTTYPE_OFF_T 30000 -#define CURLOPTTYPE_BLOB 40000 +#define CURLOPTTYPE_OFF_T 30000 +#define CURLOPTTYPE_BLOB 40000 /* *STRINGPOINT is an alias for OBJECTPOINT to allow tools to extract the string options from the header file */ - -#define CURLOPT(na,t,nu) na = t + nu -#define CURLOPTDEPRECATED(na,t,nu,v,m) na CURL_DEPRECATED(v,m) = t + nu +#define CURLOPT(na, t, nu) na = t + nu +#define CURLOPTDEPRECATED(na, t, nu, v, m) na CURL_DEPRECATED(v, m) = t + nu /* CURLOPT aliases that make no runtime difference */ @@ -1096,13 +1067,13 @@ typedef CURLSTScode (*curl_hstswrite_callback)(CURL *easy, #define CURLOPTTYPE_STRINGPOINT CURLOPTTYPE_OBJECTPOINT /* 'struct curl_slist *' argument */ -#define CURLOPTTYPE_SLISTPOINT CURLOPTTYPE_OBJECTPOINT +#define CURLOPTTYPE_SLISTPOINT CURLOPTTYPE_OBJECTPOINT /* 'void *' argument passed untouched to callback */ -#define CURLOPTTYPE_CBPOINT CURLOPTTYPE_OBJECTPOINT +#define CURLOPTTYPE_CBPOINT CURLOPTTYPE_OBJECTPOINT /* 'long' argument with a set of values/bitmask */ -#define CURLOPTTYPE_VALUES CURLOPTTYPE_LONG +#define CURLOPTTYPE_VALUES CURLOPTTYPE_LONG /* * All CURLOPT_* values. @@ -1202,8 +1173,8 @@ typedef enum { CURLOPT(CURLOPT_HTTPHEADER, CURLOPTTYPE_SLISTPOINT, 23), /* This points to a linked list of post entries, struct curl_httppost */ - CURLOPTDEPRECATED(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24, - 7.56.0, "Use CURLOPT_MIMEPOST"), + CURLOPTDEPRECATED(CURLOPT_HTTPPOST, CURLOPTTYPE_OBJECTPOINT, 24, 7.56.0, + "Use CURLOPT_MIMEPOST"), /* name of the file keeping your private SSL-certificate */ CURLOPT(CURLOPT_SSLCERT, CURLOPTTYPE_STRINGPOINT, 25), @@ -1288,12 +1259,12 @@ typedef enum { /* use Location: Luke! */ CURLOPT(CURLOPT_FOLLOWLOCATION, CURLOPTTYPE_LONG, 52), - /* transfer data in text/ASCII format */ + /* transfer data in text/ASCII format */ CURLOPT(CURLOPT_TRANSFERTEXT, CURLOPTTYPE_LONG, 53), /* HTTP PUT */ - CURLOPTDEPRECATED(CURLOPT_PUT, CURLOPTTYPE_LONG, 54, - 7.12.1, "Use CURLOPT_UPLOAD"), + CURLOPTDEPRECATED(CURLOPT_PUT, CURLOPTTYPE_LONG, 54, 7.12.1, + "Use CURLOPT_UPLOAD"), /* 55 = OBSOLETE */ @@ -1368,12 +1339,12 @@ typedef enum { /* Set to a filename that contains random data for libcurl to use to seed the random engine when doing SSL connects. */ - CURLOPTDEPRECATED(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76, - 7.84.0, "Serves no purpose anymore"), + CURLOPTDEPRECATED(CURLOPT_RANDOM_FILE, CURLOPTTYPE_STRINGPOINT, 76, 7.84.0, + "Serves no purpose anymore"), /* Set to the Entropy Gathering Daemon socket pathname */ - CURLOPTDEPRECATED(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77, - 7.84.0, "Serves no purpose anymore"), + CURLOPTDEPRECATED(CURLOPT_EGDSOCKET, CURLOPTTYPE_STRINGPOINT, 77, 7.84.0, + "Serves no purpose anymore"), /* Time-out connect operations after this amount of seconds, if connects are OK within this time, then fine... This only aborts the connect phase. */ @@ -1428,8 +1399,8 @@ typedef enum { /* Non-zero value means to use the global dns cache */ /* DEPRECATED, do not use! */ - CURLOPTDEPRECATED(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91, - 7.11.1, "Use CURLOPT_SHARE"), + CURLOPTDEPRECATED(CURLOPT_DNS_USE_GLOBAL_CACHE, CURLOPTTYPE_LONG, 91, 7.11.1, + "Use CURLOPT_SHARE"), /* DNS cache timeout */ CURLOPT(CURLOPT_DNS_CACHE_TIMEOUT, CURLOPTTYPE_LONG, 92), @@ -1586,8 +1557,8 @@ typedef enum { CURLOPTDEPRECATED(CURLOPT_IOCTLFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 130, 7.18.0, "Use CURLOPT_SEEKFUNCTION"), - CURLOPTDEPRECATED(CURLOPT_IOCTLDATA, CURLOPTTYPE_CBPOINT, 131, - 7.18.0, "Use CURLOPT_SEEKDATA"), + CURLOPTDEPRECATED(CURLOPT_IOCTLDATA, CURLOPTTYPE_CBPOINT, 131, 7.18.0, + "Use CURLOPT_SEEKDATA"), /* 132 OBSOLETE. Gone in 7.16.0 */ /* 133 OBSOLETE. Gone in 7.16.0 */ @@ -1627,21 +1598,19 @@ typedef enum { /* Function that will be called to convert from the network encoding (instead of using the iconv calls in libcurl) */ CURLOPTDEPRECATED(CURLOPT_CONV_FROM_NETWORK_FUNCTION, - CURLOPTTYPE_FUNCTIONPOINT, 142, - 7.82.0, "Serves no purpose anymore"), + CURLOPTTYPE_FUNCTIONPOINT, 142, 7.82.0, + "Serves no purpose anymore"), /* Function that will be called to convert to the network encoding (instead of using the iconv calls in libcurl) */ - CURLOPTDEPRECATED(CURLOPT_CONV_TO_NETWORK_FUNCTION, - CURLOPTTYPE_FUNCTIONPOINT, 143, - 7.82.0, "Serves no purpose anymore"), + CURLOPTDEPRECATED(CURLOPT_CONV_TO_NETWORK_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, + 143, 7.82.0, "Serves no purpose anymore"), /* Function that will be called to convert from UTF8 (instead of using the iconv calls in libcurl) Note that this is used only for SSL certificate processing */ - CURLOPTDEPRECATED(CURLOPT_CONV_FROM_UTF8_FUNCTION, - CURLOPTTYPE_FUNCTIONPOINT, 144, - 7.82.0, "Serves no purpose anymore"), + CURLOPTDEPRECATED(CURLOPT_CONV_FROM_UTF8_FUNCTION, CURLOPTTYPE_FUNCTIONPOINT, + 144, 7.82.0, "Serves no purpose anymore"), /* if the connection proceeds too quickly then need to slow it down */ /* limit-rate: maximum number of bytes per second to send or receive */ @@ -1724,7 +1693,7 @@ typedef enum { CURLOPT(CURLOPT_USERNAME, CURLOPTTYPE_STRINGPOINT, 173), CURLOPT(CURLOPT_PASSWORD, CURLOPTTYPE_STRINGPOINT, 174), - /* "name" and "pwd" to use with Proxy when fetching. */ + /* "name" and "pwd" to use with Proxy when fetching. */ CURLOPT(CURLOPT_PROXYUSERNAME, CURLOPTTYPE_STRINGPOINT, 175), CURLOPT(CURLOPT_PROXYPASSWORD, CURLOPTTYPE_STRINGPOINT, 176), @@ -1742,8 +1711,7 @@ typedef enum { /* Socks Service */ /* DEPRECATED, do not use! */ - CURLOPTDEPRECATED(CURLOPT_SOCKS5_GSSAPI_SERVICE, - CURLOPTTYPE_STRINGPOINT, 179, + CURLOPTDEPRECATED(CURLOPT_SOCKS5_GSSAPI_SERVICE, CURLOPTTYPE_STRINGPOINT, 179, 7.49.0, "Use CURLOPT_PROXY_SERVICE_NAME"), /* Socks Service */ @@ -1753,14 +1721,14 @@ typedef enum { transfer, which thus helps the app which takes URLs from users or other external inputs and want to restrict what protocol(s) to deal with. Defaults to CURLPROTO_ALL. */ - CURLOPTDEPRECATED(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181, - 7.85.0, "Use CURLOPT_PROTOCOLS_STR"), + CURLOPTDEPRECATED(CURLOPT_PROTOCOLS, CURLOPTTYPE_LONG, 181, 7.85.0, + "Use CURLOPT_PROTOCOLS_STR"), /* set the bitmask for the protocols that libcurl is allowed to follow to, as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs to be set in both bitmasks to be allowed to get redirected to. */ - CURLOPTDEPRECATED(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182, - 7.85.0, "Use CURLOPT_REDIR_PROTOCOLS_STR"), + CURLOPTDEPRECATED(CURLOPT_REDIR_PROTOCOLS, CURLOPTTYPE_LONG, 182, 7.85.0, + "Use CURLOPT_REDIR_PROTOCOLS_STR"), /* set the SSH knownhost filename to use */ CURLOPT(CURLOPT_SSH_KNOWNHOSTS, CURLOPTTYPE_STRINGPOINT, 183), @@ -1906,8 +1874,8 @@ typedef enum { CURLOPT(CURLOPT_LOGIN_OPTIONS, CURLOPTTYPE_STRINGPOINT, 224), /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */ - CURLOPTDEPRECATED(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225, - 7.86.0, "Has no function"), + CURLOPTDEPRECATED(CURLOPT_SSL_ENABLE_NPN, CURLOPTTYPE_LONG, 225, 7.86.0, + "Has no function"), /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */ CURLOPT(CURLOPT_SSL_ENABLE_ALPN, CURLOPTTYPE_LONG, 226), @@ -2226,7 +2194,7 @@ typedef enum { CURLOPT_LASTENTRY /* the last unused */ } CURLoption; -#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all +#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all \ the obsolete stuff removed! */ /* Backwards compatibility with older names */ @@ -2259,19 +2227,19 @@ typedef enum { #undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */ #endif +/* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host + name resolves addresses using more than one IP protocol version, this + option might be handy to force libcurl to use a specific IP version. */ +#define CURL_IPRESOLVE_WHATEVER \ + 0 /* default, uses addresses to all IP \ + versions that your system allows */ +#define CURL_IPRESOLVE_V4 1 /* uses only IPv4 addresses/connections */ +#define CURL_IPRESOLVE_V6 2 /* uses only IPv6 addresses/connections */ - /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host - name resolves addresses using more than one IP protocol version, this - option might be handy to force libcurl to use a specific IP version. */ -#define CURL_IPRESOLVE_WHATEVER 0 /* default, uses addresses to all IP - versions that your system allows */ -#define CURL_IPRESOLVE_V4 1 /* uses only IPv4 addresses/connections */ -#define CURL_IPRESOLVE_V6 2 /* uses only IPv6 addresses/connections */ - - /* Convenient "aliases" */ +/* Convenient "aliases" */ #define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER - /* These enums are for use with the CURLOPT_HTTP_VERSION option. */ +/* These enums are for use with the CURLOPT_HTTP_VERSION option. */ enum { CURL_HTTP_VERSION_NONE, /* setting this means we do not care, and that we would like the library to choose the best @@ -2280,11 +2248,11 @@ enum { CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */ CURL_HTTP_VERSION_2_0, /* please use HTTP 2 in the request */ CURL_HTTP_VERSION_2TLS, /* use version 2 for HTTPS, version 1.1 for HTTP */ - CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 - Upgrade */ - CURL_HTTP_VERSION_3 = 30, /* Use HTTP/3, fallback to HTTP/2 or HTTP/1 if - needed. For HTTPS only. For HTTP, this option - makes libcurl return error. */ + CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE, /* please use HTTP 2 without HTTP/1.1 + Upgrade */ + CURL_HTTP_VERSION_3 = 30, /* Use HTTP/3, fallback to HTTP/2 or HTTP/1 if + needed. For HTTPS only. For HTTP, this option + makes libcurl return error. */ CURL_HTTP_VERSION_3ONLY = 31, /* Use HTTP/3 without fallback. For HTTPS only. For HTTP, this makes libcurl return error. */ @@ -2301,37 +2269,37 @@ enum { * Public API enums for RTSP requests */ enum { - CURL_RTSPREQ_NONE, /* first in list */ - CURL_RTSPREQ_OPTIONS, - CURL_RTSPREQ_DESCRIBE, - CURL_RTSPREQ_ANNOUNCE, - CURL_RTSPREQ_SETUP, - CURL_RTSPREQ_PLAY, - CURL_RTSPREQ_PAUSE, - CURL_RTSPREQ_TEARDOWN, - CURL_RTSPREQ_GET_PARAMETER, - CURL_RTSPREQ_SET_PARAMETER, - CURL_RTSPREQ_RECORD, - CURL_RTSPREQ_RECEIVE, - CURL_RTSPREQ_LAST /* last in list */ + CURL_RTSPREQ_NONE, /* first in list */ + CURL_RTSPREQ_OPTIONS, + CURL_RTSPREQ_DESCRIBE, + CURL_RTSPREQ_ANNOUNCE, + CURL_RTSPREQ_SETUP, + CURL_RTSPREQ_PLAY, + CURL_RTSPREQ_PAUSE, + CURL_RTSPREQ_TEARDOWN, + CURL_RTSPREQ_GET_PARAMETER, + CURL_RTSPREQ_SET_PARAMETER, + CURL_RTSPREQ_RECORD, + CURL_RTSPREQ_RECEIVE, + CURL_RTSPREQ_LAST /* last in list */ }; - /* These enums are for use with the CURLOPT_NETRC option. */ +/* These enums are for use with the CURLOPT_NETRC option. */ enum CURL_NETRC_OPTION { - CURL_NETRC_IGNORED, /* The .netrc will never be read. - * This is the default. */ - CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred - * to one in the .netrc. */ - CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. - * Unless one is set programmatically, the .netrc - * will be queried. */ + CURL_NETRC_IGNORED, /* The .netrc will never be read. + * This is the default. */ + CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred + * to one in the .netrc. */ + CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored. + * Unless one is set programmatically, the .netrc + * will be queried. */ CURL_NETRC_LAST }; #define CURL_SSLVERSION_DEFAULT 0 -#define CURL_SSLVERSION_TLSv1 1 /* TLS 1.x */ -#define CURL_SSLVERSION_SSLv2 2 -#define CURL_SSLVERSION_SSLv3 3 +#define CURL_SSLVERSION_TLSv1 1 /* TLS 1.x */ +#define CURL_SSLVERSION_SSLv2 2 +#define CURL_SSLVERSION_SSLv3 3 #define CURL_SSLVERSION_TLSv1_0 4 #define CURL_SSLVERSION_TLSv1_1 5 #define CURL_SSLVERSION_TLSv1_2 6 @@ -2340,14 +2308,14 @@ enum CURL_NETRC_OPTION { #define CURL_SSLVERSION_LAST 8 /* never use, keep last */ #define CURL_SSLVERSION_MAX_NONE 0 -#define CURL_SSLVERSION_MAX_DEFAULT (CURL_SSLVERSION_TLSv1 << 16) +#define CURL_SSLVERSION_MAX_DEFAULT (CURL_SSLVERSION_TLSv1 << 16) #define CURL_SSLVERSION_MAX_TLSv1_0 (CURL_SSLVERSION_TLSv1_0 << 16) #define CURL_SSLVERSION_MAX_TLSv1_1 (CURL_SSLVERSION_TLSv1_1 << 16) #define CURL_SSLVERSION_MAX_TLSv1_2 (CURL_SSLVERSION_TLSv1_2 << 16) #define CURL_SSLVERSION_MAX_TLSv1_3 (CURL_SSLVERSION_TLSv1_3 << 16) - /* never use, keep last */ -#define CURL_SSLVERSION_MAX_LAST (CURL_SSLVERSION_LAST << 16) +/* never use, keep last */ +#define CURL_SSLVERSION_MAX_LAST (CURL_SSLVERSION_LAST << 16) enum CURL_TLSAUTH { CURL_TLSAUTH_NONE, @@ -2360,12 +2328,12 @@ enum CURL_TLSAUTH { can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302 | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */ -#define CURL_REDIR_GET_ALL 0 +#define CURL_REDIR_GET_ALL 0 #define CURL_REDIR_POST_301 1 #define CURL_REDIR_POST_302 2 #define CURL_REDIR_POST_303 4 #define CURL_REDIR_POST_ALL \ - (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303) + (CURL_REDIR_POST_301 | CURL_REDIR_POST_302 | CURL_REDIR_POST_303) typedef enum { CURL_TIMECOND_NONE, @@ -2378,7 +2346,7 @@ typedef enum { } curl_TimeCond; /* Special size_t value signaling a null-terminated string. */ -#define CURL_ZERO_TERMINATED ((size_t) -1) +#define CURL_ZERO_TERMINATED ((size_t) - 1) /* curl_strequal() and curl_strnequal() are subject for removal in a future release */ @@ -2386,11 +2354,12 @@ CURL_EXTERN int curl_strequal(const char *s1, const char *s2); CURL_EXTERN int curl_strnequal(const char *s1, const char *s2, size_t n); /* Mime/form handling support. */ -typedef struct curl_mime curl_mime; /* Mime context. */ -typedef struct curl_mimepart curl_mimepart; /* Mime part context. */ +typedef struct curl_mime curl_mime; /* Mime context. */ +typedef struct curl_mimepart curl_mimepart; /* Mime part context. */ /* CURLMIMEOPT_ defines are for the CURLOPT_MIME_OPTIONS option. */ -#define CURLMIMEOPT_FORMESCAPE (1<<0) /* Use backslash-escaping for forms. */ +#define CURLMIMEOPT_FORMESCAPE (1 << 0) /* Use backslash-escaping for forms. \ + */ /* * NAME curl_mime_init() @@ -2466,8 +2435,8 @@ CURL_EXTERN CURLcode curl_mime_encoder(curl_mimepart *part, * * Set mime part data source from memory data, */ -CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, - const char *data, size_t datasize); +CURL_EXTERN CURLcode curl_mime_data(curl_mimepart *part, const char *data, + size_t datasize); /* * NAME curl_mime_filedata() @@ -2486,12 +2455,10 @@ CURL_EXTERN CURLcode curl_mime_filedata(curl_mimepart *part, * * Set mime part data source from callback function. */ -CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, - curl_off_t datasize, +CURL_EXTERN CURLcode curl_mime_data_cb(curl_mimepart *part, curl_off_t datasize, curl_read_callback readfunc, curl_seek_callback seekfunc, - curl_free_callback freefunc, - void *arg); + curl_free_callback freefunc, void *arg); /* * NAME curl_mime_subparts() @@ -2515,31 +2482,31 @@ CURL_EXTERN CURLcode curl_mime_headers(curl_mimepart *part, typedef enum { /********* the first one is unused ************/ - CURLFORM_NOTHING CURL_DEPRECATED(7.56.0, ""), - CURLFORM_COPYNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), - CURLFORM_PTRNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), - CURLFORM_NAMELENGTH CURL_DEPRECATED(7.56.0, ""), - CURLFORM_COPYCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), - CURLFORM_PTRCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), - CURLFORM_CONTENTSLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), - CURLFORM_FILECONTENT CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), - CURLFORM_ARRAY CURL_DEPRECATED(7.56.0, ""), + CURLFORM_NOTHING CURL_DEPRECATED(7.56.0, ""), + CURLFORM_COPYNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), + CURLFORM_PTRNAME CURL_DEPRECATED(7.56.0, "Use curl_mime_name()"), + CURLFORM_NAMELENGTH CURL_DEPRECATED(7.56.0, ""), + CURLFORM_COPYCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_PTRCONTENTS CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_CONTENTSLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_FILECONTENT CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), + CURLFORM_ARRAY CURL_DEPRECATED(7.56.0, ""), CURLFORM_OBSOLETE, - CURLFORM_FILE CURL_DEPRECATED(7.56.0, "Use curl_mime_filedata()"), + CURLFORM_FILE CURL_DEPRECATED(7.56.0, "Use curl_mime_filedata()"), - CURLFORM_BUFFER CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), - CURLFORM_BUFFERPTR CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), - CURLFORM_BUFFERLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_BUFFER CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), + CURLFORM_BUFFERPTR CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_BUFFERLENGTH CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), - CURLFORM_CONTENTTYPE CURL_DEPRECATED(7.56.0, "Use curl_mime_type()"), - CURLFORM_CONTENTHEADER CURL_DEPRECATED(7.56.0, "Use curl_mime_headers()"), - CURLFORM_FILENAME CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), + CURLFORM_CONTENTTYPE CURL_DEPRECATED(7.56.0, "Use curl_mime_type()"), + CURLFORM_CONTENTHEADER CURL_DEPRECATED(7.56.0, "Use curl_mime_headers()"), + CURLFORM_FILENAME CURL_DEPRECATED(7.56.0, "Use curl_mime_filename()"), CURLFORM_END, CURLFORM_OBSOLETE2, - CURLFORM_STREAM CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), - CURLFORM_CONTENTLEN /* added in 7.46.0, provide a curl_off_t length */ - CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), + CURLFORM_STREAM CURL_DEPRECATED(7.56.0, "Use curl_mime_data_cb()"), + CURLFORM_CONTENTLEN /* added in 7.46.0, provide a curl_off_t length */ + CURL_DEPRECATED(7.56.0, "Use curl_mime_data()"), CURLFORM_LASTENTRY /* the last unused */ } CURLformoption; @@ -2547,7 +2514,7 @@ typedef enum { /* structure to be used as parameter for CURLFORM_ARRAY */ struct curl_forms { CURLformoption option; - const char *value; + const char *value; }; /* use this for multipart formpost building */ @@ -2567,16 +2534,16 @@ struct curl_forms { * ***************************************************************************/ typedef enum { - CURL_FORMADD_OK CURL_DEPRECATED(7.56.0, ""), /* 1st, no error */ + CURL_FORMADD_OK CURL_DEPRECATED(7.56.0, ""), /* 1st, no error */ - CURL_FORMADD_MEMORY CURL_DEPRECATED(7.56.0, ""), - CURL_FORMADD_OPTION_TWICE CURL_DEPRECATED(7.56.0, ""), - CURL_FORMADD_NULL CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_MEMORY CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_OPTION_TWICE CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_NULL CURL_DEPRECATED(7.56.0, ""), CURL_FORMADD_UNKNOWN_OPTION CURL_DEPRECATED(7.56.0, ""), - CURL_FORMADD_INCOMPLETE CURL_DEPRECATED(7.56.0, ""), - CURL_FORMADD_ILLEGAL_ARRAY CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_INCOMPLETE CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_ILLEGAL_ARRAY CURL_DEPRECATED(7.56.0, ""), /* libcurl was built with form api disabled */ - CURL_FORMADD_DISABLED CURL_DEPRECATED(7.56.0, ""), + CURL_FORMADD_DISABLED CURL_DEPRECATED(7.56.0, ""), CURL_FORMADD_LAST /* last */ } CURLFORMcode; @@ -2591,9 +2558,8 @@ typedef enum { * CURLOPT_HTTPPOST to send it off to libcurl. */ CURL_EXTERN CURLFORMcode CURL_DEPRECATED(7.56.0, "Use curl_mime_init()") -curl_formadd(struct curl_httppost **httppost, - struct curl_httppost **last_post, - ...); + curl_formadd(struct curl_httppost **httppost, + struct curl_httppost **last_post, ...); /* * callback function for curl_formget() @@ -2603,8 +2569,7 @@ curl_formadd(struct curl_httppost **httppost, * Should return the buffer length passed to it as the argument "len" on * success. */ -typedef size_t (*curl_formget_callback)(void *arg, const char *buf, - size_t len); +typedef size_t (*curl_formget_callback)(void *arg, const char *buf, size_t len); /* * NAME curl_formget() @@ -2617,8 +2582,8 @@ typedef size_t (*curl_formget_callback)(void *arg, const char *buf, * Returns 0 on success. */ CURL_EXTERN int CURL_DEPRECATED(7.56.0, "") -curl_formget(struct curl_httppost *form, void *arg, - curl_formget_callback append); + curl_formget(struct curl_httppost *form, void *arg, + curl_formget_callback append); /* * NAME curl_formfree() * @@ -2627,7 +2592,7 @@ curl_formget(struct curl_httppost *form, void *arg, * Free a multipart formpost previously built with curl_formadd(). */ CURL_EXTERN void CURL_DEPRECATED(7.56.0, "Use curl_mime_free()") -curl_formfree(struct curl_httppost *form); + curl_formfree(struct curl_httppost *form); /* * NAME curl_getenv() @@ -2657,14 +2622,11 @@ CURL_EXTERN char *curl_version(void); * %XX versions). This function returns a new allocated string or NULL if an * error occurred. */ -CURL_EXTERN char *curl_easy_escape(CURL *handle, - const char *string, +CURL_EXTERN char *curl_easy_escape(CURL *handle, const char *string, int length); /* the previous version: */ -CURL_EXTERN char *curl_escape(const char *string, - int length); - +CURL_EXTERN char *curl_escape(const char *string, int length); /* * NAME curl_easy_unescape() @@ -2677,14 +2639,11 @@ CURL_EXTERN char *curl_escape(const char *string, * Conversion Note: On non-ASCII platforms the ASCII %XX codes are * converted into the host encoding. */ -CURL_EXTERN char *curl_easy_unescape(CURL *handle, - const char *string, - int length, - int *outlength); +CURL_EXTERN char *curl_easy_unescape(CURL *handle, const char *string, + int length, int *outlength); /* the previous version */ -CURL_EXTERN char *curl_unescape(const char *string, - int length); +CURL_EXTERN char *curl_unescape(const char *string, int length); /* * NAME curl_free() @@ -2723,8 +2682,7 @@ CURL_EXTERN CURLcode curl_global_init(long flags); * callback routines will be invoked by this library instead of the system * memory management routines like malloc, free etc. */ -CURL_EXTERN CURLcode curl_global_init_mem(long flags, - curl_malloc_callback m, +CURL_EXTERN CURLcode curl_global_init_mem(long flags, curl_malloc_callback m, curl_free_callback f, curl_realloc_callback r, curl_strdup_callback s, @@ -2851,109 +2809,102 @@ struct curl_tlssessioninfo { void *internals; }; -#define CURLINFO_STRING 0x100000 -#define CURLINFO_LONG 0x200000 -#define CURLINFO_DOUBLE 0x300000 -#define CURLINFO_SLIST 0x400000 -#define CURLINFO_PTR 0x400000 /* same as SLIST */ -#define CURLINFO_SOCKET 0x500000 -#define CURLINFO_OFF_T 0x600000 -#define CURLINFO_MASK 0x0fffff +#define CURLINFO_STRING 0x100000 +#define CURLINFO_LONG 0x200000 +#define CURLINFO_DOUBLE 0x300000 +#define CURLINFO_SLIST 0x400000 +#define CURLINFO_PTR 0x400000 /* same as SLIST */ +#define CURLINFO_SOCKET 0x500000 +#define CURLINFO_OFF_T 0x600000 +#define CURLINFO_MASK 0x0fffff #define CURLINFO_TYPEMASK 0xf00000 typedef enum { CURLINFO_NONE, /* first, never use this */ - CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, - CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, - CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, - CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, - CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, + CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1, + CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2, + CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3, + CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4, + CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5, CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6, - CURLINFO_SIZE_UPLOAD CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_UPLOAD_T") - = CURLINFO_DOUBLE + 7, - CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7, - CURLINFO_SIZE_DOWNLOAD - CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_DOWNLOAD_T") - = CURLINFO_DOUBLE + 8, - CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8, - CURLINFO_SPEED_DOWNLOAD - CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_DOWNLOAD_T") - = CURLINFO_DOUBLE + 9, - CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9, - CURLINFO_SPEED_UPLOAD - CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_UPLOAD_T") - = CURLINFO_DOUBLE + 10, - CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10, - CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, - CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, - CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, - CURLINFO_FILETIME = CURLINFO_LONG + 14, - CURLINFO_FILETIME_T = CURLINFO_OFF_T + 14, - CURLINFO_CONTENT_LENGTH_DOWNLOAD - CURL_DEPRECATED(7.55.0, - "Use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T") - = CURLINFO_DOUBLE + 15, - CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15, - CURLINFO_CONTENT_LENGTH_UPLOAD - CURL_DEPRECATED(7.55.0, - "Use CURLINFO_CONTENT_LENGTH_UPLOAD_T") - = CURLINFO_DOUBLE + 16, - CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16, + CURLINFO_SIZE_UPLOAD CURL_DEPRECATED(7.55.0, "Use CURLINFO_SIZE_UPLOAD_T") = + CURLINFO_DOUBLE + 7, + CURLINFO_SIZE_UPLOAD_T = CURLINFO_OFF_T + 7, + CURLINFO_SIZE_DOWNLOAD CURL_DEPRECATED( + 7.55.0, "Use CURLINFO_SIZE_DOWNLOAD_T") = CURLINFO_DOUBLE + 8, + CURLINFO_SIZE_DOWNLOAD_T = CURLINFO_OFF_T + 8, + CURLINFO_SPEED_DOWNLOAD CURL_DEPRECATED( + 7.55.0, "Use CURLINFO_SPEED_DOWNLOAD_T") = CURLINFO_DOUBLE + 9, + CURLINFO_SPEED_DOWNLOAD_T = CURLINFO_OFF_T + 9, + CURLINFO_SPEED_UPLOAD CURL_DEPRECATED(7.55.0, "Use CURLINFO_SPEED_UPLOAD_T") = + CURLINFO_DOUBLE + 10, + CURLINFO_SPEED_UPLOAD_T = CURLINFO_OFF_T + 10, + CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11, + CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12, + CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13, + CURLINFO_FILETIME = CURLINFO_LONG + 14, + CURLINFO_FILETIME_T = CURLINFO_OFF_T + 14, + CURLINFO_CONTENT_LENGTH_DOWNLOAD CURL_DEPRECATED( + 7.55.0, "Use CURLINFO_CONTENT_LENGTH_DOWNLOAD_T") = CURLINFO_DOUBLE + 15, + CURLINFO_CONTENT_LENGTH_DOWNLOAD_T = CURLINFO_OFF_T + 15, + CURLINFO_CONTENT_LENGTH_UPLOAD CURL_DEPRECATED( + 7.55.0, "Use CURLINFO_CONTENT_LENGTH_UPLOAD_T") = CURLINFO_DOUBLE + 16, + CURLINFO_CONTENT_LENGTH_UPLOAD_T = CURLINFO_OFF_T + 16, CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17, - CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, - CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, - CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, - CURLINFO_PRIVATE = CURLINFO_STRING + 21, - CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, - CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, - CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, - CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, - CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, - CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, - CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, - CURLINFO_LASTSOCKET CURL_DEPRECATED(7.45.0, "Use CURLINFO_ACTIVESOCKET") - = CURLINFO_LONG + 29, - CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, - CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, - CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, - CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, - CURLINFO_CERTINFO = CURLINFO_PTR + 34, - CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, - CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, - CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, - CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, - CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, - CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, - CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, - CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, - CURLINFO_TLS_SESSION CURL_DEPRECATED(7.48.0, "Use CURLINFO_TLS_SSL_PTR") - = CURLINFO_PTR + 43, - CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44, - CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45, - CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46, + CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18, + CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19, + CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20, + CURLINFO_PRIVATE = CURLINFO_STRING + 21, + CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22, + CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23, + CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24, + CURLINFO_OS_ERRNO = CURLINFO_LONG + 25, + CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26, + CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27, + CURLINFO_COOKIELIST = CURLINFO_SLIST + 28, + CURLINFO_LASTSOCKET CURL_DEPRECATED(7.45.0, "Use CURLINFO_ACTIVESOCKET") = + CURLINFO_LONG + 29, + CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30, + CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31, + CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32, + CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33, + CURLINFO_CERTINFO = CURLINFO_PTR + 34, + CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35, + CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36, + CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37, + CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38, + CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39, + CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40, + CURLINFO_LOCAL_IP = CURLINFO_STRING + 41, + CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42, + CURLINFO_TLS_SESSION CURL_DEPRECATED(7.48.0, "Use CURLINFO_TLS_SSL_PTR") = + CURLINFO_PTR + 43, + CURLINFO_ACTIVESOCKET = CURLINFO_SOCKET + 44, + CURLINFO_TLS_SSL_PTR = CURLINFO_PTR + 45, + CURLINFO_HTTP_VERSION = CURLINFO_LONG + 46, CURLINFO_PROXY_SSL_VERIFYRESULT = CURLINFO_LONG + 47, - CURLINFO_PROTOCOL CURL_DEPRECATED(7.85.0, "Use CURLINFO_SCHEME") - = CURLINFO_LONG + 48, - CURLINFO_SCHEME = CURLINFO_STRING + 49, - CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50, + CURLINFO_PROTOCOL CURL_DEPRECATED(7.85.0, "Use CURLINFO_SCHEME") = + CURLINFO_LONG + 48, + CURLINFO_SCHEME = CURLINFO_STRING + 49, + CURLINFO_TOTAL_TIME_T = CURLINFO_OFF_T + 50, CURLINFO_NAMELOOKUP_TIME_T = CURLINFO_OFF_T + 51, - CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52, + CURLINFO_CONNECT_TIME_T = CURLINFO_OFF_T + 52, CURLINFO_PRETRANSFER_TIME_T = CURLINFO_OFF_T + 53, CURLINFO_STARTTRANSFER_TIME_T = CURLINFO_OFF_T + 54, - CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55, + CURLINFO_REDIRECT_TIME_T = CURLINFO_OFF_T + 55, CURLINFO_APPCONNECT_TIME_T = CURLINFO_OFF_T + 56, - CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57, + CURLINFO_RETRY_AFTER = CURLINFO_OFF_T + 57, CURLINFO_EFFECTIVE_METHOD = CURLINFO_STRING + 58, - CURLINFO_PROXY_ERROR = CURLINFO_LONG + 59, - CURLINFO_REFERER = CURLINFO_STRING + 60, - CURLINFO_CAINFO = CURLINFO_STRING + 61, - CURLINFO_CAPATH = CURLINFO_STRING + 62, - CURLINFO_XFER_ID = CURLINFO_OFF_T + 63, - CURLINFO_CONN_ID = CURLINFO_OFF_T + 64, - CURLINFO_QUEUE_TIME_T = CURLINFO_OFF_T + 65, - CURLINFO_USED_PROXY = CURLINFO_LONG + 66, + CURLINFO_PROXY_ERROR = CURLINFO_LONG + 59, + CURLINFO_REFERER = CURLINFO_STRING + 60, + CURLINFO_CAINFO = CURLINFO_STRING + 61, + CURLINFO_CAPATH = CURLINFO_STRING + 62, + CURLINFO_XFER_ID = CURLINFO_OFF_T + 63, + CURLINFO_CONN_ID = CURLINFO_OFF_T + 64, + CURLINFO_QUEUE_TIME_T = CURLINFO_OFF_T + 65, + CURLINFO_USED_PROXY = CURLINFO_LONG + 66, CURLINFO_POSTTRANSFER_TIME_T = CURLINFO_OFF_T + 67, - CURLINFO_LASTONE = 67 + CURLINFO_LASTONE = 67 } CURLINFO; /* CURLINFO_RESPONSE_CODE is the new name for the option previously known as @@ -2972,13 +2923,12 @@ typedef enum { CURLCLOSEPOLICY_LAST /* last, never use this */ } curl_closepolicy; -#define CURL_GLOBAL_SSL (1<<0) /* no purpose since 7.57.0 */ -#define CURL_GLOBAL_WIN32 (1<<1) -#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32) +#define CURL_GLOBAL_SSL (1 << 0) /* no purpose since 7.57.0 */ +#define CURL_GLOBAL_WIN32 (1 << 1) +#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL | CURL_GLOBAL_WIN32) #define CURL_GLOBAL_NOTHING 0 #define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL -#define CURL_GLOBAL_ACK_EINTR (1<<2) - +#define CURL_GLOBAL_ACK_EINTR (1 << 2) /***************************************************************************** * Setup defines, protos etc for the sharing stuff. @@ -3009,34 +2959,30 @@ typedef enum { CURL_LOCK_ACCESS_LAST /* never use */ } curl_lock_access; -typedef void (*curl_lock_function)(CURL *handle, - curl_lock_data data, - curl_lock_access locktype, - void *userptr); -typedef void (*curl_unlock_function)(CURL *handle, - curl_lock_data data, +typedef void (*curl_lock_function)(CURL *handle, curl_lock_data data, + curl_lock_access locktype, void *userptr); +typedef void (*curl_unlock_function)(CURL *handle, curl_lock_data data, void *userptr); - typedef enum { - CURLSHE_OK, /* all is fine */ - CURLSHE_BAD_OPTION, /* 1 */ - CURLSHE_IN_USE, /* 2 */ - CURLSHE_INVALID, /* 3 */ - CURLSHE_NOMEM, /* 4 out of memory */ + CURLSHE_OK, /* all is fine */ + CURLSHE_BAD_OPTION, /* 1 */ + CURLSHE_IN_USE, /* 2 */ + CURLSHE_INVALID, /* 3 */ + CURLSHE_NOMEM, /* 4 out of memory */ CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */ - CURLSHE_LAST /* never use */ + CURLSHE_LAST /* never use */ } CURLSHcode; typedef enum { - CURLSHOPT_NONE, /* do not use */ - CURLSHOPT_SHARE, /* specify a data type to share */ - CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */ + CURLSHOPT_NONE, /* do not use */ + CURLSHOPT_SHARE, /* specify a data type to share */ + CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */ CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */ CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */ CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock callback functions */ - CURLSHOPT_LAST /* never use */ + CURLSHOPT_LAST /* never use */ } CURLSHoption; CURL_EXTERN CURLSH *curl_share_init(void); @@ -3061,7 +3007,7 @@ typedef enum { CURLVERSION_TENTH, /* 7.77.0 */ CURLVERSION_ELEVENTH, /* 7.87.0 */ CURLVERSION_TWELFTH, /* 8.8.0 */ - CURLVERSION_LAST /* never actually use this */ + CURLVERSION_LAST /* never actually use this */ } CURLversion; /* The 'CURLVERSION_NOW' is the symbolic name meant to be used by @@ -3081,7 +3027,7 @@ struct curl_version_info_data { long ssl_version_num; /* not used anymore, always 0 */ const char *libz_version; /* human readable string */ /* protocols is terminated by an entry with a NULL protoname */ - const char * const *protocols; + const char *const *protocols; /* The fields below this were added in CURLVERSION_SECOND */ const char *ares; @@ -3100,25 +3046,25 @@ struct curl_version_info_data { /* These fields were added in CURLVERSION_FIFTH */ unsigned int brotli_ver_num; /* Numeric Brotli version (MAJOR << 24) | (MINOR << 12) | PATCH */ - const char *brotli_version; /* human readable string. */ + const char *brotli_version; /* human readable string. */ /* These fields were added in CURLVERSION_SIXTH */ unsigned int nghttp2_ver_num; /* Numeric nghttp2 version (MAJOR << 16) | (MINOR << 8) | PATCH */ - const char *nghttp2_version; /* human readable string. */ - const char *quic_version; /* human readable quic (+ HTTP/3) library + - version or NULL */ + const char *nghttp2_version; /* human readable string. */ + const char *quic_version; /* human readable quic (+ HTTP/3) library + + version or NULL */ /* These fields were added in CURLVERSION_SEVENTH */ - const char *cainfo; /* the built-in default CURLOPT_CAINFO, might - be NULL */ - const char *capath; /* the built-in default CURLOPT_CAPATH, might - be NULL */ + const char *cainfo; /* the built-in default CURLOPT_CAINFO, might + be NULL */ + const char *capath; /* the built-in default CURLOPT_CAPATH, might + be NULL */ /* These fields were added in CURLVERSION_EIGHTH */ unsigned int zstd_ver_num; /* Numeric Zstd version (MAJOR << 24) | (MINOR << 12) | PATCH */ - const char *zstd_version; /* human readable string. */ + const char *zstd_version; /* human readable string. */ /* These fields were added in CURLVERSION_NINTH */ const char *hyper_version; /* human readable string. */ @@ -3128,49 +3074,54 @@ struct curl_version_info_data { /* These fields were added in CURLVERSION_ELEVENTH */ /* feature_names is terminated by an entry with a NULL feature name */ - const char * const *feature_names; + const char *const *feature_names; /* These fields were added in CURLVERSION_TWELFTH */ const char *rtmp_version; /* human readable string. */ }; typedef struct curl_version_info_data curl_version_info_data; -#define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */ -#define CURL_VERSION_KERBEROS4 (1<<1) /* Kerberos V4 auth is supported - (deprecated) */ -#define CURL_VERSION_SSL (1<<2) /* SSL options are present */ -#define CURL_VERSION_LIBZ (1<<3) /* libz features are present */ -#define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */ -#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth is supported - (deprecated) */ -#define CURL_VERSION_DEBUG (1<<6) /* Built with debug capabilities */ -#define CURL_VERSION_ASYNCHDNS (1<<7) /* Asynchronous DNS resolves */ -#define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth is supported */ -#define CURL_VERSION_LARGEFILE (1<<9) /* Supports files larger than 2GB */ -#define CURL_VERSION_IDN (1<<10) /* Internationized Domain Names are - supported */ -#define CURL_VERSION_SSPI (1<<11) /* Built against Windows SSPI */ -#define CURL_VERSION_CONV (1<<12) /* Character conversions supported */ -#define CURL_VERSION_CURLDEBUG (1<<13) /* Debug memory tracking supported */ -#define CURL_VERSION_TLSAUTH_SRP (1<<14) /* TLS-SRP auth is supported */ -#define CURL_VERSION_NTLM_WB (1<<15) /* NTLM delegation to winbind helper - is supported */ -#define CURL_VERSION_HTTP2 (1<<16) /* HTTP2 support built-in */ -#define CURL_VERSION_GSSAPI (1<<17) /* Built against a GSS-API library */ -#define CURL_VERSION_KERBEROS5 (1<<18) /* Kerberos V5 auth is supported */ -#define CURL_VERSION_UNIX_SOCKETS (1<<19) /* Unix domain sockets support */ -#define CURL_VERSION_PSL (1<<20) /* Mozilla's Public Suffix List, used - for cookie domain verification */ -#define CURL_VERSION_HTTPS_PROXY (1<<21) /* HTTPS-proxy support built-in */ -#define CURL_VERSION_MULTI_SSL (1<<22) /* Multiple SSL backends available */ -#define CURL_VERSION_BROTLI (1<<23) /* Brotli features are present. */ -#define CURL_VERSION_ALTSVC (1<<24) /* Alt-Svc handling built-in */ -#define CURL_VERSION_HTTP3 (1<<25) /* HTTP3 support built-in */ -#define CURL_VERSION_ZSTD (1<<26) /* zstd features are present */ -#define CURL_VERSION_UNICODE (1<<27) /* Unicode support on Windows */ -#define CURL_VERSION_HSTS (1<<28) /* HSTS is supported */ -#define CURL_VERSION_GSASL (1<<29) /* libgsasl is supported */ -#define CURL_VERSION_THREADSAFE (1<<30) /* libcurl API is thread-safe */ +#define CURL_VERSION_IPV6 (1 << 0) /* IPv6-enabled */ +#define CURL_VERSION_KERBEROS4 \ + (1 << 1) /* Kerberos V4 auth is supported \ + (deprecated) */ +#define CURL_VERSION_SSL (1 << 2) /* SSL options are present */ +#define CURL_VERSION_LIBZ (1 << 3) /* libz features are present */ +#define CURL_VERSION_NTLM (1 << 4) /* NTLM auth is supported */ +#define CURL_VERSION_GSSNEGOTIATE \ + (1 << 5) /* Negotiate auth is supported \ + (deprecated) */ +#define CURL_VERSION_DEBUG (1 << 6) /* Built with debug capabilities */ +#define CURL_VERSION_ASYNCHDNS (1 << 7) /* Asynchronous DNS resolves */ +#define CURL_VERSION_SPNEGO (1 << 8) /* SPNEGO auth is supported */ +#define CURL_VERSION_LARGEFILE (1 << 9) /* Supports files larger than 2GB */ +#define CURL_VERSION_IDN \ + (1 << 10) /* Internationized Domain Names are \ + supported */ +#define CURL_VERSION_SSPI (1 << 11) /* Built against Windows SSPI */ +#define CURL_VERSION_CONV (1 << 12) /* Character conversions supported */ +#define CURL_VERSION_CURLDEBUG (1 << 13) /* Debug memory tracking supported */ +#define CURL_VERSION_TLSAUTH_SRP (1 << 14) /* TLS-SRP auth is supported */ +#define CURL_VERSION_NTLM_WB \ + (1 << 15) /* NTLM delegation to winbind helper \ + is supported */ +#define CURL_VERSION_HTTP2 (1 << 16) /* HTTP2 support built-in */ +#define CURL_VERSION_GSSAPI (1 << 17) /* Built against a GSS-API library */ +#define CURL_VERSION_KERBEROS5 (1 << 18) /* Kerberos V5 auth is supported */ +#define CURL_VERSION_UNIX_SOCKETS (1 << 19) /* Unix domain sockets support */ +#define CURL_VERSION_PSL \ + (1 << 20) /* Mozilla's Public Suffix List, used \ + for cookie domain verification */ +#define CURL_VERSION_HTTPS_PROXY (1 << 21) /* HTTPS-proxy support built-in */ +#define CURL_VERSION_MULTI_SSL (1 << 22) /* Multiple SSL backends available */ +#define CURL_VERSION_BROTLI (1 << 23) /* Brotli features are present. */ +#define CURL_VERSION_ALTSVC (1 << 24) /* Alt-Svc handling built-in */ +#define CURL_VERSION_HTTP3 (1 << 25) /* HTTP3 support built-in */ +#define CURL_VERSION_ZSTD (1 << 26) /* zstd features are present */ +#define CURL_VERSION_UNICODE (1 << 27) /* Unicode support on Windows */ +#define CURL_VERSION_HSTS (1 << 28) /* HSTS is supported */ +#define CURL_VERSION_GSASL (1 << 29) /* libgsasl is supported */ +#define CURL_VERSION_THREADSAFE (1 << 30) /* libcurl API is thread-safe */ /* * NAME curl_version_info() @@ -3215,33 +3166,33 @@ CURL_EXTERN const char *curl_share_strerror(CURLSHcode); */ CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask); -#define CURLPAUSE_RECV (1<<0) +#define CURLPAUSE_RECV (1 << 0) #define CURLPAUSE_RECV_CONT (0) -#define CURLPAUSE_SEND (1<<2) +#define CURLPAUSE_SEND (1 << 2) #define CURLPAUSE_SEND_CONT (0) -#define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND) -#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT) +#define CURLPAUSE_ALL (CURLPAUSE_RECV | CURLPAUSE_SEND) +#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT | CURLPAUSE_SEND_CONT) -#ifdef __cplusplus +#ifdef __cplusplus } /* end of extern "C" */ #endif /* unfortunately, the easy.h and multi.h include files need options and info stuff before they can be included! */ #include "easy.h" /* nothing in curl is fun without the easy stuff */ +#include "header.h" #include "multi.h" -#include "urlapi.h" #include "options.h" -#include "header.h" +#include "urlapi.h" #include "websockets.h" #ifndef CURL_SKIP_INCLUDE_MPRINTF #include "mprintf.h" #endif /* the typechecker does not work in C++ (yet) */ -#if defined(__GNUC__) && defined(__GNUC_MINOR__) && \ +#if defined(__GNUC__) && defined(__GNUC_MINOR__) && \ ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \ !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK) #include "typecheck-gcc.h" @@ -3250,10 +3201,14 @@ CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask); /* This preprocessor magic that replaces a call with the exact same call is only done to make sure application authors pass exactly three arguments to these functions. */ -#define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param) -#define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg) -#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) -#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) +#define curl_easy_setopt(handle, opt, param) \ + curl_easy_setopt(handle, opt, param) +#define curl_easy_getinfo(handle, info, arg) \ + curl_easy_getinfo(handle, info, arg) +#define curl_share_setopt(share, opt, param) \ + curl_share_setopt(share, opt, param) +#define curl_multi_setopt(handle, opt, param) \ + curl_multi_setopt(handle, opt, param) #endif /* __STDC__ >= 1 */ #endif /* gcc >= 4.3 && !__cplusplus && !CURL_DISABLE_TYPECHECK */ diff --git a/vendor/hydra/vendor/curl/include/curl/curlver.h b/vendor/hydra/vendor/curl/include/curl/curlver.h index 673032f5..c007fabb 100644 --- a/vendor/hydra/vendor/curl/include/curl/curlver.h +++ b/vendor/hydra/vendor/curl/include/curl/curlver.h @@ -72,8 +72,8 @@ */ #define LIBCURL_TIMESTAMP "[unreleased]" -#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z)) -#define CURL_AT_LEAST_VERSION(x,y,z) \ +#define CURL_VERSION_BITS(x, y, z) ((x) << 16 | (y) << 8 | (z)) +#define CURL_AT_LEAST_VERSION(x, y, z) \ (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z)) #endif /* CURLINC_CURLVER_H */ diff --git a/vendor/hydra/vendor/curl/include/curl/easy.h b/vendor/hydra/vendor/curl/include/curl/easy.h index 71b8dd46..286cd10e 100644 --- a/vendor/hydra/vendor/curl/include/curl/easy.h +++ b/vendor/hydra/vendor/curl/include/curl/easy.h @@ -23,12 +23,12 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -#ifdef __cplusplus +#ifdef __cplusplus extern "C" { #endif /* Flag bits in the curl_blob struct: */ -#define CURL_BLOB_COPY 1 /* tell libcurl to copy the data */ +#define CURL_BLOB_COPY 1 /* tell libcurl to copy the data */ #define CURL_BLOB_NOCOPY 0 /* tell libcurl to NOT copy the data */ struct curl_blob { @@ -58,7 +58,6 @@ CURL_EXTERN void curl_easy_cleanup(CURL *curl); */ CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...); - /* * NAME curl_easy_duphandle() * @@ -108,7 +107,6 @@ CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer, size_t buflen, size_t *n); - /* * NAME curl_easy_upkeep() * @@ -118,7 +116,7 @@ CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer, */ CURL_EXTERN CURLcode curl_easy_upkeep(CURL *curl); -#ifdef __cplusplus +#ifdef __cplusplus } /* end of extern "C" */ #endif diff --git a/vendor/hydra/vendor/curl/include/curl/header.h b/vendor/hydra/vendor/curl/include/curl/header.h index 8df11e1e..c243648c 100644 --- a/vendor/hydra/vendor/curl/include/curl/header.h +++ b/vendor/hydra/vendor/curl/include/curl/header.h @@ -24,25 +24,25 @@ * ***************************************************************************/ -#ifdef __cplusplus +#ifdef __cplusplus extern "C" { #endif struct curl_header { - char *name; /* this might not use the same case */ + char *name; /* this might not use the same case */ char *value; - size_t amount; /* number of headers using this name */ - size_t index; /* ... of this instance, 0 or higher */ + size_t amount; /* number of headers using this name */ + size_t index; /* ... of this instance, 0 or higher */ unsigned int origin; /* see bits below */ - void *anchor; /* handle privately used by libcurl */ + void *anchor; /* handle privately used by libcurl */ }; /* 'origin' bits */ -#define CURLH_HEADER (1<<0) /* plain server header */ -#define CURLH_TRAILER (1<<1) /* trailers */ -#define CURLH_CONNECT (1<<2) /* CONNECT headers */ -#define CURLH_1XX (1<<3) /* 1xx headers */ -#define CURLH_PSEUDO (1<<4) /* pseudo headers */ +#define CURLH_HEADER (1 << 0) /* plain server header */ +#define CURLH_TRAILER (1 << 1) /* trailers */ +#define CURLH_CONNECT (1 << 2) /* CONNECT headers */ +#define CURLH_1XX (1 << 3) /* 1xx headers */ +#define CURLH_PSEUDO (1 << 4) /* pseudo headers */ typedef enum { CURLHE_OK, @@ -55,12 +55,9 @@ typedef enum { CURLHE_NOT_BUILT_IN /* if API was disabled in the build */ } CURLHcode; -CURL_EXTERN CURLHcode curl_easy_header(CURL *easy, - const char *name, - size_t index, - unsigned int origin, - int request, - struct curl_header **hout); +CURL_EXTERN CURLHcode curl_easy_header(CURL *easy, const char *name, + size_t index, unsigned int origin, + int request, struct curl_header **hout); CURL_EXTERN struct curl_header *curl_easy_nextheader(CURL *easy, unsigned int origin, diff --git a/vendor/hydra/vendor/curl/include/curl/mprintf.h b/vendor/hydra/vendor/curl/include/curl/mprintf.h index 88059c85..f80a2c77 100644 --- a/vendor/hydra/vendor/curl/include/curl/mprintf.h +++ b/vendor/hydra/vendor/curl/include/curl/mprintf.h @@ -26,59 +26,56 @@ #include #include /* needed for FILE */ -#include "curl.h" /* for CURL_EXTERN */ -#ifdef __cplusplus +#include "curl.h" /* for CURL_EXTERN */ + +#ifdef __cplusplus extern "C" { #endif #ifndef CURL_TEMP_PRINTF -#if (defined(__GNUC__) || defined(__clang__) || \ - defined(__IAR_SYSTEMS_ICC__)) && \ - defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ - !defined(CURL_NO_FMT_CHECKS) +#if (defined(__GNUC__) || defined(__clang__) || \ + defined(__IAR_SYSTEMS_ICC__)) && \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(CURL_NO_FMT_CHECKS) #if defined(__MINGW32__) && !defined(__clang__) -#if defined(__MINGW_PRINTF_FORMAT) /* mingw-w64 3.0.0+. Needs stdio.h. */ +#if defined(__MINGW_PRINTF_FORMAT) /* mingw-w64 3.0.0+. Needs stdio.h. */ #define CURL_TEMP_PRINTF(fmt, arg) \ __attribute__((format(__MINGW_PRINTF_FORMAT, fmt, arg))) #else #define CURL_TEMP_PRINTF(fmt, arg) #endif #else -#define CURL_TEMP_PRINTF(fmt, arg) \ - __attribute__((format(printf, fmt, arg))) +#define CURL_TEMP_PRINTF(fmt, arg) __attribute__((format(printf, fmt, arg))) #endif #else #define CURL_TEMP_PRINTF(fmt, arg) #endif #endif -CURL_EXTERN int curl_mprintf(const char *format, ...) - CURL_TEMP_PRINTF(1, 2); +CURL_EXTERN int curl_mprintf(const char *format, ...) CURL_TEMP_PRINTF(1, 2); CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...) - CURL_TEMP_PRINTF(2, 3); + CURL_TEMP_PRINTF(2, 3); CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...) - CURL_TEMP_PRINTF(2, 3); + CURL_TEMP_PRINTF(2, 3); CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength, - const char *format, ...) - CURL_TEMP_PRINTF(3, 4); + const char *format, ...) CURL_TEMP_PRINTF(3, 4); CURL_EXTERN int curl_mvprintf(const char *format, va_list args) - CURL_TEMP_PRINTF(1, 0); + CURL_TEMP_PRINTF(1, 0); CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args) - CURL_TEMP_PRINTF(2, 0); + CURL_TEMP_PRINTF(2, 0); CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args) - CURL_TEMP_PRINTF(2, 0); + CURL_TEMP_PRINTF(2, 0); CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength, const char *format, va_list args) - CURL_TEMP_PRINTF(3, 0); -CURL_EXTERN char *curl_maprintf(const char *format, ...) - CURL_TEMP_PRINTF(1, 2); + CURL_TEMP_PRINTF(3, 0); +CURL_EXTERN char *curl_maprintf(const char *format, ...) CURL_TEMP_PRINTF(1, 2); CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args) - CURL_TEMP_PRINTF(1, 0); + CURL_TEMP_PRINTF(1, 0); #undef CURL_TEMP_PRINTF -#ifdef __cplusplus +#ifdef __cplusplus } /* end of extern "C" */ #endif diff --git a/vendor/hydra/vendor/curl/include/curl/multi.h b/vendor/hydra/vendor/curl/include/curl/multi.h index 7b6c351a..d2651d67 100644 --- a/vendor/hydra/vendor/curl/include/curl/multi.h +++ b/vendor/hydra/vendor/curl/include/curl/multi.h @@ -50,7 +50,7 @@ */ #include "curl.h" -#ifdef __cplusplus +#ifdef __cplusplus extern "C" { #endif @@ -72,9 +72,9 @@ typedef enum { CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */ CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was attempted to get added - again */ - CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a - callback */ - CURLM_WAKEUP_FAILURE, /* wakeup is unavailable or failed */ + CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a + callback */ + CURLM_WAKEUP_FAILURE, /* wakeup is unavailable or failed */ CURLM_BAD_FUNCTION_ARGUMENT, /* function called with a bad parameter */ CURLM_ABORTED_BY_CALLBACK, CURLM_UNRECOVERABLE_POLL, @@ -87,23 +87,23 @@ typedef enum { #define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM /* bitmask bits for CURLMOPT_PIPELINING */ -#define CURLPIPE_NOTHING 0L -#define CURLPIPE_HTTP1 1L +#define CURLPIPE_NOTHING 0L +#define CURLPIPE_HTTP1 1L #define CURLPIPE_MULTIPLEX 2L typedef enum { CURLMSG_NONE, /* first, not used */ CURLMSG_DONE, /* This easy handle has completed. 'result' contains the CURLcode of the transfer */ - CURLMSG_LAST /* last, not used */ + CURLMSG_LAST /* last, not used */ } CURLMSG; struct CURLMsg { CURLMSG msg; /* what this message means */ CURL *easy_handle; /* the handle it concerns */ union { - void *whatever; /* message-specific data */ - CURLcode result; /* return code for transfer */ + void *whatever; /* message-specific data */ + CURLcode result; /* return code for transfer */ } data; }; typedef struct CURLMsg CURLMsg; @@ -111,9 +111,9 @@ typedef struct CURLMsg CURLMsg; /* Based on poll(2) structure and values. * We do not use pollfd and POLL* constants explicitly * to cover platforms without poll(). */ -#define CURL_WAIT_POLLIN 0x0001 -#define CURL_WAIT_POLLPRI 0x0002 -#define CURL_WAIT_POLLOUT 0x0004 +#define CURL_WAIT_POLLIN 0x0001 +#define CURL_WAIT_POLLPRI 0x0002 +#define CURL_WAIT_POLLOUT 0x0004 struct curl_waitfd { curl_socket_t fd; @@ -140,29 +140,27 @@ CURL_EXTERN CURLM *curl_multi_init(void); CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *curl_handle); - /* - * Name: curl_multi_remove_handle() - * - * Desc: removes a curl handle from the multi stack again - * - * Returns: CURLMcode type, general multi error code. - */ +/* + * Name: curl_multi_remove_handle() + * + * Desc: removes a curl handle from the multi stack again + * + * Returns: CURLMcode type, general multi error code. + */ CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *curl_handle); - /* - * Name: curl_multi_fdset() - * - * Desc: Ask curl for its fd_set sets. The app can use these to select() or - * poll() on. We want curl_multi_perform() called as soon as one of - * them are ready. - * - * Returns: CURLMcode type, general multi error code. - */ -CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, - fd_set *read_fd_set, - fd_set *write_fd_set, - fd_set *exc_fd_set, +/* + * Name: curl_multi_fdset() + * + * Desc: Ask curl for its fd_set sets. The app can use these to select() or + * poll() on. We want curl_multi_perform() called as soon as one of + * them are ready. + * + * Returns: CURLMcode type, general multi error code. + */ +CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, fd_set *read_fd_set, + fd_set *write_fd_set, fd_set *exc_fd_set, int *max_fd); /* @@ -175,8 +173,7 @@ CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle, */ CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, struct curl_waitfd extra_fds[], - unsigned int extra_nfds, - int timeout_ms, + unsigned int extra_nfds, int timeout_ms, int *ret); /* @@ -189,8 +186,7 @@ CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle, */ CURL_EXTERN CURLMcode curl_multi_poll(CURLM *multi_handle, struct curl_waitfd extra_fds[], - unsigned int extra_nfds, - int timeout_ms, + unsigned int extra_nfds, int timeout_ms, int *ret); /* @@ -202,35 +198,35 @@ CURL_EXTERN CURLMcode curl_multi_poll(CURLM *multi_handle, */ CURL_EXTERN CURLMcode curl_multi_wakeup(CURLM *multi_handle); - /* - * Name: curl_multi_perform() - * - * Desc: When the app thinks there is data available for curl it calls this - * function to read/write whatever there is right now. This returns - * as soon as the reads and writes are done. This function does not - * require that there actually is data available for reading or that - * data can be written, it can be called just in case. It returns - * the number of handles that still transfer data in the second - * argument's integer-pointer. - * - * Returns: CURLMcode type, general multi error code. *NOTE* that this only - * returns errors etc regarding the whole multi stack. There might - * still have occurred problems on individual transfers even when - * this returns OK. - */ +/* + * Name: curl_multi_perform() + * + * Desc: When the app thinks there is data available for curl it calls this + * function to read/write whatever there is right now. This returns + * as soon as the reads and writes are done. This function does not + * require that there actually is data available for reading or that + * data can be written, it can be called just in case. It returns + * the number of handles that still transfer data in the second + * argument's integer-pointer. + * + * Returns: CURLMcode type, general multi error code. *NOTE* that this only + * returns errors etc regarding the whole multi stack. There might + * still have occurred problems on individual transfers even when + * this returns OK. + */ CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles); - /* - * Name: curl_multi_cleanup() - * - * Desc: Cleans up and removes a whole multi stack. It does not free or - * touch any individual easy handles in any way. We need to define - * in what state those handles will be if this function is called - * in the middle of a transfer. - * - * Returns: CURLMcode type, general multi error code. - */ +/* + * Name: curl_multi_cleanup() + * + * Desc: Cleans up and removes a whole multi stack. It does not free or + * touch any individual easy handles in any way. We need to define + * in what state those handles will be if this function is called + * in the middle of a transfer. + * + * Returns: CURLMcode type, general multi error code. + */ CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle); /* @@ -284,17 +280,17 @@ CURL_EXTERN const char *curl_multi_strerror(CURLMcode); * detected to have "action" on them and let libcurl perform. * See manpage for details. */ -#define CURL_POLL_NONE 0 -#define CURL_POLL_IN 1 -#define CURL_POLL_OUT 2 -#define CURL_POLL_INOUT 3 +#define CURL_POLL_NONE 0 +#define CURL_POLL_IN 1 +#define CURL_POLL_OUT 2 +#define CURL_POLL_INOUT 3 #define CURL_POLL_REMOVE 4 #define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD -#define CURL_CSELECT_IN 0x01 -#define CURL_CSELECT_OUT 0x02 -#define CURL_CSELECT_ERR 0x04 +#define CURL_CSELECT_IN 0x01 +#define CURL_CSELECT_OUT 0x02 +#define CURL_CSELECT_ERR 0x04 typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */ curl_socket_t s, /* socket */ @@ -319,21 +315,21 @@ typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */ pointer */ CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()") -curl_multi_socket(CURLM *multi_handle, curl_socket_t s, int *running_handles); + curl_multi_socket(CURLM *multi_handle, curl_socket_t s, + int *running_handles); CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, - curl_socket_t s, - int ev_bitmask, + curl_socket_t s, int ev_bitmask, int *running_handles); CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()") -curl_multi_socket_all(CURLM *multi_handle, int *running_handles); + curl_multi_socket_all(CURLM *multi_handle, int *running_handles); #ifndef CURL_ALLOW_OLD_MULTI_SOCKET /* This macro below was added in 7.16.3 to push users who recompile to use the new curl_multi_socket_action() instead of the old curl_multi_socket() */ -#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z) +#define curl_multi_socket(x, y, z) curl_multi_socket_action(x, y, 0, z) #endif /* @@ -355,10 +351,10 @@ typedef enum { /* This is the argument passed to the socket callback */ CURLOPT(CURLMOPT_SOCKETDATA, CURLOPTTYPE_OBJECTPOINT, 2), - /* set to 1 to enable pipelining for this multi handle */ + /* set to 1 to enable pipelining for this multi handle */ CURLOPT(CURLMOPT_PIPELINING, CURLOPTTYPE_LONG, 3), - /* This is the timer callback function pointer */ + /* This is the timer callback function pointer */ CURLOPT(CURLMOPT_TIMERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 4), /* This is the argument passed to the timer callback */ @@ -390,7 +386,7 @@ typedef enum { /* maximum number of open connections in total */ CURLOPT(CURLMOPT_MAX_TOTAL_CONNECTIONS, CURLOPTTYPE_LONG, 13), - /* This is the server push callback function pointer */ + /* This is the server push callback function pointer */ CURLOPT(CURLMOPT_PUSHFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 14), /* This is the argument passed to the server push callback */ @@ -402,7 +398,6 @@ typedef enum { CURLMOPT_LASTENTRY /* the last unused */ } CURLMoption; - /* * Name: curl_multi_setopt() * @@ -410,9 +405,8 @@ typedef enum { * * Returns: CURLM error code. */ -CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle, - CURLMoption option, ...); - +CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle, CURLMoption option, + ...); /* * Name: curl_multi_assign() @@ -447,20 +441,17 @@ CURL_EXTERN CURL **curl_multi_get_handles(CURLM *multi_handle); * * Returns: CURL_PUSH_OK, CURL_PUSH_DENY or CURL_PUSH_ERROROUT */ -#define CURL_PUSH_OK 0 -#define CURL_PUSH_DENY 1 +#define CURL_PUSH_OK 0 +#define CURL_PUSH_DENY 1 #define CURL_PUSH_ERROROUT 2 /* added in 7.72.0 */ -struct curl_pushheaders; /* forward declaration only */ +struct curl_pushheaders; /* forward declaration only */ -CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h, - size_t num); +CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h, size_t num); CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h, const char *name); -typedef int (*curl_push_callback)(CURL *parent, - CURL *easy, - size_t num_headers, +typedef int (*curl_push_callback)(CURL *parent, CURL *easy, size_t num_headers, struct curl_pushheaders *headers, void *userp); @@ -473,8 +464,7 @@ typedef int (*curl_push_callback)(CURL *parent, * * Returns: CURLMcode type, general multi error code. */ -CURL_EXTERN CURLMcode curl_multi_waitfds(CURLM *multi, - struct curl_waitfd *ufds, +CURL_EXTERN CURLMcode curl_multi_waitfds(CURLM *multi, struct curl_waitfd *ufds, unsigned int size, unsigned int *fd_count); diff --git a/vendor/hydra/vendor/curl/include/curl/options.h b/vendor/hydra/vendor/curl/include/curl/options.h index 1ed76a95..ec09e005 100644 --- a/vendor/hydra/vendor/curl/include/curl/options.h +++ b/vendor/hydra/vendor/curl/include/curl/options.h @@ -24,7 +24,7 @@ * ***************************************************************************/ -#ifdef __cplusplus +#ifdef __cplusplus extern "C" { #endif @@ -44,7 +44,7 @@ typedef enum { /* "alias" means it is provided for old programs to remain functional, we prefer another name */ -#define CURLOT_FLAG_ALIAS (1<<0) +#define CURLOT_FLAG_ALIAS (1 << 0) /* The CURLOPTTYPE_* id ranges can still be used to figure out what type/size to use for curl_easy_setopt() for the given id */ @@ -55,14 +55,13 @@ struct curl_easyoption { unsigned int flags; }; -CURL_EXTERN const struct curl_easyoption * -curl_easy_option_by_name(const char *name); +CURL_EXTERN const struct curl_easyoption *curl_easy_option_by_name( + const char *name); -CURL_EXTERN const struct curl_easyoption * -curl_easy_option_by_id(CURLoption id); +CURL_EXTERN const struct curl_easyoption *curl_easy_option_by_id(CURLoption id); -CURL_EXTERN const struct curl_easyoption * -curl_easy_option_next(const struct curl_easyoption *prev); +CURL_EXTERN const struct curl_easyoption *curl_easy_option_next( + const struct curl_easyoption *prev); #ifdef __cplusplus } /* end of extern "C" */ diff --git a/vendor/hydra/vendor/curl/include/curl/system.h b/vendor/hydra/vendor/curl/include/curl/system.h index e5be2568..21303142 100644 --- a/vendor/hydra/vendor/curl/include/curl/system.h +++ b/vendor/hydra/vendor/curl/include/curl/system.h @@ -53,362 +53,358 @@ */ #if defined(__DJGPP__) || defined(__GO32__) -# if defined(__DJGPP__) && (__DJGPP__ > 1) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T int +#if defined(__DJGPP__) && (__DJGPP__ > 1) +#define CURL_TYPEOF_CURL_OFF_T long long +#define CURL_FORMAT_CURL_OFF_T "lld" +#define CURL_FORMAT_CURL_OFF_TU "llu" +#define CURL_SUFFIX_CURL_OFF_T LL +#define CURL_SUFFIX_CURL_OFF_TU ULL +#else +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#endif +#define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(__SALFORDC__) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T int +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(__BORLANDC__) -# if (__BORLANDC__ < 0x520) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# else -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T i64 -# define CURL_SUFFIX_CURL_OFF_TU ui64 -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T int +#if (__BORLANDC__ < 0x520) +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#else +#define CURL_TYPEOF_CURL_OFF_T __int64 +#define CURL_FORMAT_CURL_OFF_T "I64d" +#define CURL_FORMAT_CURL_OFF_TU "I64u" +#define CURL_SUFFIX_CURL_OFF_T i64 +#define CURL_SUFFIX_CURL_OFF_TU ui64 +#endif +#define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(__TURBOC__) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T int +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(__POCC__) -# if (__POCC__ < 280) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# elif defined(_MSC_VER) -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T i64 -# define CURL_SUFFIX_CURL_OFF_TU ui64 -# else -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T int +#if (__POCC__ < 280) +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#elif defined(_MSC_VER) +#define CURL_TYPEOF_CURL_OFF_T __int64 +#define CURL_FORMAT_CURL_OFF_T "I64d" +#define CURL_FORMAT_CURL_OFF_TU "I64u" +#define CURL_SUFFIX_CURL_OFF_T i64 +#define CURL_SUFFIX_CURL_OFF_TU ui64 +#else +#define CURL_TYPEOF_CURL_OFF_T long long +#define CURL_FORMAT_CURL_OFF_T "lld" +#define CURL_FORMAT_CURL_OFF_TU "llu" +#define CURL_SUFFIX_CURL_OFF_T LL +#define CURL_SUFFIX_CURL_OFF_TU ULL +#endif +#define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(__LCC__) -# if defined(__MCST__) /* MCST eLbrus Compiler Collection */ -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 -# else /* Local (or Little) C Compiler */ -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T int -# endif +#if defined(__MCST__) /* MCST eLbrus Compiler Collection */ +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +#define CURL_PULL_SYS_TYPES_H 1 +#define CURL_PULL_SYS_SOCKET_H 1 +#else /* Local (or Little) C Compiler */ +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#define CURL_TYPEOF_CURL_SOCKLEN_T int +#endif #elif defined(macintosh) -# include -# if TYPE_LONGLONG -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int +#include +#if TYPE_LONGLONG +#define CURL_TYPEOF_CURL_OFF_T long long +#define CURL_FORMAT_CURL_OFF_T "lld" +#define CURL_FORMAT_CURL_OFF_TU "llu" +#define CURL_SUFFIX_CURL_OFF_T LL +#define CURL_SUFFIX_CURL_OFF_TU ULL +#else +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#endif +#define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int #elif defined(__TANDEM) -# if ! defined(__LP64) - /* Required for 32-bit NonStop builds only. */ -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# define CURL_TYPEOF_CURL_SOCKLEN_T int -# endif +#if !defined(__LP64) +/* Required for 32-bit NonStop builds only. */ +#define CURL_TYPEOF_CURL_OFF_T long long +#define CURL_FORMAT_CURL_OFF_T "lld" +#define CURL_FORMAT_CURL_OFF_TU "llu" +#define CURL_SUFFIX_CURL_OFF_T LL +#define CURL_SUFFIX_CURL_OFF_TU ULL +#define CURL_TYPEOF_CURL_SOCKLEN_T int +#endif #elif defined(_WIN32_WCE) -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T i64 -# define CURL_SUFFIX_CURL_OFF_TU ui64 -# define CURL_TYPEOF_CURL_SOCKLEN_T int +#define CURL_TYPEOF_CURL_OFF_T __int64 +#define CURL_FORMAT_CURL_OFF_T "I64d" +#define CURL_FORMAT_CURL_OFF_TU "I64u" +#define CURL_SUFFIX_CURL_OFF_T i64 +#define CURL_SUFFIX_CURL_OFF_TU ui64 +#define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(__MINGW32__) -# include -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T PRId64 -# define CURL_FORMAT_CURL_OFF_TU PRIu64 -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# define CURL_TYPEOF_CURL_SOCKLEN_T int -# define CURL_PULL_SYS_TYPES_H 1 +#include +#define CURL_TYPEOF_CURL_OFF_T long long +#define CURL_FORMAT_CURL_OFF_T PRId64 +#define CURL_FORMAT_CURL_OFF_TU PRIu64 +#define CURL_SUFFIX_CURL_OFF_T LL +#define CURL_SUFFIX_CURL_OFF_TU ULL +#define CURL_TYPEOF_CURL_SOCKLEN_T int +#define CURL_PULL_SYS_TYPES_H 1 #elif defined(__VMS) -# if defined(__VAX) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# else -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int +#if defined(__VAX) +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#else +#define CURL_TYPEOF_CURL_OFF_T long long +#define CURL_FORMAT_CURL_OFF_T "lld" +#define CURL_FORMAT_CURL_OFF_TU "llu" +#define CURL_SUFFIX_CURL_OFF_T LL +#define CURL_SUFFIX_CURL_OFF_TU ULL +#endif +#define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int #elif defined(__OS400__) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 +#define CURL_TYPEOF_CURL_OFF_T long long +#define CURL_FORMAT_CURL_OFF_T "lld" +#define CURL_FORMAT_CURL_OFF_TU "llu" +#define CURL_SUFFIX_CURL_OFF_T LL +#define CURL_SUFFIX_CURL_OFF_TU ULL +#define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +#define CURL_PULL_SYS_TYPES_H 1 +#define CURL_PULL_SYS_SOCKET_H 1 #elif defined(__MVS__) -# if defined(_LONG_LONG) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(_LP64) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 +#if defined(_LONG_LONG) +#define CURL_TYPEOF_CURL_OFF_T long long +#define CURL_FORMAT_CURL_OFF_T "lld" +#define CURL_FORMAT_CURL_OFF_TU "llu" +#define CURL_SUFFIX_CURL_OFF_T LL +#define CURL_SUFFIX_CURL_OFF_TU ULL +#elif defined(_LP64) +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#else +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#endif +#define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +#define CURL_PULL_SYS_TYPES_H 1 +#define CURL_PULL_SYS_SOCKET_H 1 #elif defined(__370__) -# if defined(__IBMC__) || defined(__IBMCPP__) -# if defined(_ILP32) -# elif defined(_LP64) -# endif -# if defined(_LONG_LONG) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(_LP64) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 -# endif +#if defined(__IBMC__) || defined(__IBMCPP__) +#if defined(_ILP32) +#elif defined(_LP64) +#endif +#if defined(_LONG_LONG) +#define CURL_TYPEOF_CURL_OFF_T long long +#define CURL_FORMAT_CURL_OFF_T "lld" +#define CURL_FORMAT_CURL_OFF_TU "llu" +#define CURL_SUFFIX_CURL_OFF_T LL +#define CURL_SUFFIX_CURL_OFF_TU ULL +#elif defined(_LP64) +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#else +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#endif +#define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +#define CURL_PULL_SYS_TYPES_H 1 +#define CURL_PULL_SYS_SOCKET_H 1 +#endif #elif defined(TPF) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T int +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#define CURL_TYPEOF_CURL_SOCKLEN_T int #elif defined(__TINYC__) /* also known as tcc */ -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 +#define CURL_TYPEOF_CURL_OFF_T long long +#define CURL_FORMAT_CURL_OFF_T "lld" +#define CURL_FORMAT_CURL_OFF_TU "llu" +#define CURL_SUFFIX_CURL_OFF_T LL +#define CURL_SUFFIX_CURL_OFF_TU ULL +#define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +#define CURL_PULL_SYS_TYPES_H 1 +#define CURL_PULL_SYS_SOCKET_H 1 #elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */ -# if !defined(__LP64) && (defined(__ILP32) || \ - defined(__i386) || \ - defined(__sparcv8) || \ - defined(__sparcv8plus)) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(__LP64) || \ - defined(__amd64) || defined(__sparcv9) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 +#if !defined(__LP64) && (defined(__ILP32) || defined(__i386) || \ + defined(__sparcv8) || defined(__sparcv8plus)) +#define CURL_TYPEOF_CURL_OFF_T long long +#define CURL_FORMAT_CURL_OFF_T "lld" +#define CURL_FORMAT_CURL_OFF_TU "llu" +#define CURL_SUFFIX_CURL_OFF_T LL +#define CURL_SUFFIX_CURL_OFF_TU ULL +#elif defined(__LP64) || defined(__amd64) || defined(__sparcv9) +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#endif +#define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +#define CURL_PULL_SYS_TYPES_H 1 +#define CURL_PULL_SYS_SOCKET_H 1 #elif defined(__xlc__) /* IBM xlc compiler */ -# if !defined(_LP64) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 +#if !defined(_LP64) +#define CURL_TYPEOF_CURL_OFF_T long long +#define CURL_FORMAT_CURL_OFF_T "lld" +#define CURL_FORMAT_CURL_OFF_TU "llu" +#define CURL_SUFFIX_CURL_OFF_T LL +#define CURL_SUFFIX_CURL_OFF_TU ULL +#else +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#endif +#define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +#define CURL_PULL_SYS_TYPES_H 1 +#define CURL_PULL_SYS_SOCKET_H 1 #elif defined(__hpux) /* HP aCC compiler */ -# if !defined(_LP64) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 +#if !defined(_LP64) +#define CURL_TYPEOF_CURL_OFF_T long long +#define CURL_FORMAT_CURL_OFF_T "lld" +#define CURL_FORMAT_CURL_OFF_TU "llu" +#define CURL_SUFFIX_CURL_OFF_T LL +#define CURL_SUFFIX_CURL_OFF_TU ULL +#else +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#endif +#define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +#define CURL_PULL_SYS_TYPES_H 1 +#define CURL_PULL_SYS_SOCKET_H 1 /* ===================================== */ /* KEEP MSVC THE PENULTIMATE ENTRY */ /* ===================================== */ #elif defined(_MSC_VER) -# if (_MSC_VER >= 1800) -# include -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T PRId64 -# define CURL_FORMAT_CURL_OFF_TU PRIu64 -# define CURL_SUFFIX_CURL_OFF_T i64 -# define CURL_SUFFIX_CURL_OFF_TU ui64 -# elif (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) -# define CURL_TYPEOF_CURL_OFF_T __int64 -# define CURL_FORMAT_CURL_OFF_T "I64d" -# define CURL_FORMAT_CURL_OFF_TU "I64u" -# define CURL_SUFFIX_CURL_OFF_T i64 -# define CURL_SUFFIX_CURL_OFF_TU ui64 -# else -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T int +#if (_MSC_VER >= 1800) +#include +#define CURL_TYPEOF_CURL_OFF_T __int64 +#define CURL_FORMAT_CURL_OFF_T PRId64 +#define CURL_FORMAT_CURL_OFF_TU PRIu64 +#define CURL_SUFFIX_CURL_OFF_T i64 +#define CURL_SUFFIX_CURL_OFF_TU ui64 +#elif (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +#define CURL_TYPEOF_CURL_OFF_T __int64 +#define CURL_FORMAT_CURL_OFF_T "I64d" +#define CURL_FORMAT_CURL_OFF_TU "I64u" +#define CURL_SUFFIX_CURL_OFF_T i64 +#define CURL_SUFFIX_CURL_OFF_TU ui64 +#else +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#endif +#define CURL_TYPEOF_CURL_SOCKLEN_T int /* ===================================== */ /* KEEP GENERIC GCC THE LAST ENTRY */ /* ===================================== */ #elif defined(__GNUC__) && !defined(_SCO_DS) -# if !defined(__LP64__) && \ - (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \ - defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \ - defined(__sparc__) || defined(__mips__) || defined(__sh__) || \ - defined(__XTENSA__) || \ - (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \ - (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L)) -# define CURL_TYPEOF_CURL_OFF_T long long -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" -# define CURL_SUFFIX_CURL_OFF_T LL -# define CURL_SUFFIX_CURL_OFF_TU ULL -# elif defined(__LP64__) || \ - defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \ - defined(__e2k__) || \ - (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \ - (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L) -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# endif -# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t -# define CURL_PULL_SYS_TYPES_H 1 -# define CURL_PULL_SYS_SOCKET_H 1 +#if !defined(__LP64__) && \ + (defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \ + defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \ + defined(__sparc__) || defined(__mips__) || defined(__sh__) || \ + defined(__XTENSA__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L)) +#define CURL_TYPEOF_CURL_OFF_T long long +#define CURL_FORMAT_CURL_OFF_T "lld" +#define CURL_FORMAT_CURL_OFF_TU "llu" +#define CURL_SUFFIX_CURL_OFF_T LL +#define CURL_SUFFIX_CURL_OFF_TU ULL +#elif defined(__LP64__) || defined(__x86_64__) || defined(__ppc64__) || \ + defined(__sparc64__) || defined(__e2k__) || \ + (defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \ + (defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L) +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#endif +#define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t +#define CURL_PULL_SYS_TYPES_H 1 +#define CURL_PULL_SYS_SOCKET_H 1 #else /* generic "safe guess" on old 32-bit style */ -# define CURL_TYPEOF_CURL_OFF_T long -# define CURL_FORMAT_CURL_OFF_T "ld" -# define CURL_FORMAT_CURL_OFF_TU "lu" -# define CURL_SUFFIX_CURL_OFF_T L -# define CURL_SUFFIX_CURL_OFF_TU UL -# define CURL_TYPEOF_CURL_SOCKLEN_T int +#define CURL_TYPEOF_CURL_OFF_T long +#define CURL_FORMAT_CURL_OFF_T "ld" +#define CURL_FORMAT_CURL_OFF_TU "lu" +#define CURL_SUFFIX_CURL_OFF_T L +#define CURL_SUFFIX_CURL_OFF_TU UL +#define CURL_TYPEOF_CURL_SOCKLEN_T int #endif #ifdef _AIX @@ -419,30 +415,30 @@ /* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */ /* sys/types.h is required here to properly make type definitions below. */ #ifdef CURL_PULL_SYS_TYPES_H -# include +#include #endif /* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */ /* sys/socket.h is required here to properly make type definitions below. */ #ifdef CURL_PULL_SYS_SOCKET_H -# include +#include #endif /* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */ /* sys/poll.h is required here to properly make type definitions below. */ #ifdef CURL_PULL_SYS_POLL_H -# include +#include #endif /* Data type definition of curl_socklen_t. */ #ifdef CURL_TYPEOF_CURL_SOCKLEN_T - typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t; +typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t; #endif /* Data type definition of curl_off_t. */ #ifdef CURL_TYPEOF_CURL_OFF_T - typedef CURL_TYPEOF_CURL_OFF_T curl_off_t; +typedef CURL_TYPEOF_CURL_OFF_T curl_off_t; #endif /* @@ -460,14 +456,14 @@ * or __cplusplus so we need to carefully check for them too. */ -#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \ - defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \ - defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \ - defined(__ILEC400__) - /* This compiler is believed to have an ISO compatible preprocessor */ +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \ + defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \ + defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \ + defined(__ILEC400__) +/* This compiler is believed to have an ISO compatible preprocessor */ #define CURL_ISOCPP #else - /* This compiler is believed NOT to have an ISO compatible preprocessor */ +/* This compiler is believed NOT to have an ISO compatible preprocessor */ #undef CURL_ISOCPP #endif @@ -476,21 +472,21 @@ */ #if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551) -# define CURLINC_OFF_T_C_HLPR2(x) x -# define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x) -# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ - CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T) -# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \ - CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU) +#define CURLINC_OFF_T_C_HLPR2(x) x +#define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x) +#define CURL_OFF_T_C(Val) \ + CURLINC_OFF_T_C_HLPR1(Val)##CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T) +#define CURL_OFF_TU_C(Val) \ + CURLINC_OFF_T_C_HLPR1(Val)##CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU) +#else +#ifdef CURL_ISOCPP +#define CURLINC_OFF_T_C_HLPR2(Val, Suffix) Val##Suffix #else -# ifdef CURL_ISOCPP -# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix -# else -# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix -# endif -# define CURLINC_OFF_T_C_HLPR1(Val,Suffix) CURLINC_OFF_T_C_HLPR2(Val,Suffix) -# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T) -# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU) +#define CURLINC_OFF_T_C_HLPR2(Val, Suffix) Val /**/ Suffix +#endif +#define CURLINC_OFF_T_C_HLPR1(Val, Suffix) CURLINC_OFF_T_C_HLPR2(Val, Suffix) +#define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val, CURL_SUFFIX_CURL_OFF_T) +#define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val, CURL_SUFFIX_CURL_OFF_TU) #endif #endif /* CURLINC_SYSTEM_H */ diff --git a/vendor/hydra/vendor/curl/include/curl/typecheck-gcc.h b/vendor/hydra/vendor/curl/include/curl/typecheck-gcc.h index e532e699..b2aa8664 100644 --- a/vendor/hydra/vendor/curl/include/curl/typecheck-gcc.h +++ b/vendor/hydra/vendor/curl/include/curl/typecheck-gcc.h @@ -40,206 +40,218 @@ * To add an option that uses the same type as an existing option, you will * just need to extend the appropriate _curl_*_option macro */ -#define curl_easy_setopt(handle, option, value) \ - __extension__({ \ - CURLoption _curl_opt = (option); \ - if(__builtin_constant_p(_curl_opt)) { \ - CURL_IGNORE_DEPRECATION( \ - if(curlcheck_long_option(_curl_opt)) \ - if(!curlcheck_long(value)) \ - _curl_easy_setopt_err_long(); \ - if(curlcheck_off_t_option(_curl_opt)) \ - if(!curlcheck_off_t(value)) \ - _curl_easy_setopt_err_curl_off_t(); \ - if(curlcheck_string_option(_curl_opt)) \ - if(!curlcheck_string(value)) \ - _curl_easy_setopt_err_string(); \ - if(curlcheck_write_cb_option(_curl_opt)) \ - if(!curlcheck_write_cb(value)) \ - _curl_easy_setopt_err_write_callback(); \ - if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \ - if(!curlcheck_resolver_start_callback(value)) \ - _curl_easy_setopt_err_resolver_start_callback(); \ - if((_curl_opt) == CURLOPT_READFUNCTION) \ - if(!curlcheck_read_cb(value)) \ - _curl_easy_setopt_err_read_cb(); \ - if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \ - if(!curlcheck_ioctl_cb(value)) \ - _curl_easy_setopt_err_ioctl_cb(); \ - if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \ - if(!curlcheck_sockopt_cb(value)) \ - _curl_easy_setopt_err_sockopt_cb(); \ - if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \ - if(!curlcheck_opensocket_cb(value)) \ - _curl_easy_setopt_err_opensocket_cb(); \ - if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \ - if(!curlcheck_progress_cb(value)) \ - _curl_easy_setopt_err_progress_cb(); \ - if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \ - if(!curlcheck_debug_cb(value)) \ - _curl_easy_setopt_err_debug_cb(); \ - if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \ - if(!curlcheck_ssl_ctx_cb(value)) \ - _curl_easy_setopt_err_ssl_ctx_cb(); \ - if(curlcheck_conv_cb_option(_curl_opt)) \ - if(!curlcheck_conv_cb(value)) \ - _curl_easy_setopt_err_conv_cb(); \ - if((_curl_opt) == CURLOPT_SEEKFUNCTION) \ - if(!curlcheck_seek_cb(value)) \ - _curl_easy_setopt_err_seek_cb(); \ - if(curlcheck_cb_data_option(_curl_opt)) \ - if(!curlcheck_cb_data(value)) \ - _curl_easy_setopt_err_cb_data(); \ - if((_curl_opt) == CURLOPT_ERRORBUFFER) \ - if(!curlcheck_error_buffer(value)) \ - _curl_easy_setopt_err_error_buffer(); \ - if((_curl_opt) == CURLOPT_STDERR) \ - if(!curlcheck_FILE(value)) \ - _curl_easy_setopt_err_FILE(); \ - if(curlcheck_postfields_option(_curl_opt)) \ - if(!curlcheck_postfields(value)) \ - _curl_easy_setopt_err_postfields(); \ - if((_curl_opt) == CURLOPT_HTTPPOST) \ - if(!curlcheck_arr((value), struct curl_httppost)) \ - _curl_easy_setopt_err_curl_httpost(); \ - if((_curl_opt) == CURLOPT_MIMEPOST) \ - if(!curlcheck_ptr((value), curl_mime)) \ - _curl_easy_setopt_err_curl_mimepost(); \ - if(curlcheck_slist_option(_curl_opt)) \ - if(!curlcheck_arr((value), struct curl_slist)) \ - _curl_easy_setopt_err_curl_slist(); \ - if((_curl_opt) == CURLOPT_SHARE) \ - if(!curlcheck_ptr((value), CURLSH)) \ - _curl_easy_setopt_err_CURLSH(); \ - ) \ - } \ - curl_easy_setopt(handle, _curl_opt, value); \ - }) +#define curl_easy_setopt(handle, option, value) \ + __extension__({ \ + CURLoption _curl_opt = (option); \ + if (__builtin_constant_p(_curl_opt)) { \ + CURL_IGNORE_DEPRECATION( \ + if (curlcheck_long_option(_curl_opt)) if (!curlcheck_long(value)) \ + _curl_easy_setopt_err_long(); \ + if (curlcheck_off_t_option(_curl_opt)) if (!curlcheck_off_t(value)) \ + _curl_easy_setopt_err_curl_off_t(); \ + if (curlcheck_string_option(_curl_opt)) if (!curlcheck_string( \ + value)) \ + _curl_easy_setopt_err_string(); \ + if (curlcheck_write_cb_option(_curl_opt)) if (!curlcheck_write_cb( \ + value)) \ + _curl_easy_setopt_err_write_callback(); \ + if ((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) if ( \ + !curlcheck_resolver_start_callback(value)) \ + _curl_easy_setopt_err_resolver_start_callback(); \ + if ((_curl_opt) == \ + CURLOPT_READFUNCTION) if (!curlcheck_read_cb(value)) \ + _curl_easy_setopt_err_read_cb(); \ + if ((_curl_opt) == \ + CURLOPT_IOCTLFUNCTION) if (!curlcheck_ioctl_cb(value)) \ + _curl_easy_setopt_err_ioctl_cb(); \ + if ((_curl_opt) == \ + CURLOPT_SOCKOPTFUNCTION) if (!curlcheck_sockopt_cb(value)) \ + _curl_easy_setopt_err_sockopt_cb(); \ + if ((_curl_opt) == \ + CURLOPT_OPENSOCKETFUNCTION) if (!curlcheck_opensocket_cb(value)) \ + _curl_easy_setopt_err_opensocket_cb(); \ + if ((_curl_opt) == \ + CURLOPT_PROGRESSFUNCTION) if (!curlcheck_progress_cb(value)) \ + _curl_easy_setopt_err_progress_cb(); \ + if ((_curl_opt) == \ + CURLOPT_DEBUGFUNCTION) if (!curlcheck_debug_cb(value)) \ + _curl_easy_setopt_err_debug_cb(); \ + if ((_curl_opt) == \ + CURLOPT_SSL_CTX_FUNCTION) if (!curlcheck_ssl_ctx_cb(value)) \ + _curl_easy_setopt_err_ssl_ctx_cb(); \ + if (curlcheck_conv_cb_option(_curl_opt)) if (!curlcheck_conv_cb( \ + value)) \ + _curl_easy_setopt_err_conv_cb(); \ + if ((_curl_opt) == \ + CURLOPT_SEEKFUNCTION) if (!curlcheck_seek_cb(value)) \ + _curl_easy_setopt_err_seek_cb(); \ + if (curlcheck_cb_data_option(_curl_opt)) if (!curlcheck_cb_data( \ + value)) \ + _curl_easy_setopt_err_cb_data(); \ + if ((_curl_opt) == \ + CURLOPT_ERRORBUFFER) if (!curlcheck_error_buffer(value)) \ + _curl_easy_setopt_err_error_buffer(); \ + if ((_curl_opt) == CURLOPT_STDERR) if (!curlcheck_FILE(value)) \ + _curl_easy_setopt_err_FILE(); \ + if (curlcheck_postfields_option( \ + _curl_opt)) if (!curlcheck_postfields(value)) \ + _curl_easy_setopt_err_postfields(); \ + if ((_curl_opt) == \ + CURLOPT_HTTPPOST) if (!curlcheck_arr((value), \ + struct curl_httppost)) \ + _curl_easy_setopt_err_curl_httpost(); \ + if ((_curl_opt) == \ + CURLOPT_MIMEPOST) if (!curlcheck_ptr((value), curl_mime)) \ + _curl_easy_setopt_err_curl_mimepost(); \ + if (curlcheck_slist_option( \ + _curl_opt)) if (!curlcheck_arr((value), struct curl_slist)) \ + _curl_easy_setopt_err_curl_slist(); \ + if ((_curl_opt) == \ + CURLOPT_SHARE) if (!curlcheck_ptr((value), CURLSH)) \ + _curl_easy_setopt_err_CURLSH();) \ + } \ + curl_easy_setopt(handle, _curl_opt, value); \ + }) /* wraps curl_easy_getinfo() with typechecking */ -#define curl_easy_getinfo(handle, info, arg) \ - __extension__({ \ - CURLINFO _curl_info = (info); \ - if(__builtin_constant_p(_curl_info)) { \ - CURL_IGNORE_DEPRECATION( \ - if(curlcheck_string_info(_curl_info)) \ - if(!curlcheck_arr((arg), char *)) \ - _curl_easy_getinfo_err_string(); \ - if(curlcheck_long_info(_curl_info)) \ - if(!curlcheck_arr((arg), long)) \ - _curl_easy_getinfo_err_long(); \ - if(curlcheck_double_info(_curl_info)) \ - if(!curlcheck_arr((arg), double)) \ - _curl_easy_getinfo_err_double(); \ - if(curlcheck_slist_info(_curl_info)) \ - if(!curlcheck_arr((arg), struct curl_slist *)) \ - _curl_easy_getinfo_err_curl_slist(); \ - if(curlcheck_tlssessioninfo_info(_curl_info)) \ - if(!curlcheck_arr((arg), struct curl_tlssessioninfo *)) \ - _curl_easy_getinfo_err_curl_tlssesssioninfo(); \ - if(curlcheck_certinfo_info(_curl_info)) \ - if(!curlcheck_arr((arg), struct curl_certinfo *)) \ - _curl_easy_getinfo_err_curl_certinfo(); \ - if(curlcheck_socket_info(_curl_info)) \ - if(!curlcheck_arr((arg), curl_socket_t)) \ - _curl_easy_getinfo_err_curl_socket(); \ - if(curlcheck_off_t_info(_curl_info)) \ - if(!curlcheck_arr((arg), curl_off_t)) \ - _curl_easy_getinfo_err_curl_off_t(); \ - ) \ - } \ - curl_easy_getinfo(handle, _curl_info, arg); \ - }) +#define curl_easy_getinfo(handle, info, arg) \ + __extension__({ \ + CURLINFO _curl_info = (info); \ + if (__builtin_constant_p(_curl_info)) { \ + CURL_IGNORE_DEPRECATION( \ + if (curlcheck_string_info(_curl_info)) if (!curlcheck_arr((arg), \ + char *)) \ + _curl_easy_getinfo_err_string(); \ + if (curlcheck_long_info(_curl_info)) if (!curlcheck_arr((arg), \ + long)) \ + _curl_easy_getinfo_err_long(); \ + if (curlcheck_double_info(_curl_info)) if (!curlcheck_arr((arg), \ + double)) \ + _curl_easy_getinfo_err_double(); \ + if (curlcheck_slist_info( \ + _curl_info)) if (!curlcheck_arr((arg), struct curl_slist *)) \ + _curl_easy_getinfo_err_curl_slist(); \ + if (curlcheck_tlssessioninfo_info( \ + _curl_info)) if (!curlcheck_arr((arg), \ + struct curl_tlssessioninfo \ + *)) \ + _curl_easy_getinfo_err_curl_tlssesssioninfo(); \ + if (curlcheck_certinfo_info( \ + _curl_info)) if (!curlcheck_arr((arg), \ + struct curl_certinfo *)) \ + _curl_easy_getinfo_err_curl_certinfo(); \ + if (curlcheck_socket_info( \ + _curl_info)) if (!curlcheck_arr((arg), curl_socket_t)) \ + _curl_easy_getinfo_err_curl_socket(); \ + if (curlcheck_off_t_info(_curl_info)) if (!curlcheck_arr( \ + (arg), curl_off_t)) \ + _curl_easy_getinfo_err_curl_off_t();) \ + } \ + curl_easy_getinfo(handle, _curl_info, arg); \ + }) /* * For now, just make sure that the functions are called with three arguments */ -#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param) -#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param) - +#define curl_share_setopt(share, opt, param) \ + curl_share_setopt(share, opt, param) +#define curl_multi_setopt(handle, opt, param) \ + curl_multi_setopt(handle, opt, param) /* the actual warnings, triggered by calling the _curl_easy_setopt_err* * functions */ /* To define a new warning, use _CURL_WARNING(identifier, "message") */ -#define CURLWARNING(id, message) \ - static void __attribute__((__warning__(message))) \ - __attribute__((__unused__)) __attribute__((__noinline__)) \ - id(void) { __asm__(""); } +#define CURLWARNING(id, message) \ + static void __attribute__((__warning__(message))) \ + __attribute__((__unused__)) __attribute__((__noinline__)) \ + id(void) { \ + __asm__(""); \ + } CURLWARNING(_curl_easy_setopt_err_long, - "curl_easy_setopt expects a long argument for this option") + "curl_easy_setopt expects a long argument for this option") CURLWARNING(_curl_easy_setopt_err_curl_off_t, - "curl_easy_setopt expects a curl_off_t argument for this option") + "curl_easy_setopt expects a curl_off_t argument for this option") CURLWARNING(_curl_easy_setopt_err_string, - "curl_easy_setopt expects a " - "string ('char *' or char[]) argument for this option" - ) -CURLWARNING(_curl_easy_setopt_err_write_callback, - "curl_easy_setopt expects a curl_write_callback argument for this option") + "curl_easy_setopt expects a " + "string ('char *' or char[]) argument for this option") +CURLWARNING( + _curl_easy_setopt_err_write_callback, + "curl_easy_setopt expects a curl_write_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_resolver_start_callback, - "curl_easy_setopt expects a " - "curl_resolver_start_callback argument for this option" - ) -CURLWARNING(_curl_easy_setopt_err_read_cb, - "curl_easy_setopt expects a curl_read_callback argument for this option") -CURLWARNING(_curl_easy_setopt_err_ioctl_cb, - "curl_easy_setopt expects a curl_ioctl_callback argument for this option") -CURLWARNING(_curl_easy_setopt_err_sockopt_cb, - "curl_easy_setopt expects a curl_sockopt_callback argument for this option") + "curl_easy_setopt expects a " + "curl_resolver_start_callback argument for this option") +CURLWARNING( + _curl_easy_setopt_err_read_cb, + "curl_easy_setopt expects a curl_read_callback argument for this option") +CURLWARNING( + _curl_easy_setopt_err_ioctl_cb, + "curl_easy_setopt expects a curl_ioctl_callback argument for this option") +CURLWARNING( + _curl_easy_setopt_err_sockopt_cb, + "curl_easy_setopt expects a curl_sockopt_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_opensocket_cb, - "curl_easy_setopt expects a " - "curl_opensocket_callback argument for this option" - ) + "curl_easy_setopt expects a " + "curl_opensocket_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_progress_cb, - "curl_easy_setopt expects a curl_progress_callback argument for this option") -CURLWARNING(_curl_easy_setopt_err_debug_cb, - "curl_easy_setopt expects a curl_debug_callback argument for this option") -CURLWARNING(_curl_easy_setopt_err_ssl_ctx_cb, - "curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option") -CURLWARNING(_curl_easy_setopt_err_conv_cb, - "curl_easy_setopt expects a curl_conv_callback argument for this option") -CURLWARNING(_curl_easy_setopt_err_seek_cb, - "curl_easy_setopt expects a curl_seek_callback argument for this option") + "curl_easy_setopt expects a curl_progress_callback argument for " + "this option") +CURLWARNING( + _curl_easy_setopt_err_debug_cb, + "curl_easy_setopt expects a curl_debug_callback argument for this option") +CURLWARNING( + _curl_easy_setopt_err_ssl_ctx_cb, + "curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option") +CURLWARNING( + _curl_easy_setopt_err_conv_cb, + "curl_easy_setopt expects a curl_conv_callback argument for this option") +CURLWARNING( + _curl_easy_setopt_err_seek_cb, + "curl_easy_setopt expects a curl_seek_callback argument for this option") CURLWARNING(_curl_easy_setopt_err_cb_data, - "curl_easy_setopt expects a " - "private data pointer as argument for this option") + "curl_easy_setopt expects a " + "private data pointer as argument for this option") CURLWARNING(_curl_easy_setopt_err_error_buffer, - "curl_easy_setopt expects a " - "char buffer of CURL_ERROR_SIZE as argument for this option") + "curl_easy_setopt expects a " + "char buffer of CURL_ERROR_SIZE as argument for this option") CURLWARNING(_curl_easy_setopt_err_FILE, - "curl_easy_setopt expects a 'FILE *' argument for this option") -CURLWARNING(_curl_easy_setopt_err_postfields, - "curl_easy_setopt expects a 'void *' or 'char *' argument for this option") + "curl_easy_setopt expects a 'FILE *' argument for this option") +CURLWARNING( + _curl_easy_setopt_err_postfields, + "curl_easy_setopt expects a 'void *' or 'char *' argument for this option") CURLWARNING(_curl_easy_setopt_err_curl_httpost, - "curl_easy_setopt expects a 'struct curl_httppost *' " - "argument for this option") + "curl_easy_setopt expects a 'struct curl_httppost *' " + "argument for this option") CURLWARNING(_curl_easy_setopt_err_curl_mimepost, - "curl_easy_setopt expects a 'curl_mime *' " - "argument for this option") -CURLWARNING(_curl_easy_setopt_err_curl_slist, - "curl_easy_setopt expects a 'struct curl_slist *' argument for this option") + "curl_easy_setopt expects a 'curl_mime *' " + "argument for this option") +CURLWARNING( + _curl_easy_setopt_err_curl_slist, + "curl_easy_setopt expects a 'struct curl_slist *' argument for this option") CURLWARNING(_curl_easy_setopt_err_CURLSH, - "curl_easy_setopt expects a CURLSH* argument for this option") + "curl_easy_setopt expects a CURLSH* argument for this option") CURLWARNING(_curl_easy_getinfo_err_string, - "curl_easy_getinfo expects a pointer to 'char *' for this info") + "curl_easy_getinfo expects a pointer to 'char *' for this info") CURLWARNING(_curl_easy_getinfo_err_long, - "curl_easy_getinfo expects a pointer to long for this info") + "curl_easy_getinfo expects a pointer to long for this info") CURLWARNING(_curl_easy_getinfo_err_double, - "curl_easy_getinfo expects a pointer to double for this info") + "curl_easy_getinfo expects a pointer to double for this info") CURLWARNING(_curl_easy_getinfo_err_curl_slist, - "curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info") + "curl_easy_getinfo expects a pointer to 'struct curl_slist *' for " + "this info") CURLWARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo, - "curl_easy_getinfo expects a pointer to " - "'struct curl_tlssessioninfo *' for this info") + "curl_easy_getinfo expects a pointer to " + "'struct curl_tlssessioninfo *' for this info") CURLWARNING(_curl_easy_getinfo_err_curl_certinfo, - "curl_easy_getinfo expects a pointer to " - "'struct curl_certinfo *' for this info") -CURLWARNING(_curl_easy_getinfo_err_curl_socket, - "curl_easy_getinfo expects a pointer to curl_socket_t for this info") + "curl_easy_getinfo expects a pointer to " + "'struct curl_certinfo *' for this info") +CURLWARNING( + _curl_easy_getinfo_err_curl_socket, + "curl_easy_getinfo expects a pointer to curl_socket_t for this info") CURLWARNING(_curl_easy_getinfo_err_curl_off_t, - "curl_easy_getinfo expects a pointer to curl_off_t for this info") + "curl_easy_getinfo expects a pointer to curl_off_t for this info") /* groups of curl_easy_setops options that take the same type of argument */ @@ -250,197 +262,142 @@ CURLWARNING(_curl_easy_getinfo_err_curl_off_t, */ /* evaluates to true if option takes a long argument */ -#define curlcheck_long_option(option) \ +#define curlcheck_long_option(option) \ (0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT) -#define curlcheck_off_t_option(option) \ +#define curlcheck_off_t_option(option) \ (((option) > CURLOPTTYPE_OFF_T) && ((option) < CURLOPTTYPE_BLOB)) /* evaluates to true if option takes a char* argument */ -#define curlcheck_string_option(option) \ - ((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \ - (option) == CURLOPT_ACCEPT_ENCODING || \ - (option) == CURLOPT_ALTSVC || \ - (option) == CURLOPT_CAINFO || \ - (option) == CURLOPT_CAPATH || \ - (option) == CURLOPT_COOKIE || \ - (option) == CURLOPT_COOKIEFILE || \ - (option) == CURLOPT_COOKIEJAR || \ - (option) == CURLOPT_COOKIELIST || \ - (option) == CURLOPT_CRLFILE || \ - (option) == CURLOPT_CUSTOMREQUEST || \ - (option) == CURLOPT_DEFAULT_PROTOCOL || \ - (option) == CURLOPT_DNS_INTERFACE || \ - (option) == CURLOPT_DNS_LOCAL_IP4 || \ - (option) == CURLOPT_DNS_LOCAL_IP6 || \ - (option) == CURLOPT_DNS_SERVERS || \ - (option) == CURLOPT_DOH_URL || \ - (option) == CURLOPT_ECH || \ - (option) == CURLOPT_EGDSOCKET || \ - (option) == CURLOPT_FTP_ACCOUNT || \ - (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \ - (option) == CURLOPT_FTPPORT || \ - (option) == CURLOPT_HSTS || \ - (option) == CURLOPT_HAPROXY_CLIENT_IP || \ - (option) == CURLOPT_INTERFACE || \ - (option) == CURLOPT_ISSUERCERT || \ - (option) == CURLOPT_KEYPASSWD || \ - (option) == CURLOPT_KRBLEVEL || \ - (option) == CURLOPT_LOGIN_OPTIONS || \ - (option) == CURLOPT_MAIL_AUTH || \ - (option) == CURLOPT_MAIL_FROM || \ - (option) == CURLOPT_NETRC_FILE || \ - (option) == CURLOPT_NOPROXY || \ - (option) == CURLOPT_PASSWORD || \ - (option) == CURLOPT_PINNEDPUBLICKEY || \ - (option) == CURLOPT_PRE_PROXY || \ - (option) == CURLOPT_PROTOCOLS_STR || \ - (option) == CURLOPT_PROXY || \ - (option) == CURLOPT_PROXY_CAINFO || \ - (option) == CURLOPT_PROXY_CAPATH || \ - (option) == CURLOPT_PROXY_CRLFILE || \ - (option) == CURLOPT_PROXY_ISSUERCERT || \ - (option) == CURLOPT_PROXY_KEYPASSWD || \ - (option) == CURLOPT_PROXY_PINNEDPUBLICKEY || \ - (option) == CURLOPT_PROXY_SERVICE_NAME || \ - (option) == CURLOPT_PROXY_SSL_CIPHER_LIST || \ - (option) == CURLOPT_PROXY_SSLCERT || \ - (option) == CURLOPT_PROXY_SSLCERTTYPE || \ - (option) == CURLOPT_PROXY_SSLKEY || \ - (option) == CURLOPT_PROXY_SSLKEYTYPE || \ - (option) == CURLOPT_PROXY_TLS13_CIPHERS || \ - (option) == CURLOPT_PROXY_TLSAUTH_PASSWORD || \ - (option) == CURLOPT_PROXY_TLSAUTH_TYPE || \ - (option) == CURLOPT_PROXY_TLSAUTH_USERNAME || \ - (option) == CURLOPT_PROXYPASSWORD || \ - (option) == CURLOPT_PROXYUSERNAME || \ - (option) == CURLOPT_PROXYUSERPWD || \ - (option) == CURLOPT_RANDOM_FILE || \ - (option) == CURLOPT_RANGE || \ - (option) == CURLOPT_REDIR_PROTOCOLS_STR || \ - (option) == CURLOPT_REFERER || \ - (option) == CURLOPT_REQUEST_TARGET || \ - (option) == CURLOPT_RTSP_SESSION_ID || \ - (option) == CURLOPT_RTSP_STREAM_URI || \ - (option) == CURLOPT_RTSP_TRANSPORT || \ - (option) == CURLOPT_SASL_AUTHZID || \ - (option) == CURLOPT_SERVICE_NAME || \ - (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \ - (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \ - (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 || \ - (option) == CURLOPT_SSH_KNOWNHOSTS || \ - (option) == CURLOPT_SSH_PRIVATE_KEYFILE || \ - (option) == CURLOPT_SSH_PUBLIC_KEYFILE || \ - (option) == CURLOPT_SSLCERT || \ - (option) == CURLOPT_SSLCERTTYPE || \ - (option) == CURLOPT_SSLENGINE || \ - (option) == CURLOPT_SSLKEY || \ - (option) == CURLOPT_SSLKEYTYPE || \ - (option) == CURLOPT_SSL_CIPHER_LIST || \ - (option) == CURLOPT_TLS13_CIPHERS || \ - (option) == CURLOPT_TLSAUTH_PASSWORD || \ - (option) == CURLOPT_TLSAUTH_TYPE || \ - (option) == CURLOPT_TLSAUTH_USERNAME || \ - (option) == CURLOPT_UNIX_SOCKET_PATH || \ - (option) == CURLOPT_URL || \ - (option) == CURLOPT_USERAGENT || \ - (option) == CURLOPT_USERNAME || \ - (option) == CURLOPT_AWS_SIGV4 || \ - (option) == CURLOPT_USERPWD || \ - (option) == CURLOPT_XOAUTH2_BEARER || \ - (option) == CURLOPT_SSL_EC_CURVES || \ +#define curlcheck_string_option(option) \ + ((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \ + (option) == CURLOPT_ACCEPT_ENCODING || (option) == CURLOPT_ALTSVC || \ + (option) == CURLOPT_CAINFO || (option) == CURLOPT_CAPATH || \ + (option) == CURLOPT_COOKIE || (option) == CURLOPT_COOKIEFILE || \ + (option) == CURLOPT_COOKIEJAR || (option) == CURLOPT_COOKIELIST || \ + (option) == CURLOPT_CRLFILE || (option) == CURLOPT_CUSTOMREQUEST || \ + (option) == CURLOPT_DEFAULT_PROTOCOL || \ + (option) == CURLOPT_DNS_INTERFACE || (option) == CURLOPT_DNS_LOCAL_IP4 || \ + (option) == CURLOPT_DNS_LOCAL_IP6 || (option) == CURLOPT_DNS_SERVERS || \ + (option) == CURLOPT_DOH_URL || (option) == CURLOPT_ECH || \ + (option) == CURLOPT_EGDSOCKET || (option) == CURLOPT_FTP_ACCOUNT || \ + (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \ + (option) == CURLOPT_FTPPORT || (option) == CURLOPT_HSTS || \ + (option) == CURLOPT_HAPROXY_CLIENT_IP || (option) == CURLOPT_INTERFACE || \ + (option) == CURLOPT_ISSUERCERT || (option) == CURLOPT_KEYPASSWD || \ + (option) == CURLOPT_KRBLEVEL || (option) == CURLOPT_LOGIN_OPTIONS || \ + (option) == CURLOPT_MAIL_AUTH || (option) == CURLOPT_MAIL_FROM || \ + (option) == CURLOPT_NETRC_FILE || (option) == CURLOPT_NOPROXY || \ + (option) == CURLOPT_PASSWORD || (option) == CURLOPT_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PRE_PROXY || (option) == CURLOPT_PROTOCOLS_STR || \ + (option) == CURLOPT_PROXY || (option) == CURLOPT_PROXY_CAINFO || \ + (option) == CURLOPT_PROXY_CAPATH || (option) == CURLOPT_PROXY_CRLFILE || \ + (option) == CURLOPT_PROXY_ISSUERCERT || \ + (option) == CURLOPT_PROXY_KEYPASSWD || \ + (option) == CURLOPT_PROXY_PINNEDPUBLICKEY || \ + (option) == CURLOPT_PROXY_SERVICE_NAME || \ + (option) == CURLOPT_PROXY_SSL_CIPHER_LIST || \ + (option) == CURLOPT_PROXY_SSLCERT || \ + (option) == CURLOPT_PROXY_SSLCERTTYPE || \ + (option) == CURLOPT_PROXY_SSLKEY || (option) == CURLOPT_PROXY_SSLKEYTYPE || \ + (option) == CURLOPT_PROXY_TLS13_CIPHERS || \ + (option) == CURLOPT_PROXY_TLSAUTH_PASSWORD || \ + (option) == CURLOPT_PROXY_TLSAUTH_TYPE || \ + (option) == CURLOPT_PROXY_TLSAUTH_USERNAME || \ + (option) == CURLOPT_PROXYPASSWORD || (option) == CURLOPT_PROXYUSERNAME || \ + (option) == CURLOPT_PROXYUSERPWD || (option) == CURLOPT_RANDOM_FILE || \ + (option) == CURLOPT_RANGE || (option) == CURLOPT_REDIR_PROTOCOLS_STR || \ + (option) == CURLOPT_REFERER || (option) == CURLOPT_REQUEST_TARGET || \ + (option) == CURLOPT_RTSP_SESSION_ID || \ + (option) == CURLOPT_RTSP_STREAM_URI || \ + (option) == CURLOPT_RTSP_TRANSPORT || (option) == CURLOPT_SASL_AUTHZID || \ + (option) == CURLOPT_SERVICE_NAME || \ + (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \ + (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 || \ + (option) == CURLOPT_SSH_KNOWNHOSTS || \ + (option) == CURLOPT_SSH_PRIVATE_KEYFILE || \ + (option) == CURLOPT_SSH_PUBLIC_KEYFILE || (option) == CURLOPT_SSLCERT || \ + (option) == CURLOPT_SSLCERTTYPE || (option) == CURLOPT_SSLENGINE || \ + (option) == CURLOPT_SSLKEY || (option) == CURLOPT_SSLKEYTYPE || \ + (option) == CURLOPT_SSL_CIPHER_LIST || (option) == CURLOPT_TLS13_CIPHERS || \ + (option) == CURLOPT_TLSAUTH_PASSWORD || (option) == CURLOPT_TLSAUTH_TYPE || \ + (option) == CURLOPT_TLSAUTH_USERNAME || \ + (option) == CURLOPT_UNIX_SOCKET_PATH || (option) == CURLOPT_URL || \ + (option) == CURLOPT_USERAGENT || (option) == CURLOPT_USERNAME || \ + (option) == CURLOPT_AWS_SIGV4 || (option) == CURLOPT_USERPWD || \ + (option) == CURLOPT_XOAUTH2_BEARER || (option) == CURLOPT_SSL_EC_CURVES || \ 0) /* evaluates to true if option takes a curl_write_callback argument */ -#define curlcheck_write_cb_option(option) \ - ((option) == CURLOPT_HEADERFUNCTION || \ - (option) == CURLOPT_WRITEFUNCTION) +#define curlcheck_write_cb_option(option) \ + ((option) == CURLOPT_HEADERFUNCTION || (option) == CURLOPT_WRITEFUNCTION) /* evaluates to true if option takes a curl_conv_callback argument */ -#define curlcheck_conv_cb_option(option) \ - ((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \ - (option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \ +#define curlcheck_conv_cb_option(option) \ + ((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \ + (option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \ (option) == CURLOPT_CONV_FROM_UTF8_FUNCTION) /* evaluates to true if option takes a data argument to pass to a callback */ #define curlcheck_cb_data_option(option) \ - ((option) == CURLOPT_CHUNK_DATA || \ - (option) == CURLOPT_CLOSESOCKETDATA || \ - (option) == CURLOPT_DEBUGDATA || \ - (option) == CURLOPT_FNMATCH_DATA || \ - (option) == CURLOPT_HEADERDATA || \ - (option) == CURLOPT_HSTSREADDATA || \ - (option) == CURLOPT_HSTSWRITEDATA || \ - (option) == CURLOPT_INTERLEAVEDATA || \ - (option) == CURLOPT_IOCTLDATA || \ - (option) == CURLOPT_OPENSOCKETDATA || \ - (option) == CURLOPT_PREREQDATA || \ - (option) == CURLOPT_PROGRESSDATA || \ - (option) == CURLOPT_READDATA || \ - (option) == CURLOPT_SEEKDATA || \ - (option) == CURLOPT_SOCKOPTDATA || \ - (option) == CURLOPT_SSH_KEYDATA || \ - (option) == CURLOPT_SSL_CTX_DATA || \ - (option) == CURLOPT_WRITEDATA || \ + ((option) == CURLOPT_CHUNK_DATA || (option) == CURLOPT_CLOSESOCKETDATA || \ + (option) == CURLOPT_DEBUGDATA || (option) == CURLOPT_FNMATCH_DATA || \ + (option) == CURLOPT_HEADERDATA || (option) == CURLOPT_HSTSREADDATA || \ + (option) == CURLOPT_HSTSWRITEDATA || (option) == CURLOPT_INTERLEAVEDATA || \ + (option) == CURLOPT_IOCTLDATA || (option) == CURLOPT_OPENSOCKETDATA || \ + (option) == CURLOPT_PREREQDATA || (option) == CURLOPT_PROGRESSDATA || \ + (option) == CURLOPT_READDATA || (option) == CURLOPT_SEEKDATA || \ + (option) == CURLOPT_SOCKOPTDATA || (option) == CURLOPT_SSH_KEYDATA || \ + (option) == CURLOPT_SSL_CTX_DATA || (option) == CURLOPT_WRITEDATA || \ (option) == CURLOPT_RESOLVER_START_DATA || \ - (option) == CURLOPT_TRAILERDATA || \ - (option) == CURLOPT_SSH_HOSTKEYDATA || \ + (option) == CURLOPT_TRAILERDATA || (option) == CURLOPT_SSH_HOSTKEYDATA || \ 0) /* evaluates to true if option takes a POST data argument (void* or char*) */ -#define curlcheck_postfields_option(option) \ - ((option) == CURLOPT_POSTFIELDS || \ - (option) == CURLOPT_COPYPOSTFIELDS || \ - 0) +#define curlcheck_postfields_option(option) \ + ((option) == CURLOPT_POSTFIELDS || (option) == CURLOPT_COPYPOSTFIELDS || 0) /* evaluates to true if option takes a struct curl_slist * argument */ -#define curlcheck_slist_option(option) \ - ((option) == CURLOPT_HTTP200ALIASES || \ - (option) == CURLOPT_HTTPHEADER || \ - (option) == CURLOPT_MAIL_RCPT || \ - (option) == CURLOPT_POSTQUOTE || \ - (option) == CURLOPT_PREQUOTE || \ - (option) == CURLOPT_PROXYHEADER || \ - (option) == CURLOPT_QUOTE || \ - (option) == CURLOPT_RESOLVE || \ - (option) == CURLOPT_TELNETOPTIONS || \ - (option) == CURLOPT_CONNECT_TO || \ - 0) +#define curlcheck_slist_option(option) \ + ((option) == CURLOPT_HTTP200ALIASES || (option) == CURLOPT_HTTPHEADER || \ + (option) == CURLOPT_MAIL_RCPT || (option) == CURLOPT_POSTQUOTE || \ + (option) == CURLOPT_PREQUOTE || (option) == CURLOPT_PROXYHEADER || \ + (option) == CURLOPT_QUOTE || (option) == CURLOPT_RESOLVE || \ + (option) == CURLOPT_TELNETOPTIONS || (option) == CURLOPT_CONNECT_TO || 0) /* groups of curl_easy_getinfo infos that take the same type of argument */ /* evaluates to true if info expects a pointer to char * argument */ -#define curlcheck_string_info(info) \ - (CURLINFO_STRING < (info) && (info) < CURLINFO_LONG && \ +#define curlcheck_string_info(info) \ + (CURLINFO_STRING < (info) && (info) < CURLINFO_LONG && \ (info) != CURLINFO_PRIVATE) /* evaluates to true if info expects a pointer to long argument */ -#define curlcheck_long_info(info) \ +#define curlcheck_long_info(info) \ (CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE) /* evaluates to true if info expects a pointer to double argument */ -#define curlcheck_double_info(info) \ +#define curlcheck_double_info(info) \ (CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST) /* true if info expects a pointer to struct curl_slist * argument */ -#define curlcheck_slist_info(info) \ +#define curlcheck_slist_info(info) \ (((info) == CURLINFO_SSL_ENGINES) || ((info) == CURLINFO_COOKIELIST)) /* true if info expects a pointer to struct curl_tlssessioninfo * argument */ -#define curlcheck_tlssessioninfo_info(info) \ +#define curlcheck_tlssessioninfo_info(info) \ (((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION)) /* true if info expects a pointer to struct curl_certinfo * argument */ #define curlcheck_certinfo_info(info) ((info) == CURLINFO_CERTINFO) /* true if info expects a pointer to struct curl_socket_t argument */ -#define curlcheck_socket_info(info) \ +#define curlcheck_socket_info(info) \ (CURLINFO_SOCKET < (info) && (info) < CURLINFO_OFF_T) /* true if info expects a pointer to curl_off_t argument */ -#define curlcheck_off_t_info(info) \ - (CURLINFO_OFF_T < (info)) - +#define curlcheck_off_t_info(info) (CURLINFO_OFF_T < (info)) /* typecheck helpers -- check whether given expression has requested type */ @@ -454,101 +411,96 @@ CURLWARNING(_curl_easy_getinfo_err_curl_off_t, */ /* XXX: should evaluate to true if expr is a pointer */ -#define curlcheck_any_ptr(expr) \ - (sizeof(expr) == sizeof(void *)) +#define curlcheck_any_ptr(expr) (sizeof(expr) == sizeof(void *)) /* evaluates to true if expr is NULL */ /* XXX: must not evaluate expr, so this check is not accurate */ -#define curlcheck_NULL(expr) \ +#define curlcheck_NULL(expr) \ (__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL))) /* evaluates to true if expr is type*, const type* or NULL */ -#define curlcheck_ptr(expr, type) \ - (curlcheck_NULL(expr) || \ - __builtin_types_compatible_p(__typeof__(expr), type *) || \ +#define curlcheck_ptr(expr, type) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), type *) || \ __builtin_types_compatible_p(__typeof__(expr), const type *)) /* evaluates to true if expr is one of type[], type*, NULL or const type* */ -#define curlcheck_arr(expr, type) \ - (curlcheck_ptr((expr), type) || \ - __builtin_types_compatible_p(__typeof__(expr), type [])) +#define curlcheck_arr(expr, type) \ + (curlcheck_ptr((expr), type) || \ + __builtin_types_compatible_p(__typeof__(expr), type[])) /* evaluates to true if expr is a string */ #define curlcheck_string(expr) \ - (curlcheck_arr((expr), char) || \ - curlcheck_arr((expr), signed char) || \ + (curlcheck_arr((expr), char) || curlcheck_arr((expr), signed char) || \ curlcheck_arr((expr), unsigned char)) /* evaluates to true if expr is a long (no matter the signedness) * XXX: for now, int is also accepted (and therefore short and char, which * are promoted to int when passed to a variadic function) */ -#define curlcheck_long(expr) \ - (__builtin_types_compatible_p(__typeof__(expr), long) || \ - __builtin_types_compatible_p(__typeof__(expr), signed long) || \ - __builtin_types_compatible_p(__typeof__(expr), unsigned long) || \ - __builtin_types_compatible_p(__typeof__(expr), int) || \ - __builtin_types_compatible_p(__typeof__(expr), signed int) || \ - __builtin_types_compatible_p(__typeof__(expr), unsigned int) || \ - __builtin_types_compatible_p(__typeof__(expr), short) || \ - __builtin_types_compatible_p(__typeof__(expr), signed short) || \ - __builtin_types_compatible_p(__typeof__(expr), unsigned short) || \ - __builtin_types_compatible_p(__typeof__(expr), char) || \ - __builtin_types_compatible_p(__typeof__(expr), signed char) || \ +#define curlcheck_long(expr) \ + (__builtin_types_compatible_p(__typeof__(expr), long) || \ + __builtin_types_compatible_p(__typeof__(expr), signed long) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned long) || \ + __builtin_types_compatible_p(__typeof__(expr), int) || \ + __builtin_types_compatible_p(__typeof__(expr), signed int) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned int) || \ + __builtin_types_compatible_p(__typeof__(expr), short) || \ + __builtin_types_compatible_p(__typeof__(expr), signed short) || \ + __builtin_types_compatible_p(__typeof__(expr), unsigned short) || \ + __builtin_types_compatible_p(__typeof__(expr), char) || \ + __builtin_types_compatible_p(__typeof__(expr), signed char) || \ __builtin_types_compatible_p(__typeof__(expr), unsigned char)) /* evaluates to true if expr is of type curl_off_t */ -#define curlcheck_off_t(expr) \ +#define curlcheck_off_t(expr) \ (__builtin_types_compatible_p(__typeof__(expr), curl_off_t)) /* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */ /* XXX: also check size of an char[] array? */ -#define curlcheck_error_buffer(expr) \ - (curlcheck_NULL(expr) || \ - __builtin_types_compatible_p(__typeof__(expr), char *) || \ +#define curlcheck_error_buffer(expr) \ + (curlcheck_NULL(expr) || \ + __builtin_types_compatible_p(__typeof__(expr), char *) || \ __builtin_types_compatible_p(__typeof__(expr), char[])) /* evaluates to true if expr is of type (const) void* or (const) FILE* */ #if 0 -#define curlcheck_cb_data(expr) \ - (curlcheck_ptr((expr), void) || \ - curlcheck_ptr((expr), FILE)) +#define curlcheck_cb_data(expr) \ + (curlcheck_ptr((expr), void) || curlcheck_ptr((expr), FILE)) #else /* be less strict */ -#define curlcheck_cb_data(expr) \ - curlcheck_any_ptr(expr) +#define curlcheck_cb_data(expr) curlcheck_any_ptr(expr) #endif /* evaluates to true if expr is of type FILE* */ -#define curlcheck_FILE(expr) \ - (curlcheck_NULL(expr) || \ +#define curlcheck_FILE(expr) \ + (curlcheck_NULL(expr) || \ (__builtin_types_compatible_p(__typeof__(expr), FILE *))) /* evaluates to true if expr can be passed as POST data (void* or char*) */ -#define curlcheck_postfields(expr) \ - (curlcheck_ptr((expr), void) || \ - curlcheck_arr((expr), char) || \ +#define curlcheck_postfields(expr) \ + (curlcheck_ptr((expr), void) || curlcheck_arr((expr), char) || \ curlcheck_arr((expr), unsigned char)) /* helper: __builtin_types_compatible_p distinguishes between functions and * function pointers, hide it */ -#define curlcheck_cb_compatible(func, type) \ - (__builtin_types_compatible_p(__typeof__(func), type) || \ +#define curlcheck_cb_compatible(func, type) \ + (__builtin_types_compatible_p(__typeof__(func), type) || \ __builtin_types_compatible_p(__typeof__(func) *, type)) /* evaluates to true if expr is of type curl_resolver_start_callback */ -#define curlcheck_resolver_start_callback(expr) \ - (curlcheck_NULL(expr) || \ +#define curlcheck_resolver_start_callback(expr) \ + (curlcheck_NULL(expr) || \ curlcheck_cb_compatible((expr), curl_resolver_start_callback)) /* evaluates to true if expr is of type curl_read_callback or "similar" */ -#define curlcheck_read_cb(expr) \ - (curlcheck_NULL(expr) || \ - curlcheck_cb_compatible((expr), __typeof__(fread) *) || \ - curlcheck_cb_compatible((expr), curl_read_callback) || \ - curlcheck_cb_compatible((expr), _curl_read_callback1) || \ - curlcheck_cb_compatible((expr), _curl_read_callback2) || \ - curlcheck_cb_compatible((expr), _curl_read_callback3) || \ - curlcheck_cb_compatible((expr), _curl_read_callback4) || \ - curlcheck_cb_compatible((expr), _curl_read_callback5) || \ +#define curlcheck_read_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fread) *) || \ + curlcheck_cb_compatible((expr), curl_read_callback) || \ + curlcheck_cb_compatible((expr), _curl_read_callback1) || \ + curlcheck_cb_compatible((expr), _curl_read_callback2) || \ + curlcheck_cb_compatible((expr), _curl_read_callback3) || \ + curlcheck_cb_compatible((expr), _curl_read_callback4) || \ + curlcheck_cb_compatible((expr), _curl_read_callback5) || \ curlcheck_cb_compatible((expr), _curl_read_callback6)) typedef size_t (*_curl_read_callback1)(char *, size_t, size_t, void *); typedef size_t (*_curl_read_callback2)(char *, size_t, size_t, const void *); @@ -558,32 +510,32 @@ typedef size_t (*_curl_read_callback5)(void *, size_t, size_t, const void *); typedef size_t (*_curl_read_callback6)(void *, size_t, size_t, FILE *); /* evaluates to true if expr is of type curl_write_callback or "similar" */ -#define curlcheck_write_cb(expr) \ - (curlcheck_read_cb(expr) || \ - curlcheck_cb_compatible((expr), __typeof__(fwrite) *) || \ - curlcheck_cb_compatible((expr), curl_write_callback) || \ - curlcheck_cb_compatible((expr), _curl_write_callback1) || \ - curlcheck_cb_compatible((expr), _curl_write_callback2) || \ - curlcheck_cb_compatible((expr), _curl_write_callback3) || \ - curlcheck_cb_compatible((expr), _curl_write_callback4) || \ - curlcheck_cb_compatible((expr), _curl_write_callback5) || \ +#define curlcheck_write_cb(expr) \ + (curlcheck_read_cb(expr) || \ + curlcheck_cb_compatible((expr), __typeof__(fwrite) *) || \ + curlcheck_cb_compatible((expr), curl_write_callback) || \ + curlcheck_cb_compatible((expr), _curl_write_callback1) || \ + curlcheck_cb_compatible((expr), _curl_write_callback2) || \ + curlcheck_cb_compatible((expr), _curl_write_callback3) || \ + curlcheck_cb_compatible((expr), _curl_write_callback4) || \ + curlcheck_cb_compatible((expr), _curl_write_callback5) || \ curlcheck_cb_compatible((expr), _curl_write_callback6)) typedef size_t (*_curl_write_callback1)(const char *, size_t, size_t, void *); typedef size_t (*_curl_write_callback2)(const char *, size_t, size_t, - const void *); + const void *); typedef size_t (*_curl_write_callback3)(const char *, size_t, size_t, FILE *); typedef size_t (*_curl_write_callback4)(const void *, size_t, size_t, void *); typedef size_t (*_curl_write_callback5)(const void *, size_t, size_t, - const void *); + const void *); typedef size_t (*_curl_write_callback6)(const void *, size_t, size_t, FILE *); /* evaluates to true if expr is of type curl_ioctl_callback or "similar" */ -#define curlcheck_ioctl_cb(expr) \ - (curlcheck_NULL(expr) || \ - curlcheck_cb_compatible((expr), curl_ioctl_callback) || \ - curlcheck_cb_compatible((expr), _curl_ioctl_callback1) || \ - curlcheck_cb_compatible((expr), _curl_ioctl_callback2) || \ - curlcheck_cb_compatible((expr), _curl_ioctl_callback3) || \ +#define curlcheck_ioctl_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ioctl_callback) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ioctl_callback3) || \ curlcheck_cb_compatible((expr), _curl_ioctl_callback4)) typedef curlioerr (*_curl_ioctl_callback1)(CURL *, int, void *); typedef curlioerr (*_curl_ioctl_callback2)(CURL *, int, const void *); @@ -591,91 +543,90 @@ typedef curlioerr (*_curl_ioctl_callback3)(CURL *, curliocmd, void *); typedef curlioerr (*_curl_ioctl_callback4)(CURL *, curliocmd, const void *); /* evaluates to true if expr is of type curl_sockopt_callback or "similar" */ -#define curlcheck_sockopt_cb(expr) \ - (curlcheck_NULL(expr) || \ - curlcheck_cb_compatible((expr), curl_sockopt_callback) || \ - curlcheck_cb_compatible((expr), _curl_sockopt_callback1) || \ +#define curlcheck_sockopt_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_sockopt_callback) || \ + curlcheck_cb_compatible((expr), _curl_sockopt_callback1) || \ curlcheck_cb_compatible((expr), _curl_sockopt_callback2)) typedef int (*_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype); typedef int (*_curl_sockopt_callback2)(const void *, curl_socket_t, - curlsocktype); + curlsocktype); /* evaluates to true if expr is of type curl_opensocket_callback or "similar" */ -#define curlcheck_opensocket_cb(expr) \ - (curlcheck_NULL(expr) || \ - curlcheck_cb_compatible((expr), curl_opensocket_callback) || \ - curlcheck_cb_compatible((expr), _curl_opensocket_callback1) || \ - curlcheck_cb_compatible((expr), _curl_opensocket_callback2) || \ - curlcheck_cb_compatible((expr), _curl_opensocket_callback3) || \ +#define curlcheck_opensocket_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_opensocket_callback) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback1) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback2) || \ + curlcheck_cb_compatible((expr), _curl_opensocket_callback3) || \ curlcheck_cb_compatible((expr), _curl_opensocket_callback4)) -typedef curl_socket_t (*_curl_opensocket_callback1) - (void *, curlsocktype, struct curl_sockaddr *); -typedef curl_socket_t (*_curl_opensocket_callback2) - (void *, curlsocktype, const struct curl_sockaddr *); -typedef curl_socket_t (*_curl_opensocket_callback3) - (const void *, curlsocktype, struct curl_sockaddr *); -typedef curl_socket_t (*_curl_opensocket_callback4) - (const void *, curlsocktype, const struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback1)(void *, curlsocktype, + struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback2)( + void *, curlsocktype, const struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback3)(const void *, curlsocktype, + struct curl_sockaddr *); +typedef curl_socket_t (*_curl_opensocket_callback4)( + const void *, curlsocktype, const struct curl_sockaddr *); /* evaluates to true if expr is of type curl_progress_callback or "similar" */ -#define curlcheck_progress_cb(expr) \ - (curlcheck_NULL(expr) || \ - curlcheck_cb_compatible((expr), curl_progress_callback) || \ - curlcheck_cb_compatible((expr), _curl_progress_callback1) || \ +#define curlcheck_progress_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_progress_callback) || \ + curlcheck_cb_compatible((expr), _curl_progress_callback1) || \ curlcheck_cb_compatible((expr), _curl_progress_callback2)) -typedef int (*_curl_progress_callback1)(void *, - double, double, double, double); -typedef int (*_curl_progress_callback2)(const void *, - double, double, double, double); +typedef int (*_curl_progress_callback1)(void *, double, double, double, double); +typedef int (*_curl_progress_callback2)(const void *, double, double, double, + double); /* evaluates to true if expr is of type curl_debug_callback or "similar" */ -#define curlcheck_debug_cb(expr) \ - (curlcheck_NULL(expr) || \ - curlcheck_cb_compatible((expr), curl_debug_callback) || \ - curlcheck_cb_compatible((expr), _curl_debug_callback1) || \ - curlcheck_cb_compatible((expr), _curl_debug_callback2) || \ - curlcheck_cb_compatible((expr), _curl_debug_callback3) || \ - curlcheck_cb_compatible((expr), _curl_debug_callback4) || \ - curlcheck_cb_compatible((expr), _curl_debug_callback5) || \ - curlcheck_cb_compatible((expr), _curl_debug_callback6) || \ - curlcheck_cb_compatible((expr), _curl_debug_callback7) || \ +#define curlcheck_debug_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_debug_callback) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback1) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback2) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback3) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback4) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback5) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback6) || \ + curlcheck_cb_compatible((expr), _curl_debug_callback7) || \ curlcheck_cb_compatible((expr), _curl_debug_callback8)) -typedef int (*_curl_debug_callback1) (CURL *, - curl_infotype, char *, size_t, void *); -typedef int (*_curl_debug_callback2) (CURL *, - curl_infotype, char *, size_t, const void *); -typedef int (*_curl_debug_callback3) (CURL *, - curl_infotype, const char *, size_t, void *); -typedef int (*_curl_debug_callback4) (CURL *, - curl_infotype, const char *, size_t, const void *); -typedef int (*_curl_debug_callback5) (CURL *, - curl_infotype, unsigned char *, size_t, void *); -typedef int (*_curl_debug_callback6) (CURL *, - curl_infotype, unsigned char *, size_t, const void *); -typedef int (*_curl_debug_callback7) (CURL *, - curl_infotype, const unsigned char *, size_t, void *); -typedef int (*_curl_debug_callback8) (CURL *, - curl_infotype, const unsigned char *, size_t, const void *); +typedef int (*_curl_debug_callback1)(CURL *, curl_infotype, char *, size_t, + void *); +typedef int (*_curl_debug_callback2)(CURL *, curl_infotype, char *, size_t, + const void *); +typedef int (*_curl_debug_callback3)(CURL *, curl_infotype, const char *, + size_t, void *); +typedef int (*_curl_debug_callback4)(CURL *, curl_infotype, const char *, + size_t, const void *); +typedef int (*_curl_debug_callback5)(CURL *, curl_infotype, unsigned char *, + size_t, void *); +typedef int (*_curl_debug_callback6)(CURL *, curl_infotype, unsigned char *, + size_t, const void *); +typedef int (*_curl_debug_callback7)(CURL *, curl_infotype, + const unsigned char *, size_t, void *); +typedef int (*_curl_debug_callback8)(CURL *, curl_infotype, + const unsigned char *, size_t, + const void *); /* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */ /* this is getting even messier... */ -#define curlcheck_ssl_ctx_cb(expr) \ - (curlcheck_NULL(expr) || \ - curlcheck_cb_compatible((expr), curl_ssl_ctx_callback) || \ - curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback1) || \ - curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback2) || \ - curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback3) || \ - curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback4) || \ - curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback5) || \ - curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback6) || \ - curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback7) || \ +#define curlcheck_ssl_ctx_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_ssl_ctx_callback) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback1) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback2) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback3) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback4) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback5) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback6) || \ + curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback7) || \ curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback8)) typedef CURLcode (*_curl_ssl_ctx_callback1)(CURL *, void *, void *); typedef CURLcode (*_curl_ssl_ctx_callback2)(CURL *, void *, const void *); typedef CURLcode (*_curl_ssl_ctx_callback3)(CURL *, const void *, void *); -typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *, - const void *); +typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *, const void *); #ifdef HEADER_SSL_H /* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX * this will of course break if we are included before OpenSSL headers... @@ -693,12 +644,12 @@ typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8; #endif /* evaluates to true if expr is of type curl_conv_callback or "similar" */ -#define curlcheck_conv_cb(expr) \ - (curlcheck_NULL(expr) || \ - curlcheck_cb_compatible((expr), curl_conv_callback) || \ - curlcheck_cb_compatible((expr), _curl_conv_callback1) || \ - curlcheck_cb_compatible((expr), _curl_conv_callback2) || \ - curlcheck_cb_compatible((expr), _curl_conv_callback3) || \ +#define curlcheck_conv_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_conv_callback) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback1) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback2) || \ + curlcheck_cb_compatible((expr), _curl_conv_callback3) || \ curlcheck_cb_compatible((expr), _curl_conv_callback4)) typedef CURLcode (*_curl_conv_callback1)(char *, size_t length); typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length); @@ -706,13 +657,12 @@ typedef CURLcode (*_curl_conv_callback3)(void *, size_t length); typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length); /* evaluates to true if expr is of type curl_seek_callback or "similar" */ -#define curlcheck_seek_cb(expr) \ - (curlcheck_NULL(expr) || \ - curlcheck_cb_compatible((expr), curl_seek_callback) || \ - curlcheck_cb_compatible((expr), _curl_seek_callback1) || \ +#define curlcheck_seek_cb(expr) \ + (curlcheck_NULL(expr) || \ + curlcheck_cb_compatible((expr), curl_seek_callback) || \ + curlcheck_cb_compatible((expr), _curl_seek_callback1) || \ curlcheck_cb_compatible((expr), _curl_seek_callback2)) typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int); typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int); - #endif /* CURLINC_TYPECHECK_GCC_H */ diff --git a/vendor/hydra/vendor/curl/include/curl/urlapi.h b/vendor/hydra/vendor/curl/include/curl/urlapi.h index b4a6e5d5..d9b6c515 100644 --- a/vendor/hydra/vendor/curl/include/curl/urlapi.h +++ b/vendor/hydra/vendor/curl/include/curl/urlapi.h @@ -26,44 +26,44 @@ #include "curl.h" -#ifdef __cplusplus +#ifdef __cplusplus extern "C" { #endif /* the error codes for the URL API */ typedef enum { CURLUE_OK, - CURLUE_BAD_HANDLE, /* 1 */ - CURLUE_BAD_PARTPOINTER, /* 2 */ - CURLUE_MALFORMED_INPUT, /* 3 */ - CURLUE_BAD_PORT_NUMBER, /* 4 */ - CURLUE_UNSUPPORTED_SCHEME, /* 5 */ - CURLUE_URLDECODE, /* 6 */ - CURLUE_OUT_OF_MEMORY, /* 7 */ - CURLUE_USER_NOT_ALLOWED, /* 8 */ - CURLUE_UNKNOWN_PART, /* 9 */ - CURLUE_NO_SCHEME, /* 10 */ - CURLUE_NO_USER, /* 11 */ - CURLUE_NO_PASSWORD, /* 12 */ - CURLUE_NO_OPTIONS, /* 13 */ - CURLUE_NO_HOST, /* 14 */ - CURLUE_NO_PORT, /* 15 */ - CURLUE_NO_QUERY, /* 16 */ - CURLUE_NO_FRAGMENT, /* 17 */ - CURLUE_NO_ZONEID, /* 18 */ - CURLUE_BAD_FILE_URL, /* 19 */ - CURLUE_BAD_FRAGMENT, /* 20 */ - CURLUE_BAD_HOSTNAME, /* 21 */ - CURLUE_BAD_IPV6, /* 22 */ - CURLUE_BAD_LOGIN, /* 23 */ - CURLUE_BAD_PASSWORD, /* 24 */ - CURLUE_BAD_PATH, /* 25 */ - CURLUE_BAD_QUERY, /* 26 */ - CURLUE_BAD_SCHEME, /* 27 */ - CURLUE_BAD_SLASHES, /* 28 */ - CURLUE_BAD_USER, /* 29 */ - CURLUE_LACKS_IDN, /* 30 */ - CURLUE_TOO_LARGE, /* 31 */ + CURLUE_BAD_HANDLE, /* 1 */ + CURLUE_BAD_PARTPOINTER, /* 2 */ + CURLUE_MALFORMED_INPUT, /* 3 */ + CURLUE_BAD_PORT_NUMBER, /* 4 */ + CURLUE_UNSUPPORTED_SCHEME, /* 5 */ + CURLUE_URLDECODE, /* 6 */ + CURLUE_OUT_OF_MEMORY, /* 7 */ + CURLUE_USER_NOT_ALLOWED, /* 8 */ + CURLUE_UNKNOWN_PART, /* 9 */ + CURLUE_NO_SCHEME, /* 10 */ + CURLUE_NO_USER, /* 11 */ + CURLUE_NO_PASSWORD, /* 12 */ + CURLUE_NO_OPTIONS, /* 13 */ + CURLUE_NO_HOST, /* 14 */ + CURLUE_NO_PORT, /* 15 */ + CURLUE_NO_QUERY, /* 16 */ + CURLUE_NO_FRAGMENT, /* 17 */ + CURLUE_NO_ZONEID, /* 18 */ + CURLUE_BAD_FILE_URL, /* 19 */ + CURLUE_BAD_FRAGMENT, /* 20 */ + CURLUE_BAD_HOSTNAME, /* 21 */ + CURLUE_BAD_IPV6, /* 22 */ + CURLUE_BAD_LOGIN, /* 23 */ + CURLUE_BAD_PASSWORD, /* 24 */ + CURLUE_BAD_PATH, /* 25 */ + CURLUE_BAD_QUERY, /* 26 */ + CURLUE_BAD_SCHEME, /* 27 */ + CURLUE_BAD_SLASHES, /* 28 */ + CURLUE_BAD_USER, /* 29 */ + CURLUE_LACKS_IDN, /* 30 */ + CURLUE_TOO_LARGE, /* 31 */ CURLUE_LAST } CURLUcode; @@ -81,28 +81,32 @@ typedef enum { CURLUPART_ZONEID /* added in 7.65.0 */ } CURLUPart; -#define CURLU_DEFAULT_PORT (1<<0) /* return default port number */ -#define CURLU_NO_DEFAULT_PORT (1<<1) /* act as if no port number was set, - if the port number matches the - default for the scheme */ -#define CURLU_DEFAULT_SCHEME (1<<2) /* return default scheme if - missing */ -#define CURLU_NON_SUPPORT_SCHEME (1<<3) /* allow non-supported scheme */ -#define CURLU_PATH_AS_IS (1<<4) /* leave dot sequences */ -#define CURLU_DISALLOW_USER (1<<5) /* no user+password allowed */ -#define CURLU_URLDECODE (1<<6) /* URL decode on get */ -#define CURLU_URLENCODE (1<<7) /* URL encode on set */ -#define CURLU_APPENDQUERY (1<<8) /* append a form style part */ -#define CURLU_GUESS_SCHEME (1<<9) /* legacy curl-style guessing */ -#define CURLU_NO_AUTHORITY (1<<10) /* Allow empty authority when the - scheme is unknown. */ -#define CURLU_ALLOW_SPACE (1<<11) /* Allow spaces in the URL */ -#define CURLU_PUNYCODE (1<<12) /* get the hostname in punycode */ -#define CURLU_PUNY2IDN (1<<13) /* punycode => IDN conversion */ -#define CURLU_GET_EMPTY (1<<14) /* allow empty queries and fragments - when extracting the URL or the +#define CURLU_DEFAULT_PORT (1 << 0) /* return default port number */ +#define CURLU_NO_DEFAULT_PORT \ + (1 << 1) /* act as if no port number was set, \ + if the port number matches the \ + default for the scheme */ +#define CURLU_DEFAULT_SCHEME \ + (1 << 2) /* return default scheme if \ + missing */ +#define CURLU_NON_SUPPORT_SCHEME (1 << 3) /* allow non-supported scheme */ +#define CURLU_PATH_AS_IS (1 << 4) /* leave dot sequences */ +#define CURLU_DISALLOW_USER (1 << 5) /* no user+password allowed */ +#define CURLU_URLDECODE (1 << 6) /* URL decode on get */ +#define CURLU_URLENCODE (1 << 7) /* URL encode on set */ +#define CURLU_APPENDQUERY (1 << 8) /* append a form style part */ +#define CURLU_GUESS_SCHEME (1 << 9) /* legacy curl-style guessing */ +#define CURLU_NO_AUTHORITY \ + (1 << 10) /* Allow empty authority when the \ + scheme is unknown. */ +#define CURLU_ALLOW_SPACE (1 << 11) /* Allow spaces in the URL */ +#define CURLU_PUNYCODE (1 << 12) /* get the hostname in punycode */ +#define CURLU_PUNY2IDN (1 << 13) /* punycode => IDN conversion */ +#define CURLU_GET_EMPTY \ + (1 << 14) /* allow empty queries and fragments \ + when extracting the URL or the \ components */ -#define CURLU_NO_GUESS_SCHEME (1<<15) /* for get, do not accept a guess */ +#define CURLU_NO_GUESS_SCHEME (1 << 15) /* for get, do not accept a guess */ typedef struct Curl_URL CURLU; diff --git a/vendor/hydra/vendor/curl/include/curl/websockets.h b/vendor/hydra/vendor/curl/include/curl/websockets.h index 6ef6a2bc..67619803 100644 --- a/vendor/hydra/vendor/curl/include/curl/websockets.h +++ b/vendor/hydra/vendor/curl/include/curl/websockets.h @@ -24,7 +24,7 @@ * ***************************************************************************/ -#ifdef __cplusplus +#ifdef __cplusplus extern "C" { #endif @@ -37,12 +37,12 @@ struct curl_ws_frame { }; /* flag bits */ -#define CURLWS_TEXT (1<<0) -#define CURLWS_BINARY (1<<1) -#define CURLWS_CONT (1<<2) -#define CURLWS_CLOSE (1<<3) -#define CURLWS_PING (1<<4) -#define CURLWS_OFFSET (1<<5) +#define CURLWS_TEXT (1 << 0) +#define CURLWS_BINARY (1 << 1) +#define CURLWS_CONT (1 << 2) +#define CURLWS_CLOSE (1 << 3) +#define CURLWS_PING (1 << 4) +#define CURLWS_OFFSET (1 << 5) /* * NAME curl_ws_recv() @@ -57,7 +57,7 @@ CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen, const struct curl_ws_frame **metap); /* flags for curl_ws_send() */ -#define CURLWS_PONG (1<<6) +#define CURLWS_PONG (1 << 6) /* * NAME curl_ws_send() @@ -67,17 +67,16 @@ CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen, * Sends data over the websocket connection. Use after successful * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. */ -CURL_EXTERN CURLcode curl_ws_send(CURL *curl, const void *buffer, - size_t buflen, size_t *sent, - curl_off_t fragsize, +CURL_EXTERN CURLcode curl_ws_send(CURL *curl, const void *buffer, size_t buflen, + size_t *sent, curl_off_t fragsize, unsigned int flags); /* bits for the CURLOPT_WS_OPTIONS bitmask: */ -#define CURLWS_RAW_MODE (1<<0) +#define CURLWS_RAW_MODE (1 << 0) CURL_EXTERN const struct curl_ws_frame *curl_ws_meta(CURL *curl); -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/vendor/hydra/vendor/curl/lib/altsvc.h b/vendor/hydra/vendor/curl/lib/altsvc.h index 48999efb..ebe33669 100644 --- a/vendor/hydra/vendor/curl/lib/altsvc.h +++ b/vendor/hydra/vendor/curl/lib/altsvc.h @@ -27,6 +27,7 @@ #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_ALTSVC) #include + #include "llist.h" enum alpnid { @@ -54,28 +55,26 @@ struct altsvc { struct altsvcinfo { char *filename; struct Curl_llist list; /* list of entries */ - long flags; /* the publicly set bitmask */ + long flags; /* the publicly set bitmask */ }; const char *Curl_alpnid2str(enum alpnid id); struct altsvcinfo *Curl_altsvc_init(void); CURLcode Curl_altsvc_load(struct altsvcinfo *asi, const char *file); -CURLcode Curl_altsvc_save(struct Curl_easy *data, - struct altsvcinfo *asi, const char *file); +CURLcode Curl_altsvc_save(struct Curl_easy *data, struct altsvcinfo *asi, + const char *file); CURLcode Curl_altsvc_ctrl(struct altsvcinfo *asi, const long ctrl); void Curl_altsvc_cleanup(struct altsvcinfo **altsvc); -CURLcode Curl_altsvc_parse(struct Curl_easy *data, - struct altsvcinfo *altsvc, const char *value, - enum alpnid srcalpn, const char *srchost, - unsigned short srcport); -bool Curl_altsvc_lookup(struct altsvcinfo *asi, - enum alpnid srcalpnid, const char *srchost, - int srcport, +CURLcode Curl_altsvc_parse(struct Curl_easy *data, struct altsvcinfo *altsvc, + const char *value, enum alpnid srcalpn, + const char *srchost, unsigned short srcport); +bool Curl_altsvc_lookup(struct altsvcinfo *asi, enum alpnid srcalpnid, + const char *srchost, int srcport, struct altsvc **dstentry, const int versions); /* CURLALTSVC_H* bits */ #else /* disabled */ -#define Curl_altsvc_save(a,b,c) +#define Curl_altsvc_save(a, b, c) #define Curl_altsvc_cleanup(x) #endif /* !CURL_DISABLE_HTTP && !CURL_DISABLE_ALTSVC */ #endif /* HEADER_CURL_ALTSVC_H */ diff --git a/vendor/hydra/vendor/curl/lib/amigaos.h b/vendor/hydra/vendor/curl/lib/amigaos.h index c99d963e..e77790d2 100644 --- a/vendor/hydra/vendor/curl/lib/amigaos.h +++ b/vendor/hydra/vendor/curl/lib/amigaos.h @@ -26,7 +26,7 @@ #include "curl_setup.h" #if defined(__AMIGA__) && defined(HAVE_PROTO_BSDSOCKET_H) && \ - (!defined(USE_AMISSL) || defined(__amigaos4__)) + (!defined(USE_AMISSL) || defined(__amigaos4__)) CURLcode Curl_amiga_init(void); void Curl_amiga_cleanup(void); diff --git a/vendor/hydra/vendor/curl/lib/arpa_telnet.h b/vendor/hydra/vendor/curl/lib/arpa_telnet.h index d641a01d..0d612652 100644 --- a/vendor/hydra/vendor/curl/lib/arpa_telnet.h +++ b/vendor/hydra/vendor/curl/lib/arpa_telnet.h @@ -27,38 +27,36 @@ /* * Telnet option defines. Add more here if in need. */ -#define CURL_TELOPT_BINARY 0 /* binary 8bit data */ -#define CURL_TELOPT_ECHO 1 /* just echo! */ -#define CURL_TELOPT_SGA 3 /* Suppress Go Ahead */ -#define CURL_TELOPT_EXOPL 255 /* EXtended OPtions List */ -#define CURL_TELOPT_TTYPE 24 /* Terminal TYPE */ -#define CURL_TELOPT_NAWS 31 /* Negotiate About Window Size */ +#define CURL_TELOPT_BINARY 0 /* binary 8bit data */ +#define CURL_TELOPT_ECHO 1 /* just echo! */ +#define CURL_TELOPT_SGA 3 /* Suppress Go Ahead */ +#define CURL_TELOPT_EXOPL 255 /* EXtended OPtions List */ +#define CURL_TELOPT_TTYPE 24 /* Terminal TYPE */ +#define CURL_TELOPT_NAWS 31 /* Negotiate About Window Size */ #define CURL_TELOPT_XDISPLOC 35 /* X DISPlay LOCation */ -#define CURL_TELOPT_NEW_ENVIRON 39 /* NEW ENVIRONment variables */ -#define CURL_NEW_ENV_VAR 0 +#define CURL_TELOPT_NEW_ENVIRON 39 /* NEW ENVIRONment variables */ +#define CURL_NEW_ENV_VAR 0 #define CURL_NEW_ENV_VALUE 1 #ifndef CURL_DISABLE_VERBOSE_STRINGS /* * The telnet options represented as strings */ -static const char * const telnetoptions[]= -{ - "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", - "NAME", "STATUS", "TIMING MARK", "RCTE", - "NAOL", "NAOP", "NAOCRD", "NAOHTS", - "NAOHTD", "NAOFFD", "NAOVTS", "NAOVTD", - "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO", - "DE TERMINAL", "SUPDUP", "SUPDUP OUTPUT", "SEND LOCATION", - "TERM TYPE", "END OF RECORD", "TACACS UID", "OUTPUT MARKING", - "TTYLOC", "3270 REGIME", "X3 PAD", "NAWS", - "TERM SPEED", "LFLOW", "LINEMODE", "XDISPLOC", - "OLD-ENVIRON", "AUTHENTICATION", "ENCRYPT", "NEW-ENVIRON" -}; -#define CURL_TELOPT(x) telnetoptions[x] +static const char* const telnetoptions[] = { + "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", + "NAME", "STATUS", "TIMING MARK", "RCTE", + "NAOL", "NAOP", "NAOCRD", "NAOHTS", + "NAOHTD", "NAOFFD", "NAOVTS", "NAOVTD", + "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO", + "DE TERMINAL", "SUPDUP", "SUPDUP OUTPUT", "SEND LOCATION", + "TERM TYPE", "END OF RECORD", "TACACS UID", "OUTPUT MARKING", + "TTYLOC", "3270 REGIME", "X3 PAD", "NAWS", + "TERM SPEED", "LFLOW", "LINEMODE", "XDISPLOC", + "OLD-ENVIRON", "AUTHENTICATION", "ENCRYPT", "NEW-ENVIRON"}; +#define CURL_TELOPT(x) telnetoptions[x] #else -#define CURL_TELOPT(x) "" +#define CURL_TELOPT(x) "" #endif #define CURL_TELOPT_MAXIMUM CURL_TELOPT_NEW_ENVIRON @@ -71,45 +69,42 @@ static const char * const telnetoptions[]= * First some defines */ #define CURL_xEOF 236 /* End Of File */ -#define CURL_SE 240 /* Sub negotiation End */ -#define CURL_NOP 241 /* No OPeration */ -#define CURL_DM 242 /* Data Mark */ -#define CURL_GA 249 /* Go Ahead, reverse the line */ -#define CURL_SB 250 /* SuBnegotiation */ +#define CURL_SE 240 /* Sub negotiation End */ +#define CURL_NOP 241 /* No OPeration */ +#define CURL_DM 242 /* Data Mark */ +#define CURL_GA 249 /* Go Ahead, reverse the line */ +#define CURL_SB 250 /* SuBnegotiation */ #define CURL_WILL 251 /* Our side WILL use this option */ #define CURL_WONT 252 /* Our side will not use this option */ -#define CURL_DO 253 /* DO use this option! */ +#define CURL_DO 253 /* DO use this option! */ #define CURL_DONT 254 /* DON'T use this option! */ -#define CURL_IAC 255 /* Interpret As Command */ +#define CURL_IAC 255 /* Interpret As Command */ #ifndef CURL_DISABLE_VERBOSE_STRINGS /* * Then those numbers represented as strings: */ -static const char * const telnetcmds[]= -{ - "EOF", "SUSP", "ABORT", "EOR", "SE", - "NOP", "DMARK", "BRK", "IP", "AO", - "AYT", "EC", "EL", "GA", "SB", - "WILL", "WONT", "DO", "DONT", "IAC" -}; +static const char* const telnetcmds[] = { + "EOF", "SUSP", "ABORT", "EOR", "SE", "NOP", "DMARK", "BRK", "IP", "AO", + "AYT", "EC", "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC"}; #endif #define CURL_TELCMD_MINIMUM CURL_xEOF /* the first one */ #define CURL_TELCMD_MAXIMUM CURL_IAC /* surprise, 255 is the last one! ;-) */ -#define CURL_TELQUAL_IS 0 +#define CURL_TELQUAL_IS 0 #define CURL_TELQUAL_SEND 1 #define CURL_TELQUAL_INFO 2 #define CURL_TELQUAL_NAME 3 -#define CURL_TELCMD_OK(x) ( ((unsigned int)(x) >= CURL_TELCMD_MINIMUM) && \ - ((unsigned int)(x) <= CURL_TELCMD_MAXIMUM) ) +#define CURL_TELCMD_OK(x) \ + (((unsigned int)(x) >= CURL_TELCMD_MINIMUM) && \ + ((unsigned int)(x) <= CURL_TELCMD_MAXIMUM)) #ifndef CURL_DISABLE_VERBOSE_STRINGS -#define CURL_TELCMD(x) telnetcmds[(x)-CURL_TELCMD_MINIMUM] +#define CURL_TELCMD(x) telnetcmds[(x) - CURL_TELCMD_MINIMUM] #else -#define CURL_TELCMD(x) "" +#define CURL_TELCMD(x) "" #endif #endif /* CURL_DISABLE_TELNET */ diff --git a/vendor/hydra/vendor/curl/lib/asyn.h b/vendor/hydra/vendor/curl/lib/asyn.h index 0ff20488..a7c6a45b 100644 --- a/vendor/hydra/vendor/curl/lib/asyn.h +++ b/vendor/hydra/vendor/curl/lib/asyn.h @@ -24,8 +24,8 @@ * ***************************************************************************/ -#include "curl_setup.h" #include "curl_addrinfo.h" +#include "curl_setup.h" struct addrinfo; struct hostent; @@ -81,8 +81,7 @@ void Curl_resolver_cleanup(void *resolver); * pointer. Returning anything else than CURLE_OK causes failed * curl_easy_duphandle() call. */ -CURLcode Curl_resolver_duphandle(struct Curl_easy *easy, void **to, - void *from); +CURLcode Curl_resolver_duphandle(struct Curl_easy *easy, void **to, void *from); /* * Curl_resolver_cancel(). @@ -156,18 +155,17 @@ CURLcode Curl_resolver_wait_resolv(struct Curl_easy *data, * correct format to comply with this. */ struct Curl_addrinfo *Curl_resolver_getaddrinfo(struct Curl_easy *data, - const char *hostname, - int port, + const char *hostname, int port, int *waitp); #ifndef CURLRES_ASYNCH /* convert these functions if an asynch resolver is not used */ #define Curl_resolver_cancel(x) Curl_nop_stmt #define Curl_resolver_kill(x) Curl_nop_stmt -#define Curl_resolver_is_resolved(x,y) CURLE_COULDNT_RESOLVE_HOST -#define Curl_resolver_wait_resolv(x,y) CURLE_COULDNT_RESOLVE_HOST -#define Curl_resolver_duphandle(x,y,z) CURLE_OK -#define Curl_resolver_init(x,y) CURLE_OK +#define Curl_resolver_is_resolved(x, y) CURLE_COULDNT_RESOLVE_HOST +#define Curl_resolver_wait_resolv(x, y) CURLE_COULDNT_RESOLVE_HOST +#define Curl_resolver_duphandle(x, y, z) CURLE_OK +#define Curl_resolver_init(x, y) CURLE_OK #define Curl_resolver_global_init() CURLE_OK #define Curl_resolver_global_cleanup() Curl_nop_stmt #define Curl_resolver_cleanup(x) Curl_nop_stmt @@ -179,6 +177,5 @@ struct Curl_addrinfo *Curl_resolver_getaddrinfo(struct Curl_easy *data, #define Curl_resolver_asynch() 0 #endif - /********** end of generic resolver interface functions *****************/ #endif /* HEADER_CURL_ASYN_H */ diff --git a/vendor/hydra/vendor/curl/lib/bufq.h b/vendor/hydra/vendor/curl/lib/bufq.h index ec415648..ed10410e 100644 --- a/vendor/hydra/vendor/curl/lib/bufq.h +++ b/vendor/hydra/vendor/curl/lib/bufq.h @@ -23,20 +23,20 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -#include "curl_setup.h" - #include +#include "curl_setup.h" + /** * A chunk of bytes for reading and writing. * The size is fixed a creation with read and write offset * for where unread content is. */ struct buf_chunk { - struct buf_chunk *next; /* to keep it in a list */ - size_t dlen; /* the amount of allocated x.data[] */ - size_t r_offset; /* first unread bytes */ - size_t w_offset; /* one after last written byte */ + struct buf_chunk *next; /* to keep it in a list */ + size_t dlen; /* the amount of allocated x.data[] */ + size_t r_offset; /* first unread bytes */ + size_t w_offset; /* one after last written byte */ union { unsigned char data[1]; /* the buffer for `dlen` bytes */ void *dummy; /* alignment */ @@ -51,14 +51,14 @@ struct buf_chunk { * same thread. */ struct bufc_pool { - struct buf_chunk *spare; /* list of available spare chunks */ - size_t chunk_size; /* the size of chunks in this pool */ - size_t spare_count; /* current number of spare chunks in list */ - size_t spare_max; /* max number of spares to keep */ + struct buf_chunk *spare; /* list of available spare chunks */ + size_t chunk_size; /* the size of chunks in this pool */ + size_t spare_count; /* current number of spare chunks in list */ + size_t spare_max; /* max number of spares to keep */ }; -void Curl_bufcp_init(struct bufc_pool *pool, - size_t chunk_size, size_t spare_max); +void Curl_bufcp_init(struct bufc_pool *pool, size_t chunk_size, + size_t spare_max); void Curl_bufcp_free(struct bufc_pool *pool); @@ -92,30 +92,30 @@ void Curl_bufcp_free(struct bufc_pool *pool); * will be delegated to that pool. */ struct bufq { - struct buf_chunk *head; /* chunk with bytes to read from */ - struct buf_chunk *tail; /* chunk to write to */ - struct buf_chunk *spare; /* list of free chunks, unless `pool` */ - struct bufc_pool *pool; /* optional pool for free chunks */ - size_t chunk_count; /* current number of chunks in `head+spare` */ - size_t max_chunks; /* max `head` chunks to use */ - size_t chunk_size; /* size of chunks to manage */ - int opts; /* options for handling queue, see below */ + struct buf_chunk *head; /* chunk with bytes to read from */ + struct buf_chunk *tail; /* chunk to write to */ + struct buf_chunk *spare; /* list of free chunks, unless `pool` */ + struct bufc_pool *pool; /* optional pool for free chunks */ + size_t chunk_count; /* current number of chunks in `head+spare` */ + size_t max_chunks; /* max `head` chunks to use */ + size_t chunk_size; /* size of chunks to manage */ + int opts; /* options for handling queue, see below */ }; /** * Default behaviour: chunk limit is "hard", meaning attempts to write * more bytes than can be hold in `max_chunks` is refused and will return * -1, CURLE_AGAIN. */ -#define BUFQ_OPT_NONE (0) +#define BUFQ_OPT_NONE (0) /** * Make `max_chunks` a "soft" limit. A bufq will report that it is "full" * when `max_chunks` are used, but allows writing beyond this limit. */ -#define BUFQ_OPT_SOFT_LIMIT (1 << 0) +#define BUFQ_OPT_SOFT_LIMIT (1 << 0) /** * Do not keep spare chunks. */ -#define BUFQ_OPT_NO_SPARES (1 << 1) +#define BUFQ_OPT_NO_SPARES (1 << 1) /** * Initialize a buffer queue that can hold up to `max_chunks` buffers @@ -128,11 +128,11 @@ void Curl_bufq_init(struct bufq *q, size_t chunk_size, size_t max_chunks); * Initialize a buffer queue that can hold up to `max_chunks` buffers * each of size `chunk_size` with the given options. See `BUFQ_OPT_*`. */ -void Curl_bufq_init2(struct bufq *q, size_t chunk_size, - size_t max_chunks, int opts); +void Curl_bufq_init2(struct bufq *q, size_t chunk_size, size_t max_chunks, + int opts); -void Curl_bufq_initp(struct bufq *q, struct bufc_pool *pool, - size_t max_chunks, int opts); +void Curl_bufq_initp(struct bufq *q, struct bufc_pool *pool, size_t max_chunks, + int opts); /** * Reset the buffer queue to be empty. Will keep any allocated buffer @@ -174,13 +174,11 @@ bool Curl_bufq_is_full(const struct bufq *q); * A return code of -1 indicates an error, setting `err` to the * cause. An err of CURLE_AGAIN is returned if the buffer queue is full. */ -ssize_t Curl_bufq_write(struct bufq *q, - const unsigned char *buf, size_t len, +ssize_t Curl_bufq_write(struct bufq *q, const unsigned char *buf, size_t len, CURLcode *err); -CURLcode Curl_bufq_cwrite(struct bufq *q, - const char *buf, size_t len, - size_t *pnwritten); +CURLcode Curl_bufq_cwrite(struct bufq *q, const char *buf, size_t len, + size_t *pnwritten); /** * Remove `len` bytes from the end of the buffer queue again. @@ -195,10 +193,9 @@ CURLcode Curl_bufq_unwrite(struct bufq *q, size_t len); * cause. An err of CURLE_AGAIN is returned if the buffer queue is empty. */ ssize_t Curl_bufq_read(struct bufq *q, unsigned char *buf, size_t len, - CURLcode *err); + CURLcode *err); -CURLcode Curl_bufq_cread(struct bufq *q, char *buf, size_t len, - size_t *pnread); +CURLcode Curl_bufq_cread(struct bufq *q, char *buf, size_t len, size_t *pnread); /** * Peek at the head chunk in the buffer queue. Returns a pointer to @@ -209,8 +206,7 @@ CURLcode Curl_bufq_cread(struct bufq *q, char *buf, size_t len, * Repeated calls return the same information until the buffer queue * is modified, see `Curl_bufq_skip()`` */ -bool Curl_bufq_peek(struct bufq *q, - const unsigned char **pbuf, size_t *plen); +bool Curl_bufq_peek(struct bufq *q, const unsigned char **pbuf, size_t *plen); bool Curl_bufq_peek_at(struct bufq *q, size_t offset, const unsigned char **pbuf, size_t *plen); @@ -222,9 +218,8 @@ bool Curl_bufq_peek_at(struct bufq *q, size_t offset, */ void Curl_bufq_skip(struct bufq *q, size_t amount); -typedef ssize_t Curl_bufq_writer(void *writer_ctx, - const unsigned char *buf, size_t len, - CURLcode *err); +typedef ssize_t Curl_bufq_writer(void *writer_ctx, const unsigned char *buf, + size_t len, CURLcode *err); /** * Passes the chunks in the buffer queue to the writer and returns * the amount of buf written. A writer may return -1 and CURLE_AGAIN @@ -237,9 +232,8 @@ typedef ssize_t Curl_bufq_writer(void *writer_ctx, ssize_t Curl_bufq_pass(struct bufq *q, Curl_bufq_writer *writer, void *writer_ctx, CURLcode *err); -typedef ssize_t Curl_bufq_reader(void *reader_ctx, - unsigned char *buf, size_t len, - CURLcode *err); +typedef ssize_t Curl_bufq_reader(void *reader_ctx, unsigned char *buf, + size_t len, CURLcode *err); /** * Read date and append it to the end of the buffer queue until the @@ -259,9 +253,8 @@ ssize_t Curl_bufq_slurp(struct bufq *q, Curl_bufq_reader *reader, * Returns the total amount of buf read (may be 0) or -1 on other * reader errors. */ -ssize_t Curl_bufq_sipn(struct bufq *q, size_t max_len, - Curl_bufq_reader *reader, void *reader_ctx, - CURLcode *err); +ssize_t Curl_bufq_sipn(struct bufq *q, size_t max_len, Curl_bufq_reader *reader, + void *reader_ctx, CURLcode *err); /** * Write buf to the end of the buffer queue. @@ -270,9 +263,8 @@ ssize_t Curl_bufq_sipn(struct bufq *q, size_t max_len, * on or is placed into the buffer, depending on `len` and current * amount buffered, chunk size, etc. */ -ssize_t Curl_bufq_write_pass(struct bufq *q, - const unsigned char *buf, size_t len, - Curl_bufq_writer *writer, void *writer_ctx, - CURLcode *err); +ssize_t Curl_bufq_write_pass(struct bufq *q, const unsigned char *buf, + size_t len, Curl_bufq_writer *writer, + void *writer_ctx, CURLcode *err); #endif /* HEADER_CURL_BUFQ_H */ diff --git a/vendor/hydra/vendor/curl/lib/bufref.h b/vendor/hydra/vendor/curl/lib/bufref.h index dd424f18..6d03acfd 100644 --- a/vendor/hydra/vendor/curl/lib/bufref.h +++ b/vendor/hydra/vendor/curl/lib/bufref.h @@ -28,15 +28,14 @@ * Generic buffer reference. */ struct bufref { - void (*dtor)(void *); /* Associated destructor. */ - const unsigned char *ptr; /* Referenced data buffer. */ - size_t len; /* The data size in bytes. */ + void (*dtor)(void *); /* Associated destructor. */ + const unsigned char *ptr; /* Referenced data buffer. */ + size_t len; /* The data size in bytes. */ #ifdef DEBUGBUILD - int signature; /* Detect API use mistakes. */ + int signature; /* Detect API use mistakes. */ #endif }; - void Curl_bufref_init(struct bufref *br); void Curl_bufref_set(struct bufref *br, const void *ptr, size_t len, void (*dtor)(void *)); diff --git a/vendor/hydra/vendor/curl/lib/c-hyper.h b/vendor/hydra/vendor/curl/lib/c-hyper.h index 89dd53b8..0a1fb72a 100644 --- a/vendor/hydra/vendor/curl/lib/c-hyper.h +++ b/vendor/hydra/vendor/curl/lib/c-hyper.h @@ -43,14 +43,12 @@ struct hyptransfer { struct hyp_io_ctx io_ctx; }; -size_t Curl_hyper_recv(void *userp, hyper_context *ctx, - uint8_t *buf, size_t buflen); -size_t Curl_hyper_send(void *userp, hyper_context *ctx, - const uint8_t *buf, size_t buflen); -CURLcode Curl_hyper_stream(struct Curl_easy *data, - struct connectdata *conn, - int *didwhat, - int select_res); +size_t Curl_hyper_recv(void *userp, hyper_context *ctx, uint8_t *buf, + size_t buflen); +size_t Curl_hyper_send(void *userp, hyper_context *ctx, const uint8_t *buf, + size_t buflen); +CURLcode Curl_hyper_stream(struct Curl_easy *data, struct connectdata *conn, + int *didwhat, int select_res); CURLcode Curl_hyper_header(struct Curl_easy *data, hyper_headers *headers, const char *line); diff --git a/vendor/hydra/vendor/curl/lib/cf-h1-proxy.h b/vendor/hydra/vendor/curl/lib/cf-h1-proxy.h index ac5bed0b..ded55db9 100644 --- a/vendor/hydra/vendor/curl/lib/cf-h1-proxy.h +++ b/vendor/hydra/vendor/curl/lib/cf-h1-proxy.h @@ -33,7 +33,6 @@ CURLcode Curl_cf_h1_proxy_insert_after(struct Curl_cfilter *cf, extern struct Curl_cftype Curl_cft_h1_proxy; - #endif /* !CURL_DISABLE_PROXY && !CURL_DISABLE_HTTP */ #endif /* HEADER_CURL_H1_PROXY_H */ diff --git a/vendor/hydra/vendor/curl/lib/cf-h2-proxy.h b/vendor/hydra/vendor/curl/lib/cf-h2-proxy.h index c01bf621..1089d0dc 100644 --- a/vendor/hydra/vendor/curl/lib/cf-h2-proxy.h +++ b/vendor/hydra/vendor/curl/lib/cf-h2-proxy.h @@ -33,7 +33,6 @@ CURLcode Curl_cf_h2_proxy_insert_after(struct Curl_cfilter *cf, extern struct Curl_cftype Curl_cft_h2_proxy; - #endif /* defined(USE_NGHTTP2) && !defined(CURL_DISABLE_PROXY) */ #endif /* HEADER_CURL_H2_PROXY_H */ diff --git a/vendor/hydra/vendor/curl/lib/cf-https-connect.h b/vendor/hydra/vendor/curl/lib/cf-https-connect.h index 6a395273..3e2442a6 100644 --- a/vendor/hydra/vendor/curl/lib/cf-https-connect.h +++ b/vendor/hydra/vendor/curl/lib/cf-https-connect.h @@ -36,23 +36,17 @@ struct Curl_dns_entry; extern struct Curl_cftype Curl_cft_http_connect; CURLcode Curl_cf_http_connect_add(struct Curl_easy *data, - struct connectdata *conn, - int sockindex, + struct connectdata *conn, int sockindex, const struct Curl_dns_entry *remotehost, bool try_h3, bool try_h21); -CURLcode -Curl_cf_http_connect_insert_after(struct Curl_cfilter *cf_at, - struct Curl_easy *data, - const struct Curl_dns_entry *remotehost, - bool try_h3, bool try_h21); +CURLcode Curl_cf_http_connect_insert_after( + struct Curl_cfilter *cf_at, struct Curl_easy *data, + const struct Curl_dns_entry *remotehost, bool try_h3, bool try_h21); - -CURLcode Curl_cf_https_setup(struct Curl_easy *data, - struct connectdata *conn, +CURLcode Curl_cf_https_setup(struct Curl_easy *data, struct connectdata *conn, int sockindex, const struct Curl_dns_entry *remotehost); - #endif /* !defined(CURL_DISABLE_HTTP) && !defined(USE_HYPER) */ #endif /* HEADER_CURL_CF_HTTP_H */ diff --git a/vendor/hydra/vendor/curl/lib/cf-socket.h b/vendor/hydra/vendor/curl/lib/cf-socket.h index 35225f15..bc39fac5 100644 --- a/vendor/hydra/vendor/curl/lib/cf-socket.h +++ b/vendor/hydra/vendor/curl/lib/cf-socket.h @@ -24,7 +24,6 @@ * ***************************************************************************/ #include "curl_setup.h" - #include "nonblock.h" /* for curlx_nonblock(), formerly Curl_nonblock() */ #include "sockaddr.h" @@ -56,9 +55,9 @@ struct Curl_sockaddr_ex { /* * Parse interface option, and return the interface name and the host part. -*/ -CURLcode Curl_parse_interface(const char *input, - char **dev, char **iface, char **host); + */ +CURLcode Curl_parse_interface(const char *input, char **dev, char **iface, + char **host); /* * Create a socket based on info from 'conn' and 'ai'. @@ -68,10 +67,9 @@ CURLcode Curl_parse_interface(const char *input, * */ CURLcode Curl_socket_open(struct Curl_easy *data, - const struct Curl_addrinfo *ai, - struct Curl_sockaddr_ex *addr, - int transport, - curl_socket_t *sockfd); + const struct Curl_addrinfo *ai, + struct Curl_sockaddr_ex *addr, int transport, + curl_socket_t *sockfd); int Curl_socket_close(struct Curl_easy *data, struct connectdata *conn, curl_socket_t sock); @@ -96,8 +94,7 @@ void Curl_sndbuf_init(curl_socket_t sockfd); * set the transport used. */ void Curl_sock_assign_addr(struct Curl_sockaddr_ex *dest, - const struct Curl_addrinfo *ai, - int transport); + const struct Curl_addrinfo *ai, int transport); /** * Creates a cfilter that opens a TCP socket to the given address @@ -106,11 +103,9 @@ void Curl_sock_assign_addr(struct Curl_sockaddr_ex *dest, * used in happy eyeballing. Once selected for use, its `_active()` * method needs to be called. */ -CURLcode Curl_cf_tcp_create(struct Curl_cfilter **pcf, - struct Curl_easy *data, +CURLcode Curl_cf_tcp_create(struct Curl_cfilter **pcf, struct Curl_easy *data, struct connectdata *conn, - const struct Curl_addrinfo *ai, - int transport); + const struct Curl_addrinfo *ai, int transport); /** * Creates a cfilter that opens a UDP socket to the given address @@ -119,11 +114,9 @@ CURLcode Curl_cf_tcp_create(struct Curl_cfilter **pcf, * used in happy eyeballing. Once selected for use, its `_active()` * method needs to be called. */ -CURLcode Curl_cf_udp_create(struct Curl_cfilter **pcf, - struct Curl_easy *data, +CURLcode Curl_cf_udp_create(struct Curl_cfilter **pcf, struct Curl_easy *data, struct connectdata *conn, - const struct Curl_addrinfo *ai, - int transport); + const struct Curl_addrinfo *ai, int transport); /** * Creates a cfilter that opens a UNIX socket to the given address @@ -132,26 +125,22 @@ CURLcode Curl_cf_udp_create(struct Curl_cfilter **pcf, * used in happy eyeballing. Once selected for use, its `_active()` * method needs to be called. */ -CURLcode Curl_cf_unix_create(struct Curl_cfilter **pcf, - struct Curl_easy *data, +CURLcode Curl_cf_unix_create(struct Curl_cfilter **pcf, struct Curl_easy *data, struct connectdata *conn, - const struct Curl_addrinfo *ai, - int transport); + const struct Curl_addrinfo *ai, int transport); /** * Creates a cfilter that keeps a listening socket. */ CURLcode Curl_conn_tcp_listen_set(struct Curl_easy *data, - struct connectdata *conn, - int sockindex, + struct connectdata *conn, int sockindex, curl_socket_t *s); /** * Replace the listen socket with the accept()ed one. */ CURLcode Curl_conn_tcp_accepted_set(struct Curl_easy *data, - struct connectdata *conn, - int sockindex, + struct connectdata *conn, int sockindex, curl_socket_t *s); /** @@ -162,8 +151,7 @@ CURLcode Curl_conn_tcp_accepted_set(struct Curl_easy *data, * @param pip pointer to get IP quadruple or NULL * Returns error if the filter is of invalid type. */ -CURLcode Curl_cf_socket_peek(struct Curl_cfilter *cf, - struct Curl_easy *data, +CURLcode Curl_cf_socket_peek(struct Curl_cfilter *cf, struct Curl_easy *data, curl_socket_t *psock, const struct Curl_sockaddr_ex **paddr, struct ip_quadruple *pip); diff --git a/vendor/hydra/vendor/curl/lib/cfilters.h b/vendor/hydra/vendor/curl/lib/cfilters.h index af696f52..ce559577 100644 --- a/vendor/hydra/vendor/curl/lib/cfilters.h +++ b/vendor/hydra/vendor/curl/lib/cfilters.h @@ -35,23 +35,21 @@ struct ip_quadruple; /* Callback to destroy resources held by this filter instance. * Implementations MUST NOT chain calls to cf->next. */ -typedef void Curl_cft_destroy_this(struct Curl_cfilter *cf, - struct Curl_easy *data); +typedef void Curl_cft_destroy_this(struct Curl_cfilter *cf, + struct Curl_easy *data); /* Callback to close the connection immediately. */ -typedef void Curl_cft_close(struct Curl_cfilter *cf, - struct Curl_easy *data); +typedef void Curl_cft_close(struct Curl_cfilter *cf, struct Curl_easy *data); /* Callback to close the connection filter gracefully, non-blocking. * Implementations MUST NOT chain calls to cf->next. */ typedef CURLcode Curl_cft_shutdown(struct Curl_cfilter *cf, - struct Curl_easy *data, - bool *done); + struct Curl_easy *data, bool *done); typedef CURLcode Curl_cft_connect(struct Curl_cfilter *cf, - struct Curl_easy *data, - bool blocking, bool *done); + struct Curl_easy *data, bool blocking, + bool *done); /* Return the hostname and port the connection goes to. * This may change with the connection state of filters when tunneling @@ -64,11 +62,9 @@ typedef CURLcode Curl_cft_connect(struct Curl_cfilter *cf, * this is owned by the connection. * @param pport on return, contains the port number */ -typedef void Curl_cft_get_host(struct Curl_cfilter *cf, - struct Curl_easy *data, - const char **phost, - const char **pdisplay_host, - int *pport); +typedef void Curl_cft_get_host(struct Curl_cfilter *cf, struct Curl_easy *data, + const char **phost, const char **pdisplay_host, + int *pport); struct easy_pollset; @@ -95,29 +91,29 @@ struct easy_pollset; * @param data the easy handle the pollset is about * @param ps the pollset (inout) for the easy handle */ -typedef void Curl_cft_adjust_pollset(struct Curl_cfilter *cf, - struct Curl_easy *data, - struct easy_pollset *ps); +typedef void Curl_cft_adjust_pollset(struct Curl_cfilter *cf, + struct Curl_easy *data, + struct easy_pollset *ps); -typedef bool Curl_cft_data_pending(struct Curl_cfilter *cf, - const struct Curl_easy *data); +typedef bool Curl_cft_data_pending(struct Curl_cfilter *cf, + const struct Curl_easy *data); -typedef ssize_t Curl_cft_send(struct Curl_cfilter *cf, - struct Curl_easy *data, /* transfer */ - const void *buf, /* data to write */ - size_t len, /* amount to write */ - bool eos, /* last chunk */ - CURLcode *err); /* error to return */ +typedef ssize_t Curl_cft_send(struct Curl_cfilter *cf, + struct Curl_easy *data, /* transfer */ + const void *buf, /* data to write */ + size_t len, /* amount to write */ + bool eos, /* last chunk */ + CURLcode *err); /* error to return */ -typedef ssize_t Curl_cft_recv(struct Curl_cfilter *cf, - struct Curl_easy *data, /* transfer */ - char *buf, /* store data here */ - size_t len, /* amount to read */ - CURLcode *err); /* error to return */ +typedef ssize_t Curl_cft_recv(struct Curl_cfilter *cf, + struct Curl_easy *data, /* transfer */ + char *buf, /* store data here */ + size_t len, /* amount to read */ + CURLcode *err); /* error to return */ -typedef bool Curl_cft_conn_is_alive(struct Curl_cfilter *cf, - struct Curl_easy *data, - bool *input_pending); +typedef bool Curl_cft_conn_is_alive(struct Curl_cfilter *cf, + struct Curl_easy *data, + bool *input_pending); typedef CURLcode Curl_cft_conn_keep_alive(struct Curl_cfilter *cf, struct Curl_easy *data); @@ -132,27 +128,25 @@ typedef CURLcode Curl_cft_conn_keep_alive(struct Curl_cfilter *cf, * to all filters in the chain. Overall result is always CURLE_OK. */ /* data event arg1 arg2 return */ -#define CF_CTRL_DATA_ATTACH 1 /* 0 NULL ignored */ -#define CF_CTRL_DATA_DETACH 2 /* 0 NULL ignored */ -#define CF_CTRL_DATA_SETUP 4 /* 0 NULL first fail */ -#define CF_CTRL_DATA_IDLE 5 /* 0 NULL first fail */ -#define CF_CTRL_DATA_PAUSE 6 /* on/off NULL first fail */ -#define CF_CTRL_DATA_DONE 7 /* premature NULL ignored */ -#define CF_CTRL_DATA_DONE_SEND 8 /* 0 NULL ignored */ +#define CF_CTRL_DATA_ATTACH 1 /* 0 NULL ignored */ +#define CF_CTRL_DATA_DETACH 2 /* 0 NULL ignored */ +#define CF_CTRL_DATA_SETUP 4 /* 0 NULL first fail */ +#define CF_CTRL_DATA_IDLE 5 /* 0 NULL first fail */ +#define CF_CTRL_DATA_PAUSE 6 /* on/off NULL first fail */ +#define CF_CTRL_DATA_DONE 7 /* premature NULL ignored */ +#define CF_CTRL_DATA_DONE_SEND 8 /* 0 NULL ignored */ /* update conn info at connection and data */ -#define CF_CTRL_CONN_INFO_UPDATE (256+0) /* 0 NULL ignored */ -#define CF_CTRL_FORGET_SOCKET (256+1) /* 0 NULL ignored */ -#define CF_CTRL_FLUSH (256+2) /* 0 NULL first fail */ +#define CF_CTRL_CONN_INFO_UPDATE (256 + 0) /* 0 NULL ignored */ +#define CF_CTRL_FORGET_SOCKET (256 + 1) /* 0 NULL ignored */ +#define CF_CTRL_FLUSH (256 + 2) /* 0 NULL first fail */ /** * Handle event/control for the filter. * Implementations MUST NOT chain calls to cf->next. */ -typedef CURLcode Curl_cft_cntrl(struct Curl_cfilter *cf, - struct Curl_easy *data, +typedef CURLcode Curl_cft_cntrl(struct Curl_cfilter *cf, struct Curl_easy *data, int event, int arg1, void *arg2); - /** * Queries to ask via a `Curl_cft_query *query` method on a cfilter chain. * - MAX_CONCURRENT: the maximum number of parallel transfers the filter @@ -170,21 +164,20 @@ typedef CURLcode Curl_cft_cntrl(struct Curl_cfilter *cf, * ip quadruple */ /* query res1 res2 */ -#define CF_QUERY_MAX_CONCURRENT 1 /* number - */ -#define CF_QUERY_CONNECT_REPLY_MS 2 /* number - */ -#define CF_QUERY_SOCKET 3 /* - curl_socket_t */ -#define CF_QUERY_TIMER_CONNECT 4 /* - struct curltime */ -#define CF_QUERY_TIMER_APPCONNECT 5 /* - struct curltime */ -#define CF_QUERY_STREAM_ERROR 6 /* error code - */ -#define CF_QUERY_NEED_FLUSH 7 /* TRUE/FALSE - */ -#define CF_QUERY_IP_INFO 8 /* TRUE/FALSE struct ip_quadruple */ +#define CF_QUERY_MAX_CONCURRENT 1 /* number - */ +#define CF_QUERY_CONNECT_REPLY_MS 2 /* number - */ +#define CF_QUERY_SOCKET 3 /* - curl_socket_t */ +#define CF_QUERY_TIMER_CONNECT 4 /* - struct curltime */ +#define CF_QUERY_TIMER_APPCONNECT 5 /* - struct curltime */ +#define CF_QUERY_STREAM_ERROR 6 /* error code - */ +#define CF_QUERY_NEED_FLUSH 7 /* TRUE/FALSE - */ +#define CF_QUERY_IP_INFO 8 /* TRUE/FALSE struct ip_quadruple */ /** * Query the cfilter for properties. Filters ignorant of a query will * pass it "down" the filter chain. */ -typedef CURLcode Curl_cft_query(struct Curl_cfilter *cf, - struct Curl_easy *data, +typedef CURLcode Curl_cft_query(struct Curl_cfilter *cf, struct Curl_easy *data, int query, int *pres1, void *pres2); /** @@ -198,29 +191,29 @@ typedef CURLcode Curl_cft_query(struct Curl_cfilter *cf, * CF_TYPE_MULTIPLEX: provides multiplexing of easy handles * CF_TYPE_PROXY provides proxying */ -#define CF_TYPE_IP_CONNECT (1 << 0) -#define CF_TYPE_SSL (1 << 1) -#define CF_TYPE_MULTIPLEX (1 << 2) -#define CF_TYPE_PROXY (1 << 3) +#define CF_TYPE_IP_CONNECT (1 << 0) +#define CF_TYPE_SSL (1 << 1) +#define CF_TYPE_MULTIPLEX (1 << 2) +#define CF_TYPE_PROXY (1 << 3) /* A connection filter type, e.g. specific implementation. */ struct Curl_cftype { - const char *name; /* name of the filter type */ - int flags; /* flags of filter type */ - int log_level; /* log level for such filters */ - Curl_cft_destroy_this *destroy; /* destroy resources of this cf */ - Curl_cft_connect *do_connect; /* establish connection */ - Curl_cft_close *do_close; /* close conn */ - Curl_cft_shutdown *do_shutdown; /* shutdown conn */ - Curl_cft_get_host *get_host; /* host filter talks to */ + const char *name; /* name of the filter type */ + int flags; /* flags of filter type */ + int log_level; /* log level for such filters */ + Curl_cft_destroy_this *destroy; /* destroy resources of this cf */ + Curl_cft_connect *do_connect; /* establish connection */ + Curl_cft_close *do_close; /* close conn */ + Curl_cft_shutdown *do_shutdown; /* shutdown conn */ + Curl_cft_get_host *get_host; /* host filter talks to */ Curl_cft_adjust_pollset *adjust_pollset; /* adjust transfer poll set */ - Curl_cft_data_pending *has_data_pending;/* conn has data pending */ - Curl_cft_send *do_send; /* send data */ - Curl_cft_recv *do_recv; /* receive data */ - Curl_cft_cntrl *cntrl; /* events/control */ - Curl_cft_conn_is_alive *is_alive; /* FALSE if conn is dead, Jim! */ - Curl_cft_conn_keep_alive *keep_alive; /* try to keep it alive */ - Curl_cft_query *query; /* query filter chain */ + Curl_cft_data_pending *has_data_pending; /* conn has data pending */ + Curl_cft_send *do_send; /* send data */ + Curl_cft_recv *do_recv; /* receive data */ + Curl_cft_cntrl *cntrl; /* events/control */ + Curl_cft_conn_is_alive *is_alive; /* FALSE if conn is dead, Jim! */ + Curl_cft_conn_keep_alive *keep_alive; /* try to keep it alive */ + Curl_cft_query *query; /* query filter chain */ }; /* A connection filter instance, e.g. registered at a connection */ @@ -235,37 +228,31 @@ struct Curl_cfilter { }; /* Default implementations for the type functions, implementing nop. */ -void Curl_cf_def_destroy_this(struct Curl_cfilter *cf, - struct Curl_easy *data); +void Curl_cf_def_destroy_this(struct Curl_cfilter *cf, struct Curl_easy *data); /* Default implementations for the type functions, implementing pass-through * the filter chain. */ -void Curl_cf_def_get_host(struct Curl_cfilter *cf, struct Curl_easy *data, - const char **phost, const char **pdisplay_host, - int *pport); -void Curl_cf_def_adjust_pollset(struct Curl_cfilter *cf, - struct Curl_easy *data, - struct easy_pollset *ps); -bool Curl_cf_def_data_pending(struct Curl_cfilter *cf, - const struct Curl_easy *data); -ssize_t Curl_cf_def_send(struct Curl_cfilter *cf, struct Curl_easy *data, - const void *buf, size_t len, bool eos, - CURLcode *err); -ssize_t Curl_cf_def_recv(struct Curl_cfilter *cf, struct Curl_easy *data, - char *buf, size_t len, CURLcode *err); -CURLcode Curl_cf_def_cntrl(struct Curl_cfilter *cf, - struct Curl_easy *data, - int event, int arg1, void *arg2); -bool Curl_cf_def_conn_is_alive(struct Curl_cfilter *cf, - struct Curl_easy *data, - bool *input_pending); +void Curl_cf_def_get_host(struct Curl_cfilter *cf, struct Curl_easy *data, + const char **phost, const char **pdisplay_host, + int *pport); +void Curl_cf_def_adjust_pollset(struct Curl_cfilter *cf, struct Curl_easy *data, + struct easy_pollset *ps); +bool Curl_cf_def_data_pending(struct Curl_cfilter *cf, + const struct Curl_easy *data); +ssize_t Curl_cf_def_send(struct Curl_cfilter *cf, struct Curl_easy *data, + const void *buf, size_t len, bool eos, CURLcode *err); +ssize_t Curl_cf_def_recv(struct Curl_cfilter *cf, struct Curl_easy *data, + char *buf, size_t len, CURLcode *err); +CURLcode Curl_cf_def_cntrl(struct Curl_cfilter *cf, struct Curl_easy *data, + int event, int arg1, void *arg2); +bool Curl_cf_def_conn_is_alive(struct Curl_cfilter *cf, struct Curl_easy *data, + bool *input_pending); CURLcode Curl_cf_def_conn_keep_alive(struct Curl_cfilter *cf, struct Curl_easy *data); -CURLcode Curl_cf_def_query(struct Curl_cfilter *cf, - struct Curl_easy *data, +CURLcode Curl_cf_def_query(struct Curl_cfilter *cf, struct Curl_easy *data, int query, int *pres1, void *pres2); -CURLcode Curl_cf_def_shutdown(struct Curl_cfilter *cf, - struct Curl_easy *data, bool *done); +CURLcode Curl_cf_def_shutdown(struct Curl_cfilter *cf, struct Curl_easy *data, + bool *done); /** * Create a new filter instance, unattached to the filter chain. @@ -275,18 +262,15 @@ CURLcode Curl_cf_def_shutdown(struct Curl_cfilter *cf, * @param ctx the type specific context to use */ CURLcode Curl_cf_create(struct Curl_cfilter **pcf, - const struct Curl_cftype *cft, - void *ctx); + const struct Curl_cftype *cft, void *ctx); /** * Add a filter instance to the `sockindex` filter chain at connection * `conn`. The filter must not already be attached. It is inserted at * the start of the chain (top). */ -void Curl_conn_cf_add(struct Curl_easy *data, - struct connectdata *conn, - int sockindex, - struct Curl_cfilter *cf); +void Curl_conn_cf_add(struct Curl_easy *data, struct connectdata *conn, + int sockindex, struct Curl_cfilter *cf); /** * Insert a filter (chain) after `cf_at`. @@ -304,8 +288,7 @@ void Curl_conn_cf_insert_after(struct Curl_cfilter *cf_at, */ bool Curl_conn_cf_discard_sub(struct Curl_cfilter *cf, struct Curl_cfilter *discard, - struct Curl_easy *data, - bool destroy_always); + struct Curl_easy *data, bool destroy_always); /** * Discard all cfilters starting with `*pcf` and clearing it afterwards. @@ -316,24 +299,19 @@ void Curl_conn_cf_discard_chain(struct Curl_cfilter **pcf, /** * Remove and destroy all filters at chain `sockindex` on connection `conn`. */ -void Curl_conn_cf_discard_all(struct Curl_easy *data, - struct connectdata *conn, +void Curl_conn_cf_discard_all(struct Curl_easy *data, struct connectdata *conn, int sockindex); - -CURLcode Curl_conn_cf_connect(struct Curl_cfilter *cf, - struct Curl_easy *data, +CURLcode Curl_conn_cf_connect(struct Curl_cfilter *cf, struct Curl_easy *data, bool blocking, bool *done); void Curl_conn_cf_close(struct Curl_cfilter *cf, struct Curl_easy *data); ssize_t Curl_conn_cf_send(struct Curl_cfilter *cf, struct Curl_easy *data, - const void *buf, size_t len, bool eos, - CURLcode *err); + const void *buf, size_t len, bool eos, CURLcode *err); ssize_t Curl_conn_cf_recv(struct Curl_cfilter *cf, struct Curl_easy *data, char *buf, size_t len, CURLcode *err); -CURLcode Curl_conn_cf_cntrl(struct Curl_cfilter *cf, - struct Curl_easy *data, - bool ignore_result, - int event, int arg1, void *arg2); +CURLcode Curl_conn_cf_cntrl(struct Curl_cfilter *cf, struct Curl_easy *data, + bool ignore_result, int event, int arg1, + void *arg2); /** * Determine if the connection filter chain is using SSL to the remote host @@ -349,15 +327,14 @@ curl_socket_t Curl_conn_cf_get_socket(struct Curl_cfilter *cf, struct Curl_easy *data); CURLcode Curl_conn_cf_get_ip_info(struct Curl_cfilter *cf, - struct Curl_easy *data, - int *is_ipv6, struct ip_quadruple *ipquad); + struct Curl_easy *data, int *is_ipv6, + struct ip_quadruple *ipquad); -bool Curl_conn_cf_needs_flush(struct Curl_cfilter *cf, - struct Curl_easy *data); +bool Curl_conn_cf_needs_flush(struct Curl_cfilter *cf, struct Curl_easy *data); -#define CURL_CF_SSL_DEFAULT -1 -#define CURL_CF_SSL_DISABLE 0 -#define CURL_CF_SSL_ENABLE 1 +#define CURL_CF_SSL_DEFAULT -1 +#define CURL_CF_SSL_DISABLE 0 +#define CURL_CF_SSL_ENABLE 1 /** * Bring the filter chain at `sockindex` for connection `data->conn` into @@ -366,8 +343,8 @@ bool Curl_conn_cf_needs_flush(struct Curl_cfilter *cf, * When not `blocking`, calls may return without error and `*done != TRUE`, * while the individual filters negotiated the connection. */ -CURLcode Curl_conn_connect(struct Curl_easy *data, int sockindex, - bool blocking, bool *done); +CURLcode Curl_conn_connect(struct Curl_easy *data, int sockindex, bool blocking, + bool *done); /** * Check if the filter chain at `sockindex` for connection `conn` is @@ -396,7 +373,7 @@ bool Curl_conn_is_multiplex(struct connectdata *conn, int sockindex); /** * Close the filter chain at `sockindex` for connection `data->conn`. - * Filters remain in place and may be connected again afterwards. + * Filters remain in place and may be connected again afterwards. */ void Curl_conn_close(struct Curl_easy *data, int sockindex); @@ -411,8 +388,7 @@ CURLcode Curl_conn_shutdown(struct Curl_easy *data, int sockindex, bool *done); * Return if data is pending in some connection filter at chain * `sockindex` for connection `data->conn`. */ -bool Curl_conn_data_pending(struct Curl_easy *data, - int sockindex); +bool Curl_conn_data_pending(struct Curl_easy *data, int sockindex); /** * Return TRUE if any of the connection filters at chain `sockindex` @@ -446,16 +422,14 @@ void Curl_conn_cf_adjust_pollset(struct Curl_cfilter *cf, /** * Adjust pollset from filters installed at transfer's connection. */ -void Curl_conn_adjust_pollset(struct Curl_easy *data, - struct easy_pollset *ps); +void Curl_conn_adjust_pollset(struct Curl_easy *data, struct easy_pollset *ps); /** * Curl_poll() the filter chain at `cf` with timeout `timeout_ms`. * Returns 0 on timeout, negative on error or number of sockets * with requested poll events. */ -int Curl_conn_cf_poll(struct Curl_cfilter *cf, - struct Curl_easy *data, +int Curl_conn_cf_poll(struct Curl_cfilter *cf, struct Curl_easy *data, timediff_t timeout_ms); /** @@ -473,16 +447,15 @@ ssize_t Curl_cf_recv(struct Curl_easy *data, int sockindex, char *buf, * or a negative value on error. * The error code is placed into `*code`. */ -ssize_t Curl_cf_send(struct Curl_easy *data, int sockindex, - const void *buf, size_t len, bool eos, CURLcode *code); +ssize_t Curl_cf_send(struct Curl_easy *data, int sockindex, const void *buf, + size_t len, bool eos, CURLcode *code); /** * The easy handle `data` is being attached to `conn`. This does * not mean that data will actually do a transfer. Attachment is * also used for temporary actions on the connection. */ -void Curl_conn_ev_data_attach(struct connectdata *conn, - struct Curl_easy *data); +void Curl_conn_ev_data_attach(struct connectdata *conn, struct Curl_easy *data); /** * The easy handle `data` is being detached (no longer served) @@ -491,8 +464,7 @@ void Curl_conn_ev_data_attach(struct connectdata *conn, * Note: there may be several `data` attached to a connection at the same * time. */ -void Curl_conn_ev_data_detach(struct connectdata *conn, - struct Curl_easy *data); +void Curl_conn_ev_data_detach(struct connectdata *conn, struct Curl_easy *data); /** * Notify connection filters that they need to setup data for @@ -532,8 +504,7 @@ bool Curl_conn_is_alive(struct Curl_easy *data, struct connectdata *conn, /** * Try to upkeep the connection filters at sockindex. */ -CURLcode Curl_conn_keep_alive(struct Curl_easy *data, - struct connectdata *conn, +CURLcode Curl_conn_keep_alive(struct Curl_easy *data, struct connectdata *conn, int sockindex); #ifdef UNITTESTS @@ -548,14 +519,12 @@ void Curl_conn_get_host(struct Curl_easy *data, int sockindex, * expects to be able to handle at `sockindex`. */ size_t Curl_conn_get_max_concurrent(struct Curl_easy *data, - struct connectdata *conn, - int sockindex); + struct connectdata *conn, int sockindex); /** * Get the underlying error code for a transfer stream or 0 if not known. */ -int Curl_conn_get_stream_error(struct Curl_easy *data, - struct connectdata *conn, +int Curl_conn_get_stream_error(struct Curl_easy *data, struct connectdata *conn, int sockindex); /** @@ -569,51 +538,41 @@ int Curl_conn_sockindex(struct Curl_easy *data, curl_socket_t sockfd); * Receive data on the connection, using FIRSTSOCKET/SECONDARYSOCKET. * Will return CURLE_AGAIN iff blocked on receiving. */ -CURLcode Curl_conn_recv(struct Curl_easy *data, int sockindex, - char *buf, size_t buffersize, - ssize_t *pnread); +CURLcode Curl_conn_recv(struct Curl_easy *data, int sockindex, char *buf, + size_t buffersize, ssize_t *pnread); /* * Send data on the connection, using FIRSTSOCKET/SECONDARYSOCKET. * Will return CURLE_AGAIN iff blocked on sending. */ -CURLcode Curl_conn_send(struct Curl_easy *data, int sockindex, - const void *buf, size_t blen, bool eos, - size_t *pnwritten); - +CURLcode Curl_conn_send(struct Curl_easy *data, int sockindex, const void *buf, + size_t blen, bool eos, size_t *pnwritten); -void Curl_pollset_reset(struct Curl_easy *data, - struct easy_pollset *ps); +void Curl_pollset_reset(struct Curl_easy *data, struct easy_pollset *ps); /* Change the poll flags (CURL_POLL_IN/CURL_POLL_OUT) to the poll set for * socket `sock`. If the socket is not already part of the poll set, it * will be added. * If the socket is present and all poll flags are cleared, it will be removed. */ -void Curl_pollset_change(struct Curl_easy *data, - struct easy_pollset *ps, curl_socket_t sock, - int add_flags, int remove_flags); +void Curl_pollset_change(struct Curl_easy *data, struct easy_pollset *ps, + curl_socket_t sock, int add_flags, int remove_flags); -void Curl_pollset_set(struct Curl_easy *data, - struct easy_pollset *ps, curl_socket_t sock, - bool do_in, bool do_out); +void Curl_pollset_set(struct Curl_easy *data, struct easy_pollset *ps, + curl_socket_t sock, bool do_in, bool do_out); #define Curl_pollset_add_in(data, ps, sock) \ - Curl_pollset_change((data), (ps), (sock), CURL_POLL_IN, 0) + Curl_pollset_change((data), (ps), (sock), CURL_POLL_IN, 0) #define Curl_pollset_add_out(data, ps, sock) \ - Curl_pollset_change((data), (ps), (sock), CURL_POLL_OUT, 0) + Curl_pollset_change((data), (ps), (sock), CURL_POLL_OUT, 0) #define Curl_pollset_add_inout(data, ps, sock) \ - Curl_pollset_change((data), (ps), (sock), \ - CURL_POLL_IN|CURL_POLL_OUT, 0) + Curl_pollset_change((data), (ps), (sock), CURL_POLL_IN | CURL_POLL_OUT, 0) #define Curl_pollset_set_in_only(data, ps, sock) \ - Curl_pollset_change((data), (ps), (sock), \ - CURL_POLL_IN, CURL_POLL_OUT) + Curl_pollset_change((data), (ps), (sock), CURL_POLL_IN, CURL_POLL_OUT) #define Curl_pollset_set_out_only(data, ps, sock) \ - Curl_pollset_change((data), (ps), (sock), \ - CURL_POLL_OUT, CURL_POLL_IN) + Curl_pollset_change((data), (ps), (sock), CURL_POLL_OUT, CURL_POLL_IN) -void Curl_pollset_add_socks(struct Curl_easy *data, - struct easy_pollset *ps, +void Curl_pollset_add_socks(struct Curl_easy *data, struct easy_pollset *ps, int (*get_socks_cb)(struct Curl_easy *data, curl_socket_t *socks)); @@ -621,9 +580,9 @@ void Curl_pollset_add_socks(struct Curl_easy *data, * Check if the pollset, as is, wants to read and/or write regarding * the given socket. */ -void Curl_pollset_check(struct Curl_easy *data, - struct easy_pollset *ps, curl_socket_t sock, - bool *pwant_read, bool *pwant_write); +void Curl_pollset_check(struct Curl_easy *data, struct easy_pollset *ps, + curl_socket_t sock, bool *pwant_read, + bool *pwant_write); /** * Types and macros used to keep the current easy handle in filter calls, @@ -656,41 +615,40 @@ struct cf_call_data { * a member in the cfilter's `ctx`. * * #define CF_CTX_CALL_DATA(cf) -> struct cf_call_data instance -*/ + */ #ifdef DEBUGBUILD -#define CF_DATA_SAVE(save, cf, data) \ - do { \ - (save) = CF_CTX_CALL_DATA(cf); \ +#define CF_DATA_SAVE(save, cf, data) \ + do { \ + (save) = CF_CTX_CALL_DATA(cf); \ DEBUGASSERT((save).data == NULL || (save).depth > 0); \ - CF_CTX_CALL_DATA(cf).depth++; \ + CF_CTX_CALL_DATA(cf).depth++; \ CF_CTX_CALL_DATA(cf).data = (struct Curl_easy *)data; \ - } while(0) + } while (0) -#define CF_DATA_RESTORE(cf, save) \ - do { \ +#define CF_DATA_RESTORE(cf, save) \ + do { \ DEBUGASSERT(CF_CTX_CALL_DATA(cf).depth == (save).depth + 1); \ - DEBUGASSERT((save).data == NULL || (save).depth > 0); \ - CF_CTX_CALL_DATA(cf) = (save); \ - } while(0) + DEBUGASSERT((save).data == NULL || (save).depth > 0); \ + CF_CTX_CALL_DATA(cf) = (save); \ + } while (0) #else /* DEBUGBUILD */ -#define CF_DATA_SAVE(save, cf, data) \ - do { \ - (save) = CF_CTX_CALL_DATA(cf); \ +#define CF_DATA_SAVE(save, cf, data) \ + do { \ + (save) = CF_CTX_CALL_DATA(cf); \ CF_CTX_CALL_DATA(cf).data = (struct Curl_easy *)data; \ - } while(0) + } while (0) -#define CF_DATA_RESTORE(cf, save) \ - do { \ +#define CF_DATA_RESTORE(cf, save) \ + do { \ CF_CTX_CALL_DATA(cf) = (save); \ - } while(0) + } while (0) #endif /* !DEBUGBUILD */ -#define CF_DATA_CURRENT(cf) \ - ((cf)? (CF_CTX_CALL_DATA(cf).data) : NULL) +#define CF_DATA_CURRENT(cf) ((cf) ? (CF_CTX_CALL_DATA(cf).data) : NULL) #endif /* HEADER_CURL_CFILTERS_H */ diff --git a/vendor/hydra/vendor/curl/lib/config-amigaos.h b/vendor/hydra/vendor/curl/lib/config-amigaos.h index d168b446..aed47f9e 100644 --- a/vendor/hydra/vendor/curl/lib/config-amigaos.h +++ b/vendor/hydra/vendor/curl/lib/config-amigaos.h @@ -95,24 +95,24 @@ #define in_addr_t int #ifndef F_OK -# define F_OK 0 +#define F_OK 0 #endif #ifndef O_RDONLY -# define O_RDONLY 0x0000 +#define O_RDONLY 0x0000 #endif #ifndef LONG_MAX -# define LONG_MAX 0x7fffffffL +#define LONG_MAX 0x7fffffffL #endif #ifndef LONG_MIN -# define LONG_MIN (-0x7fffffffL-1) +#define LONG_MIN (-0x7fffffffL - 1) #endif #define HAVE_RECV 1 #define RECV_TYPE_ARG1 long -#define RECV_TYPE_ARG2 char * +#define RECV_TYPE_ARG2 char* #define RECV_TYPE_ARG3 long #define RECV_TYPE_ARG4 long #define RECV_TYPE_RETV long @@ -120,7 +120,7 @@ #define HAVE_SEND 1 #define SEND_TYPE_ARG1 int #define SEND_QUAL_ARG2 const -#define SEND_TYPE_ARG2 char * +#define SEND_TYPE_ARG2 char* #define SEND_TYPE_ARG3 int #define SEND_TYPE_ARG4 int #define SEND_TYPE_RETV int diff --git a/vendor/hydra/vendor/curl/lib/config-dos.h b/vendor/hydra/vendor/curl/lib/config-dos.h index c6fbba79..79dc8257 100644 --- a/vendor/hydra/vendor/curl/lib/config-dos.h +++ b/vendor/hydra/vendor/curl/lib/config-dos.h @@ -24,79 +24,78 @@ * ***************************************************************************/ - /* ================================================================ */ /* lib/config-dos.h - Hand crafted config file for DOS */ /* ================================================================ */ #ifndef OS #if defined(DJGPP) - #define OS "MSDOS/djgpp" +#define OS "MSDOS/djgpp" #elif defined(__HIGHC__) - #define OS "MSDOS/HighC" +#define OS "MSDOS/HighC" #else - #define OS "MSDOS/?" +#define OS "MSDOS/?" #endif #endif -#define PACKAGE "curl" +#define PACKAGE "curl" #define USE_MANUAL 1 -#define HAVE_ARPA_INET_H 1 -#define HAVE_FCNTL_H 1 -#define HAVE_FREEADDRINFO 1 -#define HAVE_GETADDRINFO 1 -#define HAVE_GETTIMEOFDAY 1 -#define HAVE_IO_H 1 -#define HAVE_IOCTL_FIONBIO 1 -#define HAVE_IOCTLSOCKET 1 -#define HAVE_IOCTLSOCKET_FIONBIO 1 -#define HAVE_LOCALE_H 1 -#define HAVE_LONGLONG 1 -#define HAVE_NETDB_H 1 -#define HAVE_NETINET_IN_H 1 -#define HAVE_NETINET_TCP_H 1 -#define HAVE_NET_IF_H 1 -#define HAVE_RECV 1 -#define HAVE_SELECT 1 -#define HAVE_SEND 1 -#define HAVE_SETLOCALE 1 -#define HAVE_SETMODE 1 -#define HAVE_SIGNAL 1 -#define HAVE_SOCKET 1 -#define HAVE_STRDUP 1 -#define HAVE_STRICMP 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRUCT_TIMEVAL 1 -#define HAVE_SYS_IOCTL_H 1 -#define HAVE_SYS_SOCKET_H 1 -#define HAVE_SYS_STAT_H 1 -#define HAVE_SYS_TYPES_H 1 -#define HAVE_UNISTD_H 1 - -#define NEED_MALLOC_H 1 - -#define SIZEOF_INT 4 -#define SIZEOF_LONG 4 -#define SIZEOF_SIZE_T 4 -#define SIZEOF_CURL_OFF_T 8 -#define STDC_HEADERS 1 +#define HAVE_ARPA_INET_H 1 +#define HAVE_FCNTL_H 1 +#define HAVE_FREEADDRINFO 1 +#define HAVE_GETADDRINFO 1 +#define HAVE_GETTIMEOFDAY 1 +#define HAVE_IO_H 1 +#define HAVE_IOCTL_FIONBIO 1 +#define HAVE_IOCTLSOCKET 1 +#define HAVE_IOCTLSOCKET_FIONBIO 1 +#define HAVE_LOCALE_H 1 +#define HAVE_LONGLONG 1 +#define HAVE_NETDB_H 1 +#define HAVE_NETINET_IN_H 1 +#define HAVE_NETINET_TCP_H 1 +#define HAVE_NET_IF_H 1 +#define HAVE_RECV 1 +#define HAVE_SELECT 1 +#define HAVE_SEND 1 +#define HAVE_SETLOCALE 1 +#define HAVE_SETMODE 1 +#define HAVE_SIGNAL 1 +#define HAVE_SOCKET 1 +#define HAVE_STRDUP 1 +#define HAVE_STRICMP 1 +#define HAVE_STRTOLL 1 +#define HAVE_STRUCT_TIMEVAL 1 +#define HAVE_SYS_IOCTL_H 1 +#define HAVE_SYS_SOCKET_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_UNISTD_H 1 + +#define NEED_MALLOC_H 1 + +#define SIZEOF_INT 4 +#define SIZEOF_LONG 4 +#define SIZEOF_SIZE_T 4 +#define SIZEOF_CURL_OFF_T 8 +#define STDC_HEADERS 1 /* Qualifiers for send() and recv() */ -#define SEND_TYPE_ARG1 int -#define SEND_QUAL_ARG2 const -#define SEND_TYPE_ARG2 void * -#define SEND_TYPE_ARG3 int -#define SEND_TYPE_ARG4 int -#define SEND_TYPE_RETV int +#define SEND_TYPE_ARG1 int +#define SEND_QUAL_ARG2 const +#define SEND_TYPE_ARG2 void* +#define SEND_TYPE_ARG3 int +#define SEND_TYPE_ARG4 int +#define SEND_TYPE_RETV int -#define RECV_TYPE_ARG1 int -#define RECV_TYPE_ARG2 void * -#define RECV_TYPE_ARG3 int -#define RECV_TYPE_ARG4 int -#define RECV_TYPE_RETV int +#define RECV_TYPE_ARG1 int +#define RECV_TYPE_ARG2 void* +#define RECV_TYPE_ARG3 int +#define RECV_TYPE_ARG4 int +#define RECV_TYPE_RETV int #define BSD @@ -104,32 +103,31 @@ /* #define CURLDEBUG */ /* to disable LDAP */ -#define CURL_DISABLE_LDAP 1 +#define CURL_DISABLE_LDAP 1 -#define in_addr_t u_long +#define in_addr_t u_long -#if defined(__HIGHC__) || \ - (defined(__GNUC__) && (__GNUC__ < 4)) - #define ssize_t int +#if defined(__HIGHC__) || (defined(__GNUC__) && (__GNUC__ < 4)) +#define ssize_t int #endif /* Target HAVE_x section */ #if defined(DJGPP) - #define HAVE_BASENAME 1 - #define HAVE_STRCASECMP 1 - #define HAVE_SIGACTION 1 - #define HAVE_SIGSETJMP 1 - #define HAVE_SYS_TIME_H 1 - #define HAVE_TERMIOS_H 1 +#define HAVE_BASENAME 1 +#define HAVE_STRCASECMP 1 +#define HAVE_SIGACTION 1 +#define HAVE_SIGSETJMP 1 +#define HAVE_SYS_TIME_H 1 +#define HAVE_TERMIOS_H 1 #elif defined(__HIGHC__) - #define HAVE_SYS_TIME_H 1 - #define strerror(e) strerror_s_((e)) +#define HAVE_SYS_TIME_H 1 +#define strerror(e) strerror_s_((e)) #endif -#ifdef MSDOS /* Watt-32 */ - #define HAVE_CLOSE_S 1 +#ifdef MSDOS /* Watt-32 */ +#define HAVE_CLOSE_S 1 #endif #undef word diff --git a/vendor/hydra/vendor/curl/lib/config-mac.h b/vendor/hydra/vendor/curl/lib/config-mac.h index 53df87cb..ba5bbd0b 100644 --- a/vendor/hydra/vendor/curl/lib/config-mac.h +++ b/vendor/hydra/vendor/curl/lib/config-mac.h @@ -36,55 +36,55 @@ #include #if TYPE_LONGLONG -#define HAVE_LONGLONG 1 +#define HAVE_LONGLONG 1 #endif /* Define if you want the built-in manual */ -#define USE_MANUAL 1 +#define USE_MANUAL 1 -#define HAVE_NETINET_IN_H 1 -#define HAVE_SYS_SOCKET_H 1 -#define HAVE_NETDB_H 1 -#define HAVE_ARPA_INET_H 1 -#define HAVE_UNISTD_H 1 -#define HAVE_NET_IF_H 1 -#define HAVE_SYS_TYPES_H 1 -#define HAVE_GETTIMEOFDAY 1 -#define HAVE_FCNTL_H 1 -#define HAVE_SYS_STAT_H 1 -#define HAVE_UTIME_H 1 -#define HAVE_SYS_TIME_H 1 -#define HAVE_SYS_UTIME_H 1 -#define HAVE_SYS_IOCTL_H 1 -#define HAVE_ALARM 1 -#define HAVE_FTRUNCATE 1 -#define HAVE_UTIME 1 -#define HAVE_SELECT 1 -#define HAVE_SOCKET 1 -#define HAVE_STRUCT_TIMEVAL 1 +#define HAVE_NETINET_IN_H 1 +#define HAVE_SYS_SOCKET_H 1 +#define HAVE_NETDB_H 1 +#define HAVE_ARPA_INET_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_NET_IF_H 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_GETTIMEOFDAY 1 +#define HAVE_FCNTL_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_UTIME_H 1 +#define HAVE_SYS_TIME_H 1 +#define HAVE_SYS_UTIME_H 1 +#define HAVE_SYS_IOCTL_H 1 +#define HAVE_ALARM 1 +#define HAVE_FTRUNCATE 1 +#define HAVE_UTIME 1 +#define HAVE_SELECT 1 +#define HAVE_SOCKET 1 +#define HAVE_STRUCT_TIMEVAL 1 -#define HAVE_SIGACTION 1 +#define HAVE_SIGACTION 1 #ifdef MACOS_SSL_SUPPORT -# define USE_OPENSSL 1 +#define USE_OPENSSL 1 #endif -#define CURL_DISABLE_LDAP 1 +#define CURL_DISABLE_LDAP 1 -#define HAVE_IOCTL_FIONBIO 1 +#define HAVE_IOCTL_FIONBIO 1 -#define SIZEOF_INT 4 -#define SIZEOF_LONG 4 -#define SIZEOF_SIZE_T 4 +#define SIZEOF_INT 4 +#define SIZEOF_LONG 4 +#define SIZEOF_SIZE_T 4 #ifdef HAVE_LONGLONG -#define SIZEOF_CURL_OFF_T 8 +#define SIZEOF_CURL_OFF_T 8 #else -#define SIZEOF_CURL_OFF_T 4 +#define SIZEOF_CURL_OFF_T 4 #endif #define HAVE_RECV 1 #define RECV_TYPE_ARG1 int -#define RECV_TYPE_ARG2 void * +#define RECV_TYPE_ARG2 void* #define RECV_TYPE_ARG3 size_t #define RECV_TYPE_ARG4 int #define RECV_TYPE_RETV ssize_t @@ -92,12 +92,12 @@ #define HAVE_SEND 1 #define SEND_TYPE_ARG1 int #define SEND_QUAL_ARG2 const -#define SEND_TYPE_ARG2 void * +#define SEND_TYPE_ARG2 void* #define SEND_TYPE_ARG3 size_t #define SEND_TYPE_ARG4 int #define SEND_TYPE_RETV ssize_t #define HAVE_EXTRA_STRICMP_H 1 -#define HAVE_EXTRA_STRDUP_H 1 +#define HAVE_EXTRA_STRDUP_H 1 #endif /* HEADER_CURL_CONFIG_MAC_H */ diff --git a/vendor/hydra/vendor/curl/lib/config-os400.h b/vendor/hydra/vendor/curl/lib/config-os400.h index 29aa818f..95ad9777 100644 --- a/vendor/hydra/vendor/curl/lib/config-os400.h +++ b/vendor/hydra/vendor/curl/lib/config-os400.h @@ -137,7 +137,6 @@ /* Define if you have the `socket' function. */ #define HAVE_SOCKET - /* The following define is needed on OS400 to enable strcmpi(), stricmp() and strdup(). */ #define __cplusplus__strings__ @@ -164,7 +163,7 @@ #define HAVE_STRTOK_R /* Define if you have the `strtoll' function. */ -#undef HAVE_STRTOLL /* Allows ASCII compile on V5R1. */ +#undef HAVE_STRTOLL /* Allows ASCII compile on V5R1. */ /* Define if you have the header file. */ #define HAVE_SYS_PARAM_H @@ -206,22 +205,22 @@ #undef PACKAGE /* The size of `int', as computed by sizeof. */ -#define SIZEOF_INT 4 +#define SIZEOF_INT 4 /* Define if the compiler supports the 'long long' data type. */ #define HAVE_LONGLONG /* The size of a `long long', as computed by sizeof. */ -#define SIZEOF_LONG_LONG 8 +#define SIZEOF_LONG_LONG 8 /* The size of `long', as computed by sizeof. */ -#define SIZEOF_LONG 4 +#define SIZEOF_LONG 4 /* The size of `size_t', as computed by sizeof. */ -#define SIZEOF_SIZE_T 4 +#define SIZEOF_SIZE_T 4 /* The size of `curl_off_t', as computed by sizeof. */ -#define SIZEOF_CURL_OFF_T 8 +#define SIZEOF_CURL_OFF_T 8 /* Define this if you have struct sockaddr_storage */ #define HAVE_STRUCT_SOCKADDR_STORAGE @@ -246,7 +245,7 @@ #undef const /* type to use in place of in_addr_t if not defined */ -#define in_addr_t unsigned long +#define in_addr_t unsigned long /* Define to `unsigned' if does not define. */ #undef size_t @@ -264,7 +263,7 @@ #define CURL_EXTERN_SYMBOL /* Define if you have the ldap_url_parse procedure. */ -/* #define HAVE_LDAP_URL_PARSE */ /* Disabled because of an IBM bug. */ +/* #define HAVE_LDAP_URL_PARSE */ /* Disabled because of an IBM bug. */ /* Define if you have the recv function. */ #define HAVE_RECV @@ -273,7 +272,7 @@ #define RECV_TYPE_ARG1 int /* Define to the type of arg 2 for recv. */ -#define RECV_TYPE_ARG2 char * +#define RECV_TYPE_ARG2 char* /* Define to the type of arg 3 for recv. */ #define RECV_TYPE_ARG3 int @@ -294,7 +293,7 @@ #define SEND_QUAL_ARG2 /* Define to the type of arg 2 for send. */ -#define SEND_TYPE_ARG2 char * +#define SEND_TYPE_ARG2 char* /* Define to the type of arg 3 for send. */ #define SEND_TYPE_ARG3 int @@ -312,7 +311,7 @@ #define USE_UNIX_SOCKETS /* Use the system keyring as the default CA bundle. */ -#define CURL_CA_BUNDLE "/QIBM/UserData/ICSS/Cert/Server/DEFAULT.KDB" +#define CURL_CA_BUNDLE "/QIBM/UserData/ICSS/Cert/Server/DEFAULT.KDB" /* ---------------------------------------------------------------- */ /* ADDITIONAL DEFINITIONS */ @@ -320,9 +319,9 @@ /* The following must be defined BEFORE system header files inclusion. */ -#define __ptr128 /* No teraspace. */ -#define qadrt_use_fputc_inline /* Generate fputc() wrapper inline. */ -#define qadrt_use_fread_inline /* Generate fread() wrapper inline. */ -#define qadrt_use_fwrite_inline /* Generate fwrite() wrapper inline. */ +#define __ptr128 /* No teraspace. */ +#define qadrt_use_fputc_inline /* Generate fputc() wrapper inline. */ +#define qadrt_use_fread_inline /* Generate fread() wrapper inline. */ +#define qadrt_use_fwrite_inline /* Generate fwrite() wrapper inline. */ #endif /* HEADER_CURL_CONFIG_OS400_H */ diff --git a/vendor/hydra/vendor/curl/lib/config-plan9.h b/vendor/hydra/vendor/curl/lib/config-plan9.h index e56aca15..55b2f8ec 100644 --- a/vendor/hydra/vendor/curl/lib/config-plan9.h +++ b/vendor/hydra/vendor/curl/lib/config-plan9.h @@ -58,7 +58,7 @@ #define HAVE_RECV 1 #define RECV_TYPE_ARG1 int -#define RECV_TYPE_ARG2 void * +#define RECV_TYPE_ARG2 void* #define RECV_TYPE_ARG3 int #define RECV_TYPE_ARG4 int #define RECV_TYPE_RETV int @@ -67,7 +67,7 @@ #define HAVE_SEND 1 #define SEND_TYPE_ARG1 int -#define SEND_TYPE_ARG2 void * +#define SEND_TYPE_ARG2 void* #define SEND_QUAL_ARG2 #define SEND_TYPE_ARG3 int #define SEND_TYPE_ARG4 int diff --git a/vendor/hydra/vendor/curl/lib/config-riscos.h b/vendor/hydra/vendor/curl/lib/config-riscos.h index 580e822e..37935909 100644 --- a/vendor/hydra/vendor/curl/lib/config-riscos.h +++ b/vendor/hydra/vendor/curl/lib/config-riscos.h @@ -229,7 +229,7 @@ #define RECV_TYPE_ARG1 int /* Define to the type of arg 2 for recv. */ -#define RECV_TYPE_ARG2 void * +#define RECV_TYPE_ARG2 void* /* Define to the type of arg 3 for recv. */ #define RECV_TYPE_ARG3 size_t @@ -250,7 +250,7 @@ #define SEND_QUAL_ARG2 const /* Define to the type of arg 2 for send. */ -#define SEND_TYPE_ARG2 void * +#define SEND_TYPE_ARG2 void* /* Define to the type of arg 3 for send. */ #define SEND_TYPE_ARG3 size_t diff --git a/vendor/hydra/vendor/curl/lib/config-win32.h b/vendor/hydra/vendor/curl/lib/config-win32.h index d1341933..0c928df8 100644 --- a/vendor/hydra/vendor/curl/lib/config-win32.h +++ b/vendor/hydra/vendor/curl/lib/config-win32.h @@ -184,7 +184,7 @@ #define RECV_TYPE_ARG1 SOCKET /* Define to the type of arg 2 for recv. */ -#define RECV_TYPE_ARG2 char * +#define RECV_TYPE_ARG2 char* /* Define to the type of arg 3 for recv. */ #define RECV_TYPE_ARG3 int @@ -205,7 +205,7 @@ #define SEND_QUAL_ARG2 const /* Define to the type of arg 2 for send. */ -#define SEND_TYPE_ARG2 char * +#define SEND_TYPE_ARG2 char* /* Define to the type of arg 3 for send. */ #define SEND_TYPE_ARG3 int @@ -221,7 +221,7 @@ #define HAVE_SNPRINTF 1 #endif -#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x600 /* Vista */ +#if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x600 /* Vista */ /* Define to 1 if you have a IPv6 capable working inet_ntop function. */ #define HAVE_INET_NTOP 1 /* Define to 1 if you have a IPv6 capable working inet_pton function. */ @@ -250,14 +250,14 @@ /* Define if ssize_t is not an available 'typedefed' type. */ #ifndef _SSIZE_T_DEFINED -# if defined(__MINGW32__) -# elif defined(_WIN64) -# define _SSIZE_T_DEFINED -# define ssize_t __int64 -# else -# define _SSIZE_T_DEFINED -# define ssize_t int -# endif +#if defined(__MINGW32__) +#elif defined(_WIN64) +#define _SSIZE_T_DEFINED +#define ssize_t __int64 +#else +#define _SSIZE_T_DEFINED +#define ssize_t int +#endif #endif /* ---------------------------------------------------------------- */ @@ -275,9 +275,9 @@ /* Define to the size of `size_t', as computed by sizeof. */ #if defined(_WIN64) -# define SIZEOF_SIZE_T 8 +#define SIZEOF_SIZE_T 8 #else -# define SIZEOF_SIZE_T 4 +#define SIZEOF_SIZE_T 4 #endif /* Define to the size of `curl_off_t', as computed by sizeof. */ @@ -310,78 +310,78 @@ /* mingw-w64 and visual studio >= 2005 (MSVCR80) all default to 64-bit time_t unless _USE_32BIT_TIME_T is defined */ #if (defined(_MSC_VER) && (_MSC_VER >= 1400)) || defined(__MINGW32__) -# ifndef _USE_32BIT_TIME_T -# define SIZEOF_TIME_T 8 -# else -# define SIZEOF_TIME_T 4 -# endif +#ifndef _USE_32BIT_TIME_T +#define SIZEOF_TIME_T 8 +#else +#define SIZEOF_TIME_T 4 +#endif #endif /* Define some minimum and default build targets for Visual Studio */ #if defined(_MSC_VER) - /* Officially, Microsoft's Windows SDK versions 6.X does not support Windows - 2000 as a supported build target. VS2008 default installations provides - an embedded Windows SDK v6.0A along with the claim that Windows 2000 is a - valid build target for VS2008. Popular belief is that binaries built with - VS2008 using Windows SDK versions v6.X and Windows 2000 as a build target - are functional. */ -# define VS2008_MIN_TARGET 0x0500 - - /* The minimum build target for VS2012 is Vista unless Update 1 is installed - and the v110_xp toolset is chosen. */ -# if defined(_USING_V110_SDK71_) -# define VS2012_MIN_TARGET 0x0501 -# else -# define VS2012_MIN_TARGET 0x0600 -# endif - - /* VS2008 default build target is Windows Vista. We override default target - to be Windows XP. */ -# define VS2008_DEF_TARGET 0x0501 - - /* VS2012 default build target is Windows Vista unless Update 1 is installed - and the v110_xp toolset is chosen. */ -# if defined(_USING_V110_SDK71_) -# define VS2012_DEF_TARGET 0x0501 -# else -# define VS2012_DEF_TARGET 0x0600 -# endif +/* Officially, Microsoft's Windows SDK versions 6.X does not support Windows + 2000 as a supported build target. VS2008 default installations provides + an embedded Windows SDK v6.0A along with the claim that Windows 2000 is a + valid build target for VS2008. Popular belief is that binaries built with + VS2008 using Windows SDK versions v6.X and Windows 2000 as a build target + are functional. */ +#define VS2008_MIN_TARGET 0x0500 + +/* The minimum build target for VS2012 is Vista unless Update 1 is installed + and the v110_xp toolset is chosen. */ +#if defined(_USING_V110_SDK71_) +#define VS2012_MIN_TARGET 0x0501 +#else +#define VS2012_MIN_TARGET 0x0600 +#endif + +/* VS2008 default build target is Windows Vista. We override default target + to be Windows XP. */ +#define VS2008_DEF_TARGET 0x0501 + +/* VS2012 default build target is Windows Vista unless Update 1 is installed + and the v110_xp toolset is chosen. */ +#if defined(_USING_V110_SDK71_) +#define VS2012_DEF_TARGET 0x0501 +#else +#define VS2012_DEF_TARGET 0x0600 +#endif #endif /* VS2008 default target settings and minimum build target check. */ #if defined(_MSC_VER) && (_MSC_VER >= 1500) && (_MSC_VER <= 1600) -# ifndef _WIN32_WINNT -# define _WIN32_WINNT VS2008_DEF_TARGET -# endif -# ifndef WINVER -# define WINVER VS2008_DEF_TARGET -# endif -# if (_WIN32_WINNT < VS2008_MIN_TARGET) || (WINVER < VS2008_MIN_TARGET) -# error VS2008 does not support Windows build targets prior to Windows 2000 -# endif +#ifndef _WIN32_WINNT +#define _WIN32_WINNT VS2008_DEF_TARGET +#endif +#ifndef WINVER +#define WINVER VS2008_DEF_TARGET +#endif +#if (_WIN32_WINNT < VS2008_MIN_TARGET) || (WINVER < VS2008_MIN_TARGET) +#error VS2008 does not support Windows build targets prior to Windows 2000 +#endif #endif /* VS2012 default target settings and minimum build target check. */ #if defined(_MSC_VER) && (_MSC_VER >= 1700) -# ifndef _WIN32_WINNT -# define _WIN32_WINNT VS2012_DEF_TARGET -# endif -# ifndef WINVER -# define WINVER VS2012_DEF_TARGET -# endif -# if (_WIN32_WINNT < VS2012_MIN_TARGET) || (WINVER < VS2012_MIN_TARGET) -# if defined(_USING_V110_SDK71_) -# error VS2012 does not support Windows build targets prior to Windows XP -# else -# error VS2012 does not support Windows build targets prior to Windows \ +#ifndef _WIN32_WINNT +#define _WIN32_WINNT VS2012_DEF_TARGET +#endif +#ifndef WINVER +#define WINVER VS2012_DEF_TARGET +#endif +#if (_WIN32_WINNT < VS2012_MIN_TARGET) || (WINVER < VS2012_MIN_TARGET) +#if defined(_USING_V110_SDK71_) +#error VS2012 does not support Windows build targets prior to Windows XP +#else +#error VS2012 does not support Windows build targets prior to Windows \ Vista -# endif -# endif +#endif +#endif #endif /* Windows XP is required for freeaddrinfo, getaddrinfo */ -#define HAVE_FREEADDRINFO 1 -#define HAVE_GETADDRINFO 1 +#define HAVE_FREEADDRINFO 1 +#define HAVE_GETADDRINFO 1 #define HAVE_GETADDRINFO_THREADSAFE 1 /* ---------------------------------------------------------------- */ @@ -402,26 +402,26 @@ Vista /* ---------------------------------------------------------------- */ #if defined(_MSC_VER) && !defined(_WIN32_WCE) -# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) -# define USE_WIN32_LARGE_FILES -# else -# define USE_WIN32_SMALL_FILES -# endif +#if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +#define USE_WIN32_LARGE_FILES +#else +#define USE_WIN32_SMALL_FILES +#endif #endif #if defined(__MINGW32__) && !defined(USE_WIN32_LARGE_FILES) -# define USE_WIN32_LARGE_FILES +#define USE_WIN32_LARGE_FILES #endif #if !defined(USE_WIN32_LARGE_FILES) && !defined(USE_WIN32_SMALL_FILES) -# define USE_WIN32_SMALL_FILES +#define USE_WIN32_SMALL_FILES #endif /* Number of bits in a file offset, on hosts where this is settable. */ #if defined(USE_WIN32_LARGE_FILES) && defined(__MINGW32__) -# ifndef _FILE_OFFSET_BITS -# define _FILE_OFFSET_BITS 64 -# endif +#ifndef _FILE_OFFSET_BITS +#define _FILE_OFFSET_BITS 64 +#endif #endif #ifdef USE_WIN32_LARGE_FILES @@ -429,11 +429,11 @@ Vista #endif /* Define to the size of `off_t', as computed by sizeof. */ -#if defined(__MINGW32__) && \ - defined(_FILE_OFFSET_BITS) && (_FILE_OFFSET_BITS == 64) -# define SIZEOF_OFF_T 8 +#if defined(__MINGW32__) && defined(_FILE_OFFSET_BITS) && \ + (_FILE_OFFSET_BITS == 64) +#define SIZEOF_OFF_T 8 #else -# define SIZEOF_OFF_T 4 +#define SIZEOF_OFF_T 4 #endif /* ---------------------------------------------------------------- */ @@ -448,13 +448,12 @@ Vista /* #define USE_ARES 1 */ /* Default define to enable threaded asynchronous DNS lookups. */ -#if !defined(USE_SYNC_DNS) && !defined(USE_ARES) && \ - !defined(USE_THREADS_WIN32) -# define USE_THREADS_WIN32 1 +#if !defined(USE_SYNC_DNS) && !defined(USE_ARES) && !defined(USE_THREADS_WIN32) +#define USE_THREADS_WIN32 1 #endif #if defined(USE_ARES) && defined(USE_THREADS_WIN32) -# error "Only one DNS lookup specialty may be defined at most" +#error "Only one DNS lookup specialty may be defined at most" #endif /* ---------------------------------------------------------------- */ diff --git a/vendor/hydra/vendor/curl/lib/config-win32ce.h b/vendor/hydra/vendor/curl/lib/config-win32ce.h index 800fc61c..aa7c68cb 100644 --- a/vendor/hydra/vendor/curl/lib/config-win32ce.h +++ b/vendor/hydra/vendor/curl/lib/config-win32ce.h @@ -202,9 +202,9 @@ /* The size of `size_t', as computed by sizeof. */ #if defined(_WIN64) -# define SIZEOF_SIZE_T 8 +#define SIZEOF_SIZE_T 8 #else -# define SIZEOF_SIZE_T 4 +#define SIZEOF_SIZE_T 4 #endif /* ---------------------------------------------------------------- */ @@ -236,11 +236,11 @@ /* VS2005 and later default size for time_t is 64-bit, unless */ /* _USE_32BIT_TIME_T has been defined to get a 32-bit time_t. */ #if defined(_MSC_VER) && (_MSC_VER >= 1400) -# ifndef _USE_32BIT_TIME_T -# define SIZEOF_TIME_T 8 -# else -# define SIZEOF_TIME_T 4 -# endif +#ifndef _USE_32BIT_TIME_T +#define SIZEOF_TIME_T 8 +#else +#define SIZEOF_TIME_T 4 +#endif #endif /* ---------------------------------------------------------------- */ @@ -248,15 +248,15 @@ /* ---------------------------------------------------------------- */ #if defined(_MSC_VER) && !defined(_WIN32_WCE) -# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) -# define USE_WIN32_LARGE_FILES -# else -# define USE_WIN32_SMALL_FILES -# endif +#if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64) +#define USE_WIN32_LARGE_FILES +#else +#define USE_WIN32_SMALL_FILES +#endif #endif #if !defined(USE_WIN32_LARGE_FILES) && !defined(USE_WIN32_SMALL_FILES) -# define USE_WIN32_SMALL_FILES +#define USE_WIN32_SMALL_FILES #endif /* ---------------------------------------------------------------- */ @@ -283,11 +283,11 @@ /* ---------------------------------------------------------------- */ #ifndef UNICODE -# define UNICODE +#define UNICODE #endif #ifndef _UNICODE -# define _UNICODE +#define _UNICODE #endif #define CURL_DISABLE_FILE 1 diff --git a/vendor/hydra/vendor/curl/lib/conncache.h b/vendor/hydra/vendor/curl/lib/conncache.h index a379ee74..0b7ed372 100644 --- a/vendor/hydra/vendor/curl/lib/conncache.h +++ b/vendor/hydra/vendor/curl/lib/conncache.h @@ -26,6 +26,7 @@ ***************************************************************************/ #include + #include "timeval.h" struct connectdata; @@ -44,20 +45,19 @@ struct Curl_share; * a shutdown and just close. **/ typedef bool Curl_cpool_disconnect_cb(struct Curl_easy *data, - struct connectdata *conn, - bool aborted); + struct connectdata *conn, bool aborted); struct cpool { - /* the pooled connections, bundled per destination */ + /* the pooled connections, bundled per destination */ struct Curl_hash dest2bundle; size_t num_conn; curl_off_t next_connection_id; curl_off_t next_easy_id; struct curltime last_cleanup; - struct Curl_llist shutdowns; /* The connections being shut down */ - struct Curl_easy *idata; /* internal handle used for discard */ - struct Curl_multi *multi; /* != NULL iff pool belongs to multi */ - struct Curl_share *share; /* != NULL iff pool belongs to share */ + struct Curl_llist shutdowns; /* The connections being shut down */ + struct Curl_easy *idata; /* internal handle used for discard */ + struct Curl_multi *multi; /* != NULL iff pool belongs to multi */ + struct Curl_share *share; /* != NULL iff pool belongs to share */ Curl_cpool_disconnect_cb *disconnect_cb; BIT(locked); }; @@ -67,8 +67,7 @@ struct cpool { */ int Curl_cpool_init(struct cpool *cpool, Curl_cpool_disconnect_cb *disconnect_cb, - struct Curl_multi *multi, - struct Curl_share *share, + struct Curl_multi *multi, struct Curl_share *share, size_t size); /* Destroy all connections and free all members */ @@ -92,15 +91,13 @@ CURLcode Curl_cpool_add_conn(struct Curl_easy *data, * the given connection. Will try to discard the oldest, idle * connections to make space. */ -#define CPOOL_LIMIT_OK 0 -#define CPOOL_LIMIT_DEST 1 -#define CPOOL_LIMIT_TOTAL 2 -int Curl_cpool_check_limits(struct Curl_easy *data, - struct connectdata *conn); +#define CPOOL_LIMIT_OK 0 +#define CPOOL_LIMIT_DEST 1 +#define CPOOL_LIMIT_TOTAL 2 +int Curl_cpool_check_limits(struct Curl_easy *data, struct connectdata *conn); /* Return of conn is suitable. If so, stops iteration. */ -typedef bool Curl_cpool_conn_match_cb(struct connectdata *conn, - void *userdata); +typedef bool Curl_cpool_conn_match_cb(struct connectdata *conn, void *userdata); /* Act on the result of the find, may override it. */ typedef bool Curl_cpool_done_match_cb(bool result, void *userdata); @@ -118,11 +115,9 @@ typedef bool Curl_cpool_done_match_cb(bool result, void *userdata); * @return combined result of last conn_db and result_cb or FALSE if no connections were present. */ -bool Curl_cpool_find(struct Curl_easy *data, - const char *destination, size_t dest_len, - Curl_cpool_conn_match_cb *conn_cb, - Curl_cpool_done_match_cb *done_cb, - void *userdata); +bool Curl_cpool_find(struct Curl_easy *data, const char *destination, + size_t dest_len, Curl_cpool_conn_match_cb *conn_cb, + Curl_cpool_done_match_cb *done_cb, void *userdata); /* * A connection (already in the pool) is now idle. Do any @@ -130,8 +125,7 @@ bool Curl_cpool_find(struct Curl_easy *data, * * Return TRUE if idle connection kept in pool, FALSE if closed. */ -bool Curl_cpool_conn_now_idle(struct Curl_easy *data, - struct connectdata *conn); +bool Curl_cpool_conn_now_idle(struct Curl_easy *data, struct connectdata *conn); /** * Remove the connection from the pool and tear it down. @@ -140,8 +134,7 @@ bool Curl_cpool_conn_now_idle(struct Curl_easy *data, * If the shutdown is not immediately complete, the connection * will be placed into the pool's shutdown queue. */ -void Curl_cpool_disconnect(struct Curl_easy *data, - struct connectdata *conn, +void Curl_cpool_disconnect(struct Curl_easy *data, struct connectdata *conn, bool aborted); /** @@ -159,15 +152,13 @@ void Curl_cpool_prune_dead(struct Curl_easy *data); CURLcode Curl_cpool_upkeep(void *data); typedef void Curl_cpool_conn_do_cb(struct connectdata *conn, - struct Curl_easy *data, - void *cbdata); + struct Curl_easy *data, void *cbdata); /** * Invoke the callback on the pool's connection with the * given connection id (if it exists). */ -void Curl_cpool_do_by_id(struct Curl_easy *data, - curl_off_t conn_id, +void Curl_cpool_do_by_id(struct Curl_easy *data, curl_off_t conn_id, Curl_cpool_conn_do_cb *cb, void *cbdata); /** @@ -176,8 +167,7 @@ void Curl_cpool_do_by_id(struct Curl_easy *data, * The callback is always invoked, even if the transfer has no connection * pool associated. */ -void Curl_cpool_do_locked(struct Curl_easy *data, - struct connectdata *conn, +void Curl_cpool_do_locked(struct Curl_easy *data, struct connectdata *conn, Curl_cpool_conn_do_cb *cb, void *cbdata); /** @@ -194,8 +184,7 @@ CURLcode Curl_cpool_add_waitfds(struct cpool *connc, */ void Curl_cpool_multi_perform(struct Curl_multi *multi); -void Curl_cpool_multi_socket(struct Curl_multi *multi, - curl_socket_t s, int ev_bitmask); - +void Curl_cpool_multi_socket(struct Curl_multi *multi, curl_socket_t s, + int ev_bitmask); #endif /* HEADER_CURL_CONNCACHE_H */ diff --git a/vendor/hydra/vendor/curl/lib/connect.h b/vendor/hydra/vendor/curl/lib/connect.h index 160db942..0bfa5497 100644 --- a/vendor/hydra/vendor/curl/lib/connect.h +++ b/vendor/hydra/vendor/curl/lib/connect.h @@ -24,7 +24,6 @@ * ***************************************************************************/ #include "curl_setup.h" - #include "nonblock.h" /* for curlx_nonblock(), formerly Curl_nonblock() */ #include "sockaddr.h" #include "timeval.h" @@ -34,13 +33,12 @@ struct ip_quadruple; /* generic function that returns how much time there is left to run, according to the timeouts set */ -timediff_t Curl_timeleft(struct Curl_easy *data, - struct curltime *nowp, +timediff_t Curl_timeleft(struct Curl_easy *data, struct curltime *nowp, bool duringconnect); #define DEFAULT_CONNECT_TIMEOUT 300000 /* milliseconds == five minutes */ -#define DEFAULT_SHUTDOWN_TIMEOUT_MS (2 * 1000) +#define DEFAULT_SHUTDOWN_TIMEOUT_MS (2 * 1000) void Curl_shutdown_start(struct Curl_easy *data, int sockindex, struct curltime *nowp); @@ -69,8 +67,8 @@ bool Curl_shutdown_started(struct Curl_easy *data, int sockindex); curl_socket_t Curl_getconnectinfo(struct Curl_easy *data, struct connectdata **connp); -bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen, - char *addr, int *port); +bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen, char *addr, + int *port); /* * Curl_conncontrol() marks the end of a connection/stream. The 'closeit' @@ -88,21 +86,21 @@ bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen, #define CONNCTRL_CONNECTION 1 #define CONNCTRL_STREAM 2 -void Curl_conncontrol(struct connectdata *conn, - int closeit +void Curl_conncontrol(struct connectdata *conn, int closeit #if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS) - , const char *reason + , + const char *reason #endif - ); +); #if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS) -#define streamclose(x,y) Curl_conncontrol(x, CONNCTRL_STREAM, y) -#define connclose(x,y) Curl_conncontrol(x, CONNCTRL_CONNECTION, y) -#define connkeep(x,y) Curl_conncontrol(x, CONNCTRL_KEEP, y) +#define streamclose(x, y) Curl_conncontrol(x, CONNCTRL_STREAM, y) +#define connclose(x, y) Curl_conncontrol(x, CONNCTRL_CONNECTION, y) +#define connkeep(x, y) Curl_conncontrol(x, CONNCTRL_KEEP, y) #else /* if !DEBUGBUILD || CURL_DISABLE_VERBOSE_STRINGS */ -#define streamclose(x,y) Curl_conncontrol(x, CONNCTRL_STREAM) -#define connclose(x,y) Curl_conncontrol(x, CONNCTRL_CONNECTION) -#define connkeep(x,y) Curl_conncontrol(x, CONNCTRL_KEEP) +#define streamclose(x, y) Curl_conncontrol(x, CONNCTRL_STREAM) +#define connclose(x, y) Curl_conncontrol(x, CONNCTRL_CONNECTION) +#define connkeep(x, y) Curl_conncontrol(x, CONNCTRL_KEEP) #endif /** @@ -125,18 +123,15 @@ typedef CURLcode cf_ip_connect_create(struct Curl_cfilter **pcf, CURLcode Curl_cf_setup_insert_after(struct Curl_cfilter *cf_at, struct Curl_easy *data, const struct Curl_dns_entry *remotehost, - int transport, - int ssl_mode); + int transport, int ssl_mode); /** * Setup the cfilters at `sockindex` in connection `conn`. * If no filter chain is installed yet, inspects the configuration * in `data` and `conn? to install a suitable filter chain. */ -CURLcode Curl_conn_setup(struct Curl_easy *data, - struct connectdata *conn, - int sockindex, - const struct Curl_dns_entry *remotehost, +CURLcode Curl_conn_setup(struct Curl_easy *data, struct connectdata *conn, + int sockindex, const struct Curl_dns_entry *remotehost, int ssl_mode); extern struct Curl_cftype Curl_cft_happy_eyeballs; diff --git a/vendor/hydra/vendor/curl/lib/cookie.h b/vendor/hydra/vendor/curl/lib/cookie.h index 838d74d8..fe46a0d2 100644 --- a/vendor/hydra/vendor/curl/lib/cookie.h +++ b/vendor/hydra/vendor/curl/lib/cookie.h @@ -23,23 +23,23 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -#include "curl_setup.h" - #include +#include "curl_setup.h" + struct Cookie { - struct Cookie *next; /* next in the chain */ - char *name; /* = value */ - char *value; /* name = */ - char *path; /* path = which is in Set-Cookie: */ - char *spath; /* sanitized cookie path */ - char *domain; /* domain = */ - curl_off_t expires; /* expires = */ - bool tailmatch; /* whether we do tail-matching of the domain name */ - bool secure; /* whether the 'secure' keyword was used */ - bool livecookie; /* updated from a server, not a stored file */ - bool httponly; /* true if the httponly directive is present */ - int creationtime; /* time when the cookie was written */ + struct Cookie *next; /* next in the chain */ + char *name; /* = value */ + char *value; /* name = */ + char *path; /* path = which is in Set-Cookie: */ + char *spath; /* sanitized cookie path */ + char *domain; /* domain = */ + curl_off_t expires; /* expires = */ + bool tailmatch; /* whether we do tail-matching of the domain name */ + bool secure; /* whether the 'secure' keyword was used */ + bool livecookie; /* updated from a server, not a stored file */ + bool httponly; /* true if the httponly directive is present */ + int creationtime; /* time when the cookie was written */ unsigned char prefix; /* bitmap fields indicating which prefix are set */ }; @@ -47,8 +47,8 @@ struct Cookie { * Available cookie prefixes, as defined in * draft-ietf-httpbis-rfc6265bis-02 */ -#define COOKIE_PREFIX__SECURE (1<<0) -#define COOKIE_PREFIX__HOST (1<<1) +#define COOKIE_PREFIX__SECURE (1 << 0) +#define COOKIE_PREFIX__HOST (1 << 1) #define COOKIE_HASH_SIZE 63 @@ -56,10 +56,10 @@ struct CookieInfo { /* linked list of cookies we know of */ struct Cookie *cookies[COOKIE_HASH_SIZE]; curl_off_t next_expiration; /* the next time at which expiration happens */ - int numcookies; /* number of cookies in the "jar" */ - int lastct; /* last creation-time used in the jar */ - bool running; /* state info, for cookie adding information */ - bool newsession; /* new session, discard session cookies on load */ + int numcookies; /* number of cookies in the "jar" */ + int lastct; /* last creation-time used in the jar */ + bool running; /* state info, for cookie adding information */ + bool newsession; /* new session, discard session cookies on load */ }; /* The maximum sizes we accept for cookies. RFC 6265 section 6.1 says @@ -106,15 +106,14 @@ struct Curl_easy; * are only used if the header boolean is TRUE. */ -struct Cookie *Curl_cookie_add(struct Curl_easy *data, - struct CookieInfo *c, bool header, - bool noexpiry, const char *lineptr, +struct Cookie *Curl_cookie_add(struct Curl_easy *data, struct CookieInfo *c, + bool header, bool noexpiry, const char *lineptr, const char *domain, const char *path, bool secure); -struct Cookie *Curl_cookie_getlist(struct Curl_easy *data, - struct CookieInfo *c, const char *host, - const char *path, bool secure); +struct Cookie *Curl_cookie_getlist(struct Curl_easy *data, struct CookieInfo *c, + const char *host, const char *path, + bool secure); void Curl_cookie_freelist(struct Cookie *cookies); void Curl_cookie_clearall(struct CookieInfo *cookies); void Curl_cookie_clearsess(struct CookieInfo *cookies); @@ -122,15 +121,14 @@ void Curl_cookie_clearsess(struct CookieInfo *cookies); #if defined(CURL_DISABLE_HTTP) || defined(CURL_DISABLE_COOKIES) #define Curl_cookie_list(x) NULL #define Curl_cookie_loadfiles(x) Curl_nop_stmt -#define Curl_cookie_init(x,y,z,w) NULL +#define Curl_cookie_init(x, y, z, w) NULL #define Curl_cookie_cleanup(x) Curl_nop_stmt -#define Curl_flush_cookies(x,y) Curl_nop_stmt +#define Curl_flush_cookies(x, y) Curl_nop_stmt #else void Curl_flush_cookies(struct Curl_easy *data, bool cleanup); void Curl_cookie_cleanup(struct CookieInfo *c); -struct CookieInfo *Curl_cookie_init(struct Curl_easy *data, - const char *file, struct CookieInfo *inc, - bool newsession); +struct CookieInfo *Curl_cookie_init(struct Curl_easy *data, const char *file, + struct CookieInfo *inc, bool newsession); struct curl_slist *Curl_cookie_list(struct Curl_easy *data); void Curl_cookie_loadfiles(struct Curl_easy *data); #endif diff --git a/vendor/hydra/vendor/curl/lib/curl_addrinfo.h b/vendor/hydra/vendor/curl/lib/curl_addrinfo.h index 9ceac997..6c5ade7d 100644 --- a/vendor/hydra/vendor/curl/lib/curl_addrinfo.h +++ b/vendor/hydra/vendor/curl/lib/curl_addrinfo.h @@ -27,19 +27,19 @@ #include "curl_setup.h" #ifdef HAVE_NETINET_IN_H -# include +#include #endif #ifdef HAVE_NETDB_H -# include +#include #endif #ifdef HAVE_ARPA_INET_H -# include +#include #endif #ifdef __VMS -# include -# include -# include +#include +#include +#include #endif /* @@ -50,32 +50,28 @@ */ struct Curl_addrinfo { - int ai_flags; - int ai_family; - int ai_socktype; - int ai_protocol; - curl_socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */ - char *ai_canonname; - struct sockaddr *ai_addr; + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + curl_socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */ + char *ai_canonname; + struct sockaddr *ai_addr; struct Curl_addrinfo *ai_next; }; -void -Curl_freeaddrinfo(struct Curl_addrinfo *cahead); +void Curl_freeaddrinfo(struct Curl_addrinfo *cahead); #ifdef HAVE_GETADDRINFO -int -Curl_getaddrinfo_ex(const char *nodename, - const char *servname, - const struct addrinfo *hints, - struct Curl_addrinfo **result); +int Curl_getaddrinfo_ex(const char *nodename, const char *servname, + const struct addrinfo *hints, + struct Curl_addrinfo **result); #endif -struct Curl_addrinfo * -Curl_he2ai(const struct hostent *he, int port); +struct Curl_addrinfo *Curl_he2ai(const struct hostent *he, int port); -struct Curl_addrinfo * -Curl_ip2addr(int af, const void *inaddr, const char *hostname, int port); +struct Curl_addrinfo *Curl_ip2addr(int af, const void *inaddr, + const char *hostname, int port); struct Curl_addrinfo *Curl_str2addr(char *dotted, int port); @@ -86,22 +82,21 @@ struct Curl_addrinfo *Curl_unix2addr(const char *path, bool *longpath, #if defined(CURLDEBUG) && defined(HAVE_GETADDRINFO) && \ defined(HAVE_FREEADDRINFO) -void -curl_dbg_freeaddrinfo(struct addrinfo *freethis, int line, const char *source); +void curl_dbg_freeaddrinfo(struct addrinfo *freethis, int line, + const char *source); #endif #if defined(CURLDEBUG) && defined(HAVE_GETADDRINFO) -int -curl_dbg_getaddrinfo(const char *hostname, const char *service, - const struct addrinfo *hints, struct addrinfo **result, - int line, const char *source); +int curl_dbg_getaddrinfo(const char *hostname, const char *service, + const struct addrinfo *hints, struct addrinfo **result, + int line, const char *source); #endif #ifdef HAVE_GETADDRINFO #ifdef USE_RESOLVE_ON_IPS void Curl_addrinfo_set_port(struct Curl_addrinfo *addrinfo, int port); #else -#define Curl_addrinfo_set_port(x,y) +#define Curl_addrinfo_set_port(x, y) #endif #endif diff --git a/vendor/hydra/vendor/curl/lib/curl_base64.h b/vendor/hydra/vendor/curl/lib/curl_base64.h index 7f7cd1d9..49eac989 100644 --- a/vendor/hydra/vendor/curl/lib/curl_base64.h +++ b/vendor/hydra/vendor/curl/lib/curl_base64.h @@ -27,15 +27,15 @@ #ifndef BUILDING_LIBCURL /* this renames functions so that the tool code can use the same code without getting symbol collisions */ -#define Curl_base64_encode(a,b,c,d) curlx_base64_encode(a,b,c,d) -#define Curl_base64url_encode(a,b,c,d) curlx_base64url_encode(a,b,c,d) -#define Curl_base64_decode(a,b,c) curlx_base64_decode(a,b,c) +#define Curl_base64_encode(a, b, c, d) curlx_base64_encode(a, b, c, d) +#define Curl_base64url_encode(a, b, c, d) curlx_base64url_encode(a, b, c, d) +#define Curl_base64_decode(a, b, c) curlx_base64_decode(a, b, c) #endif -CURLcode Curl_base64_encode(const char *inputbuff, size_t insize, - char **outptr, size_t *outlen); +CURLcode Curl_base64_encode(const char *inputbuff, size_t insize, char **outptr, + size_t *outlen); CURLcode Curl_base64url_encode(const char *inputbuff, size_t insize, char **outptr, size_t *outlen); -CURLcode Curl_base64_decode(const char *src, - unsigned char **outptr, size_t *outlen); +CURLcode Curl_base64_decode(const char *src, unsigned char **outptr, + size_t *outlen); #endif /* HEADER_CURL_BASE64_H */ diff --git a/vendor/hydra/vendor/curl/lib/curl_ctype.h b/vendor/hydra/vendor/curl/lib/curl_ctype.h index 7f0d0cc2..69bc3bf8 100644 --- a/vendor/hydra/vendor/curl/lib/curl_ctype.h +++ b/vendor/hydra/vendor/curl/lib/curl_ctype.h @@ -32,20 +32,19 @@ #define ISLOWPRINT(x) (((x) >= 9) && ((x) <= 0x0d)) -#define ISPRINT(x) (ISLOWPRINT(x) || (((x) >= ' ') && ((x) <= 0x7e))) -#define ISGRAPH(x) (ISLOWPRINT(x) || (((x) > ' ') && ((x) <= 0x7e))) +#define ISPRINT(x) (ISLOWPRINT(x) || (((x) >= ' ') && ((x) <= 0x7e))) +#define ISGRAPH(x) (ISLOWPRINT(x) || (((x) > ' ') && ((x) <= 0x7e))) #define ISCNTRL(x) (ISLOWCNTRL(x) || IS7F(x)) #define ISALPHA(x) (ISLOWER(x) || ISUPPER(x)) #define ISXDIGIT(x) (ISDIGIT(x) || ISLOWHEXALHA(x) || ISUPHEXALHA(x)) -#define ISALNUM(x) (ISDIGIT(x) || ISLOWER(x) || ISUPPER(x)) -#define ISUPPER(x) (((x) >= 'A') && ((x) <= 'Z')) -#define ISLOWER(x) (((x) >= 'a') && ((x) <= 'z')) -#define ISDIGIT(x) (((x) >= '0') && ((x) <= '9')) -#define ISBLANK(x) (((x) == ' ') || ((x) == '\t')) -#define ISSPACE(x) (ISBLANK(x) || (((x) >= 0xa) && ((x) <= 0x0d))) -#define ISURLPUNTCS(x) (((x) == '-') || ((x) == '.') || ((x) == '_') || \ - ((x) == '~')) +#define ISALNUM(x) (ISDIGIT(x) || ISLOWER(x) || ISUPPER(x)) +#define ISUPPER(x) (((x) >= 'A') && ((x) <= 'Z')) +#define ISLOWER(x) (((x) >= 'a') && ((x) <= 'z')) +#define ISDIGIT(x) (((x) >= '0') && ((x) <= '9')) +#define ISBLANK(x) (((x) == ' ') || ((x) == '\t')) +#define ISSPACE(x) (ISBLANK(x) || (((x) >= 0xa) && ((x) <= 0x0d))) +#define ISURLPUNTCS(x) \ + (((x) == '-') || ((x) == '.') || ((x) == '_') || ((x) == '~')) #define ISUNRESERVED(x) (ISALNUM(x) || ISURLPUNTCS(x)) - #endif /* HEADER_CURL_CTYPE_H */ diff --git a/vendor/hydra/vendor/curl/lib/curl_des.h b/vendor/hydra/vendor/curl/lib/curl_des.h index 2dd498da..1ae8a2c8 100644 --- a/vendor/hydra/vendor/curl/lib/curl_des.h +++ b/vendor/hydra/vendor/curl/lib/curl_des.h @@ -26,11 +26,9 @@ #include "curl_setup.h" -#if defined(USE_CURL_NTLM_CORE) && \ - (defined(USE_GNUTLS) || \ - defined(USE_SECTRANSP) || \ - defined(USE_OS400CRYPTO) || \ - defined(USE_WIN32_CRYPTO)) +#if defined(USE_CURL_NTLM_CORE) && \ + (defined(USE_GNUTLS) || defined(USE_SECTRANSP) || \ + defined(USE_OS400CRYPTO) || defined(USE_WIN32_CRYPTO)) /* Applies odd parity to the given byte array */ void Curl_des_set_odd_parity(unsigned char *bytes, size_t length); diff --git a/vendor/hydra/vendor/curl/lib/curl_fnmatch.h b/vendor/hydra/vendor/curl/lib/curl_fnmatch.h index b8c2a435..3c5bf3ff 100644 --- a/vendor/hydra/vendor/curl/lib/curl_fnmatch.h +++ b/vendor/hydra/vendor/curl/lib/curl_fnmatch.h @@ -24,9 +24,9 @@ * ***************************************************************************/ -#define CURL_FNMATCH_MATCH 0 -#define CURL_FNMATCH_NOMATCH 1 -#define CURL_FNMATCH_FAIL 2 +#define CURL_FNMATCH_MATCH 0 +#define CURL_FNMATCH_NOMATCH 1 +#define CURL_FNMATCH_FAIL 2 /* default pattern matching function * ================================= diff --git a/vendor/hydra/vendor/curl/lib/curl_gethostname.h b/vendor/hydra/vendor/curl/lib/curl_gethostname.h index 9281d9c2..a7575204 100644 --- a/vendor/hydra/vendor/curl/lib/curl_gethostname.h +++ b/vendor/hydra/vendor/curl/lib/curl_gethostname.h @@ -28,6 +28,6 @@ #define HOSTNAME_MAX 1024 /* This returns the local machine's un-qualified hostname */ -int Curl_gethostname(char * const name, GETHOSTNAME_TYPE_ARG2 namelen); +int Curl_gethostname(char* const name, GETHOSTNAME_TYPE_ARG2 namelen); #endif /* HEADER_CURL_GETHOSTNAME_H */ diff --git a/vendor/hydra/vendor/curl/lib/curl_gssapi.h b/vendor/hydra/vendor/curl/lib/curl_gssapi.h index 7b9a534e..eb7994ef 100644 --- a/vendor/hydra/vendor/curl/lib/curl_gssapi.h +++ b/vendor/hydra/vendor/curl/lib/curl_gssapi.h @@ -33,16 +33,10 @@ extern gss_OID_desc Curl_krb5_mech_oid; /* Common method for using GSS-API */ OM_uint32 Curl_gss_init_sec_context( - struct Curl_easy *data, - OM_uint32 *minor_status, - gss_ctx_id_t *context, - gss_name_t target_name, - gss_OID mech_type, - gss_channel_bindings_t input_chan_bindings, - gss_buffer_t input_token, - gss_buffer_t output_token, - const bool mutual_auth, - OM_uint32 *ret_flags); + struct Curl_easy *data, OM_uint32 *minor_status, gss_ctx_id_t *context, + gss_name_t target_name, gss_OID mech_type, + gss_channel_bindings_t input_chan_bindings, gss_buffer_t input_token, + gss_buffer_t output_token, const bool mutual_auth, OM_uint32 *ret_flags); /* Helper to log a GSS-API error status */ void Curl_gss_log_error(struct Curl_easy *data, const char *prefix, @@ -55,9 +49,9 @@ void Curl_gss_log_error(struct Curl_easy *data, const char *prefix, #endif /* Define our privacy and integrity protection values */ -#define GSSAUTH_P_NONE 1 +#define GSSAUTH_P_NONE 1 #define GSSAUTH_P_INTEGRITY 2 -#define GSSAUTH_P_PRIVACY 4 +#define GSSAUTH_P_PRIVACY 4 #endif /* HAVE_GSSAPI */ #endif /* HEADER_CURL_GSSAPI_H */ diff --git a/vendor/hydra/vendor/curl/lib/curl_hmac.h b/vendor/hydra/vendor/curl/lib/curl_hmac.h index 7a5387a9..dcd7e28a 100644 --- a/vendor/hydra/vendor/curl/lib/curl_hmac.h +++ b/vendor/hydra/vendor/curl/lib/curl_hmac.h @@ -24,47 +24,41 @@ * ***************************************************************************/ -#if (defined(USE_CURL_NTLM_CORE) && !defined(USE_WINDOWS_SSPI)) \ - || !defined(CURL_DISABLE_AWS) || !defined(CURL_DISABLE_DIGEST_AUTH) \ - || defined(USE_LIBSSH2) +#if (defined(USE_CURL_NTLM_CORE) && !defined(USE_WINDOWS_SSPI)) || \ + !defined(CURL_DISABLE_AWS) || !defined(CURL_DISABLE_DIGEST_AUTH) || \ + defined(USE_LIBSSH2) #include #define HMAC_MD5_LENGTH 16 -typedef CURLcode (* HMAC_hinit_func)(void *context); -typedef void (* HMAC_hupdate_func)(void *context, - const unsigned char *data, - unsigned int len); -typedef void (* HMAC_hfinal_func)(unsigned char *result, void *context); - +typedef CURLcode (*HMAC_hinit_func)(void *context); +typedef void (*HMAC_hupdate_func)(void *context, const unsigned char *data, + unsigned int len); +typedef void (*HMAC_hfinal_func)(unsigned char *result, void *context); /* Per-hash function HMAC parameters. */ struct HMAC_params { - HMAC_hinit_func - hmac_hinit; /* Initialize context procedure. */ - HMAC_hupdate_func hmac_hupdate; /* Update context with data. */ - HMAC_hfinal_func hmac_hfinal; /* Get final result procedure. */ - unsigned int hmac_ctxtsize; /* Context structure size. */ - unsigned int hmac_maxkeylen; /* Maximum key length (bytes). */ - unsigned int hmac_resultlen; /* Result length (bytes). */ + HMAC_hinit_func hmac_hinit; /* Initialize context procedure. */ + HMAC_hupdate_func hmac_hupdate; /* Update context with data. */ + HMAC_hfinal_func hmac_hfinal; /* Get final result procedure. */ + unsigned int hmac_ctxtsize; /* Context structure size. */ + unsigned int hmac_maxkeylen; /* Maximum key length (bytes). */ + unsigned int hmac_resultlen; /* Result length (bytes). */ }; - /* HMAC computation context. */ struct HMAC_context { const struct HMAC_params *hmac_hash; /* Hash function definition. */ - void *hmac_hashctxt1; /* Hash function context 1. */ - void *hmac_hashctxt2; /* Hash function context 2. */ + void *hmac_hashctxt1; /* Hash function context 1. */ + void *hmac_hashctxt2; /* Hash function context 2. */ }; - /* Prototypes. */ struct HMAC_context *Curl_HMAC_init(const struct HMAC_params *hashparams, const unsigned char *key, unsigned int keylen); -int Curl_HMAC_update(struct HMAC_context *context, - const unsigned char *data, +int Curl_HMAC_update(struct HMAC_context *context, const unsigned char *data, unsigned int len); int Curl_HMAC_final(struct HMAC_context *context, unsigned char *result); diff --git a/vendor/hydra/vendor/curl/lib/curl_krb5.h b/vendor/hydra/vendor/curl/lib/curl_krb5.h index ccf6b96a..b97813b2 100644 --- a/vendor/hydra/vendor/curl/lib/curl_krb5.h +++ b/vendor/hydra/vendor/curl/lib/curl_krb5.h @@ -35,9 +35,9 @@ struct Curl_sec_client_mech { int (*decode)(void *, void *, int, int, struct connectdata *); }; -#define AUTH_OK 0 -#define AUTH_CONTINUE 1 -#define AUTH_ERROR 2 +#define AUTH_OK 0 +#define AUTH_CONTINUE 1 +#define AUTH_ERROR 2 #ifdef HAVE_GSSAPI int Curl_sec_read_msg(struct Curl_easy *data, struct connectdata *conn, char *, diff --git a/vendor/hydra/vendor/curl/lib/curl_ldap.h b/vendor/hydra/vendor/curl/lib/curl_ldap.h index 8a1d807e..b8c387bc 100644 --- a/vendor/hydra/vendor/curl/lib/curl_ldap.h +++ b/vendor/hydra/vendor/curl/lib/curl_ldap.h @@ -26,7 +26,7 @@ #ifndef CURL_DISABLE_LDAP extern const struct Curl_handler Curl_handler_ldap; -#if !defined(CURL_DISABLE_LDAPS) && \ +#if !defined(CURL_DISABLE_LDAPS) && \ ((defined(USE_OPENLDAP) && defined(USE_SSL)) || \ (!defined(USE_OPENLDAP) && defined(HAVE_LDAP_SSL))) extern const struct Curl_handler Curl_handler_ldaps; diff --git a/vendor/hydra/vendor/curl/lib/curl_md4.h b/vendor/hydra/vendor/curl/lib/curl_md4.h index 4706e495..5ec29ec0 100644 --- a/vendor/hydra/vendor/curl/lib/curl_md4.h +++ b/vendor/hydra/vendor/curl/lib/curl_md4.h @@ -24,9 +24,10 @@ * ***************************************************************************/ -#include "curl_setup.h" #include +#include "curl_setup.h" + #if defined(USE_CURL_NTLM_CORE) #define MD4_DIGEST_LENGTH 16 diff --git a/vendor/hydra/vendor/curl/lib/curl_md5.h b/vendor/hydra/vendor/curl/lib/curl_md5.h index 61671c30..3da6ea89 100644 --- a/vendor/hydra/vendor/curl/lib/curl_md5.h +++ b/vendor/hydra/vendor/curl/lib/curl_md5.h @@ -24,30 +24,29 @@ * ***************************************************************************/ -#if (defined(USE_CURL_NTLM_CORE) && !defined(USE_WINDOWS_SSPI)) \ - || !defined(CURL_DISABLE_DIGEST_AUTH) +#if (defined(USE_CURL_NTLM_CORE) && !defined(USE_WINDOWS_SSPI)) || \ + !defined(CURL_DISABLE_DIGEST_AUTH) #include "curl_hmac.h" -#define MD5_DIGEST_LEN 16 +#define MD5_DIGEST_LEN 16 -typedef CURLcode (* Curl_MD5_init_func)(void *context); -typedef void (* Curl_MD5_update_func)(void *context, - const unsigned char *data, - unsigned int len); -typedef void (* Curl_MD5_final_func)(unsigned char *result, void *context); +typedef CURLcode (*Curl_MD5_init_func)(void *context); +typedef void (*Curl_MD5_update_func)(void *context, const unsigned char *data, + unsigned int len); +typedef void (*Curl_MD5_final_func)(unsigned char *result, void *context); struct MD5_params { - Curl_MD5_init_func md5_init_func; /* Initialize context procedure */ - Curl_MD5_update_func md5_update_func; /* Update context with data */ - Curl_MD5_final_func md5_final_func; /* Get final result procedure */ - unsigned int md5_ctxtsize; /* Context structure size */ - unsigned int md5_resultlen; /* Result length (bytes) */ + Curl_MD5_init_func md5_init_func; /* Initialize context procedure */ + Curl_MD5_update_func md5_update_func; /* Update context with data */ + Curl_MD5_final_func md5_final_func; /* Get final result procedure */ + unsigned int md5_ctxtsize; /* Context structure size */ + unsigned int md5_resultlen; /* Result length (bytes) */ }; struct MD5_context { - const struct MD5_params *md5_hash; /* Hash function definition */ - void *md5_hashctx; /* Hash function context */ + const struct MD5_params *md5_hash; /* Hash function definition */ + void *md5_hashctx; /* Hash function context */ }; extern const struct MD5_params Curl_DIGEST_MD5[1]; @@ -57,8 +56,7 @@ CURLcode Curl_md5it(unsigned char *output, const unsigned char *input, const size_t len); struct MD5_context *Curl_MD5_init(const struct MD5_params *md5params); -CURLcode Curl_MD5_update(struct MD5_context *context, - const unsigned char *data, +CURLcode Curl_MD5_update(struct MD5_context *context, const unsigned char *data, unsigned int len); CURLcode Curl_MD5_final(struct MD5_context *context, unsigned char *result); diff --git a/vendor/hydra/vendor/curl/lib/curl_memory.h b/vendor/hydra/vendor/curl/lib/curl_memory.h index 714ad71c..f60f1f1c 100644 --- a/vendor/hydra/vendor/curl/lib/curl_memory.h +++ b/vendor/hydra/vendor/curl/lib/curl_memory.h @@ -69,13 +69,13 @@ #undef recv #ifdef _WIN32 -# ifdef UNICODE -# undef wcsdup -# undef _wcsdup -# undef _tcsdup -# else -# undef _tcsdup -# endif +#ifdef UNICODE +#undef wcsdup +#undef _wcsdup +#undef _tcsdup +#else +#undef _tcsdup +#endif #endif #undef socket @@ -154,24 +154,24 @@ extern curl_wcsdup_callback Curl_cwcsdup; #undef malloc #define malloc(size) Curl_cmalloc(size) #undef calloc -#define calloc(nbelem,size) Curl_ccalloc(nbelem, size) +#define calloc(nbelem, size) Curl_ccalloc(nbelem, size) #undef realloc -#define realloc(ptr,size) Curl_crealloc(ptr, size) +#define realloc(ptr, size) Curl_crealloc(ptr, size) #undef free #define free(ptr) Curl_cfree(ptr) #ifdef _WIN32 -# ifdef UNICODE -# undef wcsdup -# define wcsdup(ptr) Curl_cwcsdup(ptr) -# undef _wcsdup -# define _wcsdup(ptr) Curl_cwcsdup(ptr) -# undef _tcsdup -# define _tcsdup(ptr) Curl_cwcsdup(ptr) -# else -# undef _tcsdup -# define _tcsdup(ptr) Curl_cstrdup(ptr) -# endif +#ifdef UNICODE +#undef wcsdup +#define wcsdup(ptr) Curl_cwcsdup(ptr) +#undef _wcsdup +#define _wcsdup(ptr) Curl_cwcsdup(ptr) +#undef _tcsdup +#define _tcsdup(ptr) Curl_cwcsdup(ptr) +#else +#undef _tcsdup +#define _tcsdup(ptr) Curl_cstrdup(ptr) +#endif #endif #endif /* CURLDEBUG */ diff --git a/vendor/hydra/vendor/curl/lib/curl_memrchr.h b/vendor/hydra/vendor/curl/lib/curl_memrchr.h index 67a21ef3..9ce1939d 100644 --- a/vendor/hydra/vendor/curl/lib/curl_memrchr.h +++ b/vendor/hydra/vendor/curl/lib/curl_memrchr.h @@ -30,17 +30,16 @@ #include #ifdef HAVE_STRINGS_H -# include +#include #endif #else /* HAVE_MEMRCHR */ #if (!defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)) || \ - defined(USE_OPENSSL) || \ - defined(USE_SCHANNEL) + defined(USE_OPENSSL) || defined(USE_SCHANNEL) void *Curl_memrchr(const void *s, int c, size_t n); -#define memrchr(x,y,z) Curl_memrchr((x),(y),(z)) +#define memrchr(x, y, z) Curl_memrchr((x), (y), (z)) #endif #endif /* HAVE_MEMRCHR */ diff --git a/vendor/hydra/vendor/curl/lib/curl_multibyte.h b/vendor/hydra/vendor/curl/lib/curl_multibyte.h index dec384e2..0d135396 100644 --- a/vendor/hydra/vendor/curl/lib/curl_multibyte.h +++ b/vendor/hydra/vendor/curl/lib/curl_multibyte.h @@ -27,9 +27,9 @@ #if defined(_WIN32) - /* - * MultiByte conversions using Windows kernel32 library. - */ +/* + * MultiByte conversions using Windows kernel32 library. + */ wchar_t *curlx_convert_UTF8_to_wchar(const char *str_utf8); char *curlx_convert_wchar_to_UTF8(const wchar_t *str_w); @@ -61,9 +61,9 @@ char *curlx_convert_wchar_to_UTF8(const wchar_t *str_w); #define curlx_convert_tchar_to_UTF8(ptr) curlx_convert_wchar_to_UTF8((ptr)) typedef union { - unsigned short *tchar_ptr; + unsigned short *tchar_ptr; const unsigned short *const_tchar_ptr; - unsigned short *tbyte_ptr; + unsigned short *tbyte_ptr; const unsigned short *const_tbyte_ptr; } xcharp_u; @@ -73,20 +73,20 @@ typedef union { #define curlx_convert_tchar_to_UTF8(ptr) (strdup)(ptr) typedef union { - char *tchar_ptr; - const char *const_tchar_ptr; - unsigned char *tbyte_ptr; + char *tchar_ptr; + const char *const_tchar_ptr; + unsigned char *tbyte_ptr; const unsigned char *const_tbyte_ptr; } xcharp_u; #endif /* UNICODE && _WIN32 */ -#define curlx_unicodefree(ptr) \ - do { \ - if(ptr) { \ - (free)(ptr); \ - (ptr) = NULL; \ - } \ - } while(0) +#define curlx_unicodefree(ptr) \ + do { \ + if (ptr) { \ + (free)(ptr); \ + (ptr) = NULL; \ + } \ + } while (0) #endif /* HEADER_CURL_MULTIBYTE_H */ diff --git a/vendor/hydra/vendor/curl/lib/curl_ntlm_core.h b/vendor/hydra/vendor/curl/lib/curl_ntlm_core.h index e2e4b1bd..454acf05 100644 --- a/vendor/hydra/vendor/curl/lib/curl_ntlm_core.h +++ b/vendor/hydra/vendor/curl/lib/curl_ntlm_core.h @@ -30,8 +30,9 @@ /* Helpers to generate function byte arguments in little endian order */ #define SHORTPAIR(x) ((int)((x) & 0xff)), ((int)(((x) >> 8) & 0xff)) -#define LONGQUARTET(x) ((int)((x) & 0xff)), ((int)(((x) >> 8) & 0xff)), \ - ((int)(((x) >> 16) & 0xff)), ((int)(((x) >> 24) & 0xff)) +#define LONGQUARTET(x) \ + ((int)((x) & 0xff)), ((int)(((x) >> 8) & 0xff)), \ + ((int)(((x) >> 16) & 0xff)), ((int)(((x) >> 24) & 0xff)) void Curl_ntlm_core_lm_resp(const unsigned char *keys, const unsigned char *plaintext, @@ -54,16 +55,16 @@ CURLcode Curl_ntlm_core_mk_ntlmv2_hash(const char *user, size_t userlen, unsigned char *ntlmhash, unsigned char *ntlmv2hash); -CURLcode Curl_ntlm_core_mk_ntlmv2_resp(unsigned char *ntlmv2hash, - unsigned char *challenge_client, - struct ntlmdata *ntlm, - unsigned char **ntresp, - unsigned int *ntresp_len); +CURLcode Curl_ntlm_core_mk_ntlmv2_resp(unsigned char *ntlmv2hash, + unsigned char *challenge_client, + struct ntlmdata *ntlm, + unsigned char **ntresp, + unsigned int *ntresp_len); -CURLcode Curl_ntlm_core_mk_lmv2_resp(unsigned char *ntlmv2hash, - unsigned char *challenge_client, - unsigned char *challenge_server, - unsigned char *lmresp); +CURLcode Curl_ntlm_core_mk_lmv2_resp(unsigned char *ntlmv2hash, + unsigned char *challenge_client, + unsigned char *challenge_server, + unsigned char *lmresp); #endif /* !USE_WINDOWS_SSPI */ diff --git a/vendor/hydra/vendor/curl/lib/curl_path.h b/vendor/hydra/vendor/curl/lib/curl_path.h index 6fdb2fdd..01d6af47 100644 --- a/vendor/hydra/vendor/curl/lib/curl_path.h +++ b/vendor/hydra/vendor/curl/lib/curl_path.h @@ -24,25 +24,26 @@ * ***************************************************************************/ -#include "curl_setup.h" #include + +#include "curl_setup.h" #include "urldata.h" #ifdef _WIN32 -# undef PATH_MAX -# define PATH_MAX MAX_PATH -# ifndef R_OK -# define R_OK 4 -# endif +#undef PATH_MAX +#define PATH_MAX MAX_PATH +#ifndef R_OK +#define R_OK 4 +#endif #endif #ifndef PATH_MAX -#define PATH_MAX 1024 /* just an extra precaution since there are systems that - have their definition hidden well */ +#define PATH_MAX \ + 1024 /* just an extra precaution since there are systems that \ + have their definition hidden well */ #endif -CURLcode Curl_getworkingpath(struct Curl_easy *data, - char *homedir, +CURLcode Curl_getworkingpath(struct Curl_easy *data, char *homedir, char **path); CURLcode Curl_get_pathname(const char **cpp, char **path, const char *homedir); diff --git a/vendor/hydra/vendor/curl/lib/curl_printf.h b/vendor/hydra/vendor/curl/lib/curl_printf.h index e851b14a..0819909f 100644 --- a/vendor/hydra/vendor/curl/lib/curl_printf.h +++ b/vendor/hydra/vendor/curl/lib/curl_printf.h @@ -35,24 +35,24 @@ #include -#define MERR_OK 0 -#define MERR_MEM 1 +#define MERR_OK 0 +#define MERR_MEM 1 #define MERR_TOO_LARGE 2 -# undef printf -# undef fprintf -# undef msnprintf -# undef vprintf -# undef vfprintf -# undef mvsnprintf -# undef aprintf -# undef vaprintf -# define printf curl_mprintf -# define fprintf curl_mfprintf -# define msnprintf curl_msnprintf -# define vprintf curl_mvprintf -# define vfprintf curl_mvfprintf -# define mvsnprintf curl_mvsnprintf -# define aprintf curl_maprintf -# define vaprintf curl_mvaprintf +#undef printf +#undef fprintf +#undef msnprintf +#undef vprintf +#undef vfprintf +#undef mvsnprintf +#undef aprintf +#undef vaprintf +#define printf curl_mprintf +#define fprintf curl_mfprintf +#define msnprintf curl_msnprintf +#define vprintf curl_mvprintf +#define vfprintf curl_mvfprintf +#define mvsnprintf curl_mvsnprintf +#define aprintf curl_maprintf +#define vaprintf curl_mvaprintf #endif /* HEADER_CURL_PRINTF_H */ diff --git a/vendor/hydra/vendor/curl/lib/curl_sasl.h b/vendor/hydra/vendor/curl/lib/curl_sasl.h index e94e6431..d727536e 100644 --- a/vendor/hydra/vendor/curl/lib/curl_sasl.h +++ b/vendor/hydra/vendor/curl/lib/curl_sasl.h @@ -32,38 +32,38 @@ struct Curl_easy; struct connectdata; /* Authentication mechanism flags */ -#define SASL_MECH_LOGIN (1 << 0) -#define SASL_MECH_PLAIN (1 << 1) -#define SASL_MECH_CRAM_MD5 (1 << 2) -#define SASL_MECH_DIGEST_MD5 (1 << 3) -#define SASL_MECH_GSSAPI (1 << 4) -#define SASL_MECH_EXTERNAL (1 << 5) -#define SASL_MECH_NTLM (1 << 6) -#define SASL_MECH_XOAUTH2 (1 << 7) -#define SASL_MECH_OAUTHBEARER (1 << 8) -#define SASL_MECH_SCRAM_SHA_1 (1 << 9) -#define SASL_MECH_SCRAM_SHA_256 (1 << 10) +#define SASL_MECH_LOGIN (1 << 0) +#define SASL_MECH_PLAIN (1 << 1) +#define SASL_MECH_CRAM_MD5 (1 << 2) +#define SASL_MECH_DIGEST_MD5 (1 << 3) +#define SASL_MECH_GSSAPI (1 << 4) +#define SASL_MECH_EXTERNAL (1 << 5) +#define SASL_MECH_NTLM (1 << 6) +#define SASL_MECH_XOAUTH2 (1 << 7) +#define SASL_MECH_OAUTHBEARER (1 << 8) +#define SASL_MECH_SCRAM_SHA_1 (1 << 9) +#define SASL_MECH_SCRAM_SHA_256 (1 << 10) /* Authentication mechanism values */ -#define SASL_AUTH_NONE 0 -#define SASL_AUTH_ANY 0xffff -#define SASL_AUTH_DEFAULT (SASL_AUTH_ANY & ~SASL_MECH_EXTERNAL) +#define SASL_AUTH_NONE 0 +#define SASL_AUTH_ANY 0xffff +#define SASL_AUTH_DEFAULT (SASL_AUTH_ANY & ~SASL_MECH_EXTERNAL) /* Authentication mechanism strings */ -#define SASL_MECH_STRING_LOGIN "LOGIN" -#define SASL_MECH_STRING_PLAIN "PLAIN" -#define SASL_MECH_STRING_CRAM_MD5 "CRAM-MD5" -#define SASL_MECH_STRING_DIGEST_MD5 "DIGEST-MD5" -#define SASL_MECH_STRING_GSSAPI "GSSAPI" -#define SASL_MECH_STRING_EXTERNAL "EXTERNAL" -#define SASL_MECH_STRING_NTLM "NTLM" -#define SASL_MECH_STRING_XOAUTH2 "XOAUTH2" -#define SASL_MECH_STRING_OAUTHBEARER "OAUTHBEARER" -#define SASL_MECH_STRING_SCRAM_SHA_1 "SCRAM-SHA-1" -#define SASL_MECH_STRING_SCRAM_SHA_256 "SCRAM-SHA-256" +#define SASL_MECH_STRING_LOGIN "LOGIN" +#define SASL_MECH_STRING_PLAIN "PLAIN" +#define SASL_MECH_STRING_CRAM_MD5 "CRAM-MD5" +#define SASL_MECH_STRING_DIGEST_MD5 "DIGEST-MD5" +#define SASL_MECH_STRING_GSSAPI "GSSAPI" +#define SASL_MECH_STRING_EXTERNAL "EXTERNAL" +#define SASL_MECH_STRING_NTLM "NTLM" +#define SASL_MECH_STRING_XOAUTH2 "XOAUTH2" +#define SASL_MECH_STRING_OAUTHBEARER "OAUTHBEARER" +#define SASL_MECH_STRING_SCRAM_SHA_1 "SCRAM-SHA-1" +#define SASL_MECH_STRING_SCRAM_SHA_256 "SCRAM-SHA-256" /* SASL flags */ -#define SASL_FLAG_BASE64 0x0001 /* Messages are base64-encoded */ +#define SASL_FLAG_BASE64 0x0001 /* Messages are base64-encoded */ /* SASL machine states */ typedef enum { @@ -88,25 +88,21 @@ typedef enum { } saslstate; /* Progress indicator */ -typedef enum { - SASL_IDLE, - SASL_INPROGRESS, - SASL_DONE -} saslprogress; +typedef enum { SASL_IDLE, SASL_INPROGRESS, SASL_DONE } saslprogress; /* Protocol dependent SASL parameters */ struct SASLproto { - const char *service; /* The service name */ + const char *service; /* The service name */ CURLcode (*sendauth)(struct Curl_easy *data, const char *mech, const struct bufref *ir); - /* Send authentication command */ + /* Send authentication command */ CURLcode (*contauth)(struct Curl_easy *data, const char *mech, const struct bufref *contauth); - /* Send authentication continuation */ + /* Send authentication continuation */ CURLcode (*cancelauth)(struct Curl_easy *data, const char *mech); - /* Cancel authentication. */ + /* Cancel authentication. */ CURLcode (*getmessage)(struct Curl_easy *data, struct bufref *out); - /* Get SASL response message */ + /* Get SASL response message */ size_t maxirlen; /* Maximum initial response + mechanism length, or zero if no max. This is normally the max command length - other characters count. @@ -120,32 +116,31 @@ struct SASLproto { /* Per-connection parameters */ struct SASL { const struct SASLproto *params; /* Protocol dependent parameters */ - saslstate state; /* Current machine state */ - const char *curmech; /* Current mechanism id. */ - unsigned short authmechs; /* Accepted authentication mechanisms */ - unsigned short prefmech; /* Preferred authentication mechanism */ - unsigned short authused; /* Auth mechanism used for the connection */ - BIT(resetprefs); /* For URL auth option parsing. */ - BIT(mutual_auth); /* Mutual authentication enabled (GSSAPI only) */ - BIT(force_ir); /* Protocol always supports initial response */ + saslstate state; /* Current machine state */ + const char *curmech; /* Current mechanism id. */ + unsigned short authmechs; /* Accepted authentication mechanisms */ + unsigned short prefmech; /* Preferred authentication mechanism */ + unsigned short authused; /* Auth mechanism used for the connection */ + BIT(resetprefs); /* For URL auth option parsing. */ + BIT(mutual_auth); /* Mutual authentication enabled (GSSAPI only) */ + BIT(force_ir); /* Protocol always supports initial response */ }; /* This is used to test whether the line starts with the given mechanism */ #define sasl_mech_equal(line, wordlen, mech) \ - (wordlen == (sizeof(mech) - 1) / sizeof(char) && \ - !memcmp(line, mech, wordlen)) + (wordlen == (sizeof(mech) - 1) / sizeof(char) && !memcmp(line, mech, wordlen)) /* This is used to cleanup any libraries or curl modules used by the sasl functions */ void Curl_sasl_cleanup(struct connectdata *conn, unsigned short authused); /* Convert a mechanism name to a token */ -unsigned short Curl_sasl_decode_mech(const char *ptr, - size_t maxlen, size_t *len); +unsigned short Curl_sasl_decode_mech(const char *ptr, size_t maxlen, + size_t *len); /* Parse the URL login options */ -CURLcode Curl_sasl_parse_url_auth_option(struct SASL *sasl, - const char *value, size_t len); +CURLcode Curl_sasl_parse_url_auth_option(struct SASL *sasl, const char *value, + size_t len); /* Initializes an SASL structure */ void Curl_sasl_init(struct SASL *sasl, struct Curl_easy *data, @@ -159,7 +154,7 @@ CURLcode Curl_sasl_start(struct SASL *sasl, struct Curl_easy *data, bool force_ir, saslprogress *progress); /* Continue an SASL authentication */ -CURLcode Curl_sasl_continue(struct SASL *sasl, struct Curl_easy *data, - int code, saslprogress *progress); +CURLcode Curl_sasl_continue(struct SASL *sasl, struct Curl_easy *data, int code, + saslprogress *progress); #endif /* HEADER_CURL_SASL_H */ diff --git a/vendor/hydra/vendor/curl/lib/curl_setup.h b/vendor/hydra/vendor/curl/lib/curl_setup.h index 930d02a1..da90a5d9 100644 --- a/vendor/hydra/vendor/curl/lib/curl_setup.h +++ b/vendor/hydra/vendor/curl/lib/curl_setup.h @@ -53,16 +53,14 @@ Followed by missing declarations. Fix it by overriding the built-in feature-check macro used by the headers to enable the problematic attributes. This makes the feature check fail. */ -#if defined(__APPLE__) && \ - !defined(__clang__) && \ - defined(__GNUC__) && __GNUC__ >= 12 && \ - defined(__has_attribute) +#if defined(__APPLE__) && !defined(__clang__) && defined(__GNUC__) && \ + __GNUC__ >= 12 && defined(__has_attribute) #define availability curl_pp_attribute_disabled #endif #if defined(__APPLE__) -#include #include +#include /* Fixup faulty target macro initialization in macOS SDK since v14.4 (as of 15.0 beta). The SDK target detection in `TargetConditionals.h` correctly detects macOS, but fails to set the macro's old name `TARGET_OS_OSX`, then @@ -73,10 +71,9 @@ faulty dynamic detection. gcc is not affected (for now) because it lacks the necessary dynamic detection features, so the SDK falls back to a codepath that sets both the old and new macro to 1. */ -#if defined(TARGET_OS_MAC) && TARGET_OS_MAC && \ - defined(TARGET_OS_OSX) && !TARGET_OS_OSX && \ - (!defined(TARGET_OS_IPHONE) || !TARGET_OS_IPHONE) && \ - (!defined(TARGET_OS_SIMULATOR) || !TARGET_OS_SIMULATOR) +#if defined(TARGET_OS_MAC) && TARGET_OS_MAC && defined(TARGET_OS_OSX) && \ + !TARGET_OS_OSX && (!defined(TARGET_OS_IPHONE) || !TARGET_OS_IPHONE) && \ + (!defined(TARGET_OS_SIMULATOR) || !TARGET_OS_SIMULATOR) #undef TARGET_OS_OSX #define TARGET_OS_OSX TARGET_OS_MAC #endif @@ -87,7 +84,7 @@ * 4127 "conditional expression is constant" */ #ifdef _MSC_VER -#pragma warning(disable:4127) +#pragma warning(disable : 4127) #endif #ifdef _WIN32 @@ -96,27 +93,27 @@ * warnings and macro clashes. * Make sure to define this macro before including any Windows headers. */ -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -# endif -# ifndef NOGDI -# define NOGDI -# endif +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOGDI +#define NOGDI +#endif /* Detect Windows App environment which has a restricted access * to the Win32 APIs. */ -# if (defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0602)) || \ - defined(WINAPI_FAMILY) -# include -# if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && \ - !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) -# define CURL_WINDOWS_APP -# endif -# endif +#if (defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0602)) || \ + defined(WINAPI_FAMILY) +#include +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && \ + !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#define CURL_WINDOWS_APP +#endif +#endif #endif /* Compatibility */ #if defined(ENABLE_IPV6) -# define USE_IPV6 1 +#define USE_IPV6 1 #endif /* @@ -131,35 +128,35 @@ #else /* HAVE_CONFIG_H */ #ifdef _WIN32_WCE -# include "config-win32ce.h" +#include "config-win32ce.h" #else -# ifdef _WIN32 -# include "config-win32.h" -# endif +#ifdef _WIN32 +#include "config-win32.h" +#endif #endif #ifdef macintosh -# include "config-mac.h" +#include "config-mac.h" #endif #ifdef __riscos__ -# include "config-riscos.h" +#include "config-riscos.h" #endif #ifdef __AMIGA__ -# include "config-amigaos.h" +#include "config-amigaos.h" #endif #ifdef __OS400__ -# include "config-os400.h" +#include "config-os400.h" #endif #ifdef __PLAN9__ -# include "config-plan9.h" +#include "config-plan9.h" #endif #ifdef MSDOS -# include "config-dos.h" +#include "config-dos.h" #endif #endif /* HAVE_CONFIG_H */ @@ -179,9 +176,9 @@ */ #ifdef NEED_THREAD_SAFE -# ifndef _THREAD_SAFE -# define _THREAD_SAFE -# endif +#ifndef _THREAD_SAFE +#define _THREAD_SAFE +#endif #endif /* @@ -191,16 +188,16 @@ */ #ifdef NEED_REENTRANT -# ifndef _REENTRANT -# define _REENTRANT -# endif +#ifndef _REENTRANT +#define _REENTRANT +#endif #endif /* Solaris needs this to get a POSIX-conformant getpwuid_r */ #if defined(sun) || defined(__sun) -# ifndef _POSIX_PTHREAD_SEMANTICS -# define _POSIX_PTHREAD_SEMANTICS 1 -# endif +#ifndef _POSIX_PTHREAD_SEMANTICS +#define _POSIX_PTHREAD_SEMANTICS 1 +#endif #endif /* ================================================================ */ @@ -213,48 +210,48 @@ */ #ifdef HTTP_ONLY -# ifndef CURL_DISABLE_DICT -# define CURL_DISABLE_DICT -# endif -# ifndef CURL_DISABLE_FILE -# define CURL_DISABLE_FILE -# endif -# ifndef CURL_DISABLE_FTP -# define CURL_DISABLE_FTP -# endif -# ifndef CURL_DISABLE_GOPHER -# define CURL_DISABLE_GOPHER -# endif -# ifndef CURL_DISABLE_IMAP -# define CURL_DISABLE_IMAP -# endif -# ifndef CURL_DISABLE_LDAP -# define CURL_DISABLE_LDAP -# endif -# ifndef CURL_DISABLE_LDAPS -# define CURL_DISABLE_LDAPS -# endif -# ifndef CURL_DISABLE_MQTT -# define CURL_DISABLE_MQTT -# endif -# ifndef CURL_DISABLE_POP3 -# define CURL_DISABLE_POP3 -# endif -# ifndef CURL_DISABLE_RTSP -# define CURL_DISABLE_RTSP -# endif -# ifndef CURL_DISABLE_SMB -# define CURL_DISABLE_SMB -# endif -# ifndef CURL_DISABLE_SMTP -# define CURL_DISABLE_SMTP -# endif -# ifndef CURL_DISABLE_TELNET -# define CURL_DISABLE_TELNET -# endif -# ifndef CURL_DISABLE_TFTP -# define CURL_DISABLE_TFTP -# endif +#ifndef CURL_DISABLE_DICT +#define CURL_DISABLE_DICT +#endif +#ifndef CURL_DISABLE_FILE +#define CURL_DISABLE_FILE +#endif +#ifndef CURL_DISABLE_FTP +#define CURL_DISABLE_FTP +#endif +#ifndef CURL_DISABLE_GOPHER +#define CURL_DISABLE_GOPHER +#endif +#ifndef CURL_DISABLE_IMAP +#define CURL_DISABLE_IMAP +#endif +#ifndef CURL_DISABLE_LDAP +#define CURL_DISABLE_LDAP +#endif +#ifndef CURL_DISABLE_LDAPS +#define CURL_DISABLE_LDAPS +#endif +#ifndef CURL_DISABLE_MQTT +#define CURL_DISABLE_MQTT +#endif +#ifndef CURL_DISABLE_POP3 +#define CURL_DISABLE_POP3 +#endif +#ifndef CURL_DISABLE_RTSP +#define CURL_DISABLE_RTSP +#endif +#ifndef CURL_DISABLE_SMB +#define CURL_DISABLE_SMB +#endif +#ifndef CURL_DISABLE_SMTP +#define CURL_DISABLE_SMTP +#endif +#ifndef CURL_DISABLE_TELNET +#define CURL_DISABLE_TELNET +#endif +#ifndef CURL_DISABLE_TFTP +#define CURL_DISABLE_TFTP +#endif #endif /* @@ -262,7 +259,7 @@ */ #if defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_RTSP) -# define CURL_DISABLE_RTSP +#define CURL_DISABLE_RTSP #endif /* @@ -270,16 +267,16 @@ */ #if defined(CURL_DISABLE_HTTP) -# define CURL_DISABLE_ALTSVC 1 -# define CURL_DISABLE_COOKIES 1 -# define CURL_DISABLE_BASIC_AUTH 1 -# define CURL_DISABLE_BEARER_AUTH 1 -# define CURL_DISABLE_AWS 1 -# define CURL_DISABLE_DOH 1 -# define CURL_DISABLE_FORM_API 1 -# define CURL_DISABLE_HEADERS_API 1 -# define CURL_DISABLE_HSTS 1 -# define CURL_DISABLE_HTTP_AUTH 1 +#define CURL_DISABLE_ALTSVC 1 +#define CURL_DISABLE_COOKIES 1 +#define CURL_DISABLE_BASIC_AUTH 1 +#define CURL_DISABLE_BEARER_AUTH 1 +#define CURL_DISABLE_AWS 1 +#define CURL_DISABLE_DOH 1 +#define CURL_DISABLE_FORM_API 1 +#define CURL_DISABLE_HEADERS_API 1 +#define CURL_DISABLE_HSTS 1 +#define CURL_DISABLE_HTTP_AUTH 1 #endif /* ================================================================ */ @@ -292,7 +289,7 @@ */ #ifdef __OS400__ -# include "setup-os400.h" +#include "setup-os400.h" #endif /* @@ -300,7 +297,7 @@ */ #ifdef __VMS -# include "setup-vms.h" +#include "setup-vms.h" #endif /* @@ -308,7 +305,7 @@ */ #ifdef _WIN32 -# include "setup-win32.h" +#include "setup-win32.h" #endif #include @@ -317,32 +314,30 @@ * Direct macros concatenation does not work because macros * are not expanded before direct concatenation. */ -#define CURL_CONC_MACROS_(A,B) A ## B -#define CURL_CONC_MACROS(A,B) CURL_CONC_MACROS_(A,B) +#define CURL_CONC_MACROS_(A, B) A##B +#define CURL_CONC_MACROS(A, B) CURL_CONC_MACROS_(A, B) /* curl uses its own printf() function internally. It understands the GNU * format. Use this format, so that is matches the GNU format attribute we * use with the MinGW compiler, allowing it to verify them at compile-time. */ -#ifdef __MINGW32__ -# undef CURL_FORMAT_CURL_OFF_T -# undef CURL_FORMAT_CURL_OFF_TU -# define CURL_FORMAT_CURL_OFF_T "lld" -# define CURL_FORMAT_CURL_OFF_TU "llu" +#ifdef __MINGW32__ +#undef CURL_FORMAT_CURL_OFF_T +#undef CURL_FORMAT_CURL_OFF_TU +#define CURL_FORMAT_CURL_OFF_T "lld" +#define CURL_FORMAT_CURL_OFF_TU "llu" #endif /* based on logic in "curl/mprintf.h" */ -#if (defined(__GNUC__) || defined(__clang__) || \ - defined(__IAR_SYSTEMS_ICC__)) && \ - defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ - !defined(CURL_NO_FMT_CHECKS) +#if (defined(__GNUC__) || defined(__clang__) || \ + defined(__IAR_SYSTEMS_ICC__)) && \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(CURL_NO_FMT_CHECKS) #if defined(__MINGW32__) && !defined(__clang__) -#define CURL_PRINTF(fmt, arg) \ - __attribute__((format(gnu_printf, fmt, arg))) +#define CURL_PRINTF(fmt, arg) __attribute__((format(gnu_printf, fmt, arg))) #else -#define CURL_PRINTF(fmt, arg) \ - __attribute__((format(__printf__, fmt, arg))) +#define CURL_PRINTF(fmt, arg) __attribute__((format(__printf__, fmt, arg))) #endif #else #define CURL_PRINTF(fmt, arg) @@ -354,13 +349,13 @@ /* Workaround for mainline llvm v16 and earlier missing a built-in macro expected by macOS SDK v14 / Xcode v15 (2023) and newer. gcc (as of v14) is also missing it. */ -#if defined(__APPLE__) && \ - ((!defined(__apple_build_version__) && \ - defined(__clang__) && __clang_major__ < 17) || \ - (defined(__GNUC__) && __GNUC__ <= 14)) && \ - defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ - !defined(__ENVIRONMENT_OS_VERSION_MIN_REQUIRED__) -#define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ \ +#if defined(__APPLE__) && \ + ((!defined(__apple_build_version__) && defined(__clang__) && \ + __clang_major__ < 17) || \ + (defined(__GNUC__) && __GNUC__ <= 14)) && \ + defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ + !defined(__ENVIRONMENT_OS_VERSION_MIN_REQUIRED__) +#define __ENVIRONMENT_OS_VERSION_MIN_REQUIRED__ \ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ #endif @@ -371,78 +366,77 @@ */ #if defined(__APPLE__) && !defined(USE_ARES) #define USE_RESOLVE_ON_IPS 1 -# if TARGET_OS_MAC && !(defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) && \ - defined(USE_IPV6) -# define CURL_MACOS_CALL_COPYPROXIES 1 -# endif +#if TARGET_OS_MAC && !(defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) && \ + defined(USE_IPV6) +#define CURL_MACOS_CALL_COPYPROXIES 1 +#endif #endif #ifdef USE_LWIPSOCK -# include -# include -# include +#include +#include +#include #endif #ifdef HAVE_EXTRA_STRICMP_H -# include +#include #endif #ifdef HAVE_EXTRA_STRDUP_H -# include +#include #endif #ifdef __AMIGA__ -# ifdef __amigaos4__ -# define __USE_INLINE__ - /* use our own resolver which uses runtime feature detection */ -# define CURLRES_AMIGA - /* getaddrinfo() currently crashes bsdsocket.library, so disable */ -# undef HAVE_GETADDRINFO -# if !(defined(__NEWLIB__) || \ - (defined(__CLIB2__) && defined(__THREAD_SAFE))) - /* disable threaded resolver with clib2 - requires newlib or clib-ts */ -# undef USE_THREADS_POSIX -# endif -# endif -# include -# include -# include -# include -# include -# if defined(HAVE_PROTO_BSDSOCKET_H) && \ +#ifdef __amigaos4__ +#define __USE_INLINE__ +/* use our own resolver which uses runtime feature detection */ +#define CURLRES_AMIGA +/* getaddrinfo() currently crashes bsdsocket.library, so disable */ +#undef HAVE_GETADDRINFO +#if !(defined(__NEWLIB__) || (defined(__CLIB2__) && defined(__THREAD_SAFE))) +/* disable threaded resolver with clib2 - requires newlib or clib-ts */ +#undef USE_THREADS_POSIX +#endif +#endif +#include +#include +#include +#include +#include +#if defined(HAVE_PROTO_BSDSOCKET_H) && \ (!defined(__amigaos4__) || defined(USE_AMISSL)) - /* use bsdsocket.library directly, instead of libc networking functions */ -# define _SYS_MBUF_H /* m_len define clashes with curl */ -# include -# ifdef __amigaos4__ - int Curl_amiga_select(int nfds, fd_set *readfds, fd_set *writefds, - fd_set *errorfds, struct timeval *timeout); -# define select(a,b,c,d,e) Curl_amiga_select(a,b,c,d,e) -# else -# define select(a,b,c,d,e) WaitSelect(a,b,c,d,e,0) -# endif - /* must not use libc's fcntl() on bsdsocket.library sockfds! */ -# undef HAVE_FCNTL -# undef HAVE_FCNTL_O_NONBLOCK -# else - /* use libc networking and hence close() and fnctl() */ -# undef HAVE_CLOSESOCKET_CAMEL -# undef HAVE_IOCTLSOCKET_CAMEL -# endif +/* use bsdsocket.library directly, instead of libc networking functions */ +#define _SYS_MBUF_H /* m_len define clashes with curl */ +#include +#ifdef __amigaos4__ +int Curl_amiga_select(int nfds, fd_set *readfds, fd_set *writefds, + fd_set *errorfds, struct timeval *timeout); +#define select(a, b, c, d, e) Curl_amiga_select(a, b, c, d, e) +#else +#define select(a, b, c, d, e) WaitSelect(a, b, c, d, e, 0) +#endif +/* must not use libc's fcntl() on bsdsocket.library sockfds! */ +#undef HAVE_FCNTL +#undef HAVE_FCNTL_O_NONBLOCK +#else +/* use libc networking and hence close() and fnctl() */ +#undef HAVE_CLOSESOCKET_CAMEL +#undef HAVE_IOCTLSOCKET_CAMEL +#endif /* * In clib2 arpa/inet.h warns that some prototypes may clash * with bsdsocket.library. This avoids the definition of those. */ -# define __NO_NET_API +#define __NO_NET_API #endif -#include #include +#include #ifdef __TANDEM /* for ns*-tandem-nsk systems */ -# if ! defined __LP64 -# include /* FLOSS is only used for 32-bit builds. */ -# endif +#if !defined __LP64 +#include /* FLOSS is only used for 32-bit builds. */ +#endif #endif #ifndef STDC_HEADERS /* no standard C headers! */ @@ -454,22 +448,22 @@ */ #ifdef USE_WIN32_LARGE_FILES -# include -# include -# include -# undef lseek -# define lseek(fdes,offset,whence) _lseeki64(fdes, offset, whence) -# undef fstat -# define fstat(fdes,stp) _fstati64(fdes, stp) -# undef stat -# define stat(fname,stp) curlx_win32_stat(fname, stp) -# define struct_stat struct _stati64 -# define LSEEK_ERROR (__int64)-1 -# define open curlx_win32_open -# define fopen(fname,mode) curlx_win32_fopen(fname, mode) - int curlx_win32_open(const char *filename, int oflag, ...); - int curlx_win32_stat(const char *path, struct_stat *buffer); - FILE *curlx_win32_fopen(const char *filename, const char *mode); +#include +#include +#include +#undef lseek +#define lseek(fdes, offset, whence) _lseeki64(fdes, offset, whence) +#undef fstat +#define fstat(fdes, stp) _fstati64(fdes, stp) +#undef stat +#define stat(fname, stp) curlx_win32_stat(fname, stp) +#define struct_stat struct _stati64 +#define LSEEK_ERROR (__int64)-1 +#define open curlx_win32_open +#define fopen(fname, mode) curlx_win32_fopen(fname, mode) +int curlx_win32_open(const char *filename, int oflag, ...); +int curlx_win32_stat(const char *path, struct_stat *buffer); +FILE *curlx_win32_fopen(const char *filename, const char *mode); #endif /* @@ -477,30 +471,30 @@ */ #ifdef USE_WIN32_SMALL_FILES -# include -# include -# include -# ifndef _WIN32_WCE -# undef lseek -# define lseek(fdes,offset,whence) _lseek(fdes, (long)offset, whence) -# define fstat(fdes,stp) _fstat(fdes, stp) -# define stat(fname,stp) curlx_win32_stat(fname, stp) -# define struct_stat struct _stat -# define open curlx_win32_open -# define fopen(fname,mode) curlx_win32_fopen(fname, mode) - int curlx_win32_stat(const char *path, struct_stat *buffer); - int curlx_win32_open(const char *filename, int oflag, ...); - FILE *curlx_win32_fopen(const char *filename, const char *mode); -# endif -# define LSEEK_ERROR (long)-1 +#include +#include +#include +#ifndef _WIN32_WCE +#undef lseek +#define lseek(fdes, offset, whence) _lseek(fdes, (long)offset, whence) +#define fstat(fdes, stp) _fstat(fdes, stp) +#define stat(fname, stp) curlx_win32_stat(fname, stp) +#define struct_stat struct _stat +#define open curlx_win32_open +#define fopen(fname, mode) curlx_win32_fopen(fname, mode) +int curlx_win32_stat(const char *path, struct_stat *buffer); +int curlx_win32_open(const char *filename, int oflag, ...); +FILE *curlx_win32_fopen(const char *filename, const char *mode); +#endif +#define LSEEK_ERROR (long)-1 #endif #ifndef struct_stat -# define struct_stat struct stat +#define struct_stat struct stat #endif #ifndef LSEEK_ERROR -# define LSEEK_ERROR (off_t)-1 +#define LSEEK_ERROR (off_t) - 1 #endif #ifndef SIZEOF_TIME_T @@ -510,20 +504,20 @@ #ifndef SIZEOF_CURL_SOCKET_T /* configure and cmake check and set the define */ -# ifdef _WIN64 -# define SIZEOF_CURL_SOCKET_T 8 -# else +#ifdef _WIN64 +#define SIZEOF_CURL_SOCKET_T 8 +#else /* default guess */ -# define SIZEOF_CURL_SOCKET_T 4 -# endif +#define SIZEOF_CURL_SOCKET_T 4 +#endif #endif #if SIZEOF_CURL_SOCKET_T < 8 -# define FMT_SOCKET_T "d" +#define FMT_SOCKET_T "d" #elif defined(__MINGW32__) -# define FMT_SOCKET_T "zd" +#define FMT_SOCKET_T "zd" #else -# define FMT_SOCKET_T "qd" +#define FMT_SOCKET_T "qd" #endif /* @@ -531,69 +525,69 @@ */ #ifndef SIZEOF_OFF_T -# if defined(__VMS) && !defined(__VAX) -# if defined(_LARGEFILE) -# define SIZEOF_OFF_T 8 -# endif -# elif defined(__OS400__) && defined(__ILEC400__) -# if defined(_LARGE_FILES) -# define SIZEOF_OFF_T 8 -# endif -# elif defined(__MVS__) && defined(__IBMC__) -# if defined(_LP64) || defined(_LARGE_FILES) -# define SIZEOF_OFF_T 8 -# endif -# elif defined(__370__) && defined(__IBMC__) -# if defined(_LP64) || defined(_LARGE_FILES) -# define SIZEOF_OFF_T 8 -# endif -# endif -# ifndef SIZEOF_OFF_T -# define SIZEOF_OFF_T 4 -# endif +#if defined(__VMS) && !defined(__VAX) +#if defined(_LARGEFILE) +#define SIZEOF_OFF_T 8 +#endif +#elif defined(__OS400__) && defined(__ILEC400__) +#if defined(_LARGE_FILES) +#define SIZEOF_OFF_T 8 +#endif +#elif defined(__MVS__) && defined(__IBMC__) +#if defined(_LP64) || defined(_LARGE_FILES) +#define SIZEOF_OFF_T 8 +#endif +#elif defined(__370__) && defined(__IBMC__) +#if defined(_LP64) || defined(_LARGE_FILES) +#define SIZEOF_OFF_T 8 +#endif +#endif +#ifndef SIZEOF_OFF_T +#define SIZEOF_OFF_T 4 +#endif #endif #if (SIZEOF_CURL_OFF_T < 8) #error "too small curl_off_t" #else - /* assume SIZEOF_CURL_OFF_T == 8 */ -# define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF) +/* assume SIZEOF_CURL_OFF_T == 8 */ +#define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF) #endif #define CURL_OFF_T_MIN (-CURL_OFF_T_MAX - CURL_OFF_T_C(1)) #if (SIZEOF_CURL_OFF_T != 8) -# error "curl_off_t must be exactly 64 bits" +#error "curl_off_t must be exactly 64 bits" #else - typedef unsigned CURL_TYPEOF_CURL_OFF_T curl_uint64_t; - typedef CURL_TYPEOF_CURL_OFF_T curl_int64_t; -# ifndef CURL_SUFFIX_CURL_OFF_TU -# error "CURL_SUFFIX_CURL_OFF_TU must be defined" -# endif -# define CURL_UINT64_SUFFIX CURL_SUFFIX_CURL_OFF_TU -# define CURL_UINT64_C(val) CURL_CONC_MACROS(val,CURL_UINT64_SUFFIX) -# define FMT_PRId64 CURL_FORMAT_CURL_OFF_T -# define FMT_PRIu64 CURL_FORMAT_CURL_OFF_TU +typedef unsigned CURL_TYPEOF_CURL_OFF_T curl_uint64_t; +typedef CURL_TYPEOF_CURL_OFF_T curl_int64_t; +#ifndef CURL_SUFFIX_CURL_OFF_TU +#error "CURL_SUFFIX_CURL_OFF_TU must be defined" +#endif +#define CURL_UINT64_SUFFIX CURL_SUFFIX_CURL_OFF_TU +#define CURL_UINT64_C(val) CURL_CONC_MACROS(val, CURL_UINT64_SUFFIX) +#define FMT_PRId64 CURL_FORMAT_CURL_OFF_T +#define FMT_PRIu64 CURL_FORMAT_CURL_OFF_TU #endif #define FMT_OFF_T CURL_FORMAT_CURL_OFF_T #define FMT_OFF_TU CURL_FORMAT_CURL_OFF_TU #if (SIZEOF_TIME_T == 4) -# ifdef HAVE_TIME_T_UNSIGNED -# define TIME_T_MAX UINT_MAX -# define TIME_T_MIN 0 -# else -# define TIME_T_MAX INT_MAX -# define TIME_T_MIN INT_MIN -# endif +#ifdef HAVE_TIME_T_UNSIGNED +#define TIME_T_MAX UINT_MAX +#define TIME_T_MIN 0 +#else +#define TIME_T_MAX INT_MAX +#define TIME_T_MIN INT_MIN +#endif +#else +#ifdef HAVE_TIME_T_UNSIGNED +#define TIME_T_MAX 0xFFFFFFFFFFFFFFFF +#define TIME_T_MIN 0 #else -# ifdef HAVE_TIME_T_UNSIGNED -# define TIME_T_MAX 0xFFFFFFFFFFFFFFFF -# define TIME_T_MIN 0 -# else -# define TIME_T_MAX 0x7FFFFFFFFFFFFFFF -# define TIME_T_MIN (-TIME_T_MAX - 1) -# endif +#define TIME_T_MAX 0x7FFFFFFFFFFFFFFF +#define TIME_T_MIN (-TIME_T_MAX - 1) +#endif #endif #ifndef SIZE_T_MAX @@ -619,11 +613,11 @@ */ #ifndef GETHOSTNAME_TYPE_ARG2 -# ifdef USE_WINSOCK -# define GETHOSTNAME_TYPE_ARG2 int -# else -# define GETHOSTNAME_TYPE_ARG2 size_t -# endif +#ifdef USE_WINSOCK +#define GETHOSTNAME_TYPE_ARG2 int +#else +#define GETHOSTNAME_TYPE_ARG2 size_t +#endif #endif /* Below we define some functions. They should @@ -634,32 +628,32 @@ #ifdef _WIN32 -# define DIR_CHAR "\\" +#define DIR_CHAR "\\" #else /* _WIN32 */ -# ifdef MSDOS /* Watt-32 */ +#ifdef MSDOS /* Watt-32 */ -# include -# define select(n,r,w,x,t) select_s(n,r,w,x,t) -# define ioctl(x,y,z) ioctlsocket(x,y,(char *)(z)) -# include -# ifdef word -# undef word -# endif -# ifdef byte -# undef byte -# endif +#include +#define select(n, r, w, x, t) select_s(n, r, w, x, t) +#define ioctl(x, y, z) ioctlsocket(x, y, (char *)(z)) +#include +#ifdef word +#undef word +#endif +#ifdef byte +#undef byte +#endif -# endif /* MSDOS */ +#endif /* MSDOS */ -# ifdef __minix - /* Minix 3 versions up to at least 3.1.3 are missing these prototypes */ - extern char *strtok_r(char *s, const char *delim, char **last); - extern struct tm *gmtime_r(const time_t * const timep, struct tm *tmp); -# endif +#ifdef __minix +/* Minix 3 versions up to at least 3.1.3 are missing these prototypes */ +extern char *strtok_r(char *s, const char *delim, char **last); +extern struct tm *gmtime_r(const time_t *const timep, struct tm *tmp); +#endif -# define DIR_CHAR "/" +#define DIR_CHAR "/" #endif /* _WIN32 */ @@ -674,8 +668,8 @@ */ #if defined(_MSC_VER) && !defined(_MT) -# undef USE_THREADS_POSIX -# undef USE_THREADS_WIN32 +#undef USE_THREADS_POSIX +#undef USE_THREADS_WIN32 #endif /* @@ -683,31 +677,31 @@ */ #if defined(USE_IPV6) && defined(HAVE_GETADDRINFO) -# define CURLRES_IPV6 +#define CURLRES_IPV6 #elif defined(USE_IPV6) && (defined(_WIN32) || defined(__CYGWIN__)) /* assume on Windows that IPv6 without getaddrinfo is a broken build */ -# error "Unexpected build: IPv6 is enabled but getaddrinfo was not found." +#error "Unexpected build: IPv6 is enabled but getaddrinfo was not found." #else -# define CURLRES_IPV4 +#define CURLRES_IPV4 #endif #ifdef USE_ARES -# define CURLRES_ASYNCH -# define CURLRES_ARES +#define CURLRES_ASYNCH +#define CURLRES_ARES /* now undef the stock libc functions just to avoid them being used */ -# undef HAVE_GETADDRINFO -# undef HAVE_FREEADDRINFO +#undef HAVE_GETADDRINFO +#undef HAVE_FREEADDRINFO #elif defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32) -# define CURLRES_ASYNCH -# define CURLRES_THREADED +#define CURLRES_ASYNCH +#define CURLRES_THREADED #else -# define CURLRES_SYNCH +#define CURLRES_SYNCH #endif /* ---------------------------------------------------------------- */ #if defined(HAVE_LIBIDN2) && defined(HAVE_IDN2_H) && \ - !defined(USE_WIN32_IDN) && !defined(USE_APPLE_IDN) + !defined(USE_WIN32_IDN) && !defined(USE_APPLE_IDN) /* The lib and header are present */ #define USE_LIBIDN2 #endif @@ -718,10 +712,10 @@ #define LIBIDN_REQUIRED_VERSION "0.4.1" -#if defined(USE_GNUTLS) || defined(USE_OPENSSL) || defined(USE_MBEDTLS) || \ - defined(USE_WOLFSSL) || defined(USE_SCHANNEL) || defined(USE_SECTRANSP) || \ - defined(USE_BEARSSL) || defined(USE_RUSTLS) -#define USE_SSL /* SSL support has been enabled */ +#if defined(USE_GNUTLS) || defined(USE_OPENSSL) || defined(USE_MBEDTLS) || \ + defined(USE_WOLFSSL) || defined(USE_SCHANNEL) || defined(USE_SECTRANSP) || \ + defined(USE_BEARSSL) || defined(USE_RUSTLS) +#define USE_SSL /* SSL support has been enabled */ #endif #if defined(USE_WOLFSSL) && defined(USE_GNUTLS) @@ -743,15 +737,15 @@ /* Single point where USE_NTLM definition might be defined */ #if !defined(CURL_DISABLE_NTLM) -# if defined(USE_OPENSSL) || defined(USE_MBEDTLS) || \ - defined(USE_GNUTLS) || defined(USE_SECTRANSP) || \ - defined(USE_OS400CRYPTO) || defined(USE_WIN32_CRYPTO) || \ - (defined(USE_WOLFSSL) && defined(HAVE_WOLFSSL_DES_ECB_ENCRYPT)) -# define USE_CURL_NTLM_CORE -# endif -# if defined(USE_CURL_NTLM_CORE) || defined(USE_WINDOWS_SSPI) -# define USE_NTLM -# endif +#if defined(USE_OPENSSL) || defined(USE_MBEDTLS) || defined(USE_GNUTLS) || \ + defined(USE_SECTRANSP) || defined(USE_OS400CRYPTO) || \ + defined(USE_WIN32_CRYPTO) || \ + (defined(USE_WOLFSSL) && defined(HAVE_WOLFSSL_DES_ECB_ENCRYPT)) +#define USE_CURL_NTLM_CORE +#endif +#if defined(USE_CURL_NTLM_CORE) || defined(USE_WINDOWS_SSPI) +#define USE_NTLM +#endif #endif #ifdef CURL_WANTS_CA_BUNDLE_ENV @@ -768,32 +762,33 @@ * we have multiple implementations of the same interface it may happen. */ -#if defined(__GNUC__) && ((__GNUC__ >= 3) || \ - ((__GNUC__ == 2) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 7))) -# define UNUSED_PARAM __attribute__((__unused__)) -# define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +#if defined(__GNUC__) && \ + ((__GNUC__ >= 3) || \ + ((__GNUC__ == 2) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 7))) +#define UNUSED_PARAM __attribute__((__unused__)) +#define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) #elif defined(__IAR_SYSTEMS_ICC__) -# define UNUSED_PARAM __attribute__((__unused__)) -# if (__VER__ >= 9040001) -# define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) -# else -# define WARN_UNUSED_RESULT -# endif +#define UNUSED_PARAM __attribute__((__unused__)) +#if (__VER__ >= 9040001) +#define WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +#else +#define WARN_UNUSED_RESULT +#endif #else -# define UNUSED_PARAM /* NOTHING */ -# define WARN_UNUSED_RESULT +#define UNUSED_PARAM /* NOTHING */ +#define WARN_UNUSED_RESULT #endif /* noreturn attribute */ #if !defined(CURL_NORETURN) #if (defined(__GNUC__) && (__GNUC__ >= 3)) || defined(__clang__) || \ - defined(__IAR_SYSTEMS_ICC__) -# define CURL_NORETURN __attribute__((__noreturn__)) + defined(__IAR_SYSTEMS_ICC__) +#define CURL_NORETURN __attribute__((__noreturn__)) #elif defined(_MSC_VER) && (_MSC_VER >= 1200) -# define CURL_NORETURN __declspec(noreturn) +#define CURL_NORETURN __declspec(noreturn) #else -# define CURL_NORETURN +#define CURL_NORETURN #endif #endif @@ -802,9 +797,11 @@ #if !defined(FALLTHROUGH) #if (defined(__GNUC__) && __GNUC__ >= 7) || \ (defined(__clang__) && __clang_major__ >= 10) -# define FALLTHROUGH() __attribute__((fallthrough)) +#define FALLTHROUGH() __attribute__((fallthrough)) #else -# define FALLTHROUGH() do {} while (0) +#define FALLTHROUGH() \ + do { \ + } while (0) #endif #endif @@ -821,7 +818,9 @@ */ #ifndef Curl_nop_stmt -# define Curl_nop_stmt do { } while(0) +#define Curl_nop_stmt \ + do { \ + } while (0) #endif /* @@ -829,9 +828,9 @@ */ #if defined(__LWIP_OPT_H__) || defined(LWIP_HDR_OPT_H) -# if defined(SOCKET) || defined(USE_WINSOCK) -# error "Winsock and lwIP TCP/IP stack definitions shall not coexist!" -# endif +#if defined(SOCKET) || defined(USE_WINSOCK) +#error "Winsock and lwIP TCP/IP stack definitions shall not coexist!" +#endif #endif /* @@ -885,31 +884,31 @@ endings either CRLF or LF so 't' is appropriate. /* for systems that do not detect this in configure */ #ifndef CURL_SA_FAMILY_T -# if defined(HAVE_SA_FAMILY_T) -# define CURL_SA_FAMILY_T sa_family_t -# elif defined(HAVE_ADDRESS_FAMILY) -# define CURL_SA_FAMILY_T ADDRESS_FAMILY -# else +#if defined(HAVE_SA_FAMILY_T) +#define CURL_SA_FAMILY_T sa_family_t +#elif defined(HAVE_ADDRESS_FAMILY) +#define CURL_SA_FAMILY_T ADDRESS_FAMILY +#else /* use a sensible default */ -# define CURL_SA_FAMILY_T unsigned short -# endif +#define CURL_SA_FAMILY_T unsigned short +#endif #endif /* Some convenience macros to get the larger/smaller value out of two given. We prefix with CURL to prevent name collisions. */ -#define CURLMAX(x,y) ((x)>(y)?(x):(y)) -#define CURLMIN(x,y) ((x)<(y)?(x):(y)) +#define CURLMAX(x, y) ((x) > (y) ? (x) : (y)) +#define CURLMIN(x, y) ((x) < (y) ? (x) : (y)) /* A convenience macro to provide both the string literal and the length of the string literal in one go, useful for functions that take "string,len" as their argument */ -#define STRCONST(x) x,sizeof(x)-1 +#define STRCONST(x) x, sizeof(x) - 1 /* Some versions of the Android SDK is missing the declaration */ #if defined(HAVE_GETPWUID_R) && defined(HAVE_DECL_GETPWUID_R_MISSING) struct passwd; -int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf, - size_t buflen, struct passwd **result); +int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf, size_t buflen, + struct passwd **result); #endif #ifdef UNITTESTS @@ -923,7 +922,7 @@ int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf, #define USE_HTTP2 #endif -#if (defined(USE_NGTCP2) && defined(USE_NGHTTP3)) || \ +#if (defined(USE_NGTCP2) && defined(USE_NGHTTP3)) || \ (defined(USE_OPENSSL_QUIC) && defined(USE_NGHTTP3)) || \ defined(USE_QUICHE) || defined(USE_MSH3) @@ -942,17 +941,17 @@ int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf, #endif #if defined(USE_UNIX_SOCKETS) && defined(_WIN32) -# if !defined(UNIX_PATH_MAX) - /* Replicating logic present in afunix.h - (distributed with newer Windows 10 SDK versions only) */ -# define UNIX_PATH_MAX 108 - /* !checksrc! disable TYPEDEFSTRUCT 1 */ - typedef struct sockaddr_un { - ADDRESS_FAMILY sun_family; - char sun_path[UNIX_PATH_MAX]; - } SOCKADDR_UN, *PSOCKADDR_UN; -# define WIN32_SOCKADDR_UN -# endif +#if !defined(UNIX_PATH_MAX) +/* Replicating logic present in afunix.h + (distributed with newer Windows 10 SDK versions only) */ +#define UNIX_PATH_MAX 108 +/* !checksrc! disable TYPEDEFSTRUCT 1 */ +typedef struct sockaddr_un { + ADDRESS_FAMILY sun_family; + char sun_path[UNIX_PATH_MAX]; +} SOCKADDR_UN, *PSOCKADDR_UN; +#define WIN32_SOCKADDR_UN +#endif #endif /* OpenSSLv3 marks DES, MD5 and ENGINE functions deprecated but we have no @@ -962,25 +961,25 @@ int getpwuid_r(uid_t uid, struct passwd *pwd, char *buf, #endif #if defined(inline) - /* 'inline' is defined as macro and assumed to be correct */ - /* No need for 'inline' replacement */ +/* 'inline' is defined as macro and assumed to be correct */ +/* No need for 'inline' replacement */ #elif defined(__cplusplus) - /* The code is compiled with C++ compiler. - C++ always supports 'inline'. */ - /* No need for 'inline' replacement */ +/* The code is compiled with C++ compiler. + C++ always supports 'inline'. */ +/* No need for 'inline' replacement */ #elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901 - /* C99 (and later) supports 'inline' keyword */ - /* No need for 'inline' replacement */ +/* C99 (and later) supports 'inline' keyword */ +/* No need for 'inline' replacement */ #elif defined(__GNUC__) && __GNUC__ >= 3 - /* GCC supports '__inline__' as an extension */ -# define inline __inline__ +/* GCC supports '__inline__' as an extension */ +#define inline __inline__ #elif defined(_MSC_VER) && _MSC_VER >= 1400 - /* MSC supports '__inline' from VS 2005 (or even earlier) */ -# define inline __inline +/* MSC supports '__inline' from VS 2005 (or even earlier) */ +#define inline __inline #else - /* Probably 'inline' is not supported by compiler. - Define to the empty string to be on the safe side. */ -# define inline /* empty */ +/* Probably 'inline' is not supported by compiler. + Define to the empty string to be on the safe side. */ +#define inline /* empty */ #endif #endif /* HEADER_CURL_SETUP_H */ diff --git a/vendor/hydra/vendor/curl/lib/curl_setup_once.h b/vendor/hydra/vendor/curl/lib/curl_setup_once.h index 1521e69f..94b9d242 100644 --- a/vendor/hydra/vendor/curl/lib/curl_setup_once.h +++ b/vendor/hydra/vendor/curl/lib/curl_setup_once.h @@ -24,17 +24,16 @@ * ***************************************************************************/ - /* * Inclusion of common header files. */ +#include +#include #include #include #include -#include #include -#include #ifdef HAVE_SYS_TYPES_H #include @@ -57,8 +56,8 @@ #endif #ifdef _WIN32 -#include #include +#include #endif #if defined(HAVE_STDBOOL_H) && defined(HAVE_BOOL_T) @@ -76,18 +75,18 @@ #ifdef USE_SCHANNEL /* Must set this before is included directly or indirectly by another Windows header. */ -# define SCHANNEL_USE_BLACKLISTS 1 +#define SCHANNEL_USE_BLACKLISTS 1 #endif #ifdef __hpux -# if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL) -# ifdef _APP32_64BIT_OFF_T -# define OLD_APP32_64BIT_OFF_T _APP32_64BIT_OFF_T -# undef _APP32_64BIT_OFF_T -# else -# undef OLD_APP32_64BIT_OFF_T -# endif -# endif +#if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL) +#ifdef _APP32_64BIT_OFF_T +#define OLD_APP32_64BIT_OFF_T _APP32_64BIT_OFF_T +#undef _APP32_64BIT_OFF_T +#else +#undef OLD_APP32_64BIT_OFF_T +#endif +#endif #endif #ifdef HAVE_SYS_SOCKET_H @@ -97,12 +96,12 @@ #include "functypes.h" #ifdef __hpux -# if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL) -# ifdef OLD_APP32_64BIT_OFF_T -# define _APP32_64BIT_OFF_T OLD_APP32_64BIT_OFF_T -# undef OLD_APP32_64BIT_OFF_T -# endif -# endif +#if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL) +#ifdef OLD_APP32_64BIT_OFF_T +#define _APP32_64BIT_OFF_T OLD_APP32_64BIT_OFF_T +#undef OLD_APP32_64BIT_OFF_T +#endif +#endif #endif /* @@ -111,12 +110,11 @@ #ifndef HAVE_STRUCT_TIMEVAL struct timeval { - long tv_sec; - long tv_usec; + long tv_sec; + long tv_usec; }; #endif - /* * If we have the MSG_NOSIGNAL define, make sure we use * it as the fourth argument of function send() @@ -128,12 +126,10 @@ struct timeval { #define SEND_4TH_ARG 0 #endif - #if defined(__minix) /* Minix does not support recv on TCP sockets */ -#define sread(x,y,z) (ssize_t)read((RECV_TYPE_ARG1)(x), \ - (RECV_TYPE_ARG2)(y), \ - (RECV_TYPE_ARG3)(z)) +#define sread(x, y, z) \ + (ssize_t) read((RECV_TYPE_ARG1)(x), (RECV_TYPE_ARG2)(y), (RECV_TYPE_ARG3)(z)) #elif defined(HAVE_RECV) /* @@ -158,58 +154,53 @@ struct timeval { * SEND_TYPE_RETV must also be defined. */ -#define sread(x,y,z) (ssize_t)recv((RECV_TYPE_ARG1)(x), \ - (RECV_TYPE_ARG2)(y), \ - (RECV_TYPE_ARG3)(z), \ - (RECV_TYPE_ARG4)(0)) +#define sread(x, y, z) \ + (ssize_t) recv((RECV_TYPE_ARG1)(x), (RECV_TYPE_ARG2)(y), \ + (RECV_TYPE_ARG3)(z), (RECV_TYPE_ARG4)(0)) #else /* HAVE_RECV */ #ifndef sread #error "Missing definition of macro sread!" #endif #endif /* HAVE_RECV */ - #if defined(__minix) /* Minix does not support send on TCP sockets */ -#define swrite(x,y,z) (ssize_t)write((SEND_TYPE_ARG1)(x), \ - (SEND_TYPE_ARG2)(y), \ - (SEND_TYPE_ARG3)(z)) +#define swrite(x, y, z) \ + (ssize_t) write((SEND_TYPE_ARG1)(x), (SEND_TYPE_ARG2)(y), (SEND_TYPE_ARG3)(z)) #elif defined(HAVE_SEND) -#define swrite(x,y,z) (ssize_t)send((SEND_TYPE_ARG1)(x), \ - (SEND_QUAL_ARG2 SEND_TYPE_ARG2)(y), \ - (SEND_TYPE_ARG3)(z), \ - (SEND_TYPE_ARG4)(SEND_4TH_ARG)) +#define swrite(x, y, z) \ + (ssize_t) send((SEND_TYPE_ARG1)(x), (SEND_QUAL_ARG2 SEND_TYPE_ARG2)(y), \ + (SEND_TYPE_ARG3)(z), (SEND_TYPE_ARG4)(SEND_4TH_ARG)) #else /* HAVE_SEND */ #ifndef swrite #error "Missing definition of macro swrite!" #endif #endif /* HAVE_SEND */ - /* * Function-like macro definition used to close a socket. */ #if defined(HAVE_CLOSESOCKET) -# define sclose(x) closesocket((x)) +#define sclose(x) closesocket((x)) #elif defined(HAVE_CLOSESOCKET_CAMEL) -# define sclose(x) CloseSocket((x)) +#define sclose(x) CloseSocket((x)) #elif defined(HAVE_CLOSE_S) -# define sclose(x) close_s((x)) +#define sclose(x) close_s((x)) #elif defined(USE_LWIPSOCK) -# define sclose(x) lwip_close((x)) +#define sclose(x) lwip_close((x)) #else -# define sclose(x) close((x)) +#define sclose(x) close((x)) #endif /* * Stack-independent version of fcntl() on sockets: */ #if defined(USE_LWIPSOCK) -# define sfcntl lwip_fcntl +#define sfcntl lwip_fcntl #else -# define sfcntl fcntl +#define sfcntl fcntl #endif /* @@ -217,13 +208,12 @@ struct timeval { */ #if defined(__hpux) && !defined(HAVE_BOOL_T) - typedef int bool; -# define false 0 -# define true 1 -# define HAVE_BOOL_T +typedef int bool; +#define false 0 +#define true 1 +#define HAVE_BOOL_T #endif - /* * 'bool' exists on platforms with , i.e. C99 platforms. * On non-C99 platforms there is no bool, so define an enum for that. @@ -232,10 +222,7 @@ struct timeval { */ #ifndef HAVE_BOOL_T - typedef enum { - bool_false = 0, - bool_true = 1 - } bool; +typedef enum { bool_false = 0, bool_true = 1 } bool; /* * Use a define to let 'true' and 'false' use those enums. There @@ -243,9 +230,9 @@ struct timeval { * there are some in the examples. This will cater for any later * code happening to use true and false. */ -# define false bool_false -# define true bool_true -# define HAVE_BOOL_T +#define false bool_false +#define true bool_true +#define HAVE_BOOL_T #endif /* the type we use for storing a single boolean bit */ @@ -254,7 +241,7 @@ typedef bool bit; #define BIT(x) bool x #else typedef unsigned int bit; -#define BIT(x) bit x:1 +#define BIT(x) bit x : 1 #endif /* @@ -273,7 +260,6 @@ typedef unsigned int bit; #include "curl_ctype.h" - /* * Macro used to include code only in debug builds. */ @@ -281,10 +267,11 @@ typedef unsigned int bit; #ifdef DEBUGBUILD #define DEBUGF(x) x #else -#define DEBUGF(x) do { } while(0) +#define DEBUGF(x) \ + do { \ + } while (0) #endif - /* * Macro used to include assertion code only in debug builds. */ @@ -293,101 +280,101 @@ typedef unsigned int bit; #if defined(DEBUGBUILD) #define DEBUGASSERT(x) assert(x) #else -#define DEBUGASSERT(x) do { } while(0) +#define DEBUGASSERT(x) \ + do { \ + } while (0) #endif - /* * Macro SOCKERRNO / SET_SOCKERRNO() returns / sets the *socket-related* errno * (or equivalent) on this platform to hide platform details to code using it. */ #ifdef USE_WINSOCK -#define SOCKERRNO ((int)WSAGetLastError()) -#define SET_SOCKERRNO(x) (WSASetLastError((int)(x))) +#define SOCKERRNO ((int)WSAGetLastError()) +#define SET_SOCKERRNO(x) (WSASetLastError((int)(x))) #else -#define SOCKERRNO (errno) -#define SET_SOCKERRNO(x) (errno = (x)) +#define SOCKERRNO (errno) +#define SET_SOCKERRNO(x) (errno = (x)) #endif - /* * Portable error number symbolic names defined to Winsock error codes. */ #ifdef USE_WINSOCK -#undef EBADF /* override definition in errno.h */ -#define EBADF WSAEBADF -#undef EINTR /* override definition in errno.h */ -#define EINTR WSAEINTR -#undef EINVAL /* override definition in errno.h */ -#define EINVAL WSAEINVAL -#undef EWOULDBLOCK /* override definition in errno.h */ -#define EWOULDBLOCK WSAEWOULDBLOCK -#undef EINPROGRESS /* override definition in errno.h */ -#define EINPROGRESS WSAEINPROGRESS -#undef EALREADY /* override definition in errno.h */ -#define EALREADY WSAEALREADY -#undef ENOTSOCK /* override definition in errno.h */ -#define ENOTSOCK WSAENOTSOCK -#undef EDESTADDRREQ /* override definition in errno.h */ -#define EDESTADDRREQ WSAEDESTADDRREQ -#undef EMSGSIZE /* override definition in errno.h */ -#define EMSGSIZE WSAEMSGSIZE -#undef EPROTOTYPE /* override definition in errno.h */ -#define EPROTOTYPE WSAEPROTOTYPE -#undef ENOPROTOOPT /* override definition in errno.h */ -#define ENOPROTOOPT WSAENOPROTOOPT -#undef EPROTONOSUPPORT /* override definition in errno.h */ -#define EPROTONOSUPPORT WSAEPROTONOSUPPORT -#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT -#undef EOPNOTSUPP /* override definition in errno.h */ -#define EOPNOTSUPP WSAEOPNOTSUPP -#define EPFNOSUPPORT WSAEPFNOSUPPORT -#undef EAFNOSUPPORT /* override definition in errno.h */ -#define EAFNOSUPPORT WSAEAFNOSUPPORT -#undef EADDRINUSE /* override definition in errno.h */ -#define EADDRINUSE WSAEADDRINUSE -#undef EADDRNOTAVAIL /* override definition in errno.h */ -#define EADDRNOTAVAIL WSAEADDRNOTAVAIL -#undef ENETDOWN /* override definition in errno.h */ -#define ENETDOWN WSAENETDOWN -#undef ENETUNREACH /* override definition in errno.h */ -#define ENETUNREACH WSAENETUNREACH -#undef ENETRESET /* override definition in errno.h */ -#define ENETRESET WSAENETRESET -#undef ECONNABORTED /* override definition in errno.h */ -#define ECONNABORTED WSAECONNABORTED -#undef ECONNRESET /* override definition in errno.h */ -#define ECONNRESET WSAECONNRESET -#undef ENOBUFS /* override definition in errno.h */ -#define ENOBUFS WSAENOBUFS -#undef EISCONN /* override definition in errno.h */ -#define EISCONN WSAEISCONN -#undef ENOTCONN /* override definition in errno.h */ -#define ENOTCONN WSAENOTCONN -#define ESHUTDOWN WSAESHUTDOWN -#define ETOOMANYREFS WSAETOOMANYREFS -#undef ETIMEDOUT /* override definition in errno.h */ -#define ETIMEDOUT WSAETIMEDOUT -#undef ECONNREFUSED /* override definition in errno.h */ -#define ECONNREFUSED WSAECONNREFUSED -#undef ELOOP /* override definition in errno.h */ -#define ELOOP WSAELOOP -#ifndef ENAMETOOLONG /* possible previous definition in errno.h */ -#define ENAMETOOLONG WSAENAMETOOLONG -#endif -#define EHOSTDOWN WSAEHOSTDOWN -#undef EHOSTUNREACH /* override definition in errno.h */ -#define EHOSTUNREACH WSAEHOSTUNREACH -#ifndef ENOTEMPTY /* possible previous definition in errno.h */ -#define ENOTEMPTY WSAENOTEMPTY -#endif -#define EPROCLIM WSAEPROCLIM -#define EUSERS WSAEUSERS -#define EDQUOT WSAEDQUOT -#define ESTALE WSAESTALE -#define EREMOTE WSAEREMOTE +#undef EBADF /* override definition in errno.h */ +#define EBADF WSAEBADF +#undef EINTR /* override definition in errno.h */ +#define EINTR WSAEINTR +#undef EINVAL /* override definition in errno.h */ +#define EINVAL WSAEINVAL +#undef EWOULDBLOCK /* override definition in errno.h */ +#define EWOULDBLOCK WSAEWOULDBLOCK +#undef EINPROGRESS /* override definition in errno.h */ +#define EINPROGRESS WSAEINPROGRESS +#undef EALREADY /* override definition in errno.h */ +#define EALREADY WSAEALREADY +#undef ENOTSOCK /* override definition in errno.h */ +#define ENOTSOCK WSAENOTSOCK +#undef EDESTADDRREQ /* override definition in errno.h */ +#define EDESTADDRREQ WSAEDESTADDRREQ +#undef EMSGSIZE /* override definition in errno.h */ +#define EMSGSIZE WSAEMSGSIZE +#undef EPROTOTYPE /* override definition in errno.h */ +#define EPROTOTYPE WSAEPROTOTYPE +#undef ENOPROTOOPT /* override definition in errno.h */ +#define ENOPROTOOPT WSAENOPROTOOPT +#undef EPROTONOSUPPORT /* override definition in errno.h */ +#define EPROTONOSUPPORT WSAEPROTONOSUPPORT +#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT +#undef EOPNOTSUPP /* override definition in errno.h */ +#define EOPNOTSUPP WSAEOPNOTSUPP +#define EPFNOSUPPORT WSAEPFNOSUPPORT +#undef EAFNOSUPPORT /* override definition in errno.h */ +#define EAFNOSUPPORT WSAEAFNOSUPPORT +#undef EADDRINUSE /* override definition in errno.h */ +#define EADDRINUSE WSAEADDRINUSE +#undef EADDRNOTAVAIL /* override definition in errno.h */ +#define EADDRNOTAVAIL WSAEADDRNOTAVAIL +#undef ENETDOWN /* override definition in errno.h */ +#define ENETDOWN WSAENETDOWN +#undef ENETUNREACH /* override definition in errno.h */ +#define ENETUNREACH WSAENETUNREACH +#undef ENETRESET /* override definition in errno.h */ +#define ENETRESET WSAENETRESET +#undef ECONNABORTED /* override definition in errno.h */ +#define ECONNABORTED WSAECONNABORTED +#undef ECONNRESET /* override definition in errno.h */ +#define ECONNRESET WSAECONNRESET +#undef ENOBUFS /* override definition in errno.h */ +#define ENOBUFS WSAENOBUFS +#undef EISCONN /* override definition in errno.h */ +#define EISCONN WSAEISCONN +#undef ENOTCONN /* override definition in errno.h */ +#define ENOTCONN WSAENOTCONN +#define ESHUTDOWN WSAESHUTDOWN +#define ETOOMANYREFS WSAETOOMANYREFS +#undef ETIMEDOUT /* override definition in errno.h */ +#define ETIMEDOUT WSAETIMEDOUT +#undef ECONNREFUSED /* override definition in errno.h */ +#define ECONNREFUSED WSAECONNREFUSED +#undef ELOOP /* override definition in errno.h */ +#define ELOOP WSAELOOP +#ifndef ENAMETOOLONG /* possible previous definition in errno.h */ +#define ENAMETOOLONG WSAENAMETOOLONG +#endif +#define EHOSTDOWN WSAEHOSTDOWN +#undef EHOSTUNREACH /* override definition in errno.h */ +#define EHOSTUNREACH WSAEHOSTUNREACH +#ifndef ENOTEMPTY /* possible previous definition in errno.h */ +#define ENOTEMPTY WSAENOTEMPTY +#endif +#define EPROCLIM WSAEPROCLIM +#define EUSERS WSAEUSERS +#define EDQUOT WSAEDQUOT +#define ESTALE WSAESTALE +#define EREMOTE WSAEREMOTE #endif /* @@ -395,14 +382,13 @@ typedef unsigned int bit; */ #ifdef __VMS -#define argv_item_t __char_ptr32 +#define argv_item_t __char_ptr32 #elif defined(_UNICODE) -#define argv_item_t wchar_t * +#define argv_item_t wchar_t* #else -#define argv_item_t char * +#define argv_item_t char* #endif - /* * We use this ZERO_NULL to avoid picky compiler warnings, * when assigning a NULL pointer to a function pointer var. @@ -410,5 +396,4 @@ typedef unsigned int bit; #define ZERO_NULL 0 - #endif /* HEADER_CURL_SETUP_ONCE_H */ diff --git a/vendor/hydra/vendor/curl/lib/curl_sha256.h b/vendor/hydra/vendor/curl/lib/curl_sha256.h index c3cf00a2..96d01765 100644 --- a/vendor/hydra/vendor/curl/lib/curl_sha256.h +++ b/vendor/hydra/vendor/curl/lib/curl_sha256.h @@ -25,10 +25,11 @@ * ***************************************************************************/ -#if !defined(CURL_DISABLE_AWS) || !defined(CURL_DISABLE_DIGEST_AUTH) \ - || defined(USE_LIBSSH2) +#if !defined(CURL_DISABLE_AWS) || !defined(CURL_DISABLE_DIGEST_AUTH) || \ + defined(USE_LIBSSH2) #include + #include "curl_hmac.h" extern const struct HMAC_params Curl_HMAC_SHA256[1]; diff --git a/vendor/hydra/vendor/curl/lib/curl_sha512_256.h b/vendor/hydra/vendor/curl/lib/curl_sha512_256.h index a84e77bc..f66acc71 100644 --- a/vendor/hydra/vendor/curl/lib/curl_sha512_256.h +++ b/vendor/hydra/vendor/curl/lib/curl_sha512_256.h @@ -27,6 +27,7 @@ #if !defined(CURL_DISABLE_DIGEST_AUTH) && !defined(CURL_DISABLE_SHA512_256) #include + #include "curl_hmac.h" #define CURL_HAVE_SHA512_256 @@ -35,9 +36,8 @@ extern const struct HMAC_params Curl_HMAC_SHA512_256[1]; #define CURL_SHA512_256_DIGEST_LENGTH 32 -CURLcode -Curl_sha512_256it(unsigned char *output, const unsigned char *input, - size_t input_size); +CURLcode Curl_sha512_256it(unsigned char *output, const unsigned char *input, + size_t input_size); #endif /* !CURL_DISABLE_DIGEST_AUTH && !CURL_DISABLE_SHA512_256 */ diff --git a/vendor/hydra/vendor/curl/lib/curl_sspi.h b/vendor/hydra/vendor/curl/lib/curl_sspi.h index 535a1ff6..2d5aa5fa 100644 --- a/vendor/hydra/vendor/curl/lib/curl_sspi.h +++ b/vendor/hydra/vendor/curl/lib/curl_sspi.h @@ -38,9 +38,9 @@ #undef SECURITY_WIN32 #undef SECURITY_KERNEL #define SECURITY_WIN32 1 +#include #include #include -#include CURLcode Curl_sspi_global_init(void); void Curl_sspi_global_cleanup(void); @@ -61,55 +61,54 @@ extern HMODULE Curl_hSecDll; extern PSecurityFunctionTable Curl_pSecFn; /* Provide some definitions missing in old headers */ -#define SP_NAME_DIGEST "WDigest" -#define SP_NAME_NTLM "NTLM" -#define SP_NAME_NEGOTIATE "Negotiate" -#define SP_NAME_KERBEROS "Kerberos" +#define SP_NAME_DIGEST "WDigest" +#define SP_NAME_NTLM "NTLM" +#define SP_NAME_NEGOTIATE "Negotiate" +#define SP_NAME_KERBEROS "Kerberos" #ifndef ISC_REQ_USE_HTTP_STYLE -#define ISC_REQ_USE_HTTP_STYLE 0x01000000 +#define ISC_REQ_USE_HTTP_STYLE 0x01000000 #endif #ifndef SEC_E_INVALID_PARAMETER -# define SEC_E_INVALID_PARAMETER ((HRESULT)0x8009035DL) +#define SEC_E_INVALID_PARAMETER ((HRESULT)0x8009035DL) #endif #ifndef SEC_E_DELEGATION_POLICY -# define SEC_E_DELEGATION_POLICY ((HRESULT)0x8009035EL) +#define SEC_E_DELEGATION_POLICY ((HRESULT)0x8009035EL) #endif #ifndef SEC_E_POLICY_NLTM_ONLY -# define SEC_E_POLICY_NLTM_ONLY ((HRESULT)0x8009035FL) +#define SEC_E_POLICY_NLTM_ONLY ((HRESULT)0x8009035FL) #endif #ifndef SEC_I_SIGNATURE_NEEDED -# define SEC_I_SIGNATURE_NEEDED ((HRESULT)0x0009035CL) +#define SEC_I_SIGNATURE_NEEDED ((HRESULT)0x0009035CL) #endif #ifndef CRYPT_E_REVOKED -# define CRYPT_E_REVOKED ((HRESULT)0x80092010L) +#define CRYPT_E_REVOKED ((HRESULT)0x80092010L) #endif #ifndef CRYPT_E_NO_REVOCATION_DLL -# define CRYPT_E_NO_REVOCATION_DLL ((HRESULT)0x80092011L) +#define CRYPT_E_NO_REVOCATION_DLL ((HRESULT)0x80092011L) #endif #ifndef CRYPT_E_NO_REVOCATION_CHECK -# define CRYPT_E_NO_REVOCATION_CHECK ((HRESULT)0x80092012L) +#define CRYPT_E_NO_REVOCATION_CHECK ((HRESULT)0x80092012L) #endif #ifndef CRYPT_E_REVOCATION_OFFLINE -# define CRYPT_E_REVOCATION_OFFLINE ((HRESULT)0x80092013L) +#define CRYPT_E_REVOCATION_OFFLINE ((HRESULT)0x80092013L) #endif #ifndef CRYPT_E_NOT_IN_REVOCATION_DATABASE -# define CRYPT_E_NOT_IN_REVOCATION_DATABASE ((HRESULT)0x80092014L) +#define CRYPT_E_NOT_IN_REVOCATION_DATABASE ((HRESULT)0x80092014L) #endif #ifdef UNICODE -# define SECFLAG_WINNT_AUTH_IDENTITY \ - (unsigned long)SEC_WINNT_AUTH_IDENTITY_UNICODE +#define SECFLAG_WINNT_AUTH_IDENTITY \ + (unsigned long)SEC_WINNT_AUTH_IDENTITY_UNICODE #else -# define SECFLAG_WINNT_AUTH_IDENTITY \ - (unsigned long)SEC_WINNT_AUTH_IDENTITY_ANSI +#define SECFLAG_WINNT_AUTH_IDENTITY (unsigned long)SEC_WINNT_AUTH_IDENTITY_ANSI #endif /* diff --git a/vendor/hydra/vendor/curl/lib/curl_threads.h b/vendor/hydra/vendor/curl/lib/curl_threads.h index be22352d..5a1388e6 100644 --- a/vendor/hydra/vendor/curl/lib/curl_threads.h +++ b/vendor/hydra/vendor/curl/lib/curl_threads.h @@ -26,40 +26,40 @@ #include "curl_setup.h" #if defined(USE_THREADS_POSIX) -# define CURL_STDCALL -# define curl_mutex_t pthread_mutex_t -# define curl_thread_t pthread_t * -# define curl_thread_t_null (pthread_t *)0 -# define Curl_mutex_init(m) pthread_mutex_init(m, NULL) -# define Curl_mutex_acquire(m) pthread_mutex_lock(m) -# define Curl_mutex_release(m) pthread_mutex_unlock(m) -# define Curl_mutex_destroy(m) pthread_mutex_destroy(m) +#define CURL_STDCALL +#define curl_mutex_t pthread_mutex_t +#define curl_thread_t pthread_t * +#define curl_thread_t_null (pthread_t *)0 +#define Curl_mutex_init(m) pthread_mutex_init(m, NULL) +#define Curl_mutex_acquire(m) pthread_mutex_lock(m) +#define Curl_mutex_release(m) pthread_mutex_unlock(m) +#define Curl_mutex_destroy(m) pthread_mutex_destroy(m) #elif defined(USE_THREADS_WIN32) -# define CURL_STDCALL __stdcall -# define curl_mutex_t CRITICAL_SECTION -# define curl_thread_t HANDLE -# define curl_thread_t_null (HANDLE)0 -# if !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_VISTA) || \ - (_WIN32_WINNT < _WIN32_WINNT_VISTA) -# define Curl_mutex_init(m) InitializeCriticalSection(m) -# else -# define Curl_mutex_init(m) InitializeCriticalSectionEx(m, 0, 1) -# endif -# define Curl_mutex_acquire(m) EnterCriticalSection(m) -# define Curl_mutex_release(m) LeaveCriticalSection(m) -# define Curl_mutex_destroy(m) DeleteCriticalSection(m) +#define CURL_STDCALL __stdcall +#define curl_mutex_t CRITICAL_SECTION +#define curl_thread_t HANDLE +#define curl_thread_t_null (HANDLE)0 +#if !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_VISTA) || \ + (_WIN32_WINNT < _WIN32_WINNT_VISTA) +#define Curl_mutex_init(m) InitializeCriticalSection(m) +#else +#define Curl_mutex_init(m) InitializeCriticalSectionEx(m, 0, 1) +#endif +#define Curl_mutex_acquire(m) EnterCriticalSection(m) +#define Curl_mutex_release(m) LeaveCriticalSection(m) +#define Curl_mutex_destroy(m) DeleteCriticalSection(m) #endif #if defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32) curl_thread_t Curl_thread_create( #if defined(_WIN32_WCE) || defined(CURL_WINDOWS_APP) - DWORD + DWORD #else - unsigned int + unsigned int #endif - (CURL_STDCALL *func) (void *), - void *arg); + (CURL_STDCALL *func)(void *), + void *arg); void Curl_thread_destroy(curl_thread_t hnd); diff --git a/vendor/hydra/vendor/curl/lib/curl_trc.h b/vendor/hydra/vendor/curl/lib/curl_trc.h index 5f675b45..0a3c6038 100644 --- a/vendor/hydra/vendor/curl/lib/curl_trc.h +++ b/vendor/hydra/vendor/curl/lib/curl_trc.h @@ -51,53 +51,64 @@ CURLcode Curl_trc_init(void); CURLcode Curl_trc_opt(const char *config); /* the function used to output verbose information */ -void Curl_debug(struct Curl_easy *data, curl_infotype type, - char *ptr, size_t size); +void Curl_debug(struct Curl_easy *data, curl_infotype type, char *ptr, + size_t size); /** * Output a failure message on registered callbacks for transfer. */ -void Curl_failf(struct Curl_easy *data, - const char *fmt, ...) CURL_PRINTF(2, 3); +void Curl_failf(struct Curl_easy *data, const char *fmt, ...) CURL_PRINTF(2, 3); #define failf Curl_failf -#define CURL_LOG_LVL_NONE 0 -#define CURL_LOG_LVL_INFO 1 - +#define CURL_LOG_LVL_NONE 0 +#define CURL_LOG_LVL_INFO 1 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L #define CURL_HAVE_C99 #endif #ifdef CURL_HAVE_C99 -#define infof(data, ...) \ - do { if(Curl_trc_is_verbose(data)) \ - Curl_infof(data, __VA_ARGS__); } while(0) -#define CURL_TRC_CF(data, cf, ...) \ - do { if(Curl_trc_cf_is_verbose(cf, data)) \ - Curl_trc_cf_infof(data, cf, __VA_ARGS__); } while(0) -#define CURL_TRC_WRITE(data, ...) \ - do { if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_write)) \ - Curl_trc_write(data, __VA_ARGS__); } while(0) -#define CURL_TRC_READ(data, ...) \ - do { if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_read)) \ - Curl_trc_read(data, __VA_ARGS__); } while(0) +#define infof(data, ...) \ + do { \ + if (Curl_trc_is_verbose(data)) Curl_infof(data, __VA_ARGS__); \ + } while (0) +#define CURL_TRC_CF(data, cf, ...) \ + do { \ + if (Curl_trc_cf_is_verbose(cf, data)) \ + Curl_trc_cf_infof(data, cf, __VA_ARGS__); \ + } while (0) +#define CURL_TRC_WRITE(data, ...) \ + do { \ + if (Curl_trc_ft_is_verbose(data, &Curl_trc_feat_write)) \ + Curl_trc_write(data, __VA_ARGS__); \ + } while (0) +#define CURL_TRC_READ(data, ...) \ + do { \ + if (Curl_trc_ft_is_verbose(data, &Curl_trc_feat_read)) \ + Curl_trc_read(data, __VA_ARGS__); \ + } while (0) #ifndef CURL_DISABLE_FTP -#define CURL_TRC_FTP(data, ...) \ - do { if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_ftp)) \ - Curl_trc_ftp(data, __VA_ARGS__); } while(0) +#define CURL_TRC_FTP(data, ...) \ + do { \ + if (Curl_trc_ft_is_verbose(data, &Curl_trc_feat_ftp)) \ + Curl_trc_ftp(data, __VA_ARGS__); \ + } while (0) #endif /* !CURL_DISABLE_FTP */ #ifndef CURL_DISABLE_SMTP -#define CURL_TRC_SMTP(data, ...) \ - do { if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_smtp)) \ - Curl_trc_smtp(data, __VA_ARGS__); } while(0) +#define CURL_TRC_SMTP(data, ...) \ + do { \ + if (Curl_trc_ft_is_verbose(data, &Curl_trc_feat_smtp)) \ + Curl_trc_smtp(data, __VA_ARGS__); \ + } while (0) #endif /* !CURL_DISABLE_SMTP */ #if defined(USE_WEBSOCKETS) && !defined(CURL_DISABLE_HTTP) -#define CURL_TRC_WS(data, ...) \ - do { if(Curl_trc_ft_is_verbose(data, &Curl_trc_feat_ws)) \ - Curl_trc_ws(data, __VA_ARGS__); } while(0) +#define CURL_TRC_WS(data, ...) \ + do { \ + if (Curl_trc_ft_is_verbose(data, &Curl_trc_feat_ws)) \ + Curl_trc_ws(data, __VA_ARGS__); \ + } while (0) #endif /* USE_WEBSOCKETS && !CURL_DISABLE_HTTP */ #else /* CURL_HAVE_C99 */ @@ -105,16 +116,16 @@ void Curl_failf(struct Curl_easy *data, #define infof Curl_infof #define CURL_TRC_CF Curl_trc_cf_infof #define CURL_TRC_WRITE Curl_trc_write -#define CURL_TRC_READ Curl_trc_read +#define CURL_TRC_READ Curl_trc_read #ifndef CURL_DISABLE_FTP -#define CURL_TRC_FTP Curl_trc_ftp +#define CURL_TRC_FTP Curl_trc_ftp #endif #ifndef CURL_DISABLE_SMTP -#define CURL_TRC_SMTP Curl_trc_smtp +#define CURL_TRC_SMTP Curl_trc_smtp #endif #if defined(USE_WEBSOCKETS) && !defined(CURL_DISABLE_HTTP) -#define CURL_TRC_WS Curl_trc_ws +#define CURL_TRC_WS Curl_trc_ws #endif #endif /* !CURL_HAVE_C99 */ @@ -129,22 +140,20 @@ struct curl_trc_feat { extern struct curl_trc_feat Curl_trc_feat_read; extern struct curl_trc_feat Curl_trc_feat_write; -#define Curl_trc_is_verbose(data) \ - ((data) && (data)->set.verbose && \ - (!(data)->state.feat || \ - ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO))) +#define Curl_trc_is_verbose(data) \ + ((data) && (data)->set.verbose && \ + (!(data)->state.feat || \ + ((data)->state.feat->log_level >= CURL_LOG_LVL_INFO))) #define Curl_trc_cf_is_verbose(cf, data) \ - (Curl_trc_is_verbose(data) && \ - (cf) && (cf)->cft->log_level >= CURL_LOG_LVL_INFO) + (Curl_trc_is_verbose(data) && (cf) && \ + (cf)->cft->log_level >= CURL_LOG_LVL_INFO) #define Curl_trc_ft_is_verbose(data, ft) \ - (Curl_trc_is_verbose(data) && \ - (ft)->log_level >= CURL_LOG_LVL_INFO) + (Curl_trc_is_verbose(data) && (ft)->log_level >= CURL_LOG_LVL_INFO) /** * Output an informational message when transfer's verbose logging is enabled. */ -void Curl_infof(struct Curl_easy *data, - const char *fmt, ...) CURL_PRINTF(2, 3); +void Curl_infof(struct Curl_easy *data, const char *fmt, ...) CURL_PRINTF(2, 3); /** * Output an informational message when both transfer's verbose logging @@ -154,76 +163,75 @@ void Curl_trc_cf_infof(struct Curl_easy *data, struct Curl_cfilter *cf, const char *fmt, ...) CURL_PRINTF(3, 4); void Curl_trc_ft_infof(struct Curl_easy *data, struct curl_trc_feat *ft, const char *fmt, ...) CURL_PRINTF(3, 4); -void Curl_trc_write(struct Curl_easy *data, - const char *fmt, ...) CURL_PRINTF(2, 3); -void Curl_trc_read(struct Curl_easy *data, - const char *fmt, ...) CURL_PRINTF(2, 3); +void Curl_trc_write(struct Curl_easy *data, const char *fmt, ...) + CURL_PRINTF(2, 3); +void Curl_trc_read(struct Curl_easy *data, const char *fmt, ...) + CURL_PRINTF(2, 3); #ifndef CURL_DISABLE_FTP extern struct curl_trc_feat Curl_trc_feat_ftp; -void Curl_trc_ftp(struct Curl_easy *data, - const char *fmt, ...) CURL_PRINTF(2, 3); +void Curl_trc_ftp(struct Curl_easy *data, const char *fmt, ...) + CURL_PRINTF(2, 3); #endif #ifndef CURL_DISABLE_SMTP extern struct curl_trc_feat Curl_trc_feat_smtp; -void Curl_trc_smtp(struct Curl_easy *data, - const char *fmt, ...) CURL_PRINTF(2, 3); +void Curl_trc_smtp(struct Curl_easy *data, const char *fmt, ...) + CURL_PRINTF(2, 3); #endif #if defined(USE_WEBSOCKETS) && !defined(CURL_DISABLE_HTTP) extern struct curl_trc_feat Curl_trc_feat_ws; -void Curl_trc_ws(struct Curl_easy *data, - const char *fmt, ...) CURL_PRINTF(2, 3); +void Curl_trc_ws(struct Curl_easy *data, const char *fmt, ...) + CURL_PRINTF(2, 3); #endif - #else /* defined(CURL_DISABLE_VERBOSE_STRINGS) */ /* All informational messages are not compiled in for size savings */ -#define Curl_trc_is_verbose(d) (FALSE) -#define Curl_trc_cf_is_verbose(x,y) (FALSE) -#define Curl_trc_ft_is_verbose(x,y) (FALSE) +#define Curl_trc_is_verbose(d) (FALSE) +#define Curl_trc_cf_is_verbose(x, y) (FALSE) +#define Curl_trc_ft_is_verbose(x, y) (FALSE) -static void Curl_infof(struct Curl_easy *data, const char *fmt, ...) -{ - (void)data; (void)fmt; +static void Curl_infof(struct Curl_easy *data, const char *fmt, ...) { + (void)data; + (void)fmt; } -static void Curl_trc_cf_infof(struct Curl_easy *data, - struct Curl_cfilter *cf, - const char *fmt, ...) -{ - (void)data; (void)cf; (void)fmt; +static void Curl_trc_cf_infof(struct Curl_easy *data, struct Curl_cfilter *cf, + const char *fmt, ...) { + (void)data; + (void)cf; + (void)fmt; } struct curl_trc_feat; -static void Curl_trc_ft_infof(struct Curl_easy *data, - struct curl_trc_feat *ft, - const char *fmt, ...) -{ - (void)data; (void)ft; (void)fmt; +static void Curl_trc_ft_infof(struct Curl_easy *data, struct curl_trc_feat *ft, + const char *fmt, ...) { + (void)data; + (void)ft; + (void)fmt; } -static void Curl_trc_write(struct Curl_easy *data, const char *fmt, ...) -{ - (void)data; (void)fmt; +static void Curl_trc_write(struct Curl_easy *data, const char *fmt, ...) { + (void)data; + (void)fmt; } -static void Curl_trc_read(struct Curl_easy *data, const char *fmt, ...) -{ - (void)data; (void)fmt; +static void Curl_trc_read(struct Curl_easy *data, const char *fmt, ...) { + (void)data; + (void)fmt; } #ifndef CURL_DISABLE_FTP -static void Curl_trc_ftp(struct Curl_easy *data, const char *fmt, ...) -{ - (void)data; (void)fmt; +static void Curl_trc_ftp(struct Curl_easy *data, const char *fmt, ...) { + (void)data; + (void)fmt; } #endif #ifndef CURL_DISABLE_SMTP -static void Curl_trc_smtp(struct Curl_easy *data, const char *fmt, ...) -{ - (void)data; (void)fmt; +static void Curl_trc_smtp(struct Curl_easy *data, const char *fmt, ...) { + (void)data; + (void)fmt; } #endif diff --git a/vendor/hydra/vendor/curl/lib/curlx.h b/vendor/hydra/vendor/curl/lib/curlx.h index 0391d7cd..8a72b3f5 100644 --- a/vendor/hydra/vendor/curl/lib/curlx.h +++ b/vendor/hydra/vendor/curl/lib/curlx.h @@ -33,7 +33,6 @@ /* map standard printf functions to curl implementations */ #include "curl_printf.h" - #include "strcase.h" /* "strcase.h" provides the strcasecompare protos */ diff --git a/vendor/hydra/vendor/curl/lib/cw-out.h b/vendor/hydra/vendor/curl/lib/cw-out.h index ca4c2e43..92e7fac0 100644 --- a/vendor/hydra/vendor/curl/lib/cw-out.h +++ b/vendor/hydra/vendor/curl/lib/cw-out.h @@ -25,7 +25,6 @@ ***************************************************************************/ #include "curl_setup.h" - #include "sendf.h" /** diff --git a/vendor/hydra/vendor/curl/lib/doh.h b/vendor/hydra/vendor/curl/lib/doh.h index aae32a65..cb62740a 100644 --- a/vendor/hydra/vendor/curl/lib/doh.h +++ b/vendor/hydra/vendor/curl/lib/doh.h @@ -24,24 +24,24 @@ * ***************************************************************************/ -#include "urldata.h" #include "curl_addrinfo.h" +#include "urldata.h" #ifdef USE_HTTPSRR -# include +#include #endif #ifndef CURL_DISABLE_DOH typedef enum { DOH_OK, - DOH_DNS_BAD_LABEL, /* 1 */ - DOH_DNS_OUT_OF_RANGE, /* 2 */ - DOH_DNS_LABEL_LOOP, /* 3 */ - DOH_TOO_SMALL_BUFFER, /* 4 */ - DOH_OUT_OF_MEM, /* 5 */ - DOH_DNS_RDATA_LEN, /* 6 */ - DOH_DNS_MALFORMAT, /* 7 */ - DOH_DNS_BAD_RCODE, /* 8 - no such name */ + DOH_DNS_BAD_LABEL, /* 1 */ + DOH_DNS_OUT_OF_RANGE, /* 2 */ + DOH_DNS_LABEL_LOOP, /* 3 */ + DOH_TOO_SMALL_BUFFER, /* 4 */ + DOH_OUT_OF_MEM, /* 5 */ + DOH_DNS_RDATA_LEN, /* 6 */ + DOH_DNS_MALFORMAT, /* 7 */ + DOH_DNS_BAD_RCODE, /* 8 - no such name */ DOH_DNS_UNEXPECTED_TYPE, /* 9 */ DOH_DNS_UNEXPECTED_CLASS, /* 10 */ DOH_NO_CONTENT, /* 11 */ @@ -54,7 +54,7 @@ typedef enum { DNS_TYPE_NS = 2, DNS_TYPE_CNAME = 5, DNS_TYPE_AAAA = 28, - DNS_TYPE_DNAME = 39, /* RFC6672 */ + DNS_TYPE_DNAME = 39, /* RFC6672 */ DNS_TYPE_HTTPS = 65 } DNStype; @@ -74,9 +74,9 @@ enum doh_slot_num { DOH_SLOT_IPV4 = 0, /* make 'V4' stand out for readability */ DOH_SLOT_IPV6 = 1, /* 'V6' likewise */ - /* Space here for (possibly build-specific) additional slot definitions */ +/* Space here for (possibly build-specific) additional slot definitions */ #ifdef USE_HTTPSRR - DOH_SLOT_HTTPS_RR = 2, /* for HTTPS RR */ + DOH_SLOT_HTTPS_RR = 2, /* for HTTPS RR */ #endif /* for example */ @@ -101,10 +101,8 @@ struct doh_probes { * and returns a 'Curl_addrinfo *' with the address information. */ -struct Curl_addrinfo *Curl_doh(struct Curl_easy *data, - const char *hostname, - int port, - int *waitp); +struct Curl_addrinfo *Curl_doh(struct Curl_easy *data, const char *hostname, + int port, int *waitp); CURLcode Curl_doh_is_resolved(struct Curl_easy *data, struct Curl_dns_entry **dns); @@ -129,22 +127,22 @@ struct dohaddr { * Not all are supported now, and even those that are may need * more work in future to fully support the spec. */ -#define HTTPS_RR_CODE_ALPN 0x01 -#define HTTPS_RR_CODE_NO_DEF_ALPN 0x02 -#define HTTPS_RR_CODE_PORT 0x03 -#define HTTPS_RR_CODE_IPV4 0x04 -#define HTTPS_RR_CODE_ECH 0x05 -#define HTTPS_RR_CODE_IPV6 0x06 +#define HTTPS_RR_CODE_ALPN 0x01 +#define HTTPS_RR_CODE_NO_DEF_ALPN 0x02 +#define HTTPS_RR_CODE_PORT 0x03 +#define HTTPS_RR_CODE_IPV4 0x04 +#define HTTPS_RR_CODE_ECH 0x05 +#define HTTPS_RR_CODE_IPV6 0x06 /* * These may need escaping when found within an ALPN string * value. */ -#define COMMA_CHAR ',' -#define BACKSLASH_CHAR '\\' +#define COMMA_CHAR ',' +#define BACKSLASH_CHAR '\\' struct dohhttps_rr { - uint16_t len; /* raw encoded length */ + uint16_t len; /* raw encoded length */ unsigned char *val; /* raw encoded octets */ }; #endif @@ -165,15 +163,12 @@ void Curl_doh_close(struct Curl_easy *data); void Curl_doh_cleanup(struct Curl_easy *data); #ifdef UNITTESTS -UNITTEST DOHcode doh_req_encode(const char *host, - DNStype dnstype, - unsigned char *dnsp, /* buffer */ - size_t len, /* buffer size */ - size_t *olen); /* output length */ -UNITTEST DOHcode doh_resp_decode(const unsigned char *doh, - size_t dohlen, - DNStype dnstype, - struct dohentry *d); +UNITTEST DOHcode doh_req_encode(const char *host, DNStype dnstype, + unsigned char *dnsp, /* buffer */ + size_t len, /* buffer size */ + size_t *olen); /* output length */ +UNITTEST DOHcode doh_resp_decode(const unsigned char *doh, size_t dohlen, + DNStype dnstype, struct dohentry *d); UNITTEST void de_init(struct dohentry *d); UNITTEST void de_cleanup(struct dohentry *d); @@ -182,8 +177,8 @@ UNITTEST void de_cleanup(struct dohentry *d); extern struct curl_trc_feat Curl_doh_trc; #else /* if DoH is disabled */ -#define Curl_doh(a,b,c,d) NULL -#define Curl_doh_is_resolved(x,y) CURLE_COULDNT_RESOLVE_HOST +#define Curl_doh(a, b, c, d) NULL +#define Curl_doh_is_resolved(x, y) CURLE_COULDNT_RESOLVE_HOST #endif #endif /* HEADER_CURL_DOH_H */ diff --git a/vendor/hydra/vendor/curl/lib/dynbuf.h b/vendor/hydra/vendor/curl/lib/dynbuf.h index 7dbaab88..02d032ce 100644 --- a/vendor/hydra/vendor/curl/lib/dynbuf.h +++ b/vendor/hydra/vendor/curl/lib/dynbuf.h @@ -29,9 +29,9 @@ #ifndef BUILDING_LIBCURL /* this renames the functions so that the tool code can use the same code without getting symbol collisions */ -#define Curl_dyn_init(a,b) curlx_dyn_init(a,b) -#define Curl_dyn_add(a,b) curlx_dyn_add(a,b) -#define Curl_dyn_addn(a,b,c) curlx_dyn_addn(a,b,c) +#define Curl_dyn_init(a, b) curlx_dyn_init(a, b) +#define Curl_dyn_add(a, b) curlx_dyn_add(a, b) +#define Curl_dyn_addn(a, b, c) curlx_dyn_addn(a, b, c) #define Curl_dyn_addf curlx_dyn_addf #define Curl_dyn_vaddf curlx_dyn_vaddf #define Curl_dyn_free(a) curlx_dyn_free(a) @@ -39,8 +39,8 @@ #define Curl_dyn_uptr(a) curlx_dyn_uptr(a) #define Curl_dyn_len(a) curlx_dyn_len(a) #define Curl_dyn_reset(a) curlx_dyn_reset(a) -#define Curl_dyn_tail(a,b) curlx_dyn_tail(a,b) -#define Curl_dyn_setlen(a,b) curlx_dyn_setlen(a,b) +#define Curl_dyn_tail(a, b) curlx_dyn_tail(a, b) +#define Curl_dyn_setlen(a, b) curlx_dyn_setlen(a, b) #define curlx_dynbuf dynbuf /* for the struct name */ #endif @@ -50,20 +50,19 @@ struct dynbuf { size_t allc; /* size of the current allocation */ size_t toobig; /* size limit for the buffer */ #ifdef DEBUGBUILD - int init; /* detect API usage mistakes */ + int init; /* detect API usage mistakes */ #endif }; void Curl_dyn_init(struct dynbuf *s, size_t toobig); void Curl_dyn_free(struct dynbuf *s); -CURLcode Curl_dyn_addn(struct dynbuf *s, const void *mem, size_t len) - WARN_UNUSED_RESULT; -CURLcode Curl_dyn_add(struct dynbuf *s, const char *str) - WARN_UNUSED_RESULT; -CURLcode Curl_dyn_addf(struct dynbuf *s, const char *fmt, ...) - WARN_UNUSED_RESULT CURL_PRINTF(2, 3); -CURLcode Curl_dyn_vaddf(struct dynbuf *s, const char *fmt, va_list ap) - WARN_UNUSED_RESULT CURL_PRINTF(2, 0); +CURLcode Curl_dyn_addn(struct dynbuf *s, const void *mem, + size_t len) WARN_UNUSED_RESULT; +CURLcode Curl_dyn_add(struct dynbuf *s, const char *str) WARN_UNUSED_RESULT; +CURLcode Curl_dyn_addf(struct dynbuf *s, const char *fmt, + ...) WARN_UNUSED_RESULT CURL_PRINTF(2, 3); +CURLcode Curl_dyn_vaddf(struct dynbuf *s, const char *fmt, + va_list ap) WARN_UNUSED_RESULT CURL_PRINTF(2, 0); void Curl_dyn_reset(struct dynbuf *s); CURLcode Curl_dyn_tail(struct dynbuf *s, size_t trail); CURLcode Curl_dyn_setlen(struct dynbuf *s, size_t set); @@ -76,18 +75,18 @@ size_t Curl_dyn_len(const struct dynbuf *s); int Curl_dyn_vprintf(struct dynbuf *dyn, const char *format, va_list ap_save); /* Dynamic buffer max sizes */ -#define DYN_DOH_RESPONSE 3000 -#define DYN_DOH_CNAME 256 -#define DYN_PAUSE_BUFFER (64 * 1024 * 1024) -#define DYN_HAXPROXY 2048 -#define DYN_HTTP_REQUEST (1024*1024) -#define DYN_APRINTF 8000000 -#define DYN_RTSP_REQ_HEADER (64*1024) -#define DYN_TRAILERS (64*1024) +#define DYN_DOH_RESPONSE 3000 +#define DYN_DOH_CNAME 256 +#define DYN_PAUSE_BUFFER (64 * 1024 * 1024) +#define DYN_HAXPROXY 2048 +#define DYN_HTTP_REQUEST (1024 * 1024) +#define DYN_APRINTF 8000000 +#define DYN_RTSP_REQ_HEADER (64 * 1024) +#define DYN_TRAILERS (64 * 1024) #define DYN_PROXY_CONNECT_HEADERS 16384 -#define DYN_QLOG_NAME 1024 -#define DYN_H1_TRAILER 4096 -#define DYN_PINGPPONG_CMD (64*1024) -#define DYN_IMAP_CMD (64*1024) -#define DYN_MQTT_RECV (64*1024) +#define DYN_QLOG_NAME 1024 +#define DYN_H1_TRAILER 4096 +#define DYN_PINGPPONG_CMD (64 * 1024) +#define DYN_IMAP_CMD (64 * 1024) +#define DYN_MQTT_RECV (64 * 1024) #endif diff --git a/vendor/hydra/vendor/curl/lib/dynhds.h b/vendor/hydra/vendor/curl/lib/dynhds.h index fb162a30..28c00969 100644 --- a/vendor/hydra/vendor/curl/lib/dynhds.h +++ b/vendor/hydra/vendor/curl/lib/dynhds.h @@ -23,9 +23,9 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -#include "curl_setup.h" - #include + +#include "curl_setup.h" #include "dynbuf.h" struct dynbuf; @@ -43,16 +43,16 @@ struct dynhds_entry { struct dynhds { struct dynhds_entry **hds; - size_t hds_len; /* number of entries in hds */ - size_t hds_allc; /* size of hds allocation */ + size_t hds_len; /* number of entries in hds */ + size_t hds_allc; /* size of hds allocation */ size_t max_entries; /* size limit number of entries */ - size_t strs_len; /* length of all strings */ + size_t strs_len; /* length of all strings */ size_t max_strs_size; /* max length of all strings */ int opts; }; -#define DYNHDS_OPT_NONE (0) -#define DYNHDS_OPT_LOWERCASE (1 << 0) +#define DYNHDS_OPT_NONE (0) +#define DYNHDS_OPT_LOWERCASE (1 << 0) /** * Init for use on first time or after a reset. @@ -91,8 +91,8 @@ struct dynhds_entry *Curl_dynhds_getn(struct dynhds *dynhds, size_t n); /** * Return the 1st header entry of the name or NULL if none exists. */ -struct dynhds_entry *Curl_dynhds_get(struct dynhds *dynhds, - const char *name, size_t namelen); +struct dynhds_entry *Curl_dynhds_get(struct dynhds *dynhds, const char *name, + size_t namelen); struct dynhds_entry *Curl_dynhds_cget(struct dynhds *dynhds, const char *name); #ifdef UNITTESTS @@ -101,16 +101,16 @@ struct dynhds_entry *Curl_dynhds_cget(struct dynhds *dynhds, const char *name); /** * Return TRUE iff one or more headers with the given name exist. */ -bool Curl_dynhds_contains(struct dynhds *dynhds, - const char *name, size_t namelen); +bool Curl_dynhds_contains(struct dynhds *dynhds, const char *name, + size_t namelen); bool Curl_dynhds_ccontains(struct dynhds *dynhds, const char *name); /** * Return how often the given name appears in `dynhds`. * Names are case-insensitive. */ -size_t Curl_dynhds_count_name(struct dynhds *dynhds, - const char *name, size_t namelen); +size_t Curl_dynhds_count_name(struct dynhds *dynhds, const char *name, + size_t namelen); /** * Return how often the given 0-terminated name appears in `dynhds`. @@ -122,37 +122,34 @@ size_t Curl_dynhds_ccount_name(struct dynhds *dynhds, const char *name); * Remove all entries with the given name. * Returns number of entries removed. */ -size_t Curl_dynhds_remove(struct dynhds *dynhds, - const char *name, size_t namelen); +size_t Curl_dynhds_remove(struct dynhds *dynhds, const char *name, + size_t namelen); size_t Curl_dynhds_cremove(struct dynhds *dynhds, const char *name); - /** * Set the give header name and value, replacing any entries with * the same name. The header is added at the end of all (remaining) * entries. */ -CURLcode Curl_dynhds_set(struct dynhds *dynhds, - const char *name, size_t namelen, - const char *value, size_t valuelen); +CURLcode Curl_dynhds_set(struct dynhds *dynhds, const char *name, + size_t namelen, const char *value, size_t valuelen); #endif -CURLcode Curl_dynhds_cset(struct dynhds *dynhds, - const char *name, const char *value); +CURLcode Curl_dynhds_cset(struct dynhds *dynhds, const char *name, + const char *value); /** * Add a header, name + value, to `dynhds` at the end. Does *not* * check for duplicate names. */ -CURLcode Curl_dynhds_add(struct dynhds *dynhds, - const char *name, size_t namelen, - const char *value, size_t valuelen); +CURLcode Curl_dynhds_add(struct dynhds *dynhds, const char *name, + size_t namelen, const char *value, size_t valuelen); /** * Add a header, c-string name + value, to `dynhds` at the end. */ -CURLcode Curl_dynhds_cadd(struct dynhds *dynhds, - const char *name, const char *value); +CURLcode Curl_dynhds_cadd(struct dynhds *dynhds, const char *name, + const char *value); /** * Add a single header from an HTTP/1.1 formatted line at the end. Line @@ -166,8 +163,8 @@ CURLcode Curl_dynhds_h1_cadd_line(struct dynhds *dynhds, const char *line); * may contain a delimiting \r\n or just \n. Any characters after * that will be ignored. */ -CURLcode Curl_dynhds_h1_add_line(struct dynhds *dynhds, - const char *line, size_t line_len); +CURLcode Curl_dynhds_h1_add_line(struct dynhds *dynhds, const char *line, + size_t line_len); /** * Add the headers to the given `dynbuf` in HTTP/1.1 format with @@ -177,8 +174,8 @@ CURLcode Curl_dynhds_h1_dprint(struct dynhds *dynhds, struct dynbuf *dbuf); #ifdef USE_NGHTTP2 -#include #include +#include nghttp2_nv *Curl_dynhds_to_nva(struct dynhds *dynhds, size_t *pcount); diff --git a/vendor/hydra/vendor/curl/lib/easy_lock.h b/vendor/hydra/vendor/curl/lib/easy_lock.h index 4f6764d4..c1213266 100644 --- a/vendor/hydra/vendor/curl/lib/easy_lock.h +++ b/vendor/hydra/vendor/curl/lib/easy_lock.h @@ -61,21 +61,19 @@ __has_builtin() function, so override it. */ /* if GCC on i386/x86_64 or if the built-in is present */ -#if ( (defined(__GNUC__) && !defined(__clang__)) && \ - (defined(__i386__) || defined(__x86_64__))) || \ - __has_builtin(__builtin_ia32_pause) +#if ((defined(__GNUC__) && !defined(__clang__)) && \ + (defined(__i386__) || defined(__x86_64__))) || \ + __has_builtin(__builtin_ia32_pause) #define HAVE_BUILTIN_IA32_PAUSE #endif #endif -static inline void curl_simple_lock_lock(curl_simple_lock *lock) -{ - for(;;) { - if(!atomic_exchange_explicit(lock, true, memory_order_acquire)) - break; +static inline void curl_simple_lock_lock(curl_simple_lock *lock) { + for (;;) { + if (!atomic_exchange_explicit(lock, true, memory_order_acquire)) break; /* Reduce cache coherency traffic */ - while(atomic_load_explicit(lock, memory_order_relaxed)) { + while (atomic_load_explicit(lock, memory_order_relaxed)) { /* Reduce load (not mandatory) */ #ifdef HAVE_BUILTIN_IA32_PAUSE __builtin_ia32_pause(); @@ -88,8 +86,7 @@ static inline void curl_simple_lock_lock(curl_simple_lock *lock) } } -static inline void curl_simple_lock_unlock(curl_simple_lock *lock) -{ +static inline void curl_simple_lock_unlock(curl_simple_lock *lock) { atomic_store_explicit(lock, false, memory_order_release); } @@ -104,7 +101,7 @@ static inline void curl_simple_lock_unlock(curl_simple_lock *lock) #else -#undef GLOBAL_INIT_IS_THREADSAFE +#undef GLOBAL_INIT_IS_THREADSAFE #endif diff --git a/vendor/hydra/vendor/curl/lib/escape.h b/vendor/hydra/vendor/curl/lib/escape.h index 690e4178..59bc0ee4 100644 --- a/vendor/hydra/vendor/curl/lib/escape.h +++ b/vendor/hydra/vendor/curl/lib/escape.h @@ -28,15 +28,10 @@ #include "curl_ctype.h" -enum urlreject { - REJECT_NADA = 2, - REJECT_CTRL, - REJECT_ZERO -}; +enum urlreject { REJECT_NADA = 2, REJECT_CTRL, REJECT_ZERO }; -CURLcode Curl_urldecode(const char *string, size_t length, - char **ostring, size_t *olen, - enum urlreject ctrl); +CURLcode Curl_urldecode(const char *string, size_t length, char **ostring, + size_t *olen, enum urlreject ctrl); void Curl_hexencode(const unsigned char *src, size_t len, /* input length */ unsigned char *out, size_t olen); /* output buffer size */ diff --git a/vendor/hydra/vendor/curl/lib/file.h b/vendor/hydra/vendor/curl/lib/file.h index 45655255..f11535f0 100644 --- a/vendor/hydra/vendor/curl/lib/file.h +++ b/vendor/hydra/vendor/curl/lib/file.h @@ -24,15 +24,14 @@ * ***************************************************************************/ - /**************************************************************************** * FILE unique setup ***************************************************************************/ struct FILEPROTO { - char *path; /* the path we operate on */ + char *path; /* the path we operate on */ char *freepath; /* pointer to the allocated block we must free, this might differ from the 'path' pointer */ - int fd; /* open file descriptor to read from! */ + int fd; /* open file descriptor to read from! */ }; #ifndef CURL_DISABLE_FILE diff --git a/vendor/hydra/vendor/curl/lib/fileinfo.h b/vendor/hydra/vendor/curl/lib/fileinfo.h index 0b3f56d9..3f175025 100644 --- a/vendor/hydra/vendor/curl/lib/fileinfo.h +++ b/vendor/hydra/vendor/curl/lib/fileinfo.h @@ -25,8 +25,9 @@ ***************************************************************************/ #include -#include "llist.h" + #include "dynbuf.h" +#include "llist.h" struct fileinfo { struct curl_fileinfo info; diff --git a/vendor/hydra/vendor/curl/lib/fopen.h b/vendor/hydra/vendor/curl/lib/fopen.h index e3a919d0..b49f1eaf 100644 --- a/vendor/hydra/vendor/curl/lib/fopen.h +++ b/vendor/hydra/vendor/curl/lib/fopen.h @@ -24,7 +24,7 @@ * ***************************************************************************/ -CURLcode Curl_fopen(struct Curl_easy *data, const char *filename, - FILE **fh, char **tempname); +CURLcode Curl_fopen(struct Curl_easy *data, const char *filename, FILE **fh, + char **tempname); #endif diff --git a/vendor/hydra/vendor/curl/lib/formdata.h b/vendor/hydra/vendor/curl/lib/formdata.h index 2ed96ffc..f07ebb38 100644 --- a/vendor/hydra/vendor/curl/lib/formdata.h +++ b/vendor/hydra/vendor/curl/lib/formdata.h @@ -36,7 +36,7 @@ struct FormInfo { curl_off_t contentslength; char *contenttype; long flags; - char *buffer; /* pointer to existing buffer used for file upload */ + char *buffer; /* pointer to existing buffer used for file upload */ size_t bufferlength; char *showfilename; /* The filename to show. If not set, the actual filename will be used */ @@ -49,11 +49,9 @@ struct FormInfo { bool showfilename_alloc; }; -CURLcode Curl_getformdata(struct Curl_easy *data, - curl_mimepart *, +CURLcode Curl_getformdata(struct Curl_easy *data, curl_mimepart *, struct curl_httppost *post, curl_read_callback fread_func); #endif /* CURL_DISABLE_FORM_API */ - #endif /* HEADER_CURL_FORMDATA_H */ diff --git a/vendor/hydra/vendor/curl/lib/ftp.h b/vendor/hydra/vendor/curl/lib/ftp.h index 3d0af015..9c37dbdd 100644 --- a/vendor/hydra/vendor/curl/lib/ftp.h +++ b/vendor/hydra/vendor/curl/lib/ftp.h @@ -25,7 +25,6 @@ ***************************************************************************/ #include "curl_setup.h" - #include "pingpong.h" #ifndef CURL_DISABLE_FTP @@ -60,26 +59,26 @@ enum { FTP_RETR_PREQUOTE, FTP_STOR_PREQUOTE, FTP_POSTQUOTE, - FTP_CWD, /* change dir */ - FTP_MKD, /* if the dir did not exist */ - FTP_MDTM, /* to figure out the datestamp */ - FTP_TYPE, /* to set type when doing a head-like request */ + FTP_CWD, /* change dir */ + FTP_MKD, /* if the dir did not exist */ + FTP_MDTM, /* to figure out the datestamp */ + FTP_TYPE, /* to set type when doing a head-like request */ FTP_LIST_TYPE, /* set type when about to do a dir list */ FTP_RETR_TYPE, /* set type when about to RETR a file */ FTP_STOR_TYPE, /* set type when about to STOR a file */ - FTP_SIZE, /* get the remote file's size for head-like request */ + FTP_SIZE, /* get the remote file's size for head-like request */ FTP_RETR_SIZE, /* get the remote file's size for RETR */ FTP_STOR_SIZE, /* get the size for STOR */ - FTP_REST, /* when used to check if the server supports it in head-like */ + FTP_REST, /* when used to check if the server supports it in head-like */ FTP_RETR_REST, /* when asking for "resume" in for RETR */ - FTP_PORT, /* generic state for PORT, LPRT and EPRT, check count1 */ - FTP_PRET, /* generic state for PRET RETR, PRET STOR and PRET LIST/NLST */ - FTP_PASV, /* generic state for PASV and EPSV, check count1 */ - FTP_LIST, /* generic state for LIST, NLST or a custom list command */ + FTP_PORT, /* generic state for PORT, LPRT and EPRT, check count1 */ + FTP_PRET, /* generic state for PRET RETR, PRET STOR and PRET LIST/NLST */ + FTP_PASV, /* generic state for PASV and EPSV, check count1 */ + FTP_LIST, /* generic state for LIST, NLST or a custom list command */ FTP_RETR, FTP_STOR, /* generic state for STOR and APPE */ FTP_QUIT, - FTP_LAST /* never used */ + FTP_LAST /* never used */ }; typedef unsigned char ftpstate; /* use the enum values */ @@ -95,10 +94,10 @@ struct ftp_wc { }; typedef enum { - FTPFILE_MULTICWD = 1, /* as defined by RFC1738 */ - FTPFILE_NOCWD = 2, /* use SIZE / RETR / STOR on the full path */ - FTPFILE_SINGLECWD = 3 /* make one CWD, then SIZE / RETR / STOR on the - file */ + FTPFILE_MULTICWD = 1, /* as defined by RFC1738 */ + FTPFILE_NOCWD = 2, /* use SIZE / RETR / STOR on the full path */ + FTPFILE_SINGLECWD = 3 /* make one CWD, then SIZE / RETR / STOR on the + file */ } curl_ftpfile; /* This FTP struct is used in the Curl_easy. All FTP data that is @@ -106,7 +105,7 @@ typedef enum { perhaps the Curl_easy is changed between the times the connection is used. */ struct FTP { - char *path; /* points to the urlpieces struct field */ + char *path; /* points to the urlpieces struct field */ char *pathalloc; /* if non-NULL a pointer to an allocated path */ /* transfer a file/body or not, done as a typedefed enum just to make @@ -115,7 +114,6 @@ struct FTP { curl_off_t downloadsize; }; - /* ftp_conn is used for struct connection-oriented data in the connectdata struct */ struct ftp_conn { @@ -123,45 +121,45 @@ struct ftp_conn { char *account; char *alternative_to_user; char *entrypath; /* the PWD reply when we logged on */ - char *file; /* url-decoded filename (or path) */ - char **dirs; /* realloc()ed array for path components */ + char *file; /* url-decoded filename (or path) */ + char **dirs; /* realloc()ed array for path components */ char *newhost; - char *prevpath; /* url-decoded conn->path from the previous transfer */ + char *prevpath; /* url-decoded conn->path from the previous transfer */ char transfertype; /* set by ftp_transfertype for use by Curl_client_write()a and others (A/I or zero) */ curl_off_t retr_size_saved; /* Size of retrieved file saved */ - char *server_os; /* The target server operating system. */ - curl_off_t known_filesize; /* file size is different from -1, if wildcard - LIST parsing was done and wc_statemach set - it */ - int dirdepth; /* number of entries used in the 'dirs' array */ - int cwdcount; /* number of CWD commands issued */ + char *server_os; /* The target server operating system. */ + curl_off_t known_filesize; /* file size is different from -1, if wildcard + LIST parsing was done and wc_statemach set + it */ + int dirdepth; /* number of entries used in the 'dirs' array */ + int cwdcount; /* number of CWD commands issued */ int count1; /* general purpose counter for the state machine */ int count2; /* general purpose counter for the state machine */ int count3; /* general purpose counter for the state machine */ /* newhost is the (allocated) IP addr or hostname to connect the data connection to */ unsigned short newport; - ftpstate state; /* always use ftp.c:state() to change state! */ - ftpstate state_saved; /* transfer type saved to be reloaded after data - connection is established */ - unsigned char use_ssl; /* if AUTH TLS is to be attempted etc, for FTP or - IMAP or POP3 or others! (type: curl_usessl)*/ - unsigned char ccc; /* ccc level for this connection */ + ftpstate state; /* always use ftp.c:state() to change state! */ + ftpstate state_saved; /* transfer type saved to be reloaded after data + connection is established */ + unsigned char use_ssl; /* if AUTH TLS is to be attempted etc, for FTP or + IMAP or POP3 or others! (type: curl_usessl)*/ + unsigned char ccc; /* ccc level for this connection */ BIT(ftp_trying_alternative); - BIT(dont_check); /* Set to TRUE to prevent the final (post-transfer) - file size and 226/250 status check. It should still - read the line, just ignore the result. */ - BIT(ctl_valid); /* Tells Curl_ftp_quit() whether or not to do anything. If - the connection has timed out or been closed, this - should be FALSE when it gets to Curl_ftp_quit() */ - BIT(cwddone); /* if it has been determined that the proper CWD combo - already has been done */ - BIT(cwdfail); /* set TRUE if a CWD command fails, as then we must prevent - caching the current directory */ + BIT(dont_check); /* Set to TRUE to prevent the final (post-transfer) + file size and 226/250 status check. It should still + read the line, just ignore the result. */ + BIT(ctl_valid); /* Tells Curl_ftp_quit() whether or not to do anything. If + the connection has timed out or been closed, this + should be FALSE when it gets to Curl_ftp_quit() */ + BIT(cwddone); /* if it has been determined that the proper CWD combo + already has been done */ + BIT(cwdfail); /* set TRUE if a CWD command fails, as then we must prevent + caching the current directory */ BIT(wait_data_conn); /* this is set TRUE if data connection is waited */ }; -#define DEFAULT_ACCEPT_TIMEOUT 60000 /* milliseconds == one minute */ +#define DEFAULT_ACCEPT_TIMEOUT 60000 /* milliseconds == one minute */ #endif /* HEADER_CURL_FTP_H */ diff --git a/vendor/hydra/vendor/curl/lib/ftplistparser.h b/vendor/hydra/vendor/curl/lib/ftplistparser.h index 5ba1f6a9..af8d53ee 100644 --- a/vendor/hydra/vendor/curl/lib/ftplistparser.h +++ b/vendor/hydra/vendor/curl/lib/ftplistparser.h @@ -57,10 +57,10 @@ typedef void (*wildcard_dtor)(void *ptr); /* struct keeping information about wildcard download process */ struct WildcardData { - char *path; /* path to the directory, where we trying wildcard-match */ + char *path; /* path to the directory, where we trying wildcard-match */ char *pattern; /* wildcard pattern */ struct Curl_llist filelist; /* llist with struct Curl_fileinfo */ - struct ftp_wc *ftpwc; /* pointer to FTP wildcard data */ + struct ftp_wc *ftpwc; /* pointer to FTP wildcard data */ wildcard_dtor dtor; unsigned char state; /* wildcard_states */ }; diff --git a/vendor/hydra/vendor/curl/lib/functypes.h b/vendor/hydra/vendor/curl/lib/functypes.h index ea66d328..f049657d 100644 --- a/vendor/hydra/vendor/curl/lib/functypes.h +++ b/vendor/hydra/vendor/curl/lib/functypes.h @@ -41,13 +41,13 @@ #ifdef _WIN32 /* int recv(SOCKET, char *, int, int) */ #define RECV_TYPE_ARG1 SOCKET -#define RECV_TYPE_ARG2 char * +#define RECV_TYPE_ARG2 char* #define RECV_TYPE_ARG3 int #define RECV_TYPE_RETV int /* int send(SOCKET, const char *, int, int); */ #define SEND_TYPE_ARG1 SOCKET -#define SEND_TYPE_ARG2 char * +#define SEND_TYPE_ARG2 char* #define SEND_TYPE_ARG3 int #define SEND_TYPE_RETV int @@ -55,25 +55,24 @@ /* long recv(long, char *, long, long); */ #define RECV_TYPE_ARG1 long -#define RECV_TYPE_ARG2 char * +#define RECV_TYPE_ARG2 char* #define RECV_TYPE_ARG3 long #define RECV_TYPE_ARG4 long #define RECV_TYPE_RETV long /* int send(int, const char *, int, int); */ #define SEND_TYPE_ARG1 int -#define SEND_TYPE_ARG2 char * +#define SEND_TYPE_ARG2 char* #define SEND_TYPE_ARG3 int #define SEND_TYPE_RETV int #endif - #ifndef RECV_TYPE_ARG1 #define RECV_TYPE_ARG1 int #endif #ifndef RECV_TYPE_ARG2 -#define RECV_TYPE_ARG2 void * +#define RECV_TYPE_ARG2 void* #endif #ifndef RECV_TYPE_ARG3 @@ -97,7 +96,7 @@ #endif #ifndef SEND_TYPE_ARG2 -#define SEND_TYPE_ARG2 void * +#define SEND_TYPE_ARG2 void* #endif #ifndef SEND_TYPE_ARG3 diff --git a/vendor/hydra/vendor/curl/lib/hash.h b/vendor/hydra/vendor/curl/lib/hash.h index b1603950..9db024e5 100644 --- a/vendor/hydra/vendor/curl/lib/hash.h +++ b/vendor/hydra/vendor/curl/lib/hash.h @@ -24,24 +24,19 @@ * ***************************************************************************/ -#include "curl_setup.h" - #include +#include "curl_setup.h" #include "llist.h" /* Hash function prototype */ -typedef size_t (*hash_function) (void *key, - size_t key_length, - size_t slots_num); +typedef size_t (*hash_function)(void *key, size_t key_length, size_t slots_num); /* Comparator function prototype. Compares two keys. */ -typedef size_t (*comp_function) (void *key1, - size_t key1_len, - void *key2, - size_t key2_len); +typedef size_t (*comp_function)(void *key1, size_t key1_len, void *key2, + size_t key2_len); typedef void (*Curl_hash_dtor)(void *); @@ -53,7 +48,7 @@ struct Curl_hash { /* Comparator function to compare keys */ comp_function comp_func; - Curl_hash_dtor dtor; + Curl_hash_dtor dtor; size_t slots; size_t size; #ifdef DEBUGBUILD @@ -65,13 +60,13 @@ typedef void (*Curl_hash_elem_dtor)(void *key, size_t key_len, void *p); struct Curl_hash_element { struct Curl_llist_node list; - void *ptr; + void *ptr; Curl_hash_elem_dtor dtor; size_t key_len; #ifdef DEBUGBUILD int init; #endif - char key[1]; /* allocated memory following the struct */ + char key[1]; /* allocated memory following the struct */ }; struct Curl_hash_iterator { @@ -83,11 +78,8 @@ struct Curl_hash_iterator { #endif }; -void Curl_hash_init(struct Curl_hash *h, - size_t slots, - hash_function hfunc, - comp_function comparator, - Curl_hash_dtor dtor); +void Curl_hash_init(struct Curl_hash *h, size_t slots, hash_function hfunc, + comp_function comparator, Curl_hash_dtor dtor); void *Curl_hash_add(struct Curl_hash *h, void *key, size_t key_len, void *p); void *Curl_hash_add2(struct Curl_hash *h, void *key, size_t key_len, void *p, @@ -105,11 +97,10 @@ size_t Curl_str_key_compare(void *k1, size_t key1_len, void *k2, size_t key2_len); void Curl_hash_start_iterate(struct Curl_hash *hash, struct Curl_hash_iterator *iter); -struct Curl_hash_element * -Curl_hash_next_element(struct Curl_hash_iterator *iter); +struct Curl_hash_element *Curl_hash_next_element( + struct Curl_hash_iterator *iter); -void Curl_hash_print(struct Curl_hash *h, - void (*func)(void *)); +void Curl_hash_print(struct Curl_hash *h, void (*func)(void *)); /* Hash for `curl_off_t` as key */ void Curl_hash_offt_init(struct Curl_hash *h, size_t slots, @@ -119,5 +110,4 @@ void *Curl_hash_offt_set(struct Curl_hash *h, curl_off_t id, void *elem); int Curl_hash_offt_remove(struct Curl_hash *h, curl_off_t id); void *Curl_hash_offt_get(struct Curl_hash *h, curl_off_t id); - #endif /* HEADER_CURL_HASH_H */ diff --git a/vendor/hydra/vendor/curl/lib/headers.h b/vendor/hydra/vendor/curl/lib/headers.h index e11fe980..59b43f0a 100644 --- a/vendor/hydra/vendor/curl/lib/headers.h +++ b/vendor/hydra/vendor/curl/lib/headers.h @@ -29,11 +29,11 @@ struct Curl_header_store { struct Curl_llist_node node; - char *name; /* points into 'buffer' */ - char *value; /* points into 'buffer */ - int request; /* 0 is the first request, then 1.. 2.. */ + char *name; /* points into 'buffer' */ + char *value; /* points into 'buffer */ + int request; /* 0 is the first request, then 1.. 2.. */ unsigned char type; /* CURLH_* defines */ - char buffer[1]; /* this is the raw header blob */ + char buffer[1]; /* this is the raw header blob */ }; /* @@ -55,7 +55,7 @@ CURLcode Curl_headers_cleanup(struct Curl_easy *data); #else #define Curl_headers_init(x) CURLE_OK -#define Curl_headers_push(x,y,z) CURLE_OK +#define Curl_headers_push(x, y, z) CURLE_OK #define Curl_headers_cleanup(x) Curl_nop_stmt #endif diff --git a/vendor/hydra/vendor/curl/lib/hostip.h b/vendor/hydra/vendor/curl/lib/hostip.h index b1c5ecb2..fe758fd9 100644 --- a/vendor/hydra/vendor/curl/lib/hostip.h +++ b/vendor/hydra/vendor/curl/lib/hostip.h @@ -24,16 +24,16 @@ * ***************************************************************************/ +#include + +#include "asyn.h" +#include "curl_addrinfo.h" #include "curl_setup.h" #include "hash.h" -#include "curl_addrinfo.h" #include "timeval.h" /* for timediff_t */ -#include "asyn.h" - -#include #ifdef USE_HTTPSRR -# include +#include #endif /* Allocate enough memory to hold the full name information structs and @@ -43,8 +43,9 @@ */ #define CURL_HOSTENT_SIZE 9000 -#define CURL_TIMEOUT_RESOLVE 300 /* when using asynch methods, we allow this - many seconds for a name resolve */ +#define CURL_TIMEOUT_RESOLVE \ + 300 /* when using asynch methods, we allow this \ + many seconds for a name resolve */ #define CURL_ASYNC_SUCCESS CURLE_OK @@ -67,7 +68,7 @@ struct Curl_hash *Curl_global_host_cache_init(void); #define CURL_MAXLEN_host_name 253 struct Curl_https_rrinfo { - size_t len; /* raw encoded length */ + size_t len; /* raw encoded length */ unsigned char *val; /* raw encoded octets */ /* * fields from HTTPS RR, with the mandatory fields @@ -77,7 +78,7 @@ struct Curl_https_rrinfo { */ uint16_t priority; char *target; - char *alpns; /* keytag = 1 */ + char *alpns; /* keytag = 1 */ bool no_def_alpn; /* keytag = 2 */ /* * we do not support ports (keytag = 3) as we do not support @@ -119,18 +120,15 @@ bool Curl_host_is_ipnum(const char *hostname); /* return codes */ enum resolve_t { CURLRESOLV_TIMEDOUT = -2, - CURLRESOLV_ERROR = -1, - CURLRESOLV_RESOLVED = 0, - CURLRESOLV_PENDING = 1 + CURLRESOLV_ERROR = -1, + CURLRESOLV_RESOLVED = 0, + CURLRESOLV_PENDING = 1 }; -enum resolve_t Curl_resolv(struct Curl_easy *data, - const char *hostname, - int port, - bool allowDOH, +enum resolve_t Curl_resolv(struct Curl_easy *data, const char *hostname, + int port, bool allowDOH, struct Curl_dns_entry **dnsentry); -enum resolve_t Curl_resolv_timeout(struct Curl_easy *data, - const char *hostname, int port, - struct Curl_dns_entry **dnsentry, +enum resolve_t Curl_resolv_timeout(struct Curl_easy *data, const char *hostname, + int port, struct Curl_dns_entry **dnsentry, timediff_t timeoutms); #ifdef USE_IPV6 @@ -148,7 +146,6 @@ bool Curl_ipv6works(struct Curl_easy *data); */ bool Curl_ipvalid(struct Curl_easy *data, struct connectdata *conn); - /* * Curl_getaddrinfo() is the generic low-level name resolve API within this * source file. There are several versions of this function - for different @@ -156,14 +153,11 @@ bool Curl_ipvalid(struct Curl_easy *data, struct connectdata *conn); * of arguments */ struct Curl_addrinfo *Curl_getaddrinfo(struct Curl_easy *data, - const char *hostname, - int port, + const char *hostname, int port, int *waitp); - /* unlink a dns entry, potentially shared with a cache */ -void Curl_resolv_unlink(struct Curl_easy *data, - struct Curl_dns_entry **pdns); +void Curl_resolv_unlink(struct Curl_easy *data, struct Curl_dns_entry **pdns); /* init a new dns cache */ void Curl_init_dnscache(struct Curl_hash *hash, size_t hashsize); @@ -182,8 +176,7 @@ CURLcode Curl_once_resolved(struct Curl_easy *data, bool *protocol_connect); * status is CURL_ASYNC_SUCCESS. Twiddles fields in conn to indicate async * request completed whether successful or failed. */ -CURLcode Curl_addrinfo_callback(struct Curl_easy *data, - int status, +CURLcode Curl_addrinfo_callback(struct Curl_easy *data, int status, struct Curl_addrinfo *ai); /* @@ -191,8 +184,8 @@ CURLcode Curl_addrinfo_callback(struct Curl_easy *data, * given in the 'ip' argument. The result will be stored in the buf that is * bufsize bytes big. */ -void Curl_printable_address(const struct Curl_addrinfo *ip, - char *buf, size_t bufsize); +void Curl_printable_address(const struct Curl_addrinfo *ip, char *buf, + size_t bufsize); /* * Curl_fetch_addr() fetches a 'Curl_dns_entry' already in the DNS cache. @@ -202,20 +195,18 @@ void Curl_printable_address(const struct Curl_addrinfo *ip, * The returned data *MUST* be "released" with Curl_resolv_unlink() after * use, or we will leak memory! */ -struct Curl_dns_entry * -Curl_fetch_addr(struct Curl_easy *data, - const char *hostname, - int port); +struct Curl_dns_entry *Curl_fetch_addr(struct Curl_easy *data, + const char *hostname, int port); /* * Curl_cache_addr() stores a 'Curl_addrinfo' struct in the DNS cache. * @param permanent iff TRUE, entry will never become stale * Returns the Curl_dns_entry entry pointer or NULL if the storage failed. */ -struct Curl_dns_entry * -Curl_cache_addr(struct Curl_easy *data, struct Curl_addrinfo *addr, - const char *hostname, size_t hostlen, int port, - bool permanent); +struct Curl_dns_entry *Curl_cache_addr(struct Curl_easy *data, + struct Curl_addrinfo *addr, + const char *hostname, size_t hostlen, + int port, bool permanent); #ifndef INADDR_NONE #define CURL_INADDR_NONE (in_addr_t) ~0 @@ -232,22 +223,19 @@ CURLcode Curl_set_dns_servers(struct Curl_easy *data, char *servers); * Function provided by the resolver backend to set * outgoing interface to use for DNS requests */ -CURLcode Curl_set_dns_interface(struct Curl_easy *data, - const char *interf); +CURLcode Curl_set_dns_interface(struct Curl_easy *data, const char *interf); /* * Function provided by the resolver backend to set * local IPv4 address to use as source address for DNS requests */ -CURLcode Curl_set_dns_local_ip4(struct Curl_easy *data, - const char *local_ip4); +CURLcode Curl_set_dns_local_ip4(struct Curl_easy *data, const char *local_ip4); /* * Function provided by the resolver backend to set * local IPv6 address to use as source address for DNS requests */ -CURLcode Curl_set_dns_local_ip6(struct Curl_easy *data, - const char *local_ip6); +CURLcode Curl_set_dns_local_ip6(struct Curl_easy *data, const char *local_ip6); /* * Clean off entries from the cache @@ -258,10 +246,8 @@ void Curl_hostcache_clean(struct Curl_easy *data, struct Curl_hash *hash); * Populate the cache with specified entries from CURLOPT_RESOLVE. */ CURLcode Curl_loadhostpairs(struct Curl_easy *data); -CURLcode Curl_resolv_check(struct Curl_easy *data, - struct Curl_dns_entry **dns); -int Curl_resolv_getsock(struct Curl_easy *data, - curl_socket_t *socks); +CURLcode Curl_resolv_check(struct Curl_easy *data, struct Curl_dns_entry **dns); +int Curl_resolv_getsock(struct Curl_easy *data, curl_socket_t *socks); CURLcode Curl_resolver_error(struct Curl_easy *data); #endif /* HEADER_CURL_HOSTIP_H */ diff --git a/vendor/hydra/vendor/curl/lib/hsts.h b/vendor/hydra/vendor/curl/lib/hsts.h index 1c544f97..7ff73297 100644 --- a/vendor/hydra/vendor/curl/lib/hsts.h +++ b/vendor/hydra/vendor/curl/lib/hsts.h @@ -27,6 +27,7 @@ #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_HSTS) #include + #include "llist.h" #if defined(DEBUGBUILD) || defined(UNITTESTS) @@ -49,21 +50,19 @@ struct hsts { struct hsts *Curl_hsts_init(void); void Curl_hsts_cleanup(struct hsts **hp); -CURLcode Curl_hsts_parse(struct hsts *h, const char *hostname, - const char *sts); +CURLcode Curl_hsts_parse(struct hsts *h, const char *hostname, const char *sts); struct stsentry *Curl_hsts(struct hsts *h, const char *hostname, bool subdomain); CURLcode Curl_hsts_save(struct Curl_easy *data, struct hsts *h, const char *file); -CURLcode Curl_hsts_loadfile(struct Curl_easy *data, - struct hsts *h, const char *file); -CURLcode Curl_hsts_loadcb(struct Curl_easy *data, - struct hsts *h); +CURLcode Curl_hsts_loadfile(struct Curl_easy *data, struct hsts *h, + const char *file); +CURLcode Curl_hsts_loadcb(struct Curl_easy *data, struct hsts *h); void Curl_hsts_loadfiles(struct Curl_easy *data); #else #define Curl_hsts_cleanup(x) -#define Curl_hsts_loadcb(x,y) CURLE_OK -#define Curl_hsts_save(x,y,z) +#define Curl_hsts_loadcb(x, y) CURLE_OK +#define Curl_hsts_save(x, y, z) #define Curl_hsts_loadfiles(x) #endif /* CURL_DISABLE_HTTP || CURL_DISABLE_HSTS */ #endif /* HEADER_CURL_HSTS_H */ diff --git a/vendor/hydra/vendor/curl/lib/http.h b/vendor/hydra/vendor/curl/lib/http.h index bb5974d9..a2563f8d 100644 --- a/vendor/hydra/vendor/curl/lib/http.h +++ b/vendor/hydra/vendor/curl/lib/http.h @@ -56,23 +56,21 @@ extern const struct Curl_handler Curl_handler_https; struct dynhds; -CURLcode Curl_bump_headersize(struct Curl_easy *data, - size_t delta, +CURLcode Curl_bump_headersize(struct Curl_easy *data, size_t delta, bool connect_only); /* Header specific functions */ -bool Curl_compareheader(const char *headerline, /* line to check */ - const char *header, /* header keyword _with_ colon */ +bool Curl_compareheader(const char *headerline, /* line to check */ + const char *header, /* header keyword _with_ colon */ const size_t hlen, /* len of the keyword in bytes */ const char *content, /* content string to find */ - const size_t clen); /* len of the content in bytes */ + const size_t clen); /* len of the content in bytes */ char *Curl_copy_header_value(const char *header); char *Curl_checkProxyheaders(struct Curl_easy *data, const struct connectdata *conn, - const char *thisheader, - const size_t thislen); + const char *thisheader, const size_t thislen); CURLcode Curl_add_timecondition(struct Curl_easy *data, #ifndef USE_HYPER @@ -80,17 +78,15 @@ CURLcode Curl_add_timecondition(struct Curl_easy *data, #else void *headers #endif - ); -CURLcode Curl_add_custom_headers(struct Curl_easy *data, - bool is_connect, +); +CURLcode Curl_add_custom_headers(struct Curl_easy *data, bool is_connect, #ifndef USE_HYPER struct dynbuf *req #else void *headers #endif - ); -CURLcode Curl_dynhds_add_custom(struct Curl_easy *data, - bool is_connect, +); +CURLcode Curl_dynhds_add_custom(struct Curl_easy *data, bool is_connect, struct dynhds *hds); void Curl_http_method(struct Curl_easy *data, struct connectdata *conn, @@ -99,43 +95,35 @@ CURLcode Curl_http_useragent(struct Curl_easy *data); CURLcode Curl_http_host(struct Curl_easy *data, struct connectdata *conn); CURLcode Curl_http_target(struct Curl_easy *data, struct connectdata *conn, struct dynbuf *req); -CURLcode Curl_http_statusline(struct Curl_easy *data, - struct connectdata *conn); -CURLcode Curl_http_header(struct Curl_easy *data, - const char *hd, size_t hdlen); +CURLcode Curl_http_statusline(struct Curl_easy *data, struct connectdata *conn); +CURLcode Curl_http_header(struct Curl_easy *data, const char *hd, size_t hdlen); CURLcode Curl_transferencode(struct Curl_easy *data); -CURLcode Curl_http_req_set_reader(struct Curl_easy *data, - Curl_HttpReq httpreq, +CURLcode Curl_http_req_set_reader(struct Curl_easy *data, Curl_HttpReq httpreq, const char **tep); -CURLcode Curl_http_req_complete(struct Curl_easy *data, - struct dynbuf *r, Curl_HttpReq httpreq); +CURLcode Curl_http_req_complete(struct Curl_easy *data, struct dynbuf *r, + Curl_HttpReq httpreq); bool Curl_use_http_1_1plus(const struct Curl_easy *data, const struct connectdata *conn); #ifndef CURL_DISABLE_COOKIES -CURLcode Curl_http_cookies(struct Curl_easy *data, - struct connectdata *conn, +CURLcode Curl_http_cookies(struct Curl_easy *data, struct connectdata *conn, struct dynbuf *r); #else -#define Curl_http_cookies(a,b,c) CURLE_OK +#define Curl_http_cookies(a, b, c) CURLE_OK #endif -CURLcode Curl_http_range(struct Curl_easy *data, - Curl_HttpReq httpreq); +CURLcode Curl_http_range(struct Curl_easy *data, Curl_HttpReq httpreq); CURLcode Curl_http_firstwrite(struct Curl_easy *data); /* protocol-specific functions set up to be called by the main engine */ -CURLcode Curl_http_setup_conn(struct Curl_easy *data, - struct connectdata *conn); +CURLcode Curl_http_setup_conn(struct Curl_easy *data, struct connectdata *conn); CURLcode Curl_http(struct Curl_easy *data, bool *done); CURLcode Curl_http_done(struct Curl_easy *data, CURLcode, bool premature); CURLcode Curl_http_connect(struct Curl_easy *data, bool *done); int Curl_http_getsock_do(struct Curl_easy *data, struct connectdata *conn, curl_socket_t *socks); -CURLcode Curl_http_write_resp(struct Curl_easy *data, - const char *buf, size_t blen, - bool is_eos); -CURLcode Curl_http_write_resp_hd(struct Curl_easy *data, - const char *hd, size_t hdlen, - bool is_eos); +CURLcode Curl_http_write_resp(struct Curl_easy *data, const char *buf, + size_t blen, bool is_eos); +CURLcode Curl_http_write_resp_hd(struct Curl_easy *data, const char *hd, + size_t hdlen, bool is_eos); /* These functions are in http.c */ CURLcode Curl_http_input_auth(struct Curl_easy *data, bool proxy, @@ -146,7 +134,7 @@ CURLcode Curl_http_auth_act(struct Curl_easy *data); selected to use no auth at all. Ie, we actively select no auth, as opposed to not having one selected. The other CURLAUTH_* defines are present in the public curl/curl.h header. */ -#define CURLAUTH_PICKNONE (1<<30) /* do not use auth */ +#define CURLAUTH_PICKNONE (1 << 30) /* do not use auth */ /* MAX_INITIAL_POST_SIZE indicates the number of bytes that will make the POST data get included in the initial data chunk sent to the server. If the @@ -161,7 +149,7 @@ CURLcode Curl_http_auth_act(struct Curl_easy *data); It must not be greater than 64K to work on VMS. */ #ifndef MAX_INITIAL_POST_SIZE -#define MAX_INITIAL_POST_SIZE (64*1024) +#define MAX_INITIAL_POST_SIZE (64 * 1024) #endif /* EXPECT_100_THRESHOLD is the request body size limit for when libcurl will @@ -170,13 +158,13 @@ CURLcode Curl_http_auth_act(struct Curl_easy *data); * */ #ifndef EXPECT_100_THRESHOLD -#define EXPECT_100_THRESHOLD (1024*1024) +#define EXPECT_100_THRESHOLD (1024 * 1024) #endif /* MAX_HTTP_RESP_HEADER_SIZE is the maximum size of all response headers combined that libcurl allows for a single HTTP response, any HTTP version. This count includes CONNECT response headers. */ -#define MAX_HTTP_RESP_HEADER_SIZE (300*1024) +#define MAX_HTTP_RESP_HEADER_SIZE (300 * 1024) bool Curl_http_exp100_is_selected(struct Curl_easy *data); void Curl_http_exp100_got100(struct Curl_easy *data); @@ -189,9 +177,8 @@ void Curl_http_exp100_got100(struct Curl_easy *data); CURLcode Curl_http_size(struct Curl_easy *data); -CURLcode Curl_http_write_resp_hds(struct Curl_easy *data, - const char *buf, size_t blen, - size_t *pconsumed); +CURLcode Curl_http_write_resp_hds(struct Curl_easy *data, const char *buf, + size_t blen, size_t *pconsumed); /** * Curl_http_output_auth() setups the authentication headers for the @@ -209,19 +196,15 @@ CURLcode Curl_http_write_resp_hds(struct Curl_easy *data, * * @returns CURLcode */ -CURLcode -Curl_http_output_auth(struct Curl_easy *data, - struct connectdata *conn, - const char *request, - Curl_HttpReq httpreq, - const char *path, - bool proxytunnel); /* TRUE if this is the request setting - up the proxy tunnel */ +CURLcode Curl_http_output_auth( + struct Curl_easy *data, struct connectdata *conn, const char *request, + Curl_HttpReq httpreq, const char *path, + bool proxytunnel); /* TRUE if this is the request setting + up the proxy tunnel */ /* Decode HTTP status code string. */ CURLcode Curl_http_decode_status(int *pstatus, const char *s, size_t len); - /** * All about a core HTTP request, excluding body and trailers */ @@ -237,15 +220,14 @@ struct httpreq { /** * Create an HTTP request struct. */ -CURLcode Curl_http_req_make(struct httpreq **preq, - const char *method, size_t m_len, - const char *scheme, size_t s_len, +CURLcode Curl_http_req_make(struct httpreq **preq, const char *method, + size_t m_len, const char *scheme, size_t s_len, const char *authority, size_t a_len, const char *path, size_t p_len); -CURLcode Curl_http_req_make2(struct httpreq **preq, - const char *method, size_t m_len, - CURLU *url, const char *scheme_default); +CURLcode Curl_http_req_make2(struct httpreq **preq, const char *method, + size_t m_len, CURLU *url, + const char *scheme_default); void Curl_http_req_free(struct httpreq *req); @@ -270,8 +252,8 @@ void Curl_http_req_free(struct httpreq *req); * @param req the request to transform * @param data the handle to lookup defaults like ' :scheme' from */ -CURLcode Curl_http_req_to_h2(struct dynhds *h2_headers, - struct httpreq *req, struct Curl_easy *data); +CURLcode Curl_http_req_to_h2(struct dynhds *h2_headers, struct httpreq *req, + struct Curl_easy *data); /** * All about a core HTTP response, excluding body and trailers @@ -287,8 +269,7 @@ struct http_resp { /** * Create an HTTP response struct. */ -CURLcode Curl_http_resp_make(struct http_resp **presp, - int status, +CURLcode Curl_http_resp_make(struct http_resp **presp, int status, const char *description); void Curl_http_resp_free(struct http_resp *resp); diff --git a/vendor/hydra/vendor/curl/lib/http1.h b/vendor/hydra/vendor/curl/lib/http1.h index 2de302f1..8a7cda5e 100644 --- a/vendor/hydra/vendor/curl/lib/http1.h +++ b/vendor/hydra/vendor/curl/lib/http1.h @@ -30,10 +30,10 @@ #include "bufq.h" #include "http.h" -#define H1_PARSE_OPT_NONE (0) -#define H1_PARSE_OPT_STRICT (1 << 0) +#define H1_PARSE_OPT_NONE (0) +#define H1_PARSE_OPT_STRICT (1 << 0) -#define H1_PARSE_DEFAULT_MAX_LINE_LEN DYN_HTTP_REQUEST +#define H1_PARSE_DEFAULT_MAX_LINE_LEN DYN_HTTP_REQUEST struct h1_req_parser { struct httpreq *req; @@ -48,13 +48,11 @@ struct h1_req_parser { void Curl_h1_req_parse_init(struct h1_req_parser *parser, size_t max_line_len); void Curl_h1_req_parse_free(struct h1_req_parser *parser); -ssize_t Curl_h1_req_parse_read(struct h1_req_parser *parser, - const char *buf, size_t buflen, - const char *scheme_default, int options, - CURLcode *err); +ssize_t Curl_h1_req_parse_read(struct h1_req_parser *parser, const char *buf, + size_t buflen, const char *scheme_default, + int options, CURLcode *err); -CURLcode Curl_h1_req_dprint(const struct httpreq *req, - struct dynbuf *dbuf); +CURLcode Curl_h1_req_dprint(const struct httpreq *req, struct dynbuf *dbuf); CURLcode Curl_h1_req_write_head(struct httpreq *req, int http_minor, struct dynbuf *dbuf); diff --git a/vendor/hydra/vendor/curl/lib/http2.h b/vendor/hydra/vendor/curl/lib/http2.h index 80e18348..65801c77 100644 --- a/vendor/hydra/vendor/curl/lib/http2.h +++ b/vendor/hydra/vendor/curl/lib/http2.h @@ -38,39 +38,35 @@ */ void Curl_http2_ver(char *p, size_t len); -CURLcode Curl_http2_request_upgrade(struct dynbuf *req, - struct Curl_easy *data); +CURLcode Curl_http2_request_upgrade(struct dynbuf *req, struct Curl_easy *data); /* returns true if the HTTP/2 stream error was HTTP_1_1_REQUIRED */ bool Curl_h2_http_1_1_error(struct Curl_easy *data); bool Curl_conn_is_http2(const struct Curl_easy *data, - const struct connectdata *conn, - int sockindex); -bool Curl_http2_may_switch(struct Curl_easy *data, - struct connectdata *conn, + const struct connectdata *conn, int sockindex); +bool Curl_http2_may_switch(struct Curl_easy *data, struct connectdata *conn, int sockindex); -CURLcode Curl_http2_switch(struct Curl_easy *data, - struct connectdata *conn, int sockindex); +CURLcode Curl_http2_switch(struct Curl_easy *data, struct connectdata *conn, + int sockindex); CURLcode Curl_http2_switch_at(struct Curl_cfilter *cf, struct Curl_easy *data); -CURLcode Curl_http2_upgrade(struct Curl_easy *data, - struct connectdata *conn, int sockindex, - const char *ptr, size_t nread); +CURLcode Curl_http2_upgrade(struct Curl_easy *data, struct connectdata *conn, + int sockindex, const char *ptr, size_t nread); extern struct Curl_cftype Curl_cft_nghttp2; #else /* USE_NGHTTP2 */ -#define Curl_cf_is_http2(a,b) FALSE -#define Curl_conn_is_http2(a,b,c) FALSE -#define Curl_http2_may_switch(a,b,c) FALSE +#define Curl_cf_is_http2(a, b) FALSE +#define Curl_conn_is_http2(a, b, c) FALSE +#define Curl_http2_may_switch(a, b, c) FALSE -#define Curl_http2_request_upgrade(x,y) CURLE_UNSUPPORTED_PROTOCOL -#define Curl_http2_switch(a,b,c) CURLE_UNSUPPORTED_PROTOCOL -#define Curl_http2_upgrade(a,b,c,d,e) CURLE_UNSUPPORTED_PROTOCOL +#define Curl_http2_request_upgrade(x, y) CURLE_UNSUPPORTED_PROTOCOL +#define Curl_http2_switch(a, b, c) CURLE_UNSUPPORTED_PROTOCOL +#define Curl_http2_upgrade(a, b, c, d, e) CURLE_UNSUPPORTED_PROTOCOL #define Curl_h2_http_1_1_error(x) 0 #endif diff --git a/vendor/hydra/vendor/curl/lib/http_chunks.h b/vendor/hydra/vendor/curl/lib/http_chunks.h index 34951ea0..30e7753d 100644 --- a/vendor/hydra/vendor/curl/lib/http_chunks.h +++ b/vendor/hydra/vendor/curl/lib/http_chunks.h @@ -97,7 +97,7 @@ struct Curl_chunker { struct dynbuf trailer; /* for chunked-encoded trailer */ unsigned char hexindex; char hexbuffer[CHUNK_MAXNUM_LEN + 1]; /* +1 for null-terminator */ - BIT(ignore_body); /* never write response body data */ + BIT(ignore_body); /* never write response body data */ }; /* The following functions are defined in http_chunks.c */ diff --git a/vendor/hydra/vendor/curl/lib/http_digest.h b/vendor/hydra/vendor/curl/lib/http_digest.h index 5f797310..9448265a 100644 --- a/vendor/hydra/vendor/curl/lib/http_digest.h +++ b/vendor/hydra/vendor/curl/lib/http_digest.h @@ -28,12 +28,11 @@ #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_DIGEST_AUTH) /* this is for digest header input */ -CURLcode Curl_input_digest(struct Curl_easy *data, - bool proxy, const char *header); +CURLcode Curl_input_digest(struct Curl_easy *data, bool proxy, + const char *header); /* this is for creating digest header output */ -CURLcode Curl_output_digest(struct Curl_easy *data, - bool proxy, +CURLcode Curl_output_digest(struct Curl_easy *data, bool proxy, const unsigned char *request, const unsigned char *uripath); diff --git a/vendor/hydra/vendor/curl/lib/http_negotiate.h b/vendor/hydra/vendor/curl/lib/http_negotiate.h index 76d83561..c9d56a0f 100644 --- a/vendor/hydra/vendor/curl/lib/http_negotiate.h +++ b/vendor/hydra/vendor/curl/lib/http_negotiate.h @@ -31,8 +31,8 @@ CURLcode Curl_input_negotiate(struct Curl_easy *data, struct connectdata *conn, bool proxy, const char *header); /* this is for creating Negotiate header output */ -CURLcode Curl_output_negotiate(struct Curl_easy *data, - struct connectdata *conn, bool proxy); +CURLcode Curl_output_negotiate(struct Curl_easy *data, struct connectdata *conn, + bool proxy); void Curl_http_auth_cleanup_negotiate(struct connectdata *conn); diff --git a/vendor/hydra/vendor/curl/lib/http_proxy.h b/vendor/hydra/vendor/curl/lib/http_proxy.h index 2b5f7ae7..457b7482 100644 --- a/vendor/hydra/vendor/curl/lib/http_proxy.h +++ b/vendor/hydra/vendor/curl/lib/http_proxy.h @@ -31,8 +31,8 @@ #include "urldata.h" CURLcode Curl_http_proxy_get_destination(struct Curl_cfilter *cf, - const char **phostname, - int *pport, bool *pipv6_ip); + const char **phostname, int *pport, + bool *pipv6_ip); CURLcode Curl_http_proxy_create_CONNECT(struct httpreq **preq, struct Curl_cfilter *cf, @@ -40,13 +40,11 @@ CURLcode Curl_http_proxy_create_CONNECT(struct httpreq **preq, int http_version_major); /* Default proxy timeout in milliseconds */ -#define PROXY_TIMEOUT (3600*1000) +#define PROXY_TIMEOUT (3600 * 1000) void Curl_cf_http_proxy_get_host(struct Curl_cfilter *cf, - struct Curl_easy *data, - const char **phost, - const char **pdisplay_host, - int *pport); + struct Curl_easy *data, const char **phost, + const char **pdisplay_host, int *pport); CURLcode Curl_cf_http_proxy_insert_after(struct Curl_cfilter *cf_at, struct Curl_easy *data); @@ -55,7 +53,7 @@ extern struct Curl_cftype Curl_cft_http_proxy; #endif /* !CURL_DISABLE_PROXY && !CURL_DISABLE_HTTP */ -#define IS_HTTPS_PROXY(t) (((t) == CURLPROXY_HTTPS) || \ - ((t) == CURLPROXY_HTTPS2)) +#define IS_HTTPS_PROXY(t) \ + (((t) == CURLPROXY_HTTPS) || ((t) == CURLPROXY_HTTPS2)) #endif /* HEADER_CURL_HTTP_PROXY_H */ diff --git a/vendor/hydra/vendor/curl/lib/if2ip.h b/vendor/hydra/vendor/curl/lib/if2ip.h index f4b2f4c1..4d9a5f29 100644 --- a/vendor/hydra/vendor/curl/lib/if2ip.h +++ b/vendor/hydra/vendor/curl/lib/if2ip.h @@ -26,11 +26,11 @@ #include "curl_setup.h" /* IPv6 address scopes. */ -#define IPV6_SCOPE_GLOBAL 0 /* Global scope. */ -#define IPV6_SCOPE_LINKLOCAL 1 /* Link-local scope. */ -#define IPV6_SCOPE_SITELOCAL 2 /* Site-local scope (deprecated). */ -#define IPV6_SCOPE_UNIQUELOCAL 3 /* Unique local */ -#define IPV6_SCOPE_NODELOCAL 4 /* Loopback. */ +#define IPV6_SCOPE_GLOBAL 0 /* Global scope. */ +#define IPV6_SCOPE_LINKLOCAL 1 /* Link-local scope. */ +#define IPV6_SCOPE_SITELOCAL 2 /* Site-local scope (deprecated). */ +#define IPV6_SCOPE_UNIQUELOCAL 3 /* Unique local */ +#define IPV6_SCOPE_NODELOCAL 4 /* Loopback. */ #ifdef USE_IPV6 unsigned int Curl_ipv6_scope(const struct sockaddr *sa); @@ -39,9 +39,9 @@ unsigned int Curl_ipv6_scope(const struct sockaddr *sa); #endif typedef enum { - IF2IP_NOT_FOUND = 0, /* Interface not found */ + IF2IP_NOT_FOUND = 0, /* Interface not found */ IF2IP_AF_NOT_SUPPORTED = 1, /* Int. exists but has no address for this af */ - IF2IP_FOUND = 2 /* The address has been stored in "buf" */ + IF2IP_FOUND = 2 /* The address has been stored in "buf" */ } if2ip_result_t; if2ip_result_t Curl_if2ip(int af, @@ -49,8 +49,7 @@ if2ip_result_t Curl_if2ip(int af, unsigned int remote_scope, unsigned int local_scope_id, #endif - const char *interf, - char *buf, size_t buf_size); + const char *interf, char *buf, size_t buf_size); #ifdef __INTERIX @@ -62,28 +61,28 @@ struct ifreq { char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */ } ifr_ifrn; - union { - struct sockaddr ifru_addr; - struct sockaddr ifru_broadaddr; - struct sockaddr ifru_netmask; - struct sockaddr ifru_hwaddr; - short ifru_flags; - int ifru_metric; - int ifru_mtu; - } ifr_ifru; + union { + struct sockaddr ifru_addr; + struct sockaddr ifru_broadaddr; + struct sockaddr ifru_netmask; + struct sockaddr ifru_hwaddr; + short ifru_flags; + int ifru_metric; + int ifru_mtu; + } ifr_ifru; }; /* This define was added by Daniel to avoid an extra #ifdef INTERIX in the C code. */ -#define ifr_name ifr_ifrn.ifrn_name /* interface name */ -#define ifr_addr ifr_ifru.ifru_addr /* address */ +#define ifr_name ifr_ifrn.ifrn_name /* interface name */ +#define ifr_addr ifr_ifru.ifru_addr /* address */ #define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */ -#define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */ -#define ifr_flags ifr_ifru.ifru_flags /* flags */ -#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */ -#define ifr_metric ifr_ifru.ifru_metric /* metric */ -#define ifr_mtu ifr_ifru.ifru_mtu /* mtu */ +#define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */ +#define ifr_flags ifr_ifru.ifru_flags /* flags */ +#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */ +#define ifr_metric ifr_ifru.ifru_metric /* metric */ +#define ifr_mtu ifr_ifru.ifru_mtu /* mtu */ #define SIOCGIFADDR _IOW('s', 102, struct ifreq) /* Get if addr */ diff --git a/vendor/hydra/vendor/curl/lib/imap.h b/vendor/hydra/vendor/curl/lib/imap.h index 784ee97e..9e09daed 100644 --- a/vendor/hydra/vendor/curl/lib/imap.h +++ b/vendor/hydra/vendor/curl/lib/imap.h @@ -24,20 +24,20 @@ * ***************************************************************************/ -#include "pingpong.h" #include "curl_sasl.h" +#include "pingpong.h" /**************************************************************************** * IMAP unique setup ***************************************************************************/ typedef enum { - IMAP_STOP, /* do nothing state, stops the state machine */ - IMAP_SERVERGREET, /* waiting for the initial greeting immediately after - a connect */ + IMAP_STOP, /* do nothing state, stops the state machine */ + IMAP_SERVERGREET, /* waiting for the initial greeting immediately after + a connect */ IMAP_CAPABILITY, IMAP_STARTTLS, - IMAP_UPGRADETLS, /* asynchronously upgrade the connection to SSL/TLS - (multi mode only) */ + IMAP_UPGRADETLS, /* asynchronously upgrade the connection to SSL/TLS + (multi mode only) */ IMAP_AUTHENTICATE, IMAP_LOGIN, IMAP_LIST, @@ -48,7 +48,7 @@ typedef enum { IMAP_APPEND_FINAL, IMAP_SEARCH, IMAP_LOGOUT, - IMAP_LAST /* never used */ + IMAP_LAST /* never used */ } imapstate; /* This IMAP struct is used in the Curl_easy. All IMAP data that is @@ -57,34 +57,34 @@ typedef enum { used. */ struct IMAP { curl_pp_transfer transfer; - char *mailbox; /* Mailbox to select */ - char *uidvalidity; /* UIDVALIDITY to check in select */ - char *uid; /* Message UID to fetch */ - char *mindex; /* Index in mail box of mail to fetch */ - char *section; /* Message SECTION to fetch */ - char *partial; /* Message PARTIAL to fetch */ - char *query; /* Query to search for */ - char *custom; /* Custom request */ - char *custom_params; /* Parameters for the custom request */ + char *mailbox; /* Mailbox to select */ + char *uidvalidity; /* UIDVALIDITY to check in select */ + char *uid; /* Message UID to fetch */ + char *mindex; /* Index in mail box of mail to fetch */ + char *section; /* Message SECTION to fetch */ + char *partial; /* Message PARTIAL to fetch */ + char *query; /* Query to search for */ + char *custom; /* Custom request */ + char *custom_params; /* Parameters for the custom request */ }; /* imap_conn is used for struct connection-oriented data in the connectdata struct */ struct imap_conn { struct pingpong pp; - struct SASL sasl; /* SASL-related parameters */ - struct dynbuf dyn; /* for the IMAP commands */ - char *mailbox; /* The last selected mailbox */ - char *mailbox_uidvalidity; /* UIDVALIDITY parsed from select response */ - imapstate state; /* Always use imap.c:state() to change state! */ - char resptag[5]; /* Response tag to wait for */ - unsigned char preftype; /* Preferred authentication type */ - unsigned char cmdid; /* Last used command ID */ - BIT(ssldone); /* Is connect() over SSL done? */ - BIT(preauth); /* Is this connection PREAUTH? */ - BIT(tls_supported); /* StartTLS capability supported by server */ - BIT(login_disabled); /* LOGIN command disabled by server */ - BIT(ir_supported); /* Initial response supported by server */ + struct SASL sasl; /* SASL-related parameters */ + struct dynbuf dyn; /* for the IMAP commands */ + char *mailbox; /* The last selected mailbox */ + char *mailbox_uidvalidity; /* UIDVALIDITY parsed from select response */ + imapstate state; /* Always use imap.c:state() to change state! */ + char resptag[5]; /* Response tag to wait for */ + unsigned char preftype; /* Preferred authentication type */ + unsigned char cmdid; /* Last used command ID */ + BIT(ssldone); /* Is connect() over SSL done? */ + BIT(preauth); /* Is this connection PREAUTH? */ + BIT(tls_supported); /* StartTLS capability supported by server */ + BIT(login_disabled); /* LOGIN command disabled by server */ + BIT(ir_supported); /* Initial response supported by server */ }; extern const struct Curl_handler Curl_handler_imap; @@ -92,10 +92,10 @@ extern const struct Curl_handler Curl_handler_imaps; /* Authentication type flags */ #define IMAP_TYPE_CLEARTEXT (1 << 0) -#define IMAP_TYPE_SASL (1 << 1) +#define IMAP_TYPE_SASL (1 << 1) /* Authentication type values */ -#define IMAP_TYPE_NONE 0 -#define IMAP_TYPE_ANY (IMAP_TYPE_CLEARTEXT|IMAP_TYPE_SASL) +#define IMAP_TYPE_NONE 0 +#define IMAP_TYPE_ANY (IMAP_TYPE_CLEARTEXT | IMAP_TYPE_SASL) #endif /* HEADER_CURL_IMAP_H */ diff --git a/vendor/hydra/vendor/curl/lib/inet_ntop.h b/vendor/hydra/vendor/curl/lib/inet_ntop.h index f592f252..29c3ae45 100644 --- a/vendor/hydra/vendor/curl/lib/inet_ntop.h +++ b/vendor/hydra/vendor/curl/lib/inet_ntop.h @@ -33,11 +33,10 @@ char *Curl_inet_ntop(int af, const void *addr, char *buf, size_t size); #include #endif #ifdef _WIN32 -#define Curl_inet_ntop(af,addr,buf,size) \ - inet_ntop(af, addr, buf, size) +#define Curl_inet_ntop(af, addr, buf, size) inet_ntop(af, addr, buf, size) #else -#define Curl_inet_ntop(af,addr,buf,size) \ - inet_ntop(af, addr, buf, (curl_socklen_t)(size)) +#define Curl_inet_ntop(af, addr, buf, size) \ + inet_ntop(af, addr, buf, (curl_socklen_t)(size)) #endif #endif diff --git a/vendor/hydra/vendor/curl/lib/inet_pton.h b/vendor/hydra/vendor/curl/lib/inet_pton.h index f8562fa8..ec100303 100644 --- a/vendor/hydra/vendor/curl/lib/inet_pton.h +++ b/vendor/hydra/vendor/curl/lib/inet_pton.h @@ -32,7 +32,7 @@ int Curl_inet_pton(int, const char *, void *); #ifdef HAVE_ARPA_INET_H #include #endif -#define Curl_inet_pton(x,y,z) inet_pton(x,y,z) +#define Curl_inet_pton(x, y, z) inet_pton(x, y, z) #endif #endif /* HEADER_CURL_INET_PTON_H */ diff --git a/vendor/hydra/vendor/curl/lib/llist.h b/vendor/hydra/vendor/curl/lib/llist.h index 26581869..9ee14989 100644 --- a/vendor/hydra/vendor/curl/lib/llist.h +++ b/vendor/hydra/vendor/curl/lib/llist.h @@ -24,9 +24,10 @@ * ***************************************************************************/ -#include "curl_setup.h" #include +#include "curl_setup.h" + typedef void (*Curl_llist_dtor)(void *user, void *elem); /* none of these struct members should be referenced directly, use the @@ -38,7 +39,7 @@ struct Curl_llist { Curl_llist_dtor _dtor; size_t _size; #ifdef DEBUGBUILD - int _init; /* detect API usage mistakes */ + int _init; /* detect API usage mistakes */ #endif }; @@ -48,15 +49,15 @@ struct Curl_llist_node { struct Curl_llist_node *_prev; struct Curl_llist_node *_next; #ifdef DEBUGBUILD - int _init; /* detect API usage mistakes */ + int _init; /* detect API usage mistakes */ #endif }; void Curl_llist_init(struct Curl_llist *, Curl_llist_dtor); void Curl_llist_insert_next(struct Curl_llist *, struct Curl_llist_node *, const void *, struct Curl_llist_node *node); -void Curl_llist_append(struct Curl_llist *, - const void *, struct Curl_llist_node *node); +void Curl_llist_append(struct Curl_llist *, const void *, + struct Curl_llist_node *node); void Curl_node_uremove(struct Curl_llist_node *, void *); void Curl_node_remove(struct Curl_llist_node *); void Curl_llist_destroy(struct Curl_llist *, void *); diff --git a/vendor/hydra/vendor/curl/lib/memdebug.h b/vendor/hydra/vendor/curl/lib/memdebug.h index cabadbcc..9677f840 100644 --- a/vendor/hydra/vendor/curl/lib/memdebug.h +++ b/vendor/hydra/vendor/curl/lib/memdebug.h @@ -31,20 +31,21 @@ */ #include + #include "functypes.h" #if defined(__GNUC__) && __GNUC__ >= 3 -# define ALLOC_FUNC __attribute__((__malloc__)) -# define ALLOC_SIZE(s) __attribute__((__alloc_size__(s))) -# define ALLOC_SIZE2(n, s) __attribute__((__alloc_size__(n, s))) +#define ALLOC_FUNC __attribute__((__malloc__)) +#define ALLOC_SIZE(s) __attribute__((__alloc_size__(s))) +#define ALLOC_SIZE2(n, s) __attribute__((__alloc_size__(n, s))) #elif defined(_MSC_VER) -# define ALLOC_FUNC __declspec(restrict) -# define ALLOC_SIZE(s) -# define ALLOC_SIZE2(n, s) +#define ALLOC_FUNC __declspec(restrict) +#define ALLOC_SIZE(s) +#define ALLOC_SIZE2(n, s) #else -# define ALLOC_FUNC -# define ALLOC_SIZE(s) -# define ALLOC_SIZE2(n, s) +#define ALLOC_FUNC +#define ALLOC_SIZE(s) +#define ALLOC_SIZE2(n, s) #endif #define CURL_MT_LOGFNAME_BUFSIZE 512 @@ -55,18 +56,15 @@ extern FILE *curl_dbg_logfile; CURL_EXTERN ALLOC_FUNC ALLOC_SIZE(1) void *curl_dbg_malloc(size_t size, int line, const char *source); -CURL_EXTERN ALLOC_FUNC ALLOC_SIZE2(1, 2) void *curl_dbg_calloc(size_t elements, - size_t size, int line, const char *source); -CURL_EXTERN ALLOC_SIZE(2) void *curl_dbg_realloc(void *ptr, - size_t size, - int line, - const char *source); +CURL_EXTERN ALLOC_FUNC ALLOC_SIZE2(1, 2) void *curl_dbg_calloc( + size_t elements, size_t size, int line, const char *source); +CURL_EXTERN ALLOC_SIZE(2) void *curl_dbg_realloc(void *ptr, size_t size, + int line, const char *source); CURL_EXTERN void curl_dbg_free(void *ptr, int line, const char *source); CURL_EXTERN ALLOC_FUNC char *curl_dbg_strdup(const char *str, int line, const char *src); #if defined(_WIN32) && defined(UNICODE) -CURL_EXTERN ALLOC_FUNC wchar_t *curl_dbg_wcsdup(const wchar_t *str, - int line, +CURL_EXTERN ALLOC_FUNC wchar_t *curl_dbg_wcsdup(const wchar_t *str, int line, const char *source); #endif @@ -77,16 +75,16 @@ CURL_EXTERN void curl_dbg_log(const char *format, ...) CURL_PRINTF(1, 2); /* file descriptor manipulators */ CURL_EXTERN curl_socket_t curl_dbg_socket(int domain, int type, int protocol, int line, const char *source); -CURL_EXTERN void curl_dbg_mark_sclose(curl_socket_t sockfd, - int line, const char *source); -CURL_EXTERN int curl_dbg_sclose(curl_socket_t sockfd, - int line, const char *source); +CURL_EXTERN void curl_dbg_mark_sclose(curl_socket_t sockfd, int line, + const char *source); +CURL_EXTERN int curl_dbg_sclose(curl_socket_t sockfd, int line, + const char *source); CURL_EXTERN curl_socket_t curl_dbg_accept(curl_socket_t s, void *a, void *alen, int line, const char *source); #ifdef HAVE_SOCKETPAIR CURL_EXTERN int curl_dbg_socketpair(int domain, int type, int protocol, - curl_socket_t socket_vector[2], - int line, const char *source); + curl_socket_t socket_vector[2], int line, + const char *source); #endif /* send/receive sockets */ @@ -96,14 +94,13 @@ CURL_EXTERN SEND_TYPE_RETV curl_dbg_send(SEND_TYPE_ARG1 sockfd, SEND_TYPE_ARG4 flags, int line, const char *source); CURL_EXTERN RECV_TYPE_RETV curl_dbg_recv(RECV_TYPE_ARG1 sockfd, - RECV_TYPE_ARG2 buf, - RECV_TYPE_ARG3 len, + RECV_TYPE_ARG2 buf, RECV_TYPE_ARG3 len, RECV_TYPE_ARG4 flags, int line, const char *source); /* FILE functions */ CURL_EXTERN ALLOC_FUNC FILE *curl_dbg_fopen(const char *file, const char *mode, - int line, const char *source); + int line, const char *source); CURL_EXTERN ALLOC_FUNC FILE *curl_dbg_fdopen(int filedes, const char *mode, int line, const char *source); @@ -117,40 +114,40 @@ CURL_EXTERN int curl_dbg_fclose(FILE *file, int line, const char *source); #undef malloc #define malloc(size) curl_dbg_malloc(size, __LINE__, __FILE__) #undef calloc -#define calloc(nbelem,size) curl_dbg_calloc(nbelem, size, __LINE__, __FILE__) +#define calloc(nbelem, size) curl_dbg_calloc(nbelem, size, __LINE__, __FILE__) #undef realloc -#define realloc(ptr,size) curl_dbg_realloc(ptr, size, __LINE__, __FILE__) +#define realloc(ptr, size) curl_dbg_realloc(ptr, size, __LINE__, __FILE__) #undef free #define free(ptr) curl_dbg_free(ptr, __LINE__, __FILE__) #undef send -#define send(a,b,c,d) curl_dbg_send(a,b,c,d, __LINE__, __FILE__) +#define send(a, b, c, d) curl_dbg_send(a, b, c, d, __LINE__, __FILE__) #undef recv -#define recv(a,b,c,d) curl_dbg_recv(a,b,c,d, __LINE__, __FILE__) +#define recv(a, b, c, d) curl_dbg_recv(a, b, c, d, __LINE__, __FILE__) #ifdef _WIN32 -# ifdef UNICODE -# undef wcsdup -# define wcsdup(ptr) curl_dbg_wcsdup(ptr, __LINE__, __FILE__) -# undef _wcsdup -# define _wcsdup(ptr) curl_dbg_wcsdup(ptr, __LINE__, __FILE__) -# undef _tcsdup -# define _tcsdup(ptr) curl_dbg_wcsdup(ptr, __LINE__, __FILE__) -# else -# undef _tcsdup -# define _tcsdup(ptr) curl_dbg_strdup(ptr, __LINE__, __FILE__) -# endif +#ifdef UNICODE +#undef wcsdup +#define wcsdup(ptr) curl_dbg_wcsdup(ptr, __LINE__, __FILE__) +#undef _wcsdup +#define _wcsdup(ptr) curl_dbg_wcsdup(ptr, __LINE__, __FILE__) +#undef _tcsdup +#define _tcsdup(ptr) curl_dbg_wcsdup(ptr, __LINE__, __FILE__) +#else +#undef _tcsdup +#define _tcsdup(ptr) curl_dbg_strdup(ptr, __LINE__, __FILE__) +#endif #endif #undef socket -#define socket(domain,type,protocol)\ - curl_dbg_socket((int)domain, type, protocol, __LINE__, __FILE__) +#define socket(domain, type, protocol) \ + curl_dbg_socket((int)domain, type, protocol, __LINE__, __FILE__) #undef accept /* for those with accept as a macro */ -#define accept(sock,addr,len)\ - curl_dbg_accept(sock, addr, len, __LINE__, __FILE__) +#define accept(sock, addr, len) \ + curl_dbg_accept(sock, addr, len, __LINE__, __FILE__) #ifdef HAVE_SOCKETPAIR -#define socketpair(domain,type,protocol,socket_vector)\ - curl_dbg_socketpair((int)domain, type, protocol, socket_vector, \ - __LINE__, __FILE__) +#define socketpair(domain, type, protocol, socket_vector) \ + curl_dbg_socketpair((int)domain, type, protocol, socket_vector, __LINE__, \ + __FILE__) #endif #ifdef HAVE_GETADDRINFO @@ -158,32 +155,31 @@ CURL_EXTERN int curl_dbg_fclose(FILE *file, int line, const char *source); /* OSF/1 and Tru64 have getaddrinfo as a define already, so we cannot define our macro as for other platforms. Instead, we redefine the new name they define getaddrinfo to become! */ -#define ogetaddrinfo(host,serv,hint,res) \ +#define ogetaddrinfo(host, serv, hint, res) \ curl_dbg_getaddrinfo(host, serv, hint, res, __LINE__, __FILE__) #else #undef getaddrinfo -#define getaddrinfo(host,serv,hint,res) \ +#define getaddrinfo(host, serv, hint, res) \ curl_dbg_getaddrinfo(host, serv, hint, res, __LINE__, __FILE__) #endif #endif /* HAVE_GETADDRINFO */ #ifdef HAVE_FREEADDRINFO #undef freeaddrinfo -#define freeaddrinfo(data) \ - curl_dbg_freeaddrinfo(data, __LINE__, __FILE__) +#define freeaddrinfo(data) curl_dbg_freeaddrinfo(data, __LINE__, __FILE__) #endif /* HAVE_FREEADDRINFO */ /* sclose is probably already defined, redefine it! */ #undef sclose -#define sclose(sockfd) curl_dbg_sclose(sockfd,__LINE__,__FILE__) +#define sclose(sockfd) curl_dbg_sclose(sockfd, __LINE__, __FILE__) -#define fake_sclose(sockfd) curl_dbg_mark_sclose(sockfd,__LINE__,__FILE__) +#define fake_sclose(sockfd) curl_dbg_mark_sclose(sockfd, __LINE__, __FILE__) #undef fopen -#define fopen(file,mode) curl_dbg_fopen(file,mode,__LINE__,__FILE__) +#define fopen(file, mode) curl_dbg_fopen(file, mode, __LINE__, __FILE__) #undef fdopen -#define fdopen(file,mode) curl_dbg_fdopen(file,mode,__LINE__,__FILE__) -#define fclose(file) curl_dbg_fclose(file,__LINE__,__FILE__) +#define fdopen(file, mode) curl_dbg_fdopen(file, mode, __LINE__, __FILE__) +#define fclose(file) curl_dbg_fclose(file, __LINE__, __FILE__) #endif /* MEMDEBUG_NODEFINES */ @@ -194,7 +190,7 @@ CURL_EXTERN int curl_dbg_fclose(FILE *file, int line, const char *source); */ #ifndef fake_sclose -#define fake_sclose(x) Curl_nop_stmt +#define fake_sclose(x) Curl_nop_stmt #endif /* @@ -204,6 +200,9 @@ CURL_EXTERN int curl_dbg_fclose(FILE *file, int line, const char *source); */ #define Curl_safefree(ptr) \ - do { free((ptr)); (ptr) = NULL;} while(0) + do { \ + free((ptr)); \ + (ptr) = NULL; \ + } while (0) #endif /* HEADER_CURL_MEMDEBUG_H */ diff --git a/vendor/hydra/vendor/curl/lib/mime.h b/vendor/hydra/vendor/curl/lib/mime.h index 5073a38f..d1301bea 100644 --- a/vendor/hydra/vendor/curl/lib/mime.h +++ b/vendor/hydra/vendor/curl/lib/mime.h @@ -26,72 +26,72 @@ #include "curl_setup.h" -#define MIME_BOUNDARY_DASHES 24 /* leading boundary dashes */ -#define MIME_RAND_BOUNDARY_CHARS 22 /* Nb. of random boundary chars. */ -#define MAX_ENCODED_LINE_LENGTH 76 /* Maximum encoded line length. */ -#define ENCODING_BUFFER_SIZE 256 /* Encoding temp buffers size. */ +#define MIME_BOUNDARY_DASHES 24 /* leading boundary dashes */ +#define MIME_RAND_BOUNDARY_CHARS 22 /* Nb. of random boundary chars. */ +#define MAX_ENCODED_LINE_LENGTH 76 /* Maximum encoded line length. */ +#define ENCODING_BUFFER_SIZE 256 /* Encoding temp buffers size. */ /* Part flags. */ -#define MIME_USERHEADERS_OWNER (1 << 0) -#define MIME_BODY_ONLY (1 << 1) -#define MIME_FAST_READ (1 << 2) +#define MIME_USERHEADERS_OWNER (1 << 0) +#define MIME_BODY_ONLY (1 << 1) +#define MIME_FAST_READ (1 << 2) -#define FILE_CONTENTTYPE_DEFAULT "application/octet-stream" -#define MULTIPART_CONTENTTYPE_DEFAULT "multipart/mixed" -#define DISPOSITION_DEFAULT "attachment" +#define FILE_CONTENTTYPE_DEFAULT "application/octet-stream" +#define MULTIPART_CONTENTTYPE_DEFAULT "multipart/mixed" +#define DISPOSITION_DEFAULT "attachment" /* Part source kinds. */ enum mimekind { - MIMEKIND_NONE = 0, /* Part not set. */ - MIMEKIND_DATA, /* Allocated mime data. */ - MIMEKIND_FILE, /* Data from file. */ - MIMEKIND_CALLBACK, /* Data from `read' callback. */ - MIMEKIND_MULTIPART, /* Data is a mime subpart. */ + MIMEKIND_NONE = 0, /* Part not set. */ + MIMEKIND_DATA, /* Allocated mime data. */ + MIMEKIND_FILE, /* Data from file. */ + MIMEKIND_CALLBACK, /* Data from `read' callback. */ + MIMEKIND_MULTIPART, /* Data is a mime subpart. */ MIMEKIND_LAST }; /* Readback state tokens. */ enum mimestate { - MIMESTATE_BEGIN, /* Readback has not yet started. */ - MIMESTATE_CURLHEADERS, /* In curl-generated headers. */ - MIMESTATE_USERHEADERS, /* In caller's supplied headers. */ - MIMESTATE_EOH, /* End of headers. */ - MIMESTATE_BODY, /* Placeholder. */ - MIMESTATE_BOUNDARY1, /* In boundary prefix. */ - MIMESTATE_BOUNDARY2, /* In boundary. */ - MIMESTATE_CONTENT, /* In content. */ - MIMESTATE_END, /* End of part reached. */ + MIMESTATE_BEGIN, /* Readback has not yet started. */ + MIMESTATE_CURLHEADERS, /* In curl-generated headers. */ + MIMESTATE_USERHEADERS, /* In caller's supplied headers. */ + MIMESTATE_EOH, /* End of headers. */ + MIMESTATE_BODY, /* Placeholder. */ + MIMESTATE_BOUNDARY1, /* In boundary prefix. */ + MIMESTATE_BOUNDARY2, /* In boundary. */ + MIMESTATE_CONTENT, /* In content. */ + MIMESTATE_END, /* End of part reached. */ MIMESTATE_LAST }; /* Mime headers strategies. */ enum mimestrategy { - MIMESTRATEGY_MAIL, /* Mime mail. */ - MIMESTRATEGY_FORM, /* HTTP post form. */ + MIMESTRATEGY_MAIL, /* Mime mail. */ + MIMESTRATEGY_FORM, /* HTTP post form. */ MIMESTRATEGY_LAST }; /* Content transfer encoder. */ struct mime_encoder { - const char * name; /* Encoding name. */ - size_t (*encodefunc)(char *buffer, size_t size, bool ateof, - curl_mimepart *part); /* Encoded read. */ - curl_off_t (*sizefunc)(curl_mimepart *part); /* Encoded size. */ + const char *name; /* Encoding name. */ + size_t (*encodefunc)(char *buffer, size_t size, bool ateof, + curl_mimepart *part); /* Encoded read. */ + curl_off_t (*sizefunc)(curl_mimepart *part); /* Encoded size. */ }; /* Content transfer encoder state. */ struct mime_encoder_state { - size_t pos; /* Position on output line. */ - size_t bufbeg; /* Next data index in input buffer. */ - size_t bufend; /* First unused byte index in input buffer. */ - char buf[ENCODING_BUFFER_SIZE]; /* Input buffer. */ + size_t pos; /* Position on output line. */ + size_t bufbeg; /* Next data index in input buffer. */ + size_t bufend; /* First unused byte index in input buffer. */ + char buf[ENCODING_BUFFER_SIZE]; /* Input buffer. */ }; /* Mime readback state. */ struct mime_state { - enum mimestate state; /* Current state token. */ - void *ptr; /* State-dependent pointer. */ - curl_off_t offset; /* State-dependent offset. */ + enum mimestate state; /* Current state token. */ + void *ptr; /* State-dependent pointer. */ + curl_off_t offset; /* State-dependent offset. */ }; /* Boundary string length. */ @@ -99,60 +99,57 @@ struct mime_state { /* A mime multipart. */ struct curl_mime { - curl_mimepart *parent; /* Parent part. */ - curl_mimepart *firstpart; /* First part. */ - curl_mimepart *lastpart; /* Last part. */ + curl_mimepart *parent; /* Parent part. */ + curl_mimepart *firstpart; /* First part. */ + curl_mimepart *lastpart; /* Last part. */ char boundary[MIME_BOUNDARY_LEN + 1]; /* The part boundary. */ - struct mime_state state; /* Current readback state. */ + struct mime_state state; /* Current readback state. */ }; /* A mime part. */ struct curl_mimepart { - curl_mime *parent; /* Parent mime structure. */ - curl_mimepart *nextpart; /* Forward linked list. */ - enum mimekind kind; /* The part kind. */ - unsigned int flags; /* Flags. */ - char *data; /* Memory data or filename. */ - curl_read_callback readfunc; /* Read function. */ - curl_seek_callback seekfunc; /* Seek function. */ - curl_free_callback freefunc; /* Argument free function. */ - void *arg; /* Argument to callback functions. */ - FILE *fp; /* File pointer. */ - struct curl_slist *curlheaders; /* Part headers. */ - struct curl_slist *userheaders; /* Part headers. */ - char *mimetype; /* Part mime type. */ - char *filename; /* Remote filename. */ - char *name; /* Data name. */ - curl_off_t datasize; /* Expected data size. */ - struct mime_state state; /* Current readback state. */ + curl_mime *parent; /* Parent mime structure. */ + curl_mimepart *nextpart; /* Forward linked list. */ + enum mimekind kind; /* The part kind. */ + unsigned int flags; /* Flags. */ + char *data; /* Memory data or filename. */ + curl_read_callback readfunc; /* Read function. */ + curl_seek_callback seekfunc; /* Seek function. */ + curl_free_callback freefunc; /* Argument free function. */ + void *arg; /* Argument to callback functions. */ + FILE *fp; /* File pointer. */ + struct curl_slist *curlheaders; /* Part headers. */ + struct curl_slist *userheaders; /* Part headers. */ + char *mimetype; /* Part mime type. */ + char *filename; /* Remote filename. */ + char *name; /* Data name. */ + curl_off_t datasize; /* Expected data size. */ + struct mime_state state; /* Current readback state. */ const struct mime_encoder *encoder; /* Content data encoder. */ struct mime_encoder_state encstate; /* Data encoder state. */ - size_t lastreadstatus; /* Last read callback returned status. */ + size_t lastreadstatus; /* Last read callback returned status. */ }; CURLcode Curl_mime_add_header(struct curl_slist **slp, const char *fmt, ...) - CURL_PRINTF(2, 3); + CURL_PRINTF(2, 3); -#if !defined(CURL_DISABLE_MIME) && (!defined(CURL_DISABLE_HTTP) || \ - !defined(CURL_DISABLE_SMTP) || \ - !defined(CURL_DISABLE_IMAP)) +#if !defined(CURL_DISABLE_MIME) && \ + (!defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_SMTP) || \ + !defined(CURL_DISABLE_IMAP)) /* Prototypes. */ void Curl_mime_initpart(struct curl_mimepart *part); void Curl_mime_cleanpart(struct curl_mimepart *part); -CURLcode Curl_mime_duppart(struct Curl_easy *data, - struct curl_mimepart *dst, +CURLcode Curl_mime_duppart(struct Curl_easy *data, struct curl_mimepart *dst, const curl_mimepart *src); CURLcode Curl_mime_set_subparts(struct curl_mimepart *part, - struct curl_mime *subparts, - int take_ownership); + struct curl_mime *subparts, int take_ownership); CURLcode Curl_mime_prepare_headers(struct Curl_easy *data, struct curl_mimepart *part, const char *contenttype, const char *disposition, enum mimestrategy strategy); -size_t Curl_mime_read(char *buffer, size_t size, size_t nitems, - void *instream); +size_t Curl_mime_read(char *buffer, size_t size, size_t nitems, void *instream); const char *Curl_mime_contenttype(const char *filename); /** @@ -165,12 +162,12 @@ CURLcode Curl_creader_set_mime(struct Curl_easy *data, curl_mimepart *part); /* if disabled */ #define Curl_mime_initpart(x) #define Curl_mime_cleanpart(x) -#define Curl_mime_duppart(x,y,z) CURLE_OK /* Nothing to duplicate. Succeed */ -#define Curl_mime_set_subparts(a,b,c) CURLE_NOT_BUILT_IN -#define Curl_mime_prepare_headers(a,b,c,d,e) CURLE_NOT_BUILT_IN +#define Curl_mime_duppart(x, y, z) CURLE_OK /* Nothing to duplicate. Succeed \ + */ +#define Curl_mime_set_subparts(a, b, c) CURLE_NOT_BUILT_IN +#define Curl_mime_prepare_headers(a, b, c, d, e) CURLE_NOT_BUILT_IN #define Curl_mime_read NULL -#define Curl_creader_set_mime(x,y) ((void)x, CURLE_NOT_BUILT_IN) +#define Curl_creader_set_mime(x, y) ((void)x, CURLE_NOT_BUILT_IN) #endif - #endif /* HEADER_CURL_MIME_H */ diff --git a/vendor/hydra/vendor/curl/lib/mqtt.h b/vendor/hydra/vendor/curl/lib/mqtt.h index 99ab12a9..9c1361aa 100644 --- a/vendor/hydra/vendor/curl/lib/mqtt.h +++ b/vendor/hydra/vendor/curl/lib/mqtt.h @@ -29,13 +29,13 @@ extern const struct Curl_handler Curl_handler_mqtt; #endif enum mqttstate { - MQTT_FIRST, /* 0 */ - MQTT_REMAINING_LENGTH, /* 1 */ - MQTT_CONNACK, /* 2 */ - MQTT_SUBACK, /* 3 */ - MQTT_SUBACK_COMING, /* 4 - the SUBACK remainder */ - MQTT_PUBWAIT, /* 5 - wait for publish */ - MQTT_PUB_REMAIN, /* 6 - wait for the remainder of the publish */ + MQTT_FIRST, /* 0 */ + MQTT_REMAINING_LENGTH, /* 1 */ + MQTT_CONNACK, /* 2 */ + MQTT_SUBACK, /* 3 */ + MQTT_SUBACK_COMING, /* 4 - the SUBACK remainder */ + MQTT_PUBWAIT, /* 5 - wait for publish */ + MQTT_PUB_REMAIN, /* 6 - wait for the remainder of the publish */ MQTT_NOSTATE /* 7 - never used an actual state */ }; diff --git a/vendor/hydra/vendor/curl/lib/multihandle.h b/vendor/hydra/vendor/curl/lib/multihandle.h index fef117c0..6e8f408a 100644 --- a/vendor/hydra/vendor/curl/lib/multihandle.h +++ b/vendor/hydra/vendor/curl/lib/multihandle.h @@ -24,9 +24,9 @@ * ***************************************************************************/ -#include "llist.h" -#include "hash.h" #include "conncache.h" +#include "hash.h" +#include "llist.h" #include "psl.h" #include "socketpair.h" @@ -42,27 +42,27 @@ struct Curl_message { well! */ typedef enum { - MSTATE_INIT, /* 0 - start in this state */ - MSTATE_PENDING, /* 1 - no connections, waiting for one */ - MSTATE_SETUP, /* 2 - start a new transfer */ - MSTATE_CONNECT, /* 3 - resolve/connect has been sent off */ - MSTATE_RESOLVING, /* 4 - awaiting the resolve to finalize */ - MSTATE_CONNECTING, /* 5 - awaiting the TCP connect to finalize */ - MSTATE_TUNNELING, /* 6 - awaiting HTTPS proxy SSL initialization to - complete and/or proxy CONNECT to finalize */ - MSTATE_PROTOCONNECT, /* 7 - initiate protocol connect procedure */ + MSTATE_INIT, /* 0 - start in this state */ + MSTATE_PENDING, /* 1 - no connections, waiting for one */ + MSTATE_SETUP, /* 2 - start a new transfer */ + MSTATE_CONNECT, /* 3 - resolve/connect has been sent off */ + MSTATE_RESOLVING, /* 4 - awaiting the resolve to finalize */ + MSTATE_CONNECTING, /* 5 - awaiting the TCP connect to finalize */ + MSTATE_TUNNELING, /* 6 - awaiting HTTPS proxy SSL initialization to + complete and/or proxy CONNECT to finalize */ + MSTATE_PROTOCONNECT, /* 7 - initiate protocol connect procedure */ MSTATE_PROTOCONNECTING, /* 8 - completing the protocol-specific connect phase */ - MSTATE_DO, /* 9 - start send off the request (part 1) */ - MSTATE_DOING, /* 10 - sending off the request (part 1) */ - MSTATE_DOING_MORE, /* 11 - send off the request (part 2) */ - MSTATE_DID, /* 12 - done sending off request */ - MSTATE_PERFORMING, /* 13 - transfer data */ - MSTATE_RATELIMITING, /* 14 - wait because limit-rate exceeded */ - MSTATE_DONE, /* 15 - post data transfer operation */ - MSTATE_COMPLETED, /* 16 - operation complete */ - MSTATE_MSGSENT, /* 17 - the operation complete message is sent */ - MSTATE_LAST /* 18 - not a true state, never use this */ + MSTATE_DO, /* 9 - start send off the request (part 1) */ + MSTATE_DOING, /* 10 - sending off the request (part 1) */ + MSTATE_DOING_MORE, /* 11 - send off the request (part 2) */ + MSTATE_DID, /* 12 - done sending off request */ + MSTATE_PERFORMING, /* 13 - transfer data */ + MSTATE_RATELIMITING, /* 14 - wait because limit-rate exceeded */ + MSTATE_DONE, /* 15 - post data transfer operation */ + MSTATE_COMPLETED, /* 16 - operation complete */ + MSTATE_MSGSENT, /* 17 - the operation complete message is sent */ + MSTATE_LAST /* 18 - not a true state, never use this */ } CURLMstate; /* we support N sockets per easy handle. Set the corresponding bit to what @@ -86,7 +86,7 @@ struct Curl_multi { this multi handle with an easy handle. Set this to CURL_MULTI_HANDLE. */ unsigned int magic; - unsigned int num_easy; /* amount of entries in the linked list above. */ + unsigned int num_easy; /* amount of entries in the linked list above. */ unsigned int num_alive; /* amount of easy handles that are added but have not yet reached COMPLETE state */ @@ -96,7 +96,7 @@ struct Curl_multi { struct Curl_llist process; /* not in PENDING or MSGSENT */ struct Curl_llist pending; /* in PENDING */ struct Curl_llist msgsent; /* in MSGSENT */ - curl_off_t next_easy_mid; /* next multi-id for easy handle added */ + curl_off_t next_easy_mid; /* next multi-id for easy handle added */ /* callback function and user data pointer for the *socket() API */ curl_socket_callback socket_cb; @@ -119,11 +119,11 @@ struct Curl_multi { struct Curl_tree *timetree; /* buffer used for transfer data, lazy initialized */ - char *xfer_buf; /* the actual buffer */ - size_t xfer_buf_len; /* the allocated length */ + char *xfer_buf; /* the actual buffer */ + size_t xfer_buf_len; /* the allocated length */ /* buffer used for upload data, lazy initialized */ - char *xfer_ulbuf; /* the actual buffer */ - size_t xfer_ulbuf_len; /* the allocated length */ + char *xfer_ulbuf; /* the actual buffer */ + size_t xfer_ulbuf_len; /* the allocated length */ /* 'sockhash' is the lookup hash for socket descriptor => easy handles (note the pluralis form, there can be more than one easy handle waiting on the @@ -143,15 +143,15 @@ struct Curl_multi { long max_host_connections; /* if >0, a fixed limit of the maximum number of connections per host */ - long max_total_connections; /* if >0, a fixed limit of the maximum number - of connections in total */ + long max_total_connections; /* if >0, a fixed limit of the maximum number + of connections in total */ long max_shutdown_connections; /* if >0, a fixed limit of the maximum number of connections in shutdown handling */ /* timer callback and user data pointer for the *socket() API */ curl_multi_timer_callback timer_cb; void *timer_userp; - long last_timeout_ms; /* the last timeout value set via timer_cb */ + long last_timeout_ms; /* the last timeout value set via timer_cb */ struct curltime last_expire_ts; /* timestamp of last expiry */ #ifdef USE_WINSOCK @@ -168,21 +168,21 @@ struct Curl_multi { entries we are allowed to grow the connection cache to */ #define IPV6_UNKNOWN 0 -#define IPV6_DEAD 1 -#define IPV6_WORKS 2 - unsigned char ipv6_up; /* IPV6_* defined */ - BIT(multiplexing); /* multiplexing wanted */ - BIT(recheckstate); /* see Curl_multi_connchanged */ - BIT(in_callback); /* true while executing a callback */ +#define IPV6_DEAD 1 +#define IPV6_WORKS 2 + unsigned char ipv6_up; /* IPV6_* defined */ + BIT(multiplexing); /* multiplexing wanted */ + BIT(recheckstate); /* see Curl_multi_connchanged */ + BIT(in_callback); /* true while executing a callback */ #ifdef USE_OPENSSL BIT(ssl_seeded); #endif BIT(dead); /* a callback returned error, everything needs to crash and burn */ - BIT(xfer_buf_borrowed); /* xfer_buf is currently being borrowed */ - BIT(xfer_ulbuf_borrowed); /* xfer_ulbuf is currently being borrowed */ + BIT(xfer_buf_borrowed); /* xfer_buf is currently being borrowed */ + BIT(xfer_ulbuf_borrowed); /* xfer_ulbuf is currently being borrowed */ #ifdef DEBUGBUILD - BIT(warned); /* true after user warned of DEBUGBUILD */ + BIT(warned); /* true after user warned of DEBUGBUILD */ #endif }; diff --git a/vendor/hydra/vendor/curl/lib/multiif.h b/vendor/hydra/vendor/curl/lib/multiif.h index e5872cd6..4ab6074d 100644 --- a/vendor/hydra/vendor/curl/lib/multiif.h +++ b/vendor/hydra/vendor/curl/lib/multiif.h @@ -33,8 +33,7 @@ void Curl_expire(struct Curl_easy *data, timediff_t milli, expire_id); bool Curl_expire_clear(struct Curl_easy *data); void Curl_expire_done(struct Curl_easy *data, expire_id id); CURLMcode Curl_update_timer(struct Curl_multi *multi) WARN_UNUSED_RESULT; -void Curl_attach_connection(struct Curl_easy *data, - struct connectdata *conn); +void Curl_attach_connection(struct Curl_easy *data, struct connectdata *conn); void Curl_detach_connection(struct Curl_easy *data); bool Curl_multiplex_wanted(const struct Curl_multi *multi); void Curl_set_in_callback(struct Curl_easy *data, bool value); @@ -45,8 +44,7 @@ void Curl_multi_connchanged(struct Curl_multi *multi); /* Internal version of curl_multi_init() accepts size parameters for the socket, connection and dns hashes */ -struct Curl_multi *Curl_multi_handle(size_t hashsize, - size_t chashsize, +struct Curl_multi *Curl_multi_handle(size_t hashsize, size_t chashsize, size_t dnssize); /* the write bits start at bit 16 for the *getsock() bitmap */ @@ -61,7 +59,7 @@ struct Curl_multi *Curl_multi_handle(size_t hashsize, #define GETSOCK_READSOCK(x) (1 << (x)) /* mask for checking if read and/or write is set for index x */ -#define GETSOCK_MASK_RW(x) (GETSOCK_READSOCK(x)|GETSOCK_WRITESOCK(x)) +#define GETSOCK_MASK_RW(x) (GETSOCK_READSOCK(x) | GETSOCK_WRITESOCK(x)) /* * Curl_multi_closed() @@ -80,8 +78,7 @@ void Curl_multi_closed(struct Curl_easy *data, curl_socket_t s); * differences are seen. */ CURLMcode Curl_multi_pollset_ev(struct Curl_multi *multi, - struct Curl_easy *data, - struct easy_pollset *ps, + struct Curl_easy *data, struct easy_pollset *ps, struct easy_pollset *last_ps); /* @@ -91,7 +88,6 @@ CURLMcode Curl_multi_add_perform(struct Curl_multi *multi, struct Curl_easy *data, struct connectdata *conn); - /* Return the value of the CURLMOPT_MAX_CONCURRENT_STREAMS option */ unsigned int Curl_multi_max_concurrent_streams(struct Curl_multi *multi); @@ -110,8 +106,8 @@ unsigned int Curl_multi_max_concurrent_streams(struct Curl_multi *multi); * CURLE_FAILED_INIT if the easy handle is without multi. * CURLE_AGAIN if the buffer is borrowed already. */ -CURLcode Curl_multi_xfer_buf_borrow(struct Curl_easy *data, - char **pbuf, size_t *pbuflen); +CURLcode Curl_multi_xfer_buf_borrow(struct Curl_easy *data, char **pbuf, + size_t *pbuflen); /** * Release the borrowed buffer. All references into the buffer become * invalid after this. @@ -134,8 +130,8 @@ void Curl_multi_xfer_buf_release(struct Curl_easy *data, char *buf); * CURLE_FAILED_INIT if the easy handle is without multi. * CURLE_AGAIN if the buffer is borrowed already. */ -CURLcode Curl_multi_xfer_ulbuf_borrow(struct Curl_easy *data, - char **pbuf, size_t *pbuflen); +CURLcode Curl_multi_xfer_ulbuf_borrow(struct Curl_easy *data, char **pbuf, + size_t *pbuflen); /** * Release the borrowed upload buffer. All references into the buffer become diff --git a/vendor/hydra/vendor/curl/lib/netrc.h b/vendor/hydra/vendor/curl/lib/netrc.h index 37c95db5..bf70a0dc 100644 --- a/vendor/hydra/vendor/curl/lib/netrc.h +++ b/vendor/hydra/vendor/curl/lib/netrc.h @@ -28,16 +28,16 @@ #ifndef CURL_DISABLE_NETRC /* returns -1 on failure, 0 if the host is found, 1 is the host is not found */ -int Curl_parsenetrc(const char *host, char **loginp, - char **passwordp, char *filename); - /* Assume: (*passwordp)[0]=0, host[0] != 0. - * If (*loginp)[0] = 0, search for login and password within a machine - * section in the netrc. - * If (*loginp)[0] != 0, search for password within machine and login. - */ +int Curl_parsenetrc(const char *host, char **loginp, char **passwordp, + char *filename); +/* Assume: (*passwordp)[0]=0, host[0] != 0. + * If (*loginp)[0] = 0, search for login and password within a machine + * section in the netrc. + * If (*loginp)[0] != 0, search for password within machine and login. + */ #else /* disabled */ -#define Curl_parsenetrc(a,b,c,d,e,f) 1 +#define Curl_parsenetrc(a, b, c, d, e, f) 1 #endif #endif /* HEADER_CURL_NETRC_H */ diff --git a/vendor/hydra/vendor/curl/lib/nonblock.h b/vendor/hydra/vendor/curl/lib/nonblock.h index 4a1a6151..9f37db00 100644 --- a/vendor/hydra/vendor/curl/lib/nonblock.h +++ b/vendor/hydra/vendor/curl/lib/nonblock.h @@ -26,7 +26,7 @@ #include /* for curl_socket_t */ -int curlx_nonblock(curl_socket_t sockfd, /* operate on this */ - int nonblock /* TRUE or FALSE */); +int curlx_nonblock(curl_socket_t sockfd, /* operate on this */ + int nonblock /* TRUE or FALSE */); #endif /* HEADER_CURL_NONBLOCK_H */ diff --git a/vendor/hydra/vendor/curl/lib/noproxy.h b/vendor/hydra/vendor/curl/lib/noproxy.h index 71ae7eaa..5bf2cb1c 100644 --- a/vendor/hydra/vendor/curl/lib/noproxy.h +++ b/vendor/hydra/vendor/curl/lib/noproxy.h @@ -32,8 +32,7 @@ UNITTEST bool Curl_cidr4_match(const char *ipv4, /* 1.2.3.4 address */ const char *network, /* 1.2.3.4 address */ unsigned int bits); -UNITTEST bool Curl_cidr6_match(const char *ipv6, - const char *network, +UNITTEST bool Curl_cidr6_match(const char *ipv6, const char *network, unsigned int bits); #endif diff --git a/vendor/hydra/vendor/curl/lib/parsedate.h b/vendor/hydra/vendor/curl/lib/parsedate.h index 84c37f16..1e1b13d1 100644 --- a/vendor/hydra/vendor/curl/lib/parsedate.h +++ b/vendor/hydra/vendor/curl/lib/parsedate.h @@ -24,8 +24,8 @@ * ***************************************************************************/ -extern const char * const Curl_wkday[7]; -extern const char * const Curl_month[12]; +extern const char *const Curl_wkday[7]; +extern const char *const Curl_month[12]; CURLcode Curl_gmtime(time_t intime, struct tm *store); diff --git a/vendor/hydra/vendor/curl/lib/pingpong.h b/vendor/hydra/vendor/curl/lib/pingpong.h index 72239ff0..726aaa15 100644 --- a/vendor/hydra/vendor/curl/lib/pingpong.h +++ b/vendor/hydra/vendor/curl/lib/pingpong.h @@ -27,7 +27,7 @@ #include "curl_setup.h" #if !defined(CURL_DISABLE_IMAP) || !defined(CURL_DISABLE_FTP) || \ - !defined(CURL_DISABLE_POP3) || !defined(CURL_DISABLE_SMTP) + !defined(CURL_DISABLE_POP3) || !defined(CURL_DISABLE_SMTP) #define USE_PINGPONG #endif @@ -47,13 +47,13 @@ typedef enum { * It holds response cache and non-blocking sending data. */ struct pingpong { - size_t nread_resp; /* number of bytes currently read of a server response */ - bool pending_resp; /* set TRUE when a server response is pending or in - progress, and is cleared once the last response is - read */ - char *sendthis; /* pointer to a buffer that is to be sent to the server */ - size_t sendleft; /* number of bytes left to send from the sendthis buffer */ - size_t sendsize; /* total size of the sendthis buffer */ + size_t nread_resp; /* number of bytes currently read of a server response */ + bool pending_resp; /* set TRUE when a server response is pending or in + progress, and is cleared once the last response is + read */ + char *sendthis; /* pointer to a buffer that is to be sent to the server */ + size_t sendleft; /* number of bytes left to send from the sendthis buffer */ + size_t sendsize; /* total size of the sendthis buffer */ struct curltime response; /* set to Curl_now() when a command has been sent off, used to time-out response reading */ timediff_t response_time; /* When no timeout is given, this is the amount of @@ -68,16 +68,16 @@ struct pingpong { pingpong layer to function */ CURLcode (*statemachine)(struct Curl_easy *data, struct connectdata *conn); - bool (*endofresp)(struct Curl_easy *data, struct connectdata *conn, - char *ptr, size_t len, int *code); + bool (*endofresp)(struct Curl_easy *data, struct connectdata *conn, char *ptr, + size_t len, int *code); }; -#define PINGPONG_SETUP(pp,s,e) \ - do { \ - pp->response_time = RESP_TIMEOUT; \ - pp->statemachine = s; \ - pp->endofresp = e; \ - } while(0) +#define PINGPONG_SETUP(pp, s, e) \ + do { \ + pp->response_time = RESP_TIMEOUT; \ + pp->statemachine = s; \ + pp->endofresp = e; \ + } while (0) /* * Curl_pp_statemach() @@ -93,9 +93,8 @@ void Curl_pp_init(struct pingpong *pp); /* Returns timeout in ms. 0 or negative number means the timeout has already triggered */ -timediff_t Curl_pp_state_timeout(struct Curl_easy *data, - struct pingpong *pp, bool disconnecting); - +timediff_t Curl_pp_state_timeout(struct Curl_easy *data, struct pingpong *pp, + bool disconnecting); /*********************************************************************** * @@ -107,8 +106,7 @@ timediff_t Curl_pp_state_timeout(struct Curl_easy *data, * * made to never block */ -CURLcode Curl_pp_sendf(struct Curl_easy *data, - struct pingpong *pp, +CURLcode Curl_pp_sendf(struct Curl_easy *data, struct pingpong *pp, const char *fmt, ...) CURL_PRINTF(3, 4); /*********************************************************************** @@ -121,27 +119,22 @@ CURLcode Curl_pp_sendf(struct Curl_easy *data, * * made to never block */ -CURLcode Curl_pp_vsendf(struct Curl_easy *data, - struct pingpong *pp, - const char *fmt, - va_list args) CURL_PRINTF(3, 0); +CURLcode Curl_pp_vsendf(struct Curl_easy *data, struct pingpong *pp, + const char *fmt, va_list args) CURL_PRINTF(3, 0); /* * Curl_pp_readresp() * * Reads a piece of a server response. */ -CURLcode Curl_pp_readresp(struct Curl_easy *data, - int sockindex, +CURLcode Curl_pp_readresp(struct Curl_easy *data, int sockindex, struct pingpong *pp, - int *code, /* return the server code if done */ + int *code, /* return the server code if done */ size_t *size); /* size of the response */ -bool Curl_pp_needs_flush(struct Curl_easy *data, - struct pingpong *pp); +bool Curl_pp_needs_flush(struct Curl_easy *data, struct pingpong *pp); -CURLcode Curl_pp_flushsend(struct Curl_easy *data, - struct pingpong *pp); +CURLcode Curl_pp_flushsend(struct Curl_easy *data, struct pingpong *pp); /* call this when a pingpong connection is disconnected */ CURLcode Curl_pp_disconnect(struct pingpong *pp); @@ -149,7 +142,6 @@ CURLcode Curl_pp_disconnect(struct pingpong *pp); int Curl_pp_getsock(struct Curl_easy *data, struct pingpong *pp, curl_socket_t *socks); - /*********************************************************************** * * Curl_pp_moredata() diff --git a/vendor/hydra/vendor/curl/lib/pop3.h b/vendor/hydra/vendor/curl/lib/pop3.h index 3d08dafa..05d1cadd 100644 --- a/vendor/hydra/vendor/curl/lib/pop3.h +++ b/vendor/hydra/vendor/curl/lib/pop3.h @@ -24,27 +24,27 @@ * ***************************************************************************/ -#include "pingpong.h" #include "curl_sasl.h" +#include "pingpong.h" /**************************************************************************** * POP3 unique setup ***************************************************************************/ typedef enum { - POP3_STOP, /* do nothing state, stops the state machine */ - POP3_SERVERGREET, /* waiting for the initial greeting immediately after - a connect */ + POP3_STOP, /* do nothing state, stops the state machine */ + POP3_SERVERGREET, /* waiting for the initial greeting immediately after + a connect */ POP3_CAPA, POP3_STARTTLS, - POP3_UPGRADETLS, /* asynchronously upgrade the connection to SSL/TLS - (multi mode only) */ + POP3_UPGRADETLS, /* asynchronously upgrade the connection to SSL/TLS + (multi mode only) */ POP3_AUTH, POP3_APOP, POP3_USER, POP3_PASS, POP3_COMMAND, POP3_QUIT, - POP3_LAST /* never used */ + POP3_LAST /* never used */ } pop3state; /* This POP3 struct is used in the Curl_easy. All POP3 data that is @@ -53,25 +53,25 @@ typedef enum { used. */ struct POP3 { curl_pp_transfer transfer; - char *id; /* Message ID */ - char *custom; /* Custom Request */ + char *id; /* Message ID */ + char *custom; /* Custom Request */ }; /* pop3_conn is used for struct connection-oriented data in the connectdata struct */ struct pop3_conn { struct pingpong pp; - pop3state state; /* Always use pop3.c:state() to change state! */ - size_t eob; /* Number of bytes of the EOB (End Of Body) that - have been received so far */ - size_t strip; /* Number of bytes from the start to ignore as - non-body */ - struct SASL sasl; /* SASL-related storage */ - char *apoptimestamp; /* APOP timestamp from the server greeting */ + pop3state state; /* Always use pop3.c:state() to change state! */ + size_t eob; /* Number of bytes of the EOB (End Of Body) that + have been received so far */ + size_t strip; /* Number of bytes from the start to ignore as + non-body */ + struct SASL sasl; /* SASL-related storage */ + char *apoptimestamp; /* APOP timestamp from the server greeting */ unsigned char authtypes; /* Accepted authentication types */ unsigned char preftype; /* Preferred authentication type */ - BIT(ssldone); /* Is connect() over SSL done? */ - BIT(tls_supported); /* StartTLS capability supported by server */ + BIT(ssldone); /* Is connect() over SSL done? */ + BIT(tls_supported); /* StartTLS capability supported by server */ }; extern const struct Curl_handler Curl_handler_pop3; @@ -79,12 +79,12 @@ extern const struct Curl_handler Curl_handler_pop3s; /* Authentication type flags */ #define POP3_TYPE_CLEARTEXT (1 << 0) -#define POP3_TYPE_APOP (1 << 1) -#define POP3_TYPE_SASL (1 << 2) +#define POP3_TYPE_APOP (1 << 1) +#define POP3_TYPE_SASL (1 << 2) /* Authentication type values */ -#define POP3_TYPE_NONE 0 -#define POP3_TYPE_ANY (POP3_TYPE_CLEARTEXT|POP3_TYPE_APOP|POP3_TYPE_SASL) +#define POP3_TYPE_NONE 0 +#define POP3_TYPE_ANY (POP3_TYPE_CLEARTEXT | POP3_TYPE_APOP | POP3_TYPE_SASL) /* This is the 5-bytes End-Of-Body marker for POP3 */ #define POP3_EOB "\x0d\x0a\x2e\x0d\x0a" diff --git a/vendor/hydra/vendor/curl/lib/progress.h b/vendor/hydra/vendor/curl/lib/progress.h index 04a8f5bc..f07bcc1b 100644 --- a/vendor/hydra/vendor/curl/lib/progress.h +++ b/vendor/hydra/vendor/curl/lib/progress.h @@ -26,7 +26,6 @@ #include "timeval.h" - typedef enum { TIMER_NONE, TIMER_STARTOP, @@ -58,8 +57,7 @@ void Curl_pgrsUpdate_nometer(struct Curl_easy *data); void Curl_pgrsResetTransferSizes(struct Curl_easy *data); struct curltime Curl_pgrsTime(struct Curl_easy *data, timerid timer); -timediff_t Curl_pgrsLimitWaitTime(struct pgrs_dir *d, - curl_off_t speed_limit, +timediff_t Curl_pgrsLimitWaitTime(struct pgrs_dir *d, curl_off_t speed_limit, struct curltime now); /** * Update progress timer with the elapsed time from its start to `timestamp`. @@ -69,9 +67,9 @@ timediff_t Curl_pgrsLimitWaitTime(struct pgrs_dir *d, void Curl_pgrsTimeWas(struct Curl_easy *data, timerid timer, struct curltime timestamp); -#define PGRS_HIDE (1<<4) -#define PGRS_UL_SIZE_KNOWN (1<<5) -#define PGRS_DL_SIZE_KNOWN (1<<6) -#define PGRS_HEADERS_OUT (1<<7) /* set when the headers have been written */ +#define PGRS_HIDE (1 << 4) +#define PGRS_UL_SIZE_KNOWN (1 << 5) +#define PGRS_DL_SIZE_KNOWN (1 << 6) +#define PGRS_HEADERS_OUT (1 << 7) /* set when the headers have been written */ #endif /* HEADER_CURL_PROGRESS_H */ diff --git a/vendor/hydra/vendor/curl/lib/psl.h b/vendor/hydra/vendor/curl/lib/psl.h index 23cfa921..8baa14d1 100644 --- a/vendor/hydra/vendor/curl/lib/psl.h +++ b/vendor/hydra/vendor/curl/lib/psl.h @@ -27,12 +27,12 @@ #ifdef USE_LIBPSL #include -#define PSL_TTL (72 * 3600) /* PSL time to live before a refresh. */ +#define PSL_TTL (72 * 3600) /* PSL time to live before a refresh. */ struct PslCache { const psl_ctx_t *psl; /* The PSL. */ - time_t expires; /* Time this PSL life expires. */ - bool dynamic; /* PSL should be released when no longer needed. */ + time_t expires; /* Time this PSL life expires. */ + bool dynamic; /* PSL should be released when no longer needed. */ }; const psl_ctx_t *Curl_psl_use(struct Curl_easy *easy); diff --git a/vendor/hydra/vendor/curl/lib/rand.h b/vendor/hydra/vendor/curl/lib/rand.h index 2ba60e72..674cb6ee 100644 --- a/vendor/hydra/vendor/curl/lib/rand.h +++ b/vendor/hydra/vendor/curl/lib/rand.h @@ -31,9 +31,9 @@ CURLcode Curl_rand_bytes(struct Curl_easy *data, unsigned char *rnd, size_t num); #ifdef DEBUGBUILD -#define Curl_rand(a,b,c) Curl_rand_bytes((a), TRUE, (b), (c)) +#define Curl_rand(a, b, c) Curl_rand_bytes((a), TRUE, (b), (c)) #else -#define Curl_rand(a,b,c) Curl_rand_bytes((a), (b), (c)) +#define Curl_rand(a, b, c) Curl_rand_bytes((a), (b), (c)) #endif /* @@ -41,8 +41,7 @@ CURLcode Curl_rand_bytes(struct Curl_easy *data, * hexadecimal digits PLUS a null-terminating byte. It must be an odd number * size. */ -CURLcode Curl_rand_hex(struct Curl_easy *data, unsigned char *rnd, - size_t num); +CURLcode Curl_rand_hex(struct Curl_easy *data, unsigned char *rnd, size_t num); /* * Curl_rand_alnum() fills the 'rnd' buffer with a given 'num' size with random diff --git a/vendor/hydra/vendor/curl/lib/request.h b/vendor/hydra/vendor/curl/lib/request.h index c53c3eb5..4696fcc5 100644 --- a/vendor/hydra/vendor/curl/lib/request.h +++ b/vendor/hydra/vendor/curl/lib/request.h @@ -26,9 +26,8 @@ /* This file is for lib internal stuff */ -#include "curl_setup.h" - #include "bufq.h" +#include "curl_setup.h" /* forward declarations */ struct UserDefined; @@ -37,22 +36,21 @@ struct doh_probes; #endif enum expect100 { - EXP100_SEND_DATA, /* enough waiting, just send the body now */ - EXP100_AWAITING_CONTINUE, /* waiting for the 100 Continue header */ - EXP100_SENDING_REQUEST, /* still sending the request but will wait for - the 100 header once done with the request */ - EXP100_FAILED /* used on 417 Expectation Failed */ + EXP100_SEND_DATA, /* enough waiting, just send the body now */ + EXP100_AWAITING_CONTINUE, /* waiting for the 100 Continue header */ + EXP100_SENDING_REQUEST, /* still sending the request but will wait for + the 100 header once done with the request */ + EXP100_FAILED /* used on 417 Expectation Failed */ }; enum upgrade101 { - UPGR101_INIT, /* default state */ - UPGR101_WS, /* upgrade to WebSockets requested */ - UPGR101_H2, /* upgrade to HTTP/2 requested */ - UPGR101_RECEIVED, /* 101 response received */ - UPGR101_WORKING /* talking upgraded protocol */ + UPGR101_INIT, /* default state */ + UPGR101_WS, /* upgrade to WebSockets requested */ + UPGR101_H2, /* upgrade to HTTP/2 requested */ + UPGR101_RECEIVED, /* 101 response received */ + UPGR101_WORKING /* talking upgraded protocol */ }; - /* * Request specific data in the easy handle (Curl_easy). Previously, * these members were on the connectdata struct but since a conn struct may @@ -61,31 +59,31 @@ enum upgrade101 { * request, as it will be cleared between multiple ones */ struct SingleRequest { - curl_off_t size; /* -1 if unknown at this point */ - curl_off_t maxdownload; /* in bytes, the maximum amount of data to fetch, - -1 means unlimited */ - curl_off_t bytecount; /* total number of bytes read */ - curl_off_t writebytecount; /* number of bytes written */ - - struct curltime start; /* transfer started at this time */ - unsigned int headerbytecount; /* received server headers (not CONNECT - headers) */ - unsigned int allheadercount; /* all received headers (server + CONNECT) */ + curl_off_t size; /* -1 if unknown at this point */ + curl_off_t maxdownload; /* in bytes, the maximum amount of data to fetch, + -1 means unlimited */ + curl_off_t bytecount; /* total number of bytes read */ + curl_off_t writebytecount; /* number of bytes written */ + + struct curltime start; /* transfer started at this time */ + unsigned int headerbytecount; /* received server headers (not CONNECT + headers) */ + unsigned int allheadercount; /* all received headers (server + CONNECT) */ unsigned int deductheadercount; /* this amount of bytes does not count when we check if anything has been transferred at the end of a connection. We use this counter to make only a 100 reply (without a following second response code) result in a CURLE_GOT_NOTHING error code */ - int headerline; /* counts header lines to better track the - first one */ - curl_off_t offset; /* possible resume offset read from the - Content-Range: header */ - int httpversion; /* Version in response (09, 10, 11, etc.) */ - int httpcode; /* error code from the 'HTTP/1.? XXX' or - 'RTSP/1.? XXX' line */ + int headerline; /* counts header lines to better track the + first one */ + curl_off_t offset; /* possible resume offset read from the + Content-Range: header */ + int httpversion; /* Version in response (09, 10, 11, etc.) */ + int httpcode; /* error code from the 'HTTP/1.? XXX' or + 'RTSP/1.? XXX' line */ int keepon; - enum upgrade101 upgr101; /* 101 upgrade state */ + enum upgrade101 upgr101; /* 101 upgrade state */ /* Client Writer stack, handles transfer- and content-encodings, protocol * checks, pausing by client callbacks. */ @@ -93,13 +91,13 @@ struct SingleRequest { /* Client Reader stack, handles transfer- and content-encodings, protocol * checks, pausing by client callbacks. */ struct Curl_creader *reader_stack; - struct bufq sendbuf; /* data which needs to be send to the server */ + struct bufq sendbuf; /* data which needs to be send to the server */ size_t sendbuf_hds_len; /* amount of header bytes in sendbuf */ time_t timeofdoc; - char *location; /* This points to an allocated version of the Location: - header data */ - char *newurl; /* Set to the new URL to use when a redirect or a retry is - wanted */ + char *location; /* This points to an allocated version of the Location: + header data */ + char *newurl; /* Set to the new URL to use when a redirect or a retry is + wanted */ /* Allocated protocol-specific data. Each protocol handler makes sure this points to data it needs. */ @@ -122,35 +120,35 @@ struct SingleRequest { #ifndef CURL_DISABLE_COOKIES unsigned char setcookies; #endif - BIT(header); /* incoming data has HTTP header */ - BIT(done); /* request is done, e.g. no more send/recv should - * happen. This can be TRUE before `upload_done` or - * `download_done` is TRUE. */ - BIT(content_range); /* set TRUE if Content-Range: was found */ - BIT(download_done); /* set to TRUE when download is complete */ - BIT(eos_written); /* iff EOS has been written to client */ - BIT(eos_read); /* iff EOS has been read from the client */ - BIT(eos_sent); /* iff EOS has been sent to the server */ - BIT(rewind_read); /* iff reader needs rewind at next start */ - BIT(upload_done); /* set to TRUE when all request data has been sent */ + BIT(header); /* incoming data has HTTP header */ + BIT(done); /* request is done, e.g. no more send/recv should + * happen. This can be TRUE before `upload_done` or + * `download_done` is TRUE. */ + BIT(content_range); /* set TRUE if Content-Range: was found */ + BIT(download_done); /* set to TRUE when download is complete */ + BIT(eos_written); /* iff EOS has been written to client */ + BIT(eos_read); /* iff EOS has been read from the client */ + BIT(eos_sent); /* iff EOS has been sent to the server */ + BIT(rewind_read); /* iff reader needs rewind at next start */ + BIT(upload_done); /* set to TRUE when all request data has been sent */ BIT(upload_aborted); /* set to TRUE when upload was aborted. Will also * show `upload_done` as TRUE. */ - BIT(ignorebody); /* we read a response-body but we ignore it! */ - BIT(http_bodyless); /* HTTP response status code is between 100 and 199, - 204 or 304 */ - BIT(chunk); /* if set, this is a chunked transfer-encoding */ - BIT(resp_trailer); /* response carried 'Trailer:' header field */ - BIT(ignore_cl); /* ignore content-length */ - BIT(upload_chunky); /* set TRUE if we are doing chunked transfer-encoding - on upload */ - BIT(getheader); /* TRUE if header parsing is wanted */ - BIT(no_body); /* the response has no body */ - BIT(authneg); /* TRUE when the auth phase has started, which means - that we are creating a request with an auth header, - but it is not the final request in the auth - negotiation. */ - BIT(sendbuf_init); /* sendbuf is initialized */ - BIT(shutdown); /* request end will shutdown connection */ + BIT(ignorebody); /* we read a response-body but we ignore it! */ + BIT(http_bodyless); /* HTTP response status code is between 100 and 199, + 204 or 304 */ + BIT(chunk); /* if set, this is a chunked transfer-encoding */ + BIT(resp_trailer); /* response carried 'Trailer:' header field */ + BIT(ignore_cl); /* ignore content-length */ + BIT(upload_chunky); /* set TRUE if we are doing chunked transfer-encoding + on upload */ + BIT(getheader); /* TRUE if header parsing is wanted */ + BIT(no_body); /* the response has no body */ + BIT(authneg); /* TRUE when the auth phase has started, which means + that we are creating a request with an auth header, + but it is not the final request in the auth + negotiation. */ + BIT(sendbuf_init); /* sendbuf is initialized */ + BIT(shutdown); /* request end will shutdown connection */ #ifdef USE_HYPER BIT(bodywritten); #endif @@ -164,15 +162,13 @@ void Curl_req_init(struct SingleRequest *req); /** * The request is about to start. Record time and do a soft reset. */ -CURLcode Curl_req_start(struct SingleRequest *req, - struct Curl_easy *data); +CURLcode Curl_req_start(struct SingleRequest *req, struct Curl_easy *data); /** * The request may continue with a follow up. Reset * members, but keep start time for overall duration calc. */ -CURLcode Curl_req_soft_reset(struct SingleRequest *req, - struct Curl_easy *data); +CURLcode Curl_req_soft_reset(struct SingleRequest *req, struct Curl_easy *data); /** * The request is done. If not aborted, make sure that buffers are @@ -181,8 +177,8 @@ CURLcode Curl_req_soft_reset(struct SingleRequest *req, * @param data the transfer * @param aborted TRUE iff the request was aborted/errored */ -CURLcode Curl_req_done(struct SingleRequest *req, - struct Curl_easy *data, bool aborted); +CURLcode Curl_req_done(struct SingleRequest *req, struct Curl_easy *data, + bool aborted); /** * Free the state of the request, not usable afterwards. diff --git a/vendor/hydra/vendor/curl/lib/rtsp.h b/vendor/hydra/vendor/curl/lib/rtsp.h index 41b09503..0d265276 100644 --- a/vendor/hydra/vendor/curl/lib/rtsp.h +++ b/vendor/hydra/vendor/curl/lib/rtsp.h @@ -35,7 +35,7 @@ CURLcode Curl_rtsp_parseheader(struct Curl_easy *data, const char *header); #else /* disabled */ -#define Curl_rtsp_parseheader(x,y) CURLE_NOT_BUILT_IN +#define Curl_rtsp_parseheader(x, y) CURLE_NOT_BUILT_IN #endif /* CURL_DISABLE_RTSP */ @@ -66,5 +66,4 @@ struct RTSP { long CSeq_recv; /* CSeq received */ }; - #endif /* HEADER_CURL_RTSP_H */ diff --git a/vendor/hydra/vendor/curl/lib/select.h b/vendor/hydra/vendor/curl/lib/select.h index f01acbde..7758212c 100644 --- a/vendor/hydra/vendor/curl/lib/select.h +++ b/vendor/hydra/vendor/curl/lib/select.h @@ -36,22 +36,19 @@ * Definition of pollfd struct and constants for platforms lacking them. */ -#if !defined(HAVE_SYS_POLL_H) && \ - !defined(HAVE_POLL_H) && \ - !defined(POLLIN) - -#define POLLIN 0x01 -#define POLLPRI 0x02 -#define POLLOUT 0x04 -#define POLLERR 0x08 -#define POLLHUP 0x10 -#define POLLNVAL 0x20 - -struct pollfd -{ - curl_socket_t fd; - short events; - short revents; +#if !defined(HAVE_SYS_POLL_H) && !defined(HAVE_POLL_H) && !defined(POLLIN) + +#define POLLIN 0x01 +#define POLLPRI 0x02 +#define POLLOUT 0x04 +#define POLLERR 0x08 +#define POLLHUP 0x10 +#define POLLNVAL 0x20 + +struct pollfd { + curl_socket_t fd; + short events; + short revents; }; #endif @@ -74,11 +71,10 @@ struct pollfd #define CURL_CSELECT_IN2 (CURL_CSELECT_ERR << 1) int Curl_socket_check(curl_socket_t readfd, curl_socket_t readfd2, - curl_socket_t writefd, - timediff_t timeout_ms); -#define SOCKET_READABLE(x,z) \ + curl_socket_t writefd, timediff_t timeout_ms); +#define SOCKET_READABLE(x, z) \ Curl_socket_check(x, CURL_SOCKET_BAD, CURL_SOCKET_BAD, z) -#define SOCKET_WRITABLE(x,z) \ +#define SOCKET_WRITABLE(x, z) \ Curl_socket_check(CURL_SOCKET_BAD, CURL_SOCKET_BAD, x, z) int Curl_poll(struct pollfd ufds[], unsigned int nfds, timediff_t timeout_ms); @@ -91,24 +87,26 @@ int Curl_wait_ms(timediff_t timeout_ms); #ifdef USE_WINSOCK #define VALID_SOCK(s) ((s) < INVALID_SOCKET) #define FDSET_SOCK(x) 1 -#define VERIFY_SOCK(x) do { \ - if(!VALID_SOCK(x)) { \ - SET_SOCKERRNO(WSAEINVAL); \ - return -1; \ - } \ -} while(0) +#define VERIFY_SOCK(x) \ + do { \ + if (!VALID_SOCK(x)) { \ + SET_SOCKERRNO(WSAEINVAL); \ + return -1; \ + } \ + } while (0) #else #define VALID_SOCK(s) ((s) >= 0) /* If the socket is small enough to get set or read from an fdset */ #define FDSET_SOCK(s) ((s) < FD_SETSIZE) -#define VERIFY_SOCK(x) do { \ - if(!VALID_SOCK(x) || !FDSET_SOCK(x)) { \ - SET_SOCKERRNO(EINVAL); \ - return -1; \ - } \ - } while(0) +#define VERIFY_SOCK(x) \ + do { \ + if (!VALID_SOCK(x) || !FDSET_SOCK(x)) { \ + SET_SOCKERRNO(EINVAL); \ + return -1; \ + } \ + } while (0) #endif struct curl_pollfds { @@ -118,8 +116,7 @@ struct curl_pollfds { BIT(allocated_pfds); }; -void Curl_pollfds_init(struct curl_pollfds *cpfds, - struct pollfd *static_pfds, +void Curl_pollfds_init(struct curl_pollfds *cpfds, struct pollfd *static_pfds, unsigned int static_count); void Curl_pollfds_cleanup(struct curl_pollfds *cpfds); @@ -127,8 +124,8 @@ void Curl_pollfds_cleanup(struct curl_pollfds *cpfds); CURLcode Curl_pollfds_add_ps(struct curl_pollfds *cpfds, struct easy_pollset *ps); -CURLcode Curl_pollfds_add_sock(struct curl_pollfds *cpfds, - curl_socket_t sock, short events); +CURLcode Curl_pollfds_add_sock(struct curl_pollfds *cpfds, curl_socket_t sock, + short events); struct curl_waitfds { struct curl_waitfd *wfds; @@ -143,5 +140,4 @@ void Curl_waitfds_init(struct curl_waitfds *cwfds, CURLcode Curl_waitfds_add_ps(struct curl_waitfds *cwfds, struct easy_pollset *ps); - #endif /* HEADER_CURL_SELECT_H */ diff --git a/vendor/hydra/vendor/curl/lib/sendf.h b/vendor/hydra/vendor/curl/lib/sendf.h index dc1b82ed..702683e0 100644 --- a/vendor/hydra/vendor/curl/lib/sendf.h +++ b/vendor/hydra/vendor/curl/lib/sendf.h @@ -25,7 +25,6 @@ ***************************************************************************/ #include "curl_setup.h" - #include "curl_trc.h" /** @@ -42,14 +41,14 @@ * BODY, INFO and HEADER should not be mixed, as this would lead to * confusion on how to interpret/format/convert the data. */ -#define CLIENTWRITE_BODY (1<<0) /* non-meta information, BODY */ -#define CLIENTWRITE_INFO (1<<1) /* meta information, not a HEADER */ -#define CLIENTWRITE_HEADER (1<<2) /* meta information, HEADER */ -#define CLIENTWRITE_STATUS (1<<3) /* a special status HEADER */ -#define CLIENTWRITE_CONNECT (1<<4) /* a CONNECT related HEADER */ -#define CLIENTWRITE_1XX (1<<5) /* a 1xx response related HEADER */ -#define CLIENTWRITE_TRAILER (1<<6) /* a trailer HEADER */ -#define CLIENTWRITE_EOS (1<<7) /* End Of transfer download Stream */ +#define CLIENTWRITE_BODY (1 << 0) /* non-meta information, BODY */ +#define CLIENTWRITE_INFO (1 << 1) /* meta information, not a HEADER */ +#define CLIENTWRITE_HEADER (1 << 2) /* meta information, HEADER */ +#define CLIENTWRITE_STATUS (1 << 3) /* a special status HEADER */ +#define CLIENTWRITE_CONNECT (1 << 4) /* a CONNECT related HEADER */ +#define CLIENTWRITE_1XX (1 << 5) /* a 1xx response related HEADER */ +#define CLIENTWRITE_TRAILER (1 << 6) /* a trailer HEADER */ +#define CLIENTWRITE_EOS (1 << 7) /* End Of transfer download Stream */ /** * Write `len` bytes at `prt` to the client. `type` indicates what @@ -96,25 +95,22 @@ CURLcode Curl_client_start(struct Curl_easy *data); /* Phase a writer operates at. */ typedef enum { - CURL_CW_RAW, /* raw data written, before any decoding */ + CURL_CW_RAW, /* raw data written, before any decoding */ CURL_CW_TRANSFER_DECODE, /* remove transfer-encodings */ - CURL_CW_PROTOCOL, /* after transfer, but before content decoding */ - CURL_CW_CONTENT_DECODE, /* remove content-encodings */ - CURL_CW_CLIENT /* data written to client */ + CURL_CW_PROTOCOL, /* after transfer, but before content decoding */ + CURL_CW_CONTENT_DECODE, /* remove content-encodings */ + CURL_CW_CLIENT /* data written to client */ } Curl_cwriter_phase; /* Client Writer Type, provides the implementation */ struct Curl_cwtype { - const char *name; /* writer name. */ - const char *alias; /* writer name alias, maybe NULL. */ - CURLcode (*do_init)(struct Curl_easy *data, - struct Curl_cwriter *writer); - CURLcode (*do_write)(struct Curl_easy *data, - struct Curl_cwriter *writer, int type, - const char *buf, size_t nbytes); - void (*do_close)(struct Curl_easy *data, - struct Curl_cwriter *writer); - size_t cwriter_size; /* sizeof() allocated struct Curl_cwriter */ + const char *name; /* writer name. */ + const char *alias; /* writer name alias, maybe NULL. */ + CURLcode (*do_init)(struct Curl_easy *data, struct Curl_cwriter *writer); + CURLcode (*do_write)(struct Curl_easy *data, struct Curl_cwriter *writer, + int type, const char *buf, size_t nbytes); + void (*do_close)(struct Curl_easy *data, struct Curl_cwriter *writer); + size_t cwriter_size; /* sizeof() allocated struct Curl_cwriter */ }; /* Client writer instance, allocated on creation. @@ -124,10 +120,10 @@ struct Curl_cwtype { * for the alignment problems that arise otherwise. */ struct Curl_cwriter { - const struct Curl_cwtype *cwt; /* type implementation */ - struct Curl_cwriter *next; /* Downstream writer. */ - void *ctx; /* allocated instance pointer */ - Curl_cwriter_phase phase; /* phase at which it operates */ + const struct Curl_cwtype *cwt; /* type implementation */ + struct Curl_cwriter *next; /* Downstream writer. */ + void *ctx; /* allocated instance pointer */ + Curl_cwriter_phase phase; /* phase at which it operates */ }; /** @@ -144,8 +140,7 @@ CURLcode Curl_cwriter_create(struct Curl_cwriter **pwriter, * Free a cwriter instance. * Invokes `writer->do_close()`. */ -void Curl_cwriter_free(struct Curl_easy *data, - struct Curl_cwriter *writer); +void Curl_cwriter_free(struct Curl_easy *data, struct Curl_cwriter *writer); /** * Count the number of writers installed of the given phase. @@ -156,8 +151,7 @@ size_t Curl_cwriter_count(struct Curl_easy *data, Curl_cwriter_phase phase); * Adds a writer to the transfer's writer chain. * The writers `phase` determines where in the chain it is inserted. */ -CURLcode Curl_cwriter_add(struct Curl_easy *data, - struct Curl_cwriter *writer); +CURLcode Curl_cwriter_add(struct Curl_easy *data, struct Curl_cwriter *writer); /** * Look up an installed client writer on `data` by its type. @@ -166,8 +160,7 @@ CURLcode Curl_cwriter_add(struct Curl_easy *data, struct Curl_cwriter *Curl_cwriter_get_by_type(struct Curl_easy *data, const struct Curl_cwtype *cwt); -void Curl_cwriter_remove_by_name(struct Curl_easy *data, - const char *name); +void Curl_cwriter_remove_by_name(struct Curl_easy *data, const char *name); struct Curl_cwriter *Curl_cwriter_get_by_name(struct Curl_easy *data, const char *name); @@ -176,9 +169,8 @@ struct Curl_cwriter *Curl_cwriter_get_by_name(struct Curl_easy *data, * Convenience method for calling `writer->do_write()` that * checks for NULL writer. */ -CURLcode Curl_cwriter_write(struct Curl_easy *data, - struct Curl_cwriter *writer, int type, - const char *buf, size_t nbytes); +CURLcode Curl_cwriter_write(struct Curl_easy *data, struct Curl_cwriter *writer, + int type, const char *buf, size_t nbytes); /** * Return TRUE iff client writer is paused. @@ -202,11 +194,9 @@ CURLcode Curl_cwriter_def_write(struct Curl_easy *data, void Curl_cwriter_def_close(struct Curl_easy *data, struct Curl_cwriter *writer); - - /* Client Reader Type, provides the implementation */ struct Curl_crtype { - const char *name; /* writer name. */ + const char *name; /* writer name. */ CURLcode (*do_init)(struct Curl_easy *data, struct Curl_creader *reader); CURLcode (*do_read)(struct Curl_easy *data, struct Curl_creader *reader, char *buf, size_t blen, size_t *nread, bool *eos); @@ -214,23 +204,23 @@ struct Curl_crtype { bool (*needs_rewind)(struct Curl_easy *data, struct Curl_creader *reader); curl_off_t (*total_length)(struct Curl_easy *data, struct Curl_creader *reader); - CURLcode (*resume_from)(struct Curl_easy *data, - struct Curl_creader *reader, curl_off_t offset); + CURLcode (*resume_from)(struct Curl_easy *data, struct Curl_creader *reader, + curl_off_t offset); CURLcode (*rewind)(struct Curl_easy *data, struct Curl_creader *reader); CURLcode (*unpause)(struct Curl_easy *data, struct Curl_creader *reader); bool (*is_paused)(struct Curl_easy *data, struct Curl_creader *reader); - void (*done)(struct Curl_easy *data, - struct Curl_creader *reader, int premature); - size_t creader_size; /* sizeof() allocated struct Curl_creader */ + void (*done)(struct Curl_easy *data, struct Curl_creader *reader, + int premature); + size_t creader_size; /* sizeof() allocated struct Curl_creader */ }; /* Phase a reader operates at. */ typedef enum { - CURL_CR_NET, /* data send to the network (connection filters) */ + CURL_CR_NET, /* data send to the network (connection filters) */ CURL_CR_TRANSFER_ENCODE, /* add transfer-encodings */ - CURL_CR_PROTOCOL, /* before transfer, but after content decoding */ - CURL_CR_CONTENT_ENCODE, /* add content-encodings */ - CURL_CR_CLIENT /* data read from client */ + CURL_CR_PROTOCOL, /* before transfer, but after content decoding */ + CURL_CR_CONTENT_ENCODE, /* add content-encodings */ + CURL_CR_CLIENT /* data read from client */ } Curl_creader_phase; /* Client reader instance, allocated on creation. @@ -240,8 +230,8 @@ typedef enum { * for the alignment problems that arise otherwise. */ struct Curl_creader { - const struct Curl_crtype *crt; /* type implementation */ - struct Curl_creader *next; /* Downstream reader. */ + const struct Curl_crtype *crt; /* type implementation */ + struct Curl_creader *next; /* Downstream reader. */ void *ctx; Curl_creader_phase phase; /* phase at which it operates */ }; @@ -255,9 +245,8 @@ CURLcode Curl_creader_def_init(struct Curl_easy *data, void Curl_creader_def_close(struct Curl_easy *data, struct Curl_creader *reader); CURLcode Curl_creader_def_read(struct Curl_easy *data, - struct Curl_creader *reader, - char *buf, size_t blen, - size_t *nread, bool *eos); + struct Curl_creader *reader, char *buf, + size_t blen, size_t *nread, bool *eos); bool Curl_creader_def_needs_rewind(struct Curl_easy *data, struct Curl_creader *reader); curl_off_t Curl_creader_def_total_length(struct Curl_easy *data, @@ -271,15 +260,14 @@ CURLcode Curl_creader_def_unpause(struct Curl_easy *data, struct Curl_creader *reader); bool Curl_creader_def_is_paused(struct Curl_easy *data, struct Curl_creader *reader); -void Curl_creader_def_done(struct Curl_easy *data, - struct Curl_creader *reader, int premature); +void Curl_creader_def_done(struct Curl_easy *data, struct Curl_creader *reader, + int premature); /** * Convenience method for calling `reader->do_read()` that * checks for NULL reader. */ -CURLcode Curl_creader_read(struct Curl_easy *data, - struct Curl_creader *reader, +CURLcode Curl_creader_read(struct Curl_easy *data, struct Curl_creader *reader, char *buf, size_t blen, size_t *nread, bool *eos); /** @@ -302,8 +290,7 @@ void Curl_creader_free(struct Curl_easy *data, struct Curl_creader *reader); * Adds a reader to the transfer's reader chain. * The readers `phase` determines where in the chain it is inserted. */ -CURLcode Curl_creader_add(struct Curl_easy *data, - struct Curl_creader *reader); +CURLcode Curl_creader_add(struct Curl_easy *data, struct Curl_creader *reader); /** * Set the given reader, which needs to be of type CURL_CR_CLIENT, @@ -395,7 +382,6 @@ void Curl_creader_done(struct Curl_easy *data, int premature); struct Curl_creader *Curl_creader_get_by_type(struct Curl_easy *data, const struct Curl_crtype *crt); - /** * Set the client reader to provide 0 bytes, immediate EOS. */ @@ -409,7 +395,7 @@ CURLcode Curl_creader_set_fread(struct Curl_easy *data, curl_off_t len); /** * Set the client reader the reads from the supplied buf (NOT COPIED). */ -CURLcode Curl_creader_set_buf(struct Curl_easy *data, - const char *buf, size_t blen); +CURLcode Curl_creader_set_buf(struct Curl_easy *data, const char *buf, + size_t blen); #endif /* HEADER_CURL_SENDF_H */ diff --git a/vendor/hydra/vendor/curl/lib/setopt.h b/vendor/hydra/vendor/curl/lib/setopt.h index b0237467..d581b7d0 100644 --- a/vendor/hydra/vendor/curl/lib/setopt.h +++ b/vendor/hydra/vendor/curl/lib/setopt.h @@ -27,7 +27,7 @@ CURLcode Curl_setstropt(char **charp, const char *s) WARN_UNUSED_RESULT; CURLcode Curl_setblobopt(struct curl_blob **blobp, const struct curl_blob *blob) WARN_UNUSED_RESULT; -CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, va_list arg) - WARN_UNUSED_RESULT; +CURLcode Curl_vsetopt(struct Curl_easy *data, CURLoption option, + va_list arg) WARN_UNUSED_RESULT; #endif /* HEADER_CURL_SETOPT_H */ diff --git a/vendor/hydra/vendor/curl/lib/setup-os400.h b/vendor/hydra/vendor/curl/lib/setup-os400.h index ef7baca6..614da716 100644 --- a/vendor/hydra/vendor/curl/lib/setup-os400.h +++ b/vendor/hydra/vendor/curl/lib/setup-os400.h @@ -24,106 +24,89 @@ * ***************************************************************************/ - /* OS/400 netdb.h does not define NI_MAXHOST. */ -#define NI_MAXHOST 1025 +#define NI_MAXHOST 1025 /* OS/400 netdb.h does not define NI_MAXSERV. */ -#define NI_MAXSERV 32 +#define NI_MAXSERV 32 /* No OS/400 header file defines u_int32_t. */ -typedef unsigned long u_int32_t; +typedef unsigned long u_int32_t; /* OS/400 has no idea of a tty! */ -#define isatty(fd) 0 - +#define isatty(fd) 0 /* Workaround bug in IBM QADRT runtime library: * function puts() does not output the implicit trailing newline. */ -#include /* Be sure it is loaded. */ +#include /* Be sure it is loaded. */ #undef puts -#define puts(s) (fputs((s), stdout) == EOF? EOF: putchar('\n')) - +#define puts(s) (fputs((s), stdout) == EOF ? EOF : putchar('\n')) /* System API wrapper prototypes & definitions to support ASCII parameters. */ -#include -#include #include -#include #include +#include +#include +#include #ifdef BUILDING_LIBCURL -extern int Curl_getaddrinfo_a(const char *nodename, - const char *servname, +extern int Curl_getaddrinfo_a(const char *nodename, const char *servname, const struct addrinfo *hints, struct addrinfo **res); -#define getaddrinfo Curl_getaddrinfo_a +#define getaddrinfo Curl_getaddrinfo_a /* Note socklen_t must be used as this is declared before curl_socklen_t */ -extern int Curl_getnameinfo_a(const struct sockaddr *sa, - socklen_t salen, +extern int Curl_getnameinfo_a(const struct sockaddr *sa, socklen_t salen, char *nodename, socklen_t nodenamelen, - char *servname, socklen_t servnamelen, - int flags); -#define getnameinfo Curl_getnameinfo_a + char *servname, socklen_t servnamelen, int flags); +#define getnameinfo Curl_getnameinfo_a /* GSSAPI wrappers. */ -extern OM_uint32 Curl_gss_import_name_a(OM_uint32 * minor_status, +extern OM_uint32 Curl_gss_import_name_a(OM_uint32 *minor_status, gss_buffer_t in_name, gss_OID in_name_type, - gss_name_t * out_name); -#define gss_import_name Curl_gss_import_name_a + gss_name_t *out_name); +#define gss_import_name Curl_gss_import_name_a - -extern OM_uint32 Curl_gss_display_status_a(OM_uint32 * minor_status, +extern OM_uint32 Curl_gss_display_status_a(OM_uint32 *minor_status, OM_uint32 status_value, int status_type, gss_OID mech_type, - gss_msg_ctx_t * message_context, + gss_msg_ctx_t *message_context, gss_buffer_t status_string); -#define gss_display_status Curl_gss_display_status_a - - -extern OM_uint32 Curl_gss_init_sec_context_a(OM_uint32 * minor_status, - gss_cred_id_t cred_handle, - gss_ctx_id_t * context_handle, - gss_name_t target_name, - gss_OID mech_type, - gss_flags_t req_flags, - OM_uint32 time_req, - gss_channel_bindings_t - input_chan_bindings, - gss_buffer_t input_token, - gss_OID * actual_mech_type, - gss_buffer_t output_token, - gss_flags_t * ret_flags, - OM_uint32 * time_rec); -#define gss_init_sec_context Curl_gss_init_sec_context_a - - -extern OM_uint32 Curl_gss_delete_sec_context_a(OM_uint32 * minor_status, - gss_ctx_id_t * context_handle, +#define gss_display_status Curl_gss_display_status_a + +extern OM_uint32 Curl_gss_init_sec_context_a( + OM_uint32 *minor_status, gss_cred_id_t cred_handle, + gss_ctx_id_t *context_handle, gss_name_t target_name, gss_OID mech_type, + gss_flags_t req_flags, OM_uint32 time_req, + gss_channel_bindings_t input_chan_bindings, gss_buffer_t input_token, + gss_OID *actual_mech_type, gss_buffer_t output_token, + gss_flags_t *ret_flags, OM_uint32 *time_rec); +#define gss_init_sec_context Curl_gss_init_sec_context_a + +extern OM_uint32 Curl_gss_delete_sec_context_a(OM_uint32 *minor_status, + gss_ctx_id_t *context_handle, gss_buffer_t output_token); -#define gss_delete_sec_context Curl_gss_delete_sec_context_a - +#define gss_delete_sec_context Curl_gss_delete_sec_context_a /* LDAP wrappers. */ -#define BerValue struct berval +#define BerValue struct berval -#define ldap_url_parse ldap_url_parse_utf8 -#define ldap_init Curl_ldap_init_a -#define ldap_simple_bind_s Curl_ldap_simple_bind_s_a -#define ldap_search_s Curl_ldap_search_s_a -#define ldap_get_values_len Curl_ldap_get_values_len_a -#define ldap_err2string Curl_ldap_err2string_a -#define ldap_get_dn Curl_ldap_get_dn_a -#define ldap_first_attribute Curl_ldap_first_attribute_a -#define ldap_next_attribute Curl_ldap_next_attribute_a +#define ldap_url_parse ldap_url_parse_utf8 +#define ldap_init Curl_ldap_init_a +#define ldap_simple_bind_s Curl_ldap_simple_bind_s_a +#define ldap_search_s Curl_ldap_search_s_a +#define ldap_get_values_len Curl_ldap_get_values_len_a +#define ldap_err2string Curl_ldap_err2string_a +#define ldap_get_dn Curl_ldap_get_dn_a +#define ldap_first_attribute Curl_ldap_first_attribute_a +#define ldap_next_attribute Curl_ldap_next_attribute_a /* Some socket functions must be wrapped to process textual addresses like AF_UNIX. */ @@ -137,19 +120,19 @@ extern int Curl_os400_recvfrom(int sd, char *buffer, int buflen, int flags, extern int Curl_os400_getpeername(int sd, struct sockaddr *addr, int *addrlen); extern int Curl_os400_getsockname(int sd, struct sockaddr *addr, int *addrlen); -#define connect Curl_os400_connect -#define bind Curl_os400_bind -#define sendto Curl_os400_sendto -#define recvfrom Curl_os400_recvfrom -#define getpeername Curl_os400_getpeername -#define getsockname Curl_os400_getsockname +#define connect Curl_os400_connect +#define bind Curl_os400_bind +#define sendto Curl_os400_sendto +#define recvfrom Curl_os400_recvfrom +#define getpeername Curl_os400_getpeername +#define getsockname Curl_os400_getsockname #ifdef HAVE_LIBZ -#define zlibVersion Curl_os400_zlibVersion -#define inflateInit_ Curl_os400_inflateInit_ -#define inflateInit2_ Curl_os400_inflateInit2_ -#define inflate Curl_os400_inflate -#define inflateEnd Curl_os400_inflateEnd +#define zlibVersion Curl_os400_zlibVersion +#define inflateInit_ Curl_os400_inflateInit_ +#define inflateInit2_ Curl_os400_inflateInit2_ +#define inflate Curl_os400_inflate +#define inflateEnd Curl_os400_inflateEnd #endif #endif /* BUILDING_LIBCURL */ diff --git a/vendor/hydra/vendor/curl/lib/setup-vms.h b/vendor/hydra/vendor/curl/lib/setup-vms.h index 33b74db3..99b48060 100644 --- a/vendor/hydra/vendor/curl/lib/setup-vms.h +++ b/vendor/hydra/vendor/curl/lib/setup-vms.h @@ -38,14 +38,13 @@ /* Hide the stuff we are overriding */ #define getenv decc_getenv #ifdef __DECC -# if __INITIAL_POINTER_SIZE != 64 -# define getpwuid decc_getpwuid -# endif +#if __INITIAL_POINTER_SIZE != 64 +#define getpwuid decc_getpwuid +#endif #endif #include char *decc$getenv(const char *__name); #include - #include #include @@ -60,68 +59,66 @@ char *decc$getenv(const char *__name); #define sys$qiow SYS$QIOW #ifdef __DECC -# if __INITIAL_POINTER_SIZE -# pragma __pointer_size __save -# endif +#if __INITIAL_POINTER_SIZE +#pragma __pointer_size __save +#endif #endif #if __USE_LONG_GID_T -# define decc_getpwuid DECC$__LONG_GID_GETPWUID +#define decc_getpwuid DECC$__LONG_GID_GETPWUID #else -# if __INITIAL_POINTER_SIZE -# define decc_getpwuid decc$__32_getpwuid -# else -# define decc_getpwuid decc$getpwuid -# endif +#if __INITIAL_POINTER_SIZE +#define decc_getpwuid decc$__32_getpwuid +#else +#define decc_getpwuid decc$getpwuid +#endif #endif - struct passwd *decc_getpwuid(uid_t uid); +struct passwd *decc_getpwuid(uid_t uid); #ifdef __DECC -# if __INITIAL_POINTER_SIZE == 32 +#if __INITIAL_POINTER_SIZE == 32 /* Translate the path, but only if the path is a VMS file specification */ /* The translation is usually only needed for older versions of VMS */ -static char *vms_translate_path(const char *path) -{ +static char *vms_translate_path(const char *path) { char *unix_path; char *test_str; /* See if the result is in VMS format, if not, we are done */ /* Assume that this is a PATH, not just some data */ test_str = strpbrk(path, ":[<^"); - if(!test_str) { + if (!test_str) { return (char *)path; } unix_path = decc$translate_vms(path); - if((int)unix_path <= 0) { + if ((int)unix_path <= 0) { /* We can not translate it, so return the original string */ return (char *)path; } } -# else - /* VMS translate path is actually not needed on the current 64-bit */ - /* VMS platforms, so instead of figuring out the pointer settings */ - /* Change it to a noop */ -# define vms_translate_path(__path) __path -# endif +#else +/* VMS translate path is actually not needed on the current 64-bit */ +/* VMS platforms, so instead of figuring out the pointer settings */ +/* Change it to a noop */ +#define vms_translate_path(__path) __path +#endif #endif #ifdef __DECC -# if __INITIAL_POINTER_SIZE -# pragma __pointer_size __restore -# endif +#if __INITIAL_POINTER_SIZE +#pragma __pointer_size __restore +#endif #endif -static char *vms_getenv(const char *envvar) -{ +static char *vms_getenv(const char *envvar) { char *result; char *vms_path; /* first use the DECC getenv() function */ result = decc$getenv(envvar); - if(!result) { + if (!result) { return result; } @@ -137,38 +134,36 @@ static char *vms_getenv(const char *envvar) return result; } - static struct passwd vms_passwd_cache; -static struct passwd *vms_getpwuid(uid_t uid) -{ +static struct passwd *vms_getpwuid(uid_t uid) { struct passwd *my_passwd; /* Hack needed to support 64-bit builds, decc_getpwnam is 32-bit only */ #ifdef __DECC -# if __INITIAL_POINTER_SIZE +#if __INITIAL_POINTER_SIZE __char_ptr32 unix_path; -# else +#else char *unix_path; -# endif +#endif #else char *unix_path; #endif my_passwd = decc_getpwuid(uid); - if(!my_passwd) { + if (!my_passwd) { return my_passwd; } unix_path = vms_translate_path(my_passwd->pw_dir); - if((long)unix_path <= 0) { + if ((long)unix_path <= 0) { /* We can not translate it, so return the original string */ return my_passwd; } /* If no changes needed just return it */ - if(unix_path == my_passwd->pw_dir) { + if (unix_path == my_passwd->pw_dir) { return my_passwd; } @@ -208,16 +203,15 @@ static struct passwd *vms_getpwuid(uid_t uid) #define CRYPTO_malloc CRYPTO_MALLOC #define CONF_modules_load_file CONF_MODULES_LOAD_FILE #ifdef __VAX -# ifdef VMS_OLD_SSL - /* Ancient OpenSSL on VAX/VMS missing this constant */ -# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 -# undef CONF_modules_load_file - static int CONF_modules_load_file(const char *filename, - const char *appname, - unsigned long flags) { - return 1; - } -# endif +#ifdef VMS_OLD_SSL +/* Ancient OpenSSL on VAX/VMS missing this constant */ +#define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 +#undef CONF_modules_load_file +static int CONF_modules_load_file(const char *filename, const char *appname, + unsigned long flags) { + return 1; +} +#endif #endif #define DES_ecb_encrypt DES_ECB_ENCRYPT #define DES_set_key DES_SET_KEY @@ -394,50 +388,46 @@ static struct passwd *vms_getpwuid(uid_t uid) /* that way a newer port will also work if some one has one */ #ifdef __VAX -# if (OPENSSL_VERSION_NUMBER < 0x00907001L) -# define des_set_odd_parity DES_SET_ODD_PARITY -# define des_set_key DES_SET_KEY -# define des_ecb_encrypt DES_ECB_ENCRYPT - -# endif -# include -# ifndef OpenSSL_add_all_algorithms -# define OpenSSL_add_all_algorithms OPENSSL_ADD_ALL_ALGORITHMS - void OPENSSL_ADD_ALL_ALGORITHMS(void); -# endif - - /* Curl defines these to lower case and VAX needs them in upper case */ - /* So we need static routines */ -# if (OPENSSL_VERSION_NUMBER < 0x00907001L) - -# undef des_set_odd_parity -# undef DES_set_odd_parity -# undef des_set_key -# undef DES_set_key -# undef des_ecb_encrypt -# undef DES_ecb_encrypt - - static void des_set_odd_parity(des_cblock *key) { - DES_SET_ODD_PARITY(key); - } - - static int des_set_key(const_des_cblock *key, - des_key_schedule schedule) { - return DES_SET_KEY(key, schedule); - } - - static void des_ecb_encrypt(const_des_cblock *input, - des_cblock *output, - des_key_schedule ks, int enc) { - DES_ECB_ENCRYPT(input, output, ks, enc); - } +#if (OPENSSL_VERSION_NUMBER < 0x00907001L) +#define des_set_odd_parity DES_SET_ODD_PARITY +#define des_set_key DES_SET_KEY +#define des_ecb_encrypt DES_ECB_ENCRYPT + +#endif +#include +#ifndef OpenSSL_add_all_algorithms +#define OpenSSL_add_all_algorithms OPENSSL_ADD_ALL_ALGORITHMS +void OPENSSL_ADD_ALL_ALGORITHMS(void); +#endif + +/* Curl defines these to lower case and VAX needs them in upper case */ +/* So we need static routines */ +#if (OPENSSL_VERSION_NUMBER < 0x00907001L) + +#undef des_set_odd_parity +#undef DES_set_odd_parity +#undef des_set_key +#undef DES_set_key +#undef des_ecb_encrypt +#undef DES_ecb_encrypt + +static void des_set_odd_parity(des_cblock *key) { DES_SET_ODD_PARITY(key); } + +static int des_set_key(const_des_cblock *key, des_key_schedule schedule) { + return DES_SET_KEY(key, schedule); +} + +static void des_ecb_encrypt(const_des_cblock *input, des_cblock *output, + des_key_schedule ks, int enc) { + DES_ECB_ENCRYPT(input, output, ks, enc); +} #endif /* Need this to stop a macro redefinition error */ #if OPENSSL_VERSION_NUMBER < 0x00907000L -# ifdef X509_STORE_set_flags -# undef X509_STORE_set_flags -# define X509_STORE_set_flags(x,y) Curl_nop_stmt -# endif +#ifdef X509_STORE_set_flags +#undef X509_STORE_set_flags +#define X509_STORE_set_flags(x, y) Curl_nop_stmt +#endif #endif #endif diff --git a/vendor/hydra/vendor/curl/lib/setup-win32.h b/vendor/hydra/vendor/curl/lib/setup-win32.h index a297bdcf..e84ea334 100644 --- a/vendor/hydra/vendor/curl/lib/setup-win32.h +++ b/vendor/hydra/vendor/curl/lib/setup-win32.h @@ -29,36 +29,36 @@ /* Watt-32 TCP/IP SPECIFIC */ /* ---------------------------------------------------------------- */ #ifdef USE_WATT32 -# include -# undef byte -# undef word -# define HAVE_SYS_IOCTL_H -# define HAVE_SYS_SOCKET_H -# define HAVE_NETINET_IN_H -# define HAVE_NETDB_H -# define HAVE_ARPA_INET_H -# define SOCKET int +#include +#undef byte +#undef word +#define HAVE_SYS_IOCTL_H +#define HAVE_SYS_SOCKET_H +#define HAVE_NETINET_IN_H +#define HAVE_NETDB_H +#define HAVE_ARPA_INET_H +#define SOCKET int /* ---------------------------------------------------------------- */ /* BSD-style lwIP TCP/IP stack SPECIFIC */ /* ---------------------------------------------------------------- */ #elif defined(USE_LWIPSOCK) - /* Define to use BSD-style lwIP TCP/IP stack. */ - /* #define USE_LWIPSOCK 1 */ -# undef HAVE_GETHOSTNAME -# undef LWIP_POSIX_SOCKETS_IO_NAMES -# undef RECV_TYPE_ARG1 -# undef RECV_TYPE_ARG3 -# undef SEND_TYPE_ARG1 -# undef SEND_TYPE_ARG3 -# define HAVE_GETHOSTBYNAME_R -# define HAVE_GETHOSTBYNAME_R_6 -# define LWIP_POSIX_SOCKETS_IO_NAMES 0 -# define RECV_TYPE_ARG1 int -# define RECV_TYPE_ARG3 size_t -# define SEND_TYPE_ARG1 int -# define SEND_TYPE_ARG3 size_t +/* Define to use BSD-style lwIP TCP/IP stack. */ +/* #define USE_LWIPSOCK 1 */ +#undef HAVE_GETHOSTNAME +#undef LWIP_POSIX_SOCKETS_IO_NAMES +#undef RECV_TYPE_ARG1 +#undef RECV_TYPE_ARG3 +#undef SEND_TYPE_ARG1 +#undef SEND_TYPE_ARG3 +#define HAVE_GETHOSTBYNAME_R +#define HAVE_GETHOSTBYNAME_R_6 +#define LWIP_POSIX_SOCKETS_IO_NAMES 0 +#define RECV_TYPE_ARG1 int +#define RECV_TYPE_ARG3 size_t +#define SEND_TYPE_ARG1 int +#define SEND_TYPE_ARG3 size_t #elif defined(_WIN32) -# define USE_WINSOCK 2 +#define USE_WINSOCK 2 #endif /* @@ -71,31 +71,31 @@ */ #ifdef _WIN32 -# if defined(UNICODE) && !defined(_UNICODE) -# error "UNICODE is defined but _UNICODE is not defined" -# endif -# if defined(_UNICODE) && !defined(UNICODE) -# error "_UNICODE is defined but UNICODE is not defined" -# endif +#if defined(UNICODE) && !defined(_UNICODE) +#error "UNICODE is defined but _UNICODE is not defined" +#endif +#if defined(_UNICODE) && !defined(UNICODE) +#error "_UNICODE is defined but UNICODE is not defined" +#endif /* * Do not include unneeded stuff in Windows headers to avoid compiler * warnings and macro clashes. * Make sure to define this macro before including any Windows headers. */ -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -# endif -# ifndef NOGDI -# define NOGDI -# endif -# include -# include -# include -# include -# include -# ifdef UNICODE - typedef wchar_t *(*curl_wcsdup_callback)(const wchar_t *str); -# endif +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOGDI +#define NOGDI +#endif +#include +#include +#include +#include +#include +#ifdef UNICODE +typedef wchar_t *(*curl_wcsdup_callback)(const wchar_t *str); +#endif #endif /* @@ -105,34 +105,34 @@ */ #ifndef _WIN32_WINNT_NT4 -#define _WIN32_WINNT_NT4 0x0400 /* Windows NT 4.0 */ +#define _WIN32_WINNT_NT4 0x0400 /* Windows NT 4.0 */ #endif #ifndef _WIN32_WINNT_WIN2K -#define _WIN32_WINNT_WIN2K 0x0500 /* Windows 2000 */ +#define _WIN32_WINNT_WIN2K 0x0500 /* Windows 2000 */ #endif #ifndef _WIN32_WINNT_WINXP -#define _WIN32_WINNT_WINXP 0x0501 /* Windows XP */ +#define _WIN32_WINNT_WINXP 0x0501 /* Windows XP */ #endif #ifndef _WIN32_WINNT_WS03 -#define _WIN32_WINNT_WS03 0x0502 /* Windows Server 2003 */ +#define _WIN32_WINNT_WS03 0x0502 /* Windows Server 2003 */ #endif #ifndef _WIN32_WINNT_VISTA -#define _WIN32_WINNT_VISTA 0x0600 /* Windows Vista */ +#define _WIN32_WINNT_VISTA 0x0600 /* Windows Vista */ #endif #ifndef _WIN32_WINNT_WS08 -#define _WIN32_WINNT_WS08 0x0600 /* Windows Server 2008 */ +#define _WIN32_WINNT_WS08 0x0600 /* Windows Server 2008 */ #endif #ifndef _WIN32_WINNT_WIN7 -#define _WIN32_WINNT_WIN7 0x0601 /* Windows 7 */ +#define _WIN32_WINNT_WIN7 0x0601 /* Windows 7 */ #endif #ifndef _WIN32_WINNT_WIN8 -#define _WIN32_WINNT_WIN8 0x0602 /* Windows 8 */ +#define _WIN32_WINNT_WIN8 0x0602 /* Windows 8 */ #endif #ifndef _WIN32_WINNT_WINBLUE -#define _WIN32_WINNT_WINBLUE 0x0603 /* Windows 8.1 */ +#define _WIN32_WINNT_WINBLUE 0x0603 /* Windows 8.1 */ #endif #ifndef _WIN32_WINNT_WIN10 -#define _WIN32_WINNT_WIN10 0x0A00 /* Windows 10 */ +#define _WIN32_WINNT_WIN10 0x0A00 /* Windows 10 */ #endif #endif /* HEADER_CURL_SETUP_WIN32_H */ diff --git a/vendor/hydra/vendor/curl/lib/share.h b/vendor/hydra/vendor/curl/lib/share.h index 124f7049..38131bcf 100644 --- a/vendor/hydra/vendor/curl/lib/share.h +++ b/vendor/hydra/vendor/curl/lib/share.h @@ -24,18 +24,19 @@ * ***************************************************************************/ -#include "curl_setup.h" #include + +#include "conncache.h" #include "cookie.h" +#include "curl_setup.h" #include "psl.h" #include "urldata.h" -#include "conncache.h" #define CURL_GOOD_SHARE 0x7e117a1e #define GOOD_SHARE_HANDLE(x) ((x) && (x)->magic == CURL_GOOD_SHARE) -#define CURL_SHARE_KEEP_CONNECT(s) \ - ((s) && ((s)->specifier & (1<< CURL_LOCK_DATA_CONNECT))) +#define CURL_SHARE_KEEP_CONNECT(s) \ + ((s) && ((s)->specifier & (1 << CURL_LOCK_DATA_CONNECT))) /* this struct is libcurl-private, do not export details */ struct Curl_share { diff --git a/vendor/hydra/vendor/curl/lib/sigpipe.h b/vendor/hydra/vendor/curl/lib/sigpipe.h index c57580f4..bdde5df5 100644 --- a/vendor/hydra/vendor/curl/lib/sigpipe.h +++ b/vendor/hydra/vendor/curl/lib/sigpipe.h @@ -25,8 +25,8 @@ ***************************************************************************/ #include "curl_setup.h" -#if defined(HAVE_SIGACTION) && \ - (defined(USE_OPENSSL) || defined(USE_MBEDTLS) || defined(USE_WOLFSSL)) +#if defined(HAVE_SIGACTION) && \ + (defined(USE_OPENSSL) || defined(USE_MBEDTLS) || defined(USE_WOLFSSL)) #include struct sigpipe_ignore { @@ -35,10 +35,9 @@ struct sigpipe_ignore { }; #define SIGPIPE_VARIABLE(x) struct sigpipe_ignore x -#define SIGPIPE_MEMBER(x) struct sigpipe_ignore x +#define SIGPIPE_MEMBER(x) struct sigpipe_ignore x -static void sigpipe_init(struct sigpipe_ignore *ig) -{ +static void sigpipe_init(struct sigpipe_ignore *ig) { memset(ig, 0, sizeof(*ig)); ig->no_signal = TRUE; } @@ -48,13 +47,11 @@ static void sigpipe_init(struct sigpipe_ignore *ig) * internals, and then sigpipe_restore() will restore the situation when we * return from libcurl again. */ -static void sigpipe_ignore(struct Curl_easy *data, - struct sigpipe_ignore *ig) -{ +static void sigpipe_ignore(struct Curl_easy *data, struct sigpipe_ignore *ig) { /* get a local copy of no_signal because the Curl_easy might not be around when we restore */ ig->no_signal = data->set.no_signal; - if(!data->set.no_signal) { + if (!data->set.no_signal) { struct sigaction action; /* first, extract the existing situation */ sigaction(SIGPIPE, NULL, &ig->old_pipe_act); @@ -70,17 +67,13 @@ static void sigpipe_ignore(struct Curl_easy *data, * and SIGPIPE handling. It MUST only be called after a corresponding * sigpipe_ignore() was used. */ -static void sigpipe_restore(struct sigpipe_ignore *ig) -{ - if(!ig->no_signal) - /* restore the outside state */ +static void sigpipe_restore(struct sigpipe_ignore *ig) { + if (!ig->no_signal) /* restore the outside state */ sigaction(SIGPIPE, &ig->old_pipe_act, NULL); } -static void sigpipe_apply(struct Curl_easy *data, - struct sigpipe_ignore *ig) -{ - if(data->set.no_signal != ig->no_signal) { +static void sigpipe_apply(struct Curl_easy *data, struct sigpipe_ignore *ig) { + if (data->set.no_signal != ig->no_signal) { sigpipe_restore(ig); sigpipe_ignore(data, ig); } @@ -88,12 +81,12 @@ static void sigpipe_apply(struct Curl_easy *data, #else /* for systems without sigaction */ -#define sigpipe_ignore(x,y) Curl_nop_stmt -#define sigpipe_apply(x,y) Curl_nop_stmt -#define sigpipe_init(x) Curl_nop_stmt -#define sigpipe_restore(x) Curl_nop_stmt +#define sigpipe_ignore(x, y) Curl_nop_stmt +#define sigpipe_apply(x, y) Curl_nop_stmt +#define sigpipe_init(x) Curl_nop_stmt +#define sigpipe_restore(x) Curl_nop_stmt #define SIGPIPE_VARIABLE(x) -#define SIGPIPE_MEMBER(x) bool x +#define SIGPIPE_MEMBER(x) bool x #endif #endif /* HEADER_CURL_SIGPIPE_H */ diff --git a/vendor/hydra/vendor/curl/lib/slist.h b/vendor/hydra/vendor/curl/lib/slist.h index 9561fd02..ee09908e 100644 --- a/vendor/hydra/vendor/curl/lib/slist.h +++ b/vendor/hydra/vendor/curl/lib/slist.h @@ -35,7 +35,6 @@ struct curl_slist *Curl_slist_duplicate(struct curl_slist *inlist); * Curl_slist_append_nodup() takes ownership of the given string and appends * it to the list. */ -struct curl_slist *Curl_slist_append_nodup(struct curl_slist *list, - char *data); +struct curl_slist *Curl_slist_append_nodup(struct curl_slist *list, char *data); #endif /* HEADER_CURL_SLIST_H */ diff --git a/vendor/hydra/vendor/curl/lib/smb.h b/vendor/hydra/vendor/curl/lib/smb.h index 9ea2a8cc..7651a755 100644 --- a/vendor/hydra/vendor/curl/lib/smb.h +++ b/vendor/hydra/vendor/curl/lib/smb.h @@ -55,7 +55,7 @@ struct smb_conn { extern const struct Curl_handler Curl_handler_smb; extern const struct Curl_handler Curl_handler_smbs; -#endif /* CURL_DISABLE_SMB && USE_CURL_NTLM_CORE && +#endif /* CURL_DISABLE_SMB && USE_CURL_NTLM_CORE && \ SIZEOF_CURL_OFF_T > 4 */ #endif /* HEADER_CURL_SMB_H */ diff --git a/vendor/hydra/vendor/curl/lib/smtp.h b/vendor/hydra/vendor/curl/lib/smtp.h index 7c2af680..148eff7c 100644 --- a/vendor/hydra/vendor/curl/lib/smtp.h +++ b/vendor/hydra/vendor/curl/lib/smtp.h @@ -24,8 +24,8 @@ * ***************************************************************************/ -#include "pingpong.h" #include "curl_sasl.h" +#include "pingpong.h" /**************************************************************************** * SMTP unique setup @@ -37,16 +37,16 @@ typedef enum { SMTP_EHLO, SMTP_HELO, SMTP_STARTTLS, - SMTP_UPGRADETLS, /* asynchronously upgrade the connection to SSL/TLS - (multi mode only) */ + SMTP_UPGRADETLS, /* asynchronously upgrade the connection to SSL/TLS + (multi mode only) */ SMTP_AUTH, - SMTP_COMMAND, /* VRFY, EXPN, NOOP, RSET and HELP */ - SMTP_MAIL, /* MAIL FROM */ - SMTP_RCPT, /* RCPT TO */ + SMTP_COMMAND, /* VRFY, EXPN, NOOP, RSET and HELP */ + SMTP_MAIL, /* MAIL FROM */ + SMTP_RCPT, /* RCPT TO */ SMTP_DATA, SMTP_POSTDATA, SMTP_QUIT, - SMTP_LAST /* never used */ + SMTP_LAST /* never used */ } smtpstate; /* This SMTP struct is used in the Curl_easy. All SMTP data that is @@ -69,16 +69,16 @@ struct SMTP { struct */ struct smtp_conn { struct pingpong pp; - struct SASL sasl; /* SASL-related storage */ - smtpstate state; /* Always use smtp.c:state() to change state! */ - char *domain; /* Client address/name to send in the EHLO */ - BIT(ssldone); /* Is connect() over SSL done? */ - BIT(tls_supported); /* StartTLS capability supported by server */ - BIT(size_supported); /* If server supports SIZE extension according to - RFC 1870 */ - BIT(utf8_supported); /* If server supports SMTPUTF8 extension according - to RFC 6531 */ - BIT(auth_supported); /* AUTH capability supported by server */ + struct SASL sasl; /* SASL-related storage */ + smtpstate state; /* Always use smtp.c:state() to change state! */ + char *domain; /* Client address/name to send in the EHLO */ + BIT(ssldone); /* Is connect() over SSL done? */ + BIT(tls_supported); /* StartTLS capability supported by server */ + BIT(size_supported); /* If server supports SIZE extension according to + RFC 1870 */ + BIT(utf8_supported); /* If server supports SMTPUTF8 extension according + to RFC 6531 */ + BIT(auth_supported); /* AUTH capability supported by server */ }; extern const struct Curl_handler Curl_handler_smtp; diff --git a/vendor/hydra/vendor/curl/lib/sockaddr.h b/vendor/hydra/vendor/curl/lib/sockaddr.h index 2e2d375e..17228304 100644 --- a/vendor/hydra/vendor/curl/lib/sockaddr.h +++ b/vendor/hydra/vendor/curl/lib/sockaddr.h @@ -36,7 +36,7 @@ struct Curl_sockaddr_storage { #ifdef HAVE_STRUCT_SOCKADDR_STORAGE struct sockaddr_storage sa_stor; #else - char cbuf[256]; /* this should be big enough to fit a lot */ + char cbuf[256]; /* this should be big enough to fit a lot */ #endif } buffer; }; diff --git a/vendor/hydra/vendor/curl/lib/socketpair.h b/vendor/hydra/vendor/curl/lib/socketpair.h index 3044f112..c0876de3 100644 --- a/vendor/hydra/vendor/curl/lib/socketpair.h +++ b/vendor/hydra/vendor/curl/lib/socketpair.h @@ -26,15 +26,9 @@ #include "curl_setup.h" -#if defined(HAVE_EVENTFD) && \ - defined(__x86_64__) && \ - defined(__aarch64__) && \ - defined(__ia64__) && \ - defined(__ppc64__) && \ - defined(__mips64) && \ - defined(__sparc64__) && \ - defined(__riscv_64e) && \ - defined(__s390x__) +#if defined(HAVE_EVENTFD) && defined(__x86_64__) && defined(__aarch64__) && \ + defined(__ia64__) && defined(__ppc64__) && defined(__mips64) && \ + defined(__sparc64__) && defined(__riscv_64e) && defined(__s390x__) /* Use eventfd only with 64-bit CPU architectures because eventfd has a * stringent rule of requiring the 8-byte buffer when calling read(2) and @@ -45,29 +39,29 @@ */ #define USE_EVENTFD 1 -#define wakeup_write write -#define wakeup_read read -#define wakeup_close close -#define wakeup_create(p,nb) Curl_eventfd(p,nb) +#define wakeup_write write +#define wakeup_read read +#define wakeup_close close +#define wakeup_create(p, nb) Curl_eventfd(p, nb) #include int Curl_eventfd(curl_socket_t socks[2], bool nonblocking); #elif defined(HAVE_PIPE) -#define wakeup_write write -#define wakeup_read read -#define wakeup_close close -#define wakeup_create(p,nb) Curl_pipe(p,nb) +#define wakeup_write write +#define wakeup_read read +#define wakeup_close close +#define wakeup_create(p, nb) Curl_pipe(p, nb) #include int Curl_pipe(curl_socket_t socks[2], bool nonblocking); #else /* !USE_EVENTFD && !HAVE_PIPE */ -#define wakeup_write swrite -#define wakeup_read sread -#define wakeup_close sclose +#define wakeup_write swrite +#define wakeup_read sread +#define wakeup_close sclose #if defined(USE_UNIX_SOCKETS) && defined(HAVE_SOCKETPAIR) #define SOCKETPAIR_FAMILY AF_UNIX @@ -83,16 +77,16 @@ int Curl_pipe(curl_socket_t socks[2], bool nonblocking); #define SOCKETPAIR_TYPE SOCK_STREAM #endif -#define wakeup_create(p,nb)\ -Curl_socketpair(SOCKETPAIR_FAMILY, SOCKETPAIR_TYPE, 0, p, nb) +#define wakeup_create(p, nb) \ + Curl_socketpair(SOCKETPAIR_FAMILY, SOCKETPAIR_TYPE, 0, p, nb) #endif /* USE_EVENTFD */ #ifndef CURL_DISABLE_SOCKETPAIR #include -int Curl_socketpair(int domain, int type, int protocol, - curl_socket_t socks[2], bool nonblocking); +int Curl_socketpair(int domain, int type, int protocol, curl_socket_t socks[2], + bool nonblocking); #endif #endif /* HEADER_CURL_SOCKETPAIR_H */ diff --git a/vendor/hydra/vendor/curl/lib/socks.h b/vendor/hydra/vendor/curl/lib/socks.h index a3adcc6e..931a5444 100644 --- a/vendor/hydra/vendor/curl/lib/socks.h +++ b/vendor/hydra/vendor/curl/lib/socks.h @@ -27,9 +27,9 @@ #include "curl_setup.h" #ifdef CURL_DISABLE_PROXY -#define Curl_SOCKS4(a,b,c,d,e) CURLE_NOT_BUILT_IN -#define Curl_SOCKS5(a,b,c,d,e,f) CURLE_NOT_BUILT_IN -#define Curl_SOCKS_getsock(x,y,z) 0 +#define Curl_SOCKS4(a, b, c, d, e) CURLE_NOT_BUILT_IN +#define Curl_SOCKS5(a, b, c, d, e, f) CURLE_NOT_BUILT_IN +#define Curl_SOCKS_getsock(x, y, z) 0 #else /* * Helper read-from-socket functions. Does the same as Curl_read() but it @@ -37,11 +37,8 @@ * * This is STUPID BLOCKING behavior */ -int Curl_blockread_all(struct Curl_cfilter *cf, - struct Curl_easy *data, - char *buf, - ssize_t buffersize, - ssize_t *n); +int Curl_blockread_all(struct Curl_cfilter *cf, struct Curl_easy *data, + char *buf, ssize_t buffersize, ssize_t *n); #if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI) /* @@ -58,4 +55,4 @@ extern struct Curl_cftype Curl_cft_socks_proxy; #endif /* CURL_DISABLE_PROXY */ -#endif /* HEADER_CURL_SOCKS_H */ +#endif /* HEADER_CURL_SOCKS_H */ diff --git a/vendor/hydra/vendor/curl/lib/speedcheck.h b/vendor/hydra/vendor/curl/lib/speedcheck.h index bff2f32b..9c151810 100644 --- a/vendor/hydra/vendor/curl/lib/speedcheck.h +++ b/vendor/hydra/vendor/curl/lib/speedcheck.h @@ -25,11 +25,9 @@ ***************************************************************************/ #include "curl_setup.h" - #include "timeval.h" void Curl_speedinit(struct Curl_easy *data); -CURLcode Curl_speedcheck(struct Curl_easy *data, - struct curltime now); +CURLcode Curl_speedcheck(struct Curl_easy *data, struct curltime now); #endif /* HEADER_CURL_SPEEDCHECK_H */ diff --git a/vendor/hydra/vendor/curl/lib/splay.h b/vendor/hydra/vendor/curl/lib/splay.h index b8c9360e..26dc6313 100644 --- a/vendor/hydra/vendor/curl/lib/splay.h +++ b/vendor/hydra/vendor/curl/lib/splay.h @@ -36,19 +36,15 @@ struct Curl_tree { void *ptr; /* data the splay code does not care about */ }; -struct Curl_tree *Curl_splay(struct curltime i, - struct Curl_tree *t); +struct Curl_tree *Curl_splay(struct curltime i, struct Curl_tree *t); -struct Curl_tree *Curl_splayinsert(struct curltime key, - struct Curl_tree *t, +struct Curl_tree *Curl_splayinsert(struct curltime key, struct Curl_tree *t, struct Curl_tree *newnode); -struct Curl_tree *Curl_splaygetbest(struct curltime key, - struct Curl_tree *t, +struct Curl_tree *Curl_splaygetbest(struct curltime key, struct Curl_tree *t, struct Curl_tree **removed); -int Curl_splayremove(struct Curl_tree *t, - struct Curl_tree *removenode, +int Curl_splayremove(struct Curl_tree *t, struct Curl_tree *removenode, struct Curl_tree **newroot); /* set and get the custom payload for this tree node */ diff --git a/vendor/hydra/vendor/curl/lib/strcase.h b/vendor/hydra/vendor/curl/lib/strcase.h index 8c50bbcb..08738d4e 100644 --- a/vendor/hydra/vendor/curl/lib/strcase.h +++ b/vendor/hydra/vendor/curl/lib/strcase.h @@ -35,15 +35,15 @@ * Result is 1 if text matches and 0 if not. */ -#define strcasecompare(a,b) curl_strequal(a,b) -#define strncasecompare(a,b,c) curl_strnequal(a,b,c) +#define strcasecompare(a, b) curl_strequal(a, b) +#define strncasecompare(a, b, c) curl_strnequal(a, b, c) char Curl_raw_toupper(char in); char Curl_raw_tolower(char in); /* checkprefix() is a shorter version of the above, used when the first argument is the string literal */ -#define checkprefix(a,b) curl_strnequal(b, STRCONST(a)) +#define checkprefix(a, b) curl_strnequal(b, STRCONST(a)) void Curl_strntoupper(char *dest, const char *src, size_t n); void Curl_strntolower(char *dest, const char *src, size_t n); diff --git a/vendor/hydra/vendor/curl/lib/strdup.h b/vendor/hydra/vendor/curl/lib/strdup.h index 238a2611..22ade4d7 100644 --- a/vendor/hydra/vendor/curl/lib/strdup.h +++ b/vendor/hydra/vendor/curl/lib/strdup.h @@ -29,7 +29,7 @@ char *Curl_strdup(const char *str); #endif #ifdef _WIN32 -wchar_t* Curl_wcsdup(const wchar_t* src); +wchar_t *Curl_wcsdup(const wchar_t *src); #endif void *Curl_memdup(const void *src, size_t buffer_length); void *Curl_saferealloc(void *ptr, size_t size); diff --git a/vendor/hydra/vendor/curl/lib/strtok.h b/vendor/hydra/vendor/curl/lib/strtok.h index 321cba23..6ea27fda 100644 --- a/vendor/hydra/vendor/curl/lib/strtok.h +++ b/vendor/hydra/vendor/curl/lib/strtok.h @@ -23,9 +23,10 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -#include "curl_setup.h" #include +#include "curl_setup.h" + #ifndef HAVE_STRTOK_R char *Curl_strtok_r(char *s, const char *delim, char **last); #define strtok_r Curl_strtok_r diff --git a/vendor/hydra/vendor/curl/lib/strtoofft.h b/vendor/hydra/vendor/curl/lib/strtoofft.h index 71808b71..28592e93 100644 --- a/vendor/hydra/vendor/curl/lib/strtoofft.h +++ b/vendor/hydra/vendor/curl/lib/strtoofft.h @@ -43,9 +43,9 @@ */ typedef enum { - CURL_OFFT_OK, /* parsed fine */ - CURL_OFFT_FLOW, /* over or underflow */ - CURL_OFFT_INVAL /* nothing was parsed */ + CURL_OFFT_OK, /* parsed fine */ + CURL_OFFT_FLOW, /* over or underflow */ + CURL_OFFT_INVAL /* nothing was parsed */ } CURLofft; CURLofft curlx_strtoofft(const char *str, char **endp, int base, diff --git a/vendor/hydra/vendor/curl/lib/system_win32.h b/vendor/hydra/vendor/curl/lib/system_win32.h index 024d959f..3ab617a4 100644 --- a/vendor/hydra/vendor/curl/lib/system_win32.h +++ b/vendor/hydra/vendor/curl/lib/system_win32.h @@ -44,7 +44,7 @@ extern IF_NAMETOINDEX_FN Curl_if_nametoindex; /* This is used to dynamically load DLLs */ HMODULE Curl_load_library(LPCTSTR filename); -#else /* _WIN32 */ +#else /* _WIN32 */ #define Curl_win32_init(x) CURLE_OK #endif /* !_WIN32 */ diff --git a/vendor/hydra/vendor/curl/lib/timeval.h b/vendor/hydra/vendor/curl/lib/timeval.h index 33dfb5b1..96cf462e 100644 --- a/vendor/hydra/vendor/curl/lib/timeval.h +++ b/vendor/hydra/vendor/curl/lib/timeval.h @@ -25,7 +25,6 @@ ***************************************************************************/ #include "curl_setup.h" - #include "timediff.h" struct curltime { diff --git a/vendor/hydra/vendor/curl/lib/transfer.h b/vendor/hydra/vendor/curl/lib/transfer.h index 8d6f98d7..0c7b113d 100644 --- a/vendor/hydra/vendor/curl/lib/transfer.h +++ b/vendor/hydra/vendor/curl/lib/transfer.h @@ -24,9 +24,8 @@ * ***************************************************************************/ -#define Curl_headersep(x) ((((x)==':') || ((x)==';'))) -char *Curl_checkheaders(const struct Curl_easy *data, - const char *thisheader, +#define Curl_headersep(x) ((((x) == ':') || ((x) == ';'))) +char *Curl_checkheaders(const struct Curl_easy *data, const char *thisheader, const size_t thislen); void Curl_init_CONNECT(struct Curl_easy *data); @@ -39,14 +38,13 @@ typedef enum { FOLLOW_FAKE, /* only records stuff, not actually following */ FOLLOW_RETRY, /* set if this is a request retry as opposed to a real redirect following */ - FOLLOW_REDIR /* a full true redirect */ + FOLLOW_REDIR /* a full true redirect */ } followtype; -CURLcode Curl_follow(struct Curl_easy *data, char *newurl, - followtype type); +CURLcode Curl_follow(struct Curl_easy *data, char *newurl, followtype type); CURLcode Curl_sendrecv(struct Curl_easy *data, struct curltime *nowp); -int Curl_single_getsock(struct Curl_easy *data, - struct connectdata *conn, curl_socket_t *socks); +int Curl_single_getsock(struct Curl_easy *data, struct connectdata *conn, + curl_socket_t *socks); CURLcode Curl_retry_request(struct Curl_easy *data, char **url); bool Curl_meets_timecondition(struct Curl_easy *data, time_t timeofdoc); @@ -62,9 +60,8 @@ bool Curl_meets_timecondition(struct Curl_easy *data, time_t timeofdoc); * @param is_eos TRUE iff the connection indicates this to be the last * bytes of the response */ -CURLcode Curl_xfer_write_resp(struct Curl_easy *data, - const char *buf, size_t blen, - bool is_eos); +CURLcode Curl_xfer_write_resp(struct Curl_easy *data, const char *buf, + size_t blen, bool is_eos); /** * Write a single "header" line from a server response. @@ -72,13 +69,13 @@ CURLcode Curl_xfer_write_resp(struct Curl_easy *data, * @param hdlen the length of the header line * @param is_eos TRUE iff this is the end of the response */ -CURLcode Curl_xfer_write_resp_hd(struct Curl_easy *data, - const char *hd0, size_t hdlen, bool is_eos); +CURLcode Curl_xfer_write_resp_hd(struct Curl_easy *data, const char *hd0, + size_t hdlen, bool is_eos); -#define CURL_XFER_NOP (0) -#define CURL_XFER_RECV (1<<(0)) -#define CURL_XFER_SEND (1<<(1)) -#define CURL_XFER_SENDRECV (CURL_XFER_RECV|CURL_XFER_SEND) +#define CURL_XFER_NOP (0) +#define CURL_XFER_RECV (1 << (0)) +#define CURL_XFER_SEND (1 << (1)) +#define CURL_XFER_SENDRECV (CURL_XFER_RECV | CURL_XFER_SEND) /** * The transfer is neither receiving nor sending now. @@ -90,10 +87,8 @@ void Curl_xfer_setup_nop(struct Curl_easy *data); * the amount to receive or -1 if unknown. `getheader` indicates * response header processing is expected. */ -void Curl_xfer_setup1(struct Curl_easy *data, - int send_recv, - curl_off_t recv_size, - bool getheader); +void Curl_xfer_setup1(struct Curl_easy *data, int send_recv, + curl_off_t recv_size, bool getheader); /** * The transfer will use socket 2 to send/recv. `recv_size` is @@ -102,10 +97,8 @@ void Curl_xfer_setup1(struct Curl_easy *data, * and the socket 2 connection will be shutdown at the end of * the transfer. An unclean shutdown will fail the transfer. */ -void Curl_xfer_setup2(struct Curl_easy *data, - int send_recv, - curl_off_t recv_size, - bool shutdown); +void Curl_xfer_setup2(struct Curl_easy *data, int send_recv, + curl_off_t recv_size, bool shutdown); /** * Multi has set transfer to DONE. Last chance to trigger @@ -129,17 +122,15 @@ CURLcode Curl_xfer_flush(struct Curl_easy *data); * for transfer's outgoing data. * Will return CURLE_OK on blocking with (*pnwritten == 0). */ -CURLcode Curl_xfer_send(struct Curl_easy *data, - const void *buf, size_t blen, bool eos, - size_t *pnwritten); +CURLcode Curl_xfer_send(struct Curl_easy *data, const void *buf, size_t blen, + bool eos, size_t *pnwritten); /** * Receive data on the socket/connection filter designated * for transfer's incoming data. * Will return CURLE_AGAIN on blocking with (*pnrcvd == 0). */ -CURLcode Curl_xfer_recv(struct Curl_easy *data, - char *buf, size_t blen, +CURLcode Curl_xfer_recv(struct Curl_easy *data, char *buf, size_t blen, ssize_t *pnrcvd); CURLcode Curl_xfer_send_close(struct Curl_easy *data); diff --git a/vendor/hydra/vendor/curl/lib/url.h b/vendor/hydra/vendor/curl/lib/url.h index 47c1db44..c8363a87 100644 --- a/vendor/hydra/vendor/curl/lib/url.h +++ b/vendor/hydra/vendor/curl/lib/url.h @@ -37,10 +37,9 @@ void Curl_freeset(struct Curl_easy *data); CURLcode Curl_uc_to_curlcode(CURLUcode uc); CURLcode Curl_close(struct Curl_easy **datap); /* opposite of curl_open() */ CURLcode Curl_connect(struct Curl_easy *, bool *async, bool *protocol_connect); -bool Curl_on_disconnect(struct Curl_easy *data, - struct connectdata *, bool aborted); -CURLcode Curl_setup_conn(struct Curl_easy *data, - bool *protocol_done); +bool Curl_on_disconnect(struct Curl_easy *data, struct connectdata *, + bool aborted); +CURLcode Curl_setup_conn(struct Curl_easy *data, bool *protocol_done); void Curl_conn_free(struct Curl_easy *data, struct connectdata *conn); CURLcode Curl_parse_login_details(const char *login, const size_t len, char **userptr, char **passwdptr, @@ -55,11 +54,12 @@ const struct Curl_handler *Curl_getn_scheme_handler(const char *scheme, size_t len); #define CURL_DEFAULT_PROXY_PORT 1080 /* default proxy port unless specified */ -#define CURL_DEFAULT_HTTPS_PROXY_PORT 443 /* default https proxy port unless - specified */ +#define CURL_DEFAULT_HTTPS_PROXY_PORT \ + 443 /* default https proxy port unless \ + specified */ #ifdef CURL_DISABLE_VERBOSE_STRINGS -#define Curl_verboseconnect(x,y,z) Curl_nop_stmt +#define Curl_verboseconnect(x, y, z) Curl_nop_stmt #else void Curl_verboseconnect(struct Curl_easy *data, struct connectdata *conn, int sockindex); @@ -69,15 +69,13 @@ void Curl_verboseconnect(struct Curl_easy *data, struct connectdata *conn, * Return TRUE iff the given connection is considered dead. * @param nowp NULL or pointer to time being checked against. */ -bool Curl_conn_seems_dead(struct connectdata *conn, - struct Curl_easy *data, +bool Curl_conn_seems_dead(struct connectdata *conn, struct Curl_easy *data, struct curltime *nowp); /** * Perform upkeep operations on the connection. */ -CURLcode Curl_conn_upkeep(struct Curl_easy *data, - struct connectdata *conn, +CURLcode Curl_conn_upkeep(struct Curl_easy *data, struct connectdata *conn, struct curltime *now); #if defined(USE_HTTP2) || defined(USE_HTTP3) @@ -88,8 +86,7 @@ void Curl_data_priority_clear_state(struct Curl_easy *data); #ifdef USE_NGHTTP2 CURLcode Curl_data_priority_add_child(struct Curl_easy *parent, - struct Curl_easy *child, - bool exclusive); + struct Curl_easy *child, bool exclusive); #else #define Curl_data_priority_add_child(x, y, z) CURLE_NOT_BUILT_IN #endif diff --git a/vendor/hydra/vendor/curl/lib/urldata.h b/vendor/hydra/vendor/curl/lib/urldata.h index 22dceeed..db7c752b 100644 --- a/vendor/hydra/vendor/curl/lib/urldata.h +++ b/vendor/hydra/vendor/curl/lib/urldata.h @@ -57,11 +57,11 @@ struct curl_trc_featt; #ifdef USE_ECH /* CURLECH_ bits for the tls_ech option */ -# define CURLECH_DISABLE (1<<0) -# define CURLECH_GREASE (1<<1) -# define CURLECH_ENABLE (1<<2) -# define CURLECH_HARD (1<<3) -# define CURLECH_CLA_CFG (1<<4) +#define CURLECH_DISABLE (1 << 0) +#define CURLECH_GREASE (1 << 1) +#define CURLECH_ENABLE (1 << 2) +#define CURLECH_HARD (1 << 3) +#define CURLECH_CLA_CFG (1 << 4) #endif #ifdef USE_WEBSOCKETS @@ -70,16 +70,16 @@ struct curl_trc_featt; * platforms that have a >= 64-bit type and then we use such a type for the * protocol fields in the protocol handler. */ -#define CURLPROTO_WS (1<<30) -#define CURLPROTO_WSS ((curl_prot_t)1<<31) +#define CURLPROTO_WS (1 << 30) +#define CURLPROTO_WSS ((curl_prot_t)1 << 31) #else #define CURLPROTO_WS 0 #define CURLPROTO_WSS 0 #endif /* the default protocols accepting a redirect to */ -#define CURLPROTO_REDIR (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP | \ - CURLPROTO_FTPS) +#define CURLPROTO_REDIR \ + (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_FTP | CURLPROTO_FTPS) /* This should be undefined once we need bit 32 or higher */ #define PROTO_TYPE_SMALL @@ -93,7 +93,7 @@ typedef unsigned int curl_prot_t; /* This mask is for all the old protocols that are provided and defined in the public header and shall exclude protocols added since which are not exposed in the API */ -#define CURLPROTO_MASK (0x3ffffff) +#define CURLPROTO_MASK (0x3ffffff) #define DICT_MATCH "/MATCH:" #define DICT_MATCH2 "/M:" @@ -114,16 +114,16 @@ typedef unsigned int curl_prot_t; /* Convenience defines for checking protocols or their SSL based version. Each protocol handler should only ever have a single CURLPROTO_ in its protocol field. */ -#define PROTO_FAMILY_HTTP (CURLPROTO_HTTP|CURLPROTO_HTTPS|CURLPROTO_WS| \ - CURLPROTO_WSS) -#define PROTO_FAMILY_FTP (CURLPROTO_FTP|CURLPROTO_FTPS) -#define PROTO_FAMILY_POP3 (CURLPROTO_POP3|CURLPROTO_POP3S) -#define PROTO_FAMILY_SMB (CURLPROTO_SMB|CURLPROTO_SMBS) -#define PROTO_FAMILY_SMTP (CURLPROTO_SMTP|CURLPROTO_SMTPS) -#define PROTO_FAMILY_SSH (CURLPROTO_SCP|CURLPROTO_SFTP) - -#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH) || \ - !defined(CURL_DISABLE_POP3) || !defined(CURL_DISABLE_FILE) +#define PROTO_FAMILY_HTTP \ + (CURLPROTO_HTTP | CURLPROTO_HTTPS | CURLPROTO_WS | CURLPROTO_WSS) +#define PROTO_FAMILY_FTP (CURLPROTO_FTP | CURLPROTO_FTPS) +#define PROTO_FAMILY_POP3 (CURLPROTO_POP3 | CURLPROTO_POP3S) +#define PROTO_FAMILY_SMB (CURLPROTO_SMB | CURLPROTO_SMBS) +#define PROTO_FAMILY_SMTP (CURLPROTO_SMTP | CURLPROTO_SMTPS) +#define PROTO_FAMILY_SSH (CURLPROTO_SCP | CURLPROTO_SFTP) + +#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH) || \ + !defined(CURL_DISABLE_POP3) || !defined(CURL_DISABLE_FILE) /* these protocols support CURLOPT_DIRLISTONLY */ #define CURL_LIST_ONLY_PROTOCOL 1 #endif @@ -134,16 +134,15 @@ typedef unsigned int curl_prot_t; #define MAX_IPADR_LEN sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") /* Default FTP/IMAP etc response timeout in milliseconds */ -#define RESP_TIMEOUT (120*1000) +#define RESP_TIMEOUT (120 * 1000) /* Max string input length is a precaution against abuse and to detect junk input easier and better. */ #define CURL_MAX_INPUT_LENGTH 8000000 - #include "cookie.h" -#include "psl.h" #include "formdata.h" +#include "psl.h" #ifdef HAVE_NETINET_IN_H #include @@ -152,67 +151,65 @@ typedef unsigned int curl_prot_t; #include #endif -#include "timeval.h" - #include -#include "http_chunks.h" /* for the structs and enum stuff */ -#include "hostip.h" -#include "hash.h" -#include "splay.h" #include "dynbuf.h" #include "dynhds.h" +#include "hash.h" +#include "hostip.h" +#include "http_chunks.h" /* for the structs and enum stuff */ #include "request.h" +#include "splay.h" +#include "timeval.h" /* return the count of bytes sent, or -1 on error */ -typedef ssize_t (Curl_send)(struct Curl_easy *data, /* transfer */ - int sockindex, /* socketindex */ - const void *buf, /* data to write */ - size_t len, /* max amount to write */ - bool eos, /* last chunk */ - CURLcode *err); /* error to return */ +typedef ssize_t(Curl_send)(struct Curl_easy *data, /* transfer */ + int sockindex, /* socketindex */ + const void *buf, /* data to write */ + size_t len, /* max amount to write */ + bool eos, /* last chunk */ + CURLcode *err); /* error to return */ /* return the count of bytes read, or -1 on error */ -typedef ssize_t (Curl_recv)(struct Curl_easy *data, /* transfer */ - int sockindex, /* socketindex */ - char *buf, /* store data here */ - size_t len, /* max amount to read */ - CURLcode *err); /* error to return */ +typedef ssize_t(Curl_recv)(struct Curl_easy *data, /* transfer */ + int sockindex, /* socketindex */ + char *buf, /* store data here */ + size_t len, /* max amount to read */ + CURLcode *err); /* error to return */ #ifdef USE_HYPER typedef CURLcode (*Curl_datastream)(struct Curl_easy *data, - struct connectdata *conn, - int *didwhat, + struct connectdata *conn, int *didwhat, int select_res); #endif -#include "mime.h" -#include "imap.h" -#include "pop3.h" -#include "smtp.h" -#include "ftp.h" +#include "c-hyper.h" +#include "cf-socket.h" #include "file.h" -#include "vssh/ssh.h" +#include "ftp.h" +#include "ftplistparser.h" #include "http.h" -#include "rtsp.h" -#include "smb.h" +#include "imap.h" +#include "mime.h" #include "mqtt.h" -#include "ftplistparser.h" #include "multihandle.h" -#include "c-hyper.h" -#include "cf-socket.h" +#include "pop3.h" +#include "rtsp.h" +#include "smb.h" +#include "smtp.h" +#include "vssh/ssh.h" #ifdef HAVE_GSSAPI -# ifdef HAVE_GSSGNU -# include -# elif defined HAVE_GSSAPI_GSSAPI_H -# include -# else -# include -# endif -# ifdef HAVE_GSSAPI_GSSAPI_GENERIC_H -# include -# endif +#ifdef HAVE_GSSGNU +#include +#elif defined HAVE_GSSAPI_GSSAPI_H +#include +#else +#include +#endif +#ifdef HAVE_GSSAPI_GSSAPI_GENERIC_H +#include +#endif #endif #ifdef USE_LIBSSH2 @@ -221,8 +218,8 @@ typedef CURLcode (*Curl_datastream)(struct Curl_easy *data, #endif /* USE_LIBSSH2 */ #define READBUFFER_SIZE CURL_MAX_WRITE_SIZE -#define READBUFFER_MAX CURL_MAX_READ_SIZE -#define READBUFFER_MIN 1024 +#define READBUFFER_MAX CURL_MAX_READ_SIZE +#define READBUFFER_MIN 1024 /* The default upload buffer size, should not be smaller than CURL_MAX_WRITE_SIZE, as it needs to hold a full buffer as could be sent in @@ -233,7 +230,7 @@ typedef CURLcode (*Curl_datastream)(struct Curl_easy *data, larger buffers can help further, but this is deemed a fair memory/speed compromise. */ #define UPLOADBUFFER_DEFAULT 65536 -#define UPLOADBUFFER_MAX (2*1024*1024) +#define UPLOADBUFFER_MAX (2 * 1024 * 1024) #define UPLOADBUFFER_MIN CURL_MAX_WRITE_SIZE #define CURLEASY_MAGIC_NUMBER 0xc0dedbadU @@ -241,12 +238,12 @@ typedef CURLcode (*Curl_datastream)(struct Curl_easy *data, /* On a debug build, we want to fail hard on easy handles that * are not NULL, but no longer have the MAGIC touch. This gives * us early warning on things only discovered by valgrind otherwise. */ -#define GOOD_EASY_HANDLE(x) \ - (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER))? TRUE: \ - (DEBUGASSERT(!(x)), FALSE)) +#define GOOD_EASY_HANDLE(x) \ + (((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) \ + ? TRUE \ + : (DEBUGASSERT(!(x)), FALSE)) #else -#define GOOD_EASY_HANDLE(x) \ - ((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) +#define GOOD_EASY_HANDLE(x) ((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER)) #endif #ifdef HAVE_GSSAPI @@ -278,23 +275,23 @@ typedef enum { } ssl_peer_type; struct ssl_peer { - char *hostname; /* hostname for verification */ - char *dispname; /* display version of hostname */ - char *sni; /* SNI version of hostname or NULL if not usable */ - ssl_peer_type type; /* type of the peer information */ - int port; /* port we are talking to */ - int transport; /* one of TRNSPRT_* defines */ + char *hostname; /* hostname for verification */ + char *dispname; /* display version of hostname */ + char *sni; /* SNI version of hostname or NULL if not usable */ + ssl_peer_type type; /* type of the peer information */ + int port; /* port we are talking to */ + int transport; /* one of TRNSPRT_* defines */ }; struct ssl_primary_config { - char *CApath; /* certificate dir (does not work on Windows) */ - char *CAfile; /* certificate to verify peer against */ - char *issuercert; /* optional issuer certificate filename */ + char *CApath; /* certificate dir (does not work on Windows) */ + char *CAfile; /* certificate to verify peer against */ + char *issuercert; /* optional issuer certificate filename */ char *clientcert; - char *cipher_list; /* list of ciphers to use */ - char *cipher_list13; /* list of TLS 1.3 cipher suites to use */ + char *cipher_list; /* list of ciphers to use */ + char *cipher_list13; /* list of TLS 1.3 cipher suites to use */ char *pinned_key; - char *CRLfile; /* CRL to check certificate revocation */ + char *CRLfile; /* CRL to check certificate revocation */ struct curl_blob *cert_blob; struct curl_blob *ca_info_blob; struct curl_blob *issuercert_blob; @@ -302,52 +299,52 @@ struct ssl_primary_config { char *username; /* TLS username (for, e.g., SRP) */ char *password; /* TLS password (for, e.g., SRP) */ #endif - char *curves; /* list of curves to use */ - unsigned char ssl_options; /* the CURLOPT_SSL_OPTIONS bitmask */ - unsigned int version_max; /* max supported version the client wants to use */ - unsigned char version; /* what version the client wants to use */ - BIT(verifypeer); /* set TRUE if this is desired */ - BIT(verifyhost); /* set TRUE if CN/SAN must match hostname */ - BIT(verifystatus); /* set TRUE if certificate status must be checked */ - BIT(cache_session); /* cache session or not */ + char *curves; /* list of curves to use */ + unsigned char ssl_options; /* the CURLOPT_SSL_OPTIONS bitmask */ + unsigned int version_max; /* max supported version the client wants to use */ + unsigned char version; /* what version the client wants to use */ + BIT(verifypeer); /* set TRUE if this is desired */ + BIT(verifyhost); /* set TRUE if CN/SAN must match hostname */ + BIT(verifystatus); /* set TRUE if certificate status must be checked */ + BIT(cache_session); /* cache session or not */ }; struct ssl_config_data { struct ssl_primary_config primary; - long certverifyresult; /* result from the certificate verification */ + long certverifyresult; /* result from the certificate verification */ curl_ssl_ctx_callback fsslctx; /* function to initialize ssl ctx */ - void *fsslctxp; /* parameter for call back */ - char *cert_type; /* format for certificate (default: PEM)*/ - char *key; /* private key filename */ + void *fsslctxp; /* parameter for call back */ + char *cert_type; /* format for certificate (default: PEM)*/ + char *key; /* private key filename */ struct curl_blob *key_blob; - char *key_type; /* format for private key (default: PEM) */ + char *key_type; /* format for private key (default: PEM) */ char *key_passwd; /* plain text private key password */ - BIT(certinfo); /* gather lots of certificate info */ + BIT(certinfo); /* gather lots of certificate info */ BIT(falsestart); - BIT(enable_beast); /* allow this flaw for interoperability's sake */ - BIT(no_revoke); /* disable SSL certificate revocation checks */ - BIT(no_partialchain); /* do not accept partial certificate chains */ + BIT(enable_beast); /* allow this flaw for interoperability's sake */ + BIT(no_revoke); /* disable SSL certificate revocation checks */ + BIT(no_partialchain); /* do not accept partial certificate chains */ BIT(revoke_best_effort); /* ignore SSL revocation offline/missing revocation list errors */ - BIT(native_ca_store); /* use the native ca store of operating system */ + BIT(native_ca_store); /* use the native ca store of operating system */ BIT(auto_client_cert); /* automatically locate and use a client certificate for authentication (Schannel) */ }; struct ssl_general_config { size_t max_ssl_sessions; /* SSL session id cache size */ - int ca_cache_timeout; /* Certificate store cache timeout (seconds) */ + int ca_cache_timeout; /* Certificate store cache timeout (seconds) */ }; typedef void Curl_ssl_sessionid_dtor(void *sessionid, size_t idsize); /* information stored about one single SSL session */ struct Curl_ssl_session { - char *name; /* hostname for which this ID was used */ + char *name; /* hostname for which this ID was used */ char *conn_to_host; /* hostname for the connection (may be NULL) */ const char *scheme; /* protocol scheme used */ - void *sessionid; /* as returned from the SSL layer */ - size_t idsize; /* if known, otherwise 0 */ + void *sessionid; /* as returned from the SSL layer */ + size_t idsize; /* if known, otherwise 0 */ Curl_ssl_sessionid_dtor *sessionid_free; /* free `sessionid` callback */ long age; /* just a number, the higher the more recent */ int remote_port; /* remote port */ @@ -503,16 +500,16 @@ struct ConnectBits { BIT(httpproxy); /* if set, this transfer is done through an HTTP proxy */ BIT(socksproxy); /* if set, this transfer is done through a socks proxy */ BIT(proxy_user_passwd); /* user+password for the proxy? */ - BIT(tunnel_proxy); /* if CONNECT is used to "tunnel" through the proxy. - This is implicit when SSL-protocols are used through - proxies, but can also be enabled explicitly by - apps */ + BIT(tunnel_proxy); /* if CONNECT is used to "tunnel" through the proxy. + This is implicit when SSL-protocols are used through + proxies, but can also be enabled explicitly by + apps */ BIT(proxy); /* if set, this transfer is done through a proxy - any type */ #endif /* always modify bits.close with the connclose() and connkeep() macros! */ - BIT(close); /* if set, we close the connection after this request */ - BIT(reuse); /* if set, this is a reused connection */ - BIT(altused); /* this is an alt-svc "redirect" */ + BIT(close); /* if set, we close the connection after this request */ + BIT(reuse); /* if set, this is a reused connection */ + BIT(altused); /* this is an alt-svc "redirect" */ BIT(conn_to_host); /* if set, this connection has a "connect to host" that overrides the host in the URL */ BIT(conn_to_port); /* if set, this connection has a "connect to port" @@ -522,28 +519,28 @@ struct ConnectBits { BIT(ipv6); /* we communicate with a site using an IPv6 address */ BIT(do_more); /* this is set TRUE if the ->curl_do_more() function is supposed to be called, after ->curl_do() */ - BIT(protoconnstart);/* the protocol layer has STARTED its operation after - the TCP layer connect */ - BIT(retry); /* this connection is about to get closed and then - re-attempted at another connection. */ + BIT(protoconnstart); /* the protocol layer has STARTED its operation after + the TCP layer connect */ + BIT(retry); /* this connection is about to get closed and then + re-attempted at another connection. */ #ifndef CURL_DISABLE_FTP - BIT(ftp_use_epsv); /* As set with CURLOPT_FTP_USE_EPSV, but if we find out - EPSV does not work we disable it for the forthcoming - requests */ - BIT(ftp_use_eprt); /* As set with CURLOPT_FTP_USE_EPRT, but if we find out - EPRT does not work we disable it for the forthcoming - requests */ + BIT(ftp_use_epsv); /* As set with CURLOPT_FTP_USE_EPSV, but if we find out + EPSV does not work we disable it for the forthcoming + requests */ + BIT(ftp_use_eprt); /* As set with CURLOPT_FTP_USE_EPRT, but if we find out + EPRT does not work we disable it for the forthcoming + requests */ BIT(ftp_use_data_ssl); /* Enabled SSL for the data connection */ BIT(ftp_use_control_ssl); /* Enabled SSL for the control connection */ #endif #ifndef CURL_DISABLE_NETRC - BIT(netrc); /* name+password provided by netrc */ + BIT(netrc); /* name+password provided by netrc */ #endif BIT(bound); /* set true if bind() has already been done on this socket/ connection */ - BIT(asks_multiplex); /* connection asks for multiplexing, but is not yet */ - BIT(multiplex); /* connection is multiplexed */ - BIT(tcp_fastopen); /* use TCP Fast Open */ + BIT(asks_multiplex); /* connection asks for multiplexing, but is not yet */ + BIT(multiplex); /* connection is multiplexed */ + BIT(tcp_fastopen); /* use TCP Fast Open */ BIT(tls_enable_alpn); /* TLS ALPN extension? */ #ifndef CURL_DISABLE_DOH BIT(doh); @@ -552,14 +549,14 @@ struct ConnectBits { BIT(abstract_unix_socket); #endif BIT(tls_upgraded); - BIT(sock_accepted); /* TRUE if the SECONDARYSOCKET was created with - accept() */ + BIT(sock_accepted); /* TRUE if the SECONDARYSOCKET was created with + accept() */ BIT(parallel_connect); /* set TRUE when a parallel connect attempt has started (happy eyeballs) */ - BIT(aborted); /* connection was aborted, e.g. in unclean state */ + BIT(aborted); /* connection was aborted, e.g. in unclean state */ BIT(shutdown_handler); /* connection shutdown: handler shut down */ BIT(shutdown_filters); /* connection shutdown: filters shut down */ - BIT(in_cpool); /* connection is kept in a connection pool */ + BIT(in_cpool); /* connection is kept in a connection pool */ }; struct hostname { @@ -573,33 +570,33 @@ struct hostname { * Flags on the keepon member of the Curl_transfer_keeper */ -#define KEEP_NONE 0 -#define KEEP_RECV (1<<0) /* there is or may be data to read */ -#define KEEP_SEND (1<<1) /* there is or may be data to write */ -#define KEEP_RECV_HOLD (1<<2) /* when set, no reading should be done but there - might still be data to read */ -#define KEEP_SEND_HOLD (1<<3) /* when set, no writing should be done but there - might still be data to write */ -#define KEEP_RECV_PAUSE (1<<4) /* reading is paused */ -#define KEEP_SEND_PAUSE (1<<5) /* writing is paused */ +#define KEEP_NONE 0 +#define KEEP_RECV (1 << 0) /* there is or may be data to read */ +#define KEEP_SEND (1 << 1) /* there is or may be data to write */ +#define KEEP_RECV_HOLD \ + (1 << 2) /* when set, no reading should be done but there \ + might still be data to read */ +#define KEEP_SEND_HOLD \ + (1 << 3) /* when set, no writing should be done but there \ + might still be data to write */ +#define KEEP_RECV_PAUSE (1 << 4) /* reading is paused */ +#define KEEP_SEND_PAUSE (1 << 5) /* writing is paused */ /* KEEP_SEND_TIMED is set when the transfer should attempt sending * at timer (or other) events. A transfer waiting on a timer will - * remove KEEP_SEND to suppress POLLOUTs of the connection. - * Adding KEEP_SEND_TIMED will then attempt to send whenever the transfer - * enters the "readwrite" loop, e.g. when a timer fires. - * This is used in HTTP for 'Expect: 100-continue' waiting. */ -#define KEEP_SEND_TIMED (1<<6) + * remove KEEP_SEND to suppress POLLOUTs of the connection. + * Adding KEEP_SEND_TIMED will then attempt to send whenever the transfer + * enters the "readwrite" loop, e.g. when a timer fires. + * This is used in HTTP for 'Expect: 100-continue' waiting. */ +#define KEEP_SEND_TIMED (1 << 6) #define KEEP_RECVBITS (KEEP_RECV | KEEP_RECV_HOLD | KEEP_RECV_PAUSE) #define KEEP_SENDBITS (KEEP_SEND | KEEP_SEND_HOLD | KEEP_SEND_PAUSE) /* transfer wants to send is not PAUSE or HOLD */ -#define CURL_WANT_SEND(data) \ - (((data)->req.keepon & KEEP_SENDBITS) == KEEP_SEND) +#define CURL_WANT_SEND(data) (((data)->req.keepon & KEEP_SENDBITS) == KEEP_SEND) /* transfer receive is not on PAUSE or HOLD */ -#define CURL_WANT_RECV(data) \ - (((data)->req.keepon & KEEP_RECVBITS) == KEEP_RECV) +#define CURL_WANT_RECV(data) (((data)->req.keepon & KEEP_RECVBITS) == KEEP_RECV) #if defined(CURLRES_ASYNCH) || !defined(CURL_DISABLE_DOH) #define USE_CURL_ASYNC @@ -616,7 +613,7 @@ struct Curl_async { #endif -#define FIRSTSOCKET 0 +#define FIRSTSOCKET 0 #define SECONDARYSOCKET 1 /* Polling requested by an easy handle. @@ -633,7 +630,7 @@ struct easy_pollset { */ struct Curl_handler { - const char *scheme; /* URL scheme name in lowercase */ + const char *scheme; /* URL scheme name in lowercase */ /* Complement to setup_connection_internals(). This is done before the transfer "owns" the connection. */ @@ -664,24 +661,24 @@ struct Curl_handler { /* Called from the multi interface during the PROTOCONNECT phase, and it should then return a proper fd set */ - int (*proto_getsock)(struct Curl_easy *data, - struct connectdata *conn, curl_socket_t *socks); + int (*proto_getsock)(struct Curl_easy *data, struct connectdata *conn, + curl_socket_t *socks); /* Called from the multi interface during the DOING phase, and it should then return a proper fd set */ - int (*doing_getsock)(struct Curl_easy *data, - struct connectdata *conn, curl_socket_t *socks); + int (*doing_getsock)(struct Curl_easy *data, struct connectdata *conn, + curl_socket_t *socks); /* Called from the multi interface during the DO_MORE phase, and it should then return a proper fd set */ - int (*domore_getsock)(struct Curl_easy *data, - struct connectdata *conn, curl_socket_t *socks); + int (*domore_getsock)(struct Curl_easy *data, struct connectdata *conn, + curl_socket_t *socks); /* Called from the multi interface during the DO_DONE, PERFORM and WAITPERFORM phases, and it should then return a proper fd set. Not setting this will make libcurl use the generic default one. */ - int (*perform_getsock)(struct Curl_easy *data, - struct connectdata *conn, curl_socket_t *socks); + int (*perform_getsock)(struct Curl_easy *data, struct connectdata *conn, + curl_socket_t *socks); /* This function *MAY* be set to a protocol-dependent function that is run * by the curl_disconnect(), as a step in the disconnection. If the handler @@ -701,8 +698,8 @@ struct Curl_handler { /* If used, this function gets called from transfer.c to allow the protocol to do extra handling in writing a single response header line to the client. */ - CURLcode (*write_resp_hd)(struct Curl_easy *data, - const char *hd, size_t hdlen, bool is_eos); + CURLcode (*write_resp_hd)(struct Curl_easy *data, const char *hd, + size_t hdlen, bool is_eos); /* This function can perform various checks on the connection. See CONNCHECK_* for more information about the checks that can be performed, @@ -714,49 +711,54 @@ struct Curl_handler { /* attach() attaches this transfer to this connection */ void (*attach)(struct Curl_easy *data, struct connectdata *conn); - int defport; /* Default port. */ - curl_prot_t protocol; /* See CURLPROTO_* - this needs to be the single - specific protocol bit */ - curl_prot_t family; /* single bit for protocol family; basically the - non-TLS name of the protocol this is */ - unsigned int flags; /* Extra particular characteristics, see PROTOPT_* */ - + int defport; /* Default port. */ + curl_prot_t protocol; /* See CURLPROTO_* - this needs to be the single + specific protocol bit */ + curl_prot_t family; /* single bit for protocol family; basically the + non-TLS name of the protocol this is */ + unsigned int flags; /* Extra particular characteristics, see PROTOPT_* */ }; -#define PROTOPT_NONE 0 /* nothing extra */ -#define PROTOPT_SSL (1<<0) /* uses SSL */ -#define PROTOPT_DUAL (1<<1) /* this protocol uses two connections */ -#define PROTOPT_CLOSEACTION (1<<2) /* need action before socket close */ +#define PROTOPT_NONE 0 /* nothing extra */ +#define PROTOPT_SSL (1 << 0) /* uses SSL */ +#define PROTOPT_DUAL (1 << 1) /* this protocol uses two connections */ +#define PROTOPT_CLOSEACTION (1 << 2) /* need action before socket close */ /* some protocols will have to call the underlying functions without regard to what exact state the socket signals. IE even if the socket says "readable", the send function might need to be called while uploading, or vice versa. */ -#define PROTOPT_DIRLOCK (1<<3) -#define PROTOPT_NONETWORK (1<<4) /* protocol does not use the network! */ -#define PROTOPT_NEEDSPWD (1<<5) /* needs a password, and if none is set it - gets a default */ -#define PROTOPT_NOURLQUERY (1<<6) /* protocol cannot handle - URL query strings (?foo=bar) ! */ -#define PROTOPT_CREDSPERREQUEST (1<<7) /* requires login credentials per - request instead of per connection */ -#define PROTOPT_ALPN (1<<8) /* set ALPN for this */ +#define PROTOPT_DIRLOCK (1 << 3) +#define PROTOPT_NONETWORK (1 << 4) /* protocol does not use the network! */ +#define PROTOPT_NEEDSPWD \ + (1 << 5) /* needs a password, and if none is set it \ + gets a default */ +#define PROTOPT_NOURLQUERY \ + (1 << 6) /* protocol cannot handle \ + URL query strings (?foo=bar) ! */ +#define PROTOPT_CREDSPERREQUEST \ + (1 << 7) /* requires login credentials per \ + request instead of per connection */ +#define PROTOPT_ALPN (1 << 8) /* set ALPN for this */ /* (1<<9) was PROTOPT_STREAM, now free */ -#define PROTOPT_URLOPTIONS (1<<10) /* allow options part in the userinfo field - of the URL */ -#define PROTOPT_PROXY_AS_HTTP (1<<11) /* allow this non-HTTP scheme over a - HTTP proxy as HTTP proxies may know - this protocol and act as a gateway */ -#define PROTOPT_WILDCARD (1<<12) /* protocol supports wildcard matching */ -#define PROTOPT_USERPWDCTRL (1<<13) /* Allow "control bytes" (< 32 ASCII) in - username and password */ -#define PROTOPT_NOTCPPROXY (1<<14) /* this protocol cannot proxy over TCP */ - -#define CONNCHECK_NONE 0 /* No checks */ -#define CONNCHECK_ISDEAD (1<<0) /* Check if the connection is dead. */ -#define CONNCHECK_KEEPALIVE (1<<1) /* Perform any keepalive function. */ - -#define CONNRESULT_NONE 0 /* No extra information. */ -#define CONNRESULT_DEAD (1<<0) /* The connection is dead. */ +#define PROTOPT_URLOPTIONS \ + (1 << 10) /* allow options part in the userinfo field \ + of the URL */ +#define PROTOPT_PROXY_AS_HTTP \ + (1 << 11) /* allow this non-HTTP scheme over a \ + HTTP proxy as HTTP proxies may know \ + this protocol and act as a gateway */ +#define PROTOPT_WILDCARD (1 << 12) /* protocol supports wildcard matching */ +#define PROTOPT_USERPWDCTRL \ + (1 << 13) /* Allow "control bytes" (< 32 ASCII) in \ + username and password */ +#define PROTOPT_NOTCPPROXY (1 << 14) /* this protocol cannot proxy over TCP */ + +#define CONNCHECK_NONE 0 /* No checks */ +#define CONNCHECK_ISDEAD (1 << 0) /* Check if the connection is dead. */ +#define CONNCHECK_KEEPALIVE (1 << 1) /* Perform any keepalive function. */ + +#define CONNRESULT_NONE 0 /* No extra information. */ +#define CONNRESULT_DEAD (1 << 0) /* The connection is dead. */ struct ip_quadruple { char remote_ip[MAX_IPADR_LEN]; @@ -770,8 +772,8 @@ struct proxy_info { int port; unsigned char proxytype; /* curl_proxytype: what kind of proxy that is in use */ - char *user; /* proxy username string, allocated */ - char *passwd; /* proxy password string, allocated */ + char *user; /* proxy username string, allocated */ + char *passwd; /* proxy password string, allocated */ }; struct ldapconninfo; @@ -800,8 +802,8 @@ struct connectdata { /**** Fields set when inited and not modified again */ curl_off_t connection_id; /* Contains a unique number to make it easier to track the connections in the log output */ - char *destination; /* string carrying normalized hostname+port+scope */ - size_t destination_len; /* strlen(destination) + 1 */ + char *destination; /* string carrying normalized hostname+port+scope */ + size_t destination_len; /* strlen(destination) + 1 */ /* 'dns_entry' is the particular host we use. This points to an entry in the DNS cache and it will not get pruned while locked. It gets unlocked in @@ -814,8 +816,8 @@ struct connectdata { const struct Curl_sockaddr_ex *remote_addr; struct hostname host; - char *hostname_resolve; /* hostname to resolve to address, allocated */ - char *secondaryhostname; /* secondary socket hostname (ftp) */ + char *hostname_resolve; /* hostname to resolve to address, allocated */ + char *secondaryhostname; /* secondary socket hostname (ftp) */ struct hostname conn_to_host; /* the host to connect to. valid only if bits.conn_to_host is set */ #ifndef CURL_DISABLE_PROXY @@ -830,22 +832,22 @@ struct connectdata { these are updated with data which comes directly from the socket. */ struct ip_quadruple primary; struct ip_quadruple secondary; - char *user; /* username string, allocated */ - char *passwd; /* password string, allocated */ - char *options; /* options string, allocated */ - char *sasl_authzid; /* authorization identity string, allocated */ - char *oauth_bearer; /* OAUTH2 bearer, allocated */ - struct curltime now; /* "current" time */ - struct curltime created; /* creation time */ + char *user; /* username string, allocated */ + char *passwd; /* password string, allocated */ + char *options; /* options string, allocated */ + char *sasl_authzid; /* authorization identity string, allocated */ + char *oauth_bearer; /* OAUTH2 bearer, allocated */ + struct curltime now; /* "current" time */ + struct curltime created; /* creation time */ struct curltime lastused; /* when returned to the connection poolas idle */ - curl_socket_t sock[2]; /* two sockets, the second is used for the data - transfer when doing FTP */ + curl_socket_t sock[2]; /* two sockets, the second is used for the data + transfer when doing FTP */ Curl_recv *recv[2]; Curl_send *send[2]; struct Curl_cfilter *cfilter[2]; /* connection filters */ struct { struct curltime start[2]; /* when filter shutdown started */ - unsigned int timeout_ms; /* 0 means no timeout */ + unsigned int timeout_ms; /* 0 means no timeout */ } shutdown; /* Last pollset used in connection shutdown. Used to detect changes * for multi_socket API. */ @@ -855,7 +857,7 @@ struct connectdata { #ifndef CURL_DISABLE_PROXY struct ssl_primary_config proxy_ssl_config; #endif - struct ConnectBits bits; /* various state-flags for this connection */ + struct ConnectBits bits; /* various state-flags for this connection */ const struct Curl_handler *handler; /* Connection's protocol handler */ const struct Curl_handler *given; /* The protocol first given */ @@ -867,15 +869,15 @@ struct connectdata { /**** curl_get() phase fields */ - curl_socket_t sockfd; /* socket to read from or CURL_SOCKET_BAD */ + curl_socket_t sockfd; /* socket to read from or CURL_SOCKET_BAD */ curl_socket_t writesockfd; /* socket to write to, it may very well be the same we read from. CURL_SOCKET_BAD disables */ #ifdef HAVE_GSSAPI - BIT(sec_complete); /* if Kerberos is enabled for this connection */ + BIT(sec_complete); /* if Kerberos is enabled for this connection */ unsigned char command_prot; /* enum protection_level */ - unsigned char data_prot; /* enum protection_level */ + unsigned char data_prot; /* enum protection_level */ unsigned char request_data_prot; /* enum protection_level */ size_t buffer_size; struct krb5buffer in_buffer; @@ -884,11 +886,11 @@ struct connectdata { struct sockaddr_in local_addr; #endif -#if defined(USE_KERBEROS5) /* Consider moving some of the above GSS-API */ - struct kerberos5data krb5; /* variables into the structure definition, */ -#endif /* however, some of them are ftp specific. */ +#if defined(USE_KERBEROS5) /* Consider moving some of the above GSS-API */ + struct kerberos5data krb5; /* variables into the structure definition, */ +#endif /* however, some of them are ftp specific. */ - struct Curl_llist easyq; /* List of easy handles using this connection */ + struct Curl_llist easyq; /* List of easy handles using this connection */ /*************** Request - specific items ************/ #if defined(USE_WINDOWS_SSPI) && defined(SECPKG_ATTR_ENDPOINT_BINDINGS) @@ -903,9 +905,9 @@ struct connectdata { curlntlm http_ntlm_state; curlntlm proxy_ntlm_state; - struct ntlmdata ntlm; /* NTLM differs from other authentication schemes - because it authenticates connections, not - single requests! */ + struct ntlmdata ntlm; /* NTLM differs from other authentication schemes + because it authenticates connections, not + single requests! */ struct ntlmdata proxyntlm; /* NTLM data for proxy */ #endif @@ -914,7 +916,7 @@ struct connectdata { curlnegotiate proxy_negotiate_state; struct negotiatedata negotiate; /* state data for host Negotiate auth */ - struct negotiatedata proxyneg; /* state data for proxy Negotiate auth */ + struct negotiatedata proxyneg; /* state data for proxy Negotiate auth */ #endif union { @@ -954,7 +956,7 @@ struct connectdata { #ifdef USE_WEBSOCKETS struct websocket *ws; #endif - unsigned int unused:1; /* avoids empty union */ + unsigned int unused : 1; /* avoids empty union */ } proto; #ifdef USE_UNIX_SOCKETS @@ -971,16 +973,16 @@ struct connectdata { wrong connections. */ char *localdev; unsigned short localportrange; - int waitfor; /* current READ/WRITE bits to wait for */ + int waitfor; /* current READ/WRITE bits to wait for */ #if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI) int socks5_gssapi_enctype; #endif /* The field below gets set in connect.c:connecthost() */ - int remote_port; /* the remote port, not the proxy port! */ + int remote_port; /* the remote port, not the proxy port! */ int conn_to_port; /* the remote port to connect to. valid only if bits.conn_to_port is set */ #ifdef USE_IPV6 - unsigned int scope_id; /* Scope id for IPv6 */ + unsigned int scope_id; /* Scope id for IPv6 */ #endif unsigned short localport; unsigned short secondary_port; /* secondary socket remote port to connect to @@ -990,23 +992,22 @@ struct connectdata { #ifndef CURL_DISABLE_PROXY unsigned char proxy_alpn; /* APLN of proxy tunnel, CURL_HTTP_VERSION* */ #endif - unsigned char transport; /* one of the TRNSPRT_* defines */ - unsigned char ip_version; /* copied from the Curl_easy at creation time */ + unsigned char transport; /* one of the TRNSPRT_* defines */ + unsigned char ip_version; /* copied from the Curl_easy at creation time */ unsigned char httpversion; /* the HTTP version*10 reported by the server */ unsigned char connect_only; unsigned char gssapi_delegation; /* inherited from set.gssapi_delegation */ }; #ifndef CURL_DISABLE_PROXY -#define CURL_CONN_HOST_DISPNAME(c) \ - ((c)->bits.socksproxy ? (c)->socks_proxy.host.dispname : \ - (c)->bits.httpproxy ? (c)->http_proxy.host.dispname : \ - (c)->bits.conn_to_host ? (c)->conn_to_host.dispname : \ - (c)->host.dispname) +#define CURL_CONN_HOST_DISPNAME(c) \ + ((c)->bits.socksproxy ? (c)->socks_proxy.host.dispname \ + : (c)->bits.httpproxy ? (c)->http_proxy.host.dispname \ + : (c)->bits.conn_to_host ? (c)->conn_to_host.dispname \ + : (c)->host.dispname) #else #define CURL_CONN_HOST_DISPNAME(c) \ - (c)->bits.conn_to_host ? (c)->conn_to_host.dispname : \ - (c)->host.dispname + (c)->bits.conn_to_host ? (c)->conn_to_host.dispname : (c)->host.dispname #endif /* The end of connectdata. */ @@ -1016,19 +1017,19 @@ struct connectdata { * All variables in this struct must be initialized/reset in Curl_initinfo(). */ struct PureInfo { - int httpcode; /* Recent HTTP, FTP, RTSP or SMTP response code */ + int httpcode; /* Recent HTTP, FTP, RTSP or SMTP response code */ int httpproxycode; /* response code from proxy when received separate */ - int httpversion; /* the http version number X.Y = X*10+Y */ - time_t filetime; /* If requested, this is might get set. Set to -1 if the - time was unretrievable. */ - curl_off_t request_size; /* the amount of bytes sent in the request(s) */ + int httpversion; /* the http version number X.Y = X*10+Y */ + time_t filetime; /* If requested, this is might get set. Set to -1 if the + time was unretrievable. */ + curl_off_t request_size; /* the amount of bytes sent in the request(s) */ unsigned long proxyauthavail; /* what proxy auth types were announced */ unsigned long httpauthavail; /* what host auth types were announced */ - long numconnects; /* how many new connection did libcurl created */ - char *contenttype; /* the content type of the object */ + long numconnects; /* how many new connection did libcurl created */ + char *contenttype; /* the content type of the object */ char *wouldredirect; /* URL this would have been redirected to if asked to */ - curl_off_t retry_after; /* info from Retry-After: header */ - unsigned int header_size; /* size of read header(s) in bytes */ + curl_off_t retry_after; /* info from Retry-After: header */ + unsigned int header_size; /* size of read header(s) in bytes */ /* PureInfo primary ip_quadruple is copied over from the connectdata struct in order to allow curl_easy_getinfo() to return this information @@ -1037,16 +1038,16 @@ struct PureInfo { session handle without disturbing information which is still alive, and that might be reused, in the connection pool. */ struct ip_quadruple primary; - int conn_remote_port; /* this is the "remote port", which is the port - number of the used URL, independent of proxy or - not */ + int conn_remote_port; /* this is the "remote port", which is the port + number of the used URL, independent of proxy or + not */ const char *conn_scheme; unsigned int conn_protocol; struct curl_certinfo certs; /* info about the certs. Asked for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */ CURLproxycode pxcode; - BIT(timecond); /* set to TRUE if the time condition did not match, which - thus made the document NOT get fetched */ + BIT(timecond); /* set to TRUE if the time condition did not match, which + thus made the document NOT get fetched */ BIT(used_proxy); /* the transfer used a proxy */ }; @@ -1057,8 +1058,8 @@ struct pgrs_measure { struct pgrs_dir { curl_off_t total_size; /* total expected bytes */ - curl_off_t cur_size; /* transferred bytes so far */ - curl_off_t speed; /* bytes per second transferred */ + curl_off_t cur_size; /* transferred bytes so far */ + curl_off_t speed; /* bytes per second transferred */ struct pgrs_measure limit; }; @@ -1091,41 +1092,41 @@ struct Progress { #define CURR_TIME (5 + 1) /* 6 entries for 5 seconds */ - curl_off_t speeder[ CURR_TIME ]; - struct curltime speeder_time[ CURR_TIME ]; + curl_off_t speeder[CURR_TIME]; + struct curltime speeder_time[CURR_TIME]; int speeder_c; - BIT(callback); /* set when progress callback is used */ + BIT(callback); /* set when progress callback is used */ BIT(is_t_startransfer_set); }; typedef enum { - RTSPREQ_NONE, /* first in list */ - RTSPREQ_OPTIONS, - RTSPREQ_DESCRIBE, - RTSPREQ_ANNOUNCE, - RTSPREQ_SETUP, - RTSPREQ_PLAY, - RTSPREQ_PAUSE, - RTSPREQ_TEARDOWN, - RTSPREQ_GET_PARAMETER, - RTSPREQ_SET_PARAMETER, - RTSPREQ_RECORD, - RTSPREQ_RECEIVE, - RTSPREQ_LAST /* last in list */ + RTSPREQ_NONE, /* first in list */ + RTSPREQ_OPTIONS, + RTSPREQ_DESCRIBE, + RTSPREQ_ANNOUNCE, + RTSPREQ_SETUP, + RTSPREQ_PLAY, + RTSPREQ_PAUSE, + RTSPREQ_TEARDOWN, + RTSPREQ_GET_PARAMETER, + RTSPREQ_SET_PARAMETER, + RTSPREQ_RECORD, + RTSPREQ_RECEIVE, + RTSPREQ_LAST /* last in list */ } Curl_RtspReq; struct auth { - unsigned long want; /* Bitmask set to the authentication methods wanted by - app (with CURLOPT_HTTPAUTH or CURLOPT_PROXYAUTH). */ + unsigned long want; /* Bitmask set to the authentication methods wanted by + app (with CURLOPT_HTTPAUTH or CURLOPT_PROXYAUTH). */ unsigned long picked; unsigned long avail; /* Bitmask for what the server reports to support for this resource */ - BIT(done); /* TRUE when the auth phase is done and ready to do the - actual request */ - BIT(multipass); /* TRUE if this is not yet authenticated but within the - auth multipass negotiation */ - BIT(iestyle); /* TRUE if digest should be done IE-style or FALSE if it - should be RFC compliant */ + BIT(done); /* TRUE when the auth phase is done and ready to do the + actual request */ + BIT(multipass); /* TRUE if this is not yet authenticated but within the + auth multipass negotiation */ + BIT(iestyle); /* TRUE if digest should be done IE-style or FALSE if it + should be RFC compliant */ }; #ifdef USE_NGHTTP2 @@ -1157,8 +1158,8 @@ typedef enum { EXPIRE_100_TIMEOUT, EXPIRE_ASYNC_NAME, EXPIRE_CONNECTTIMEOUT, - EXPIRE_DNS_PER_NAME, /* family1 */ - EXPIRE_DNS_PER_NAME2, /* family2 */ + EXPIRE_DNS_PER_NAME, /* family1 */ + EXPIRE_DNS_PER_NAME2, /* family2 */ EXPIRE_HAPPY_EYEBALLS_DNS, /* See asyn-ares.c */ EXPIRE_HAPPY_EYEBALLS, EXPIRE_MULTI_PENDING, @@ -1172,7 +1173,6 @@ typedef enum { EXPIRE_LAST /* not an actual timer, used as a marker only */ } expire_id; - typedef enum { TRAILERS_NONE, TRAILERS_INITIALIZED, @@ -1180,7 +1180,6 @@ typedef enum { TRAILERS_DONE } trailers_state; - /* * One instance for each timeout an easy handle can set. */ @@ -1206,14 +1205,14 @@ struct UrlState { /* buffers to store authentication data in, as parsed from input options */ struct curltime keeps_speed; /* for the progress meter really */ - curl_off_t lastconnect_id; /* The last connection, -1 if undefined */ - curl_off_t recent_conn_id; /* The most recent connection used, might no - * longer exist */ - struct dynbuf headerb; /* buffer to store headers in */ + curl_off_t lastconnect_id; /* The last connection, -1 if undefined */ + curl_off_t recent_conn_id; /* The most recent connection used, might no + * longer exist */ + struct dynbuf headerb; /* buffer to store headers in */ struct curl_slist *hstslist; /* list of HSTS files set by curl_easy_setopt(HSTS) calls */ - curl_off_t current_speed; /* the ProgressShow() function sets this, - bytes / second */ + curl_off_t current_speed; /* the ProgressShow() function sets this, + bytes / second */ /* hostname, port number and protocol of the first (not followed) request. if set, this should be the hostname that we will sent authorization to, @@ -1223,12 +1222,12 @@ struct UrlState { int first_remote_port; curl_prot_t first_remote_protocol; - int retrycount; /* number of retries on a new connection */ + int retrycount; /* number of retries on a new connection */ struct Curl_ssl_session *session; /* array of 'max_ssl_sessions' size */ long sessionage; /* number of the most recent session */ - int os_errno; /* filled in with errno whenever an error occurs */ + int os_errno; /* filled in with errno whenever an error occurs */ long followlocation; /* redirect counter */ - int requests; /* request counter: redirects + authentication retakes */ + int requests; /* request counter: redirects + authentication retakes */ #ifdef HAVE_SIGNAL /* storage for the previous bag^H^H^HSIGPIPE signal handler :-) */ void (*prev_signal)(int sig); @@ -1240,16 +1239,16 @@ struct UrlState { struct auth authhost; /* auth details for host */ struct auth authproxy; /* auth details for proxy */ #ifdef USE_CURL_ASYNC - struct Curl_async async; /* asynchronous name resolver data */ + struct Curl_async async; /* asynchronous name resolver data */ #endif #if defined(USE_OPENSSL) /* void instead of ENGINE to avoid bleeding OpenSSL into this header */ void *engine; -#endif /* USE_OPENSSL */ - struct curltime expiretime; /* set this with Curl_expire() only */ - struct Curl_tree timenode; /* for the splay stuff */ - struct Curl_llist timeoutlist; /* list of pending timeouts */ +#endif /* USE_OPENSSL */ + struct curltime expiretime; /* set this with Curl_expire() only */ + struct Curl_tree timenode; /* for the splay stuff */ + struct Curl_llist timeoutlist; /* list of pending timeouts */ struct time_node expires[EXPIRE_LAST]; /* nodes for each expire type */ /* a place to store the most recently set (S)FTP entrypath */ @@ -1262,7 +1261,7 @@ struct UrlState { /* This RTSP state information survives requests and connections */ long rtsp_next_client_CSeq; /* the session's next client CSeq */ long rtsp_next_server_CSeq; /* the session's next server CSeq */ - long rtsp_CSeq_recv; /* most recent CSeq received */ + long rtsp_CSeq_recv; /* most recent CSeq received */ unsigned char rtp_channel_mask[32]; /* for the correctness checking of the interleaved data */ @@ -1276,10 +1275,10 @@ struct UrlState { curl_read_callback fread_func; /* read callback/function */ void *in; /* CURLOPT_READDATA */ - CURLU *uh; /* URL handle for the current parsed URL */ + CURLU *uh; /* URL handle for the current parsed URL */ struct urlpieces up; - char *url; /* work URL, copied from UserDefined */ - char *referer; /* referer string */ + char *url; /* work URL, copied from UserDefined */ + char *referer; /* referer string */ struct curl_slist *resolve; /* set to point to the set.resolve list when this should be dealt with in pretransfer */ #ifndef CURL_DISABLE_HTTP @@ -1289,20 +1288,20 @@ struct UrlState { demand */ #endif size_t trailers_bytes_sent; - struct dynbuf trailers_buf; /* a buffer containing the compiled trailing - headers */ - struct Curl_llist httphdrs; /* received headers */ + struct dynbuf trailers_buf; /* a buffer containing the compiled trailing + headers */ + struct Curl_llist httphdrs; /* received headers */ struct curl_header headerout[2]; /* for external purposes */ struct Curl_header_store *prevhead; /* the latest added header */ - trailers_state trailers_state; /* whether we are sending trailers - and what stage are we at */ + trailers_state trailers_state; /* whether we are sending trailers + and what stage are we at */ #endif #ifndef CURL_DISABLE_COOKIES struct curl_slist *cookielist; /* list of cookie files set by curl_easy_setopt(COOKIEFILE) calls */ #endif #ifdef USE_HYPER - bool hconnect; /* set if a CONNECT request */ + bool hconnect; /* set if a CONNECT request */ CURLcode hresult; /* used to pass return codes back from hyper callbacks */ #endif @@ -1337,12 +1336,12 @@ struct UrlState { #endif } aptr; - unsigned char httpwant; /* when non-zero, a specific HTTP version requested - to be used in the library's request(s) */ + unsigned char httpwant; /* when non-zero, a specific HTTP version requested + to be used in the library's request(s) */ unsigned char httpversion; /* the lowest HTTP version*10 reported by any server involved in this request */ - unsigned char httpreq; /* Curl_HttpReq; what kind of HTTP request (if any) - is this */ + unsigned char httpreq; /* Curl_HttpReq; what kind of HTTP request (if any) + is this */ unsigned char select_bits; /* != 0 -> bitmask of socket events for this transfer overriding anything the socket may report */ @@ -1352,17 +1351,17 @@ struct UrlState { BIT(multi_owned_by_easy); BIT(this_is_a_follow); /* this is a followed Location: request */ - BIT(refused_stream); /* this was refused, try again */ - BIT(errorbuf); /* Set to TRUE if the error buffer is already filled in. - This must be set to FALSE every time _easy_perform() is - called. */ - BIT(allow_port); /* Is set.use_port allowed to take effect or not. This - is always set TRUE when curl_easy_perform() is called. */ + BIT(refused_stream); /* this was refused, try again */ + BIT(errorbuf); /* Set to TRUE if the error buffer is already filled in. + This must be set to FALSE every time _easy_perform() is + called. */ + BIT(allow_port); /* Is set.use_port allowed to take effect or not. This + is always set TRUE when curl_easy_perform() is called. */ BIT(authproblem); /* TRUE if there is some problem authenticating */ /* set after initial USER failure, to prevent an authentication loop */ BIT(wildcardmatch); /* enable wildcard matching */ - BIT(disableexpect); /* TRUE if Expect: is disabled due to a previous - 417 response */ + BIT(disableexpect); /* TRUE if Expect: is disabled due to a previous + 417 response */ BIT(use_range); BIT(rangestringalloc); /* the range string is malloc()'ed */ BIT(done); /* set to FALSE when Curl_init_do() is called and set to TRUE @@ -1371,17 +1370,17 @@ struct UrlState { #ifndef CURL_DISABLE_COOKIES BIT(cookie_engine); #endif - BIT(prefer_ascii); /* ASCII rather than binary */ + BIT(prefer_ascii); /* ASCII rather than binary */ #ifdef CURL_LIST_ONLY_PROTOCOL - BIT(list_only); /* list directory contents */ + BIT(list_only); /* list directory contents */ #endif - BIT(url_alloc); /* URL string is malloc()'ed */ - BIT(referer_alloc); /* referer string is malloc()ed */ + BIT(url_alloc); /* URL string is malloc()'ed */ + BIT(referer_alloc); /* referer string is malloc()ed */ BIT(wildcard_resolve); /* Set to true if any resolve change is a wildcard */ - BIT(upload); /* upload request */ - BIT(internal); /* internal: true if this easy handle was created for - internal use and the user does not have ownership of the - handle. */ + BIT(upload); /* upload request */ + BIT(internal); /* internal: true if this easy handle was created for + internal use and the user does not have ownership of the + handle. */ }; /* @@ -1393,76 +1392,76 @@ struct UrlState { * Character pointer fields point to dynamic storage, unless otherwise stated. */ -struct Curl_multi; /* declared in multihandle.c */ +struct Curl_multi; /* declared in multihandle.c */ enum dupstring { - STRING_CERT, /* client certificate filename */ - STRING_CERT_TYPE, /* format for certificate (default: PEM)*/ - STRING_KEY, /* private key filename */ - STRING_KEY_PASSWD, /* plain text private key password */ - STRING_KEY_TYPE, /* format for private key (default: PEM) */ - STRING_SSL_CAPATH, /* CA directory name (does not work on Windows) */ - STRING_SSL_CAFILE, /* certificate file to verify peer against */ + STRING_CERT, /* client certificate filename */ + STRING_CERT_TYPE, /* format for certificate (default: PEM)*/ + STRING_KEY, /* private key filename */ + STRING_KEY_PASSWD, /* plain text private key password */ + STRING_KEY_TYPE, /* format for private key (default: PEM) */ + STRING_SSL_CAPATH, /* CA directory name (does not work on Windows) */ + STRING_SSL_CAFILE, /* certificate file to verify peer against */ STRING_SSL_PINNEDPUBLICKEY, /* public key file to verify peer against */ - STRING_SSL_CIPHER_LIST, /* list of ciphers to use */ - STRING_SSL_CIPHER13_LIST, /* list of TLS 1.3 ciphers to use */ - STRING_SSL_CRLFILE, /* crl file to check certificate */ - STRING_SSL_ISSUERCERT, /* issuer cert file to check certificate */ - STRING_SERVICE_NAME, /* Service name */ + STRING_SSL_CIPHER_LIST, /* list of ciphers to use */ + STRING_SSL_CIPHER13_LIST, /* list of TLS 1.3 ciphers to use */ + STRING_SSL_CRLFILE, /* crl file to check certificate */ + STRING_SSL_ISSUERCERT, /* issuer cert file to check certificate */ + STRING_SERVICE_NAME, /* Service name */ #ifndef CURL_DISABLE_PROXY - STRING_CERT_PROXY, /* client certificate filename */ - STRING_CERT_TYPE_PROXY, /* format for certificate (default: PEM)*/ - STRING_KEY_PROXY, /* private key filename */ + STRING_CERT_PROXY, /* client certificate filename */ + STRING_CERT_TYPE_PROXY, /* format for certificate (default: PEM)*/ + STRING_KEY_PROXY, /* private key filename */ STRING_KEY_PASSWD_PROXY, /* plain text private key password */ - STRING_KEY_TYPE_PROXY, /* format for private key (default: PEM) */ + STRING_KEY_TYPE_PROXY, /* format for private key (default: PEM) */ STRING_SSL_CAPATH_PROXY, /* CA directory name (does not work on Windows) */ STRING_SSL_CAFILE_PROXY, /* certificate file to verify peer against */ STRING_SSL_PINNEDPUBLICKEY_PROXY, /* public key file to verify proxy */ - STRING_SSL_CIPHER_LIST_PROXY, /* list of ciphers to use */ - STRING_SSL_CIPHER13_LIST_PROXY, /* list of TLS 1.3 ciphers to use */ - STRING_SSL_CRLFILE_PROXY, /* crl file to check certificate */ - STRING_SSL_ISSUERCERT_PROXY, /* issuer cert file to check certificate */ - STRING_PROXY_SERVICE_NAME, /* Proxy service name */ + STRING_SSL_CIPHER_LIST_PROXY, /* list of ciphers to use */ + STRING_SSL_CIPHER13_LIST_PROXY, /* list of TLS 1.3 ciphers to use */ + STRING_SSL_CRLFILE_PROXY, /* crl file to check certificate */ + STRING_SSL_ISSUERCERT_PROXY, /* issuer cert file to check certificate */ + STRING_PROXY_SERVICE_NAME, /* Proxy service name */ #endif #ifndef CURL_DISABLE_COOKIES - STRING_COOKIE, /* HTTP cookie string to send */ - STRING_COOKIEJAR, /* dump all cookies to this file */ + STRING_COOKIE, /* HTTP cookie string to send */ + STRING_COOKIEJAR, /* dump all cookies to this file */ #endif - STRING_CUSTOMREQUEST, /* HTTP/FTP/RTSP request/method to use */ + STRING_CUSTOMREQUEST, /* HTTP/FTP/RTSP request/method to use */ STRING_DEFAULT_PROTOCOL, /* Protocol to use when the URL does not specify */ - STRING_DEVICE, /* local network interface/address to use */ - STRING_INTERFACE, /* local network interface to use */ - STRING_BINDHOST, /* local address to use */ - STRING_ENCODING, /* Accept-Encoding string */ + STRING_DEVICE, /* local network interface/address to use */ + STRING_INTERFACE, /* local network interface to use */ + STRING_BINDHOST, /* local address to use */ + STRING_ENCODING, /* Accept-Encoding string */ #ifndef CURL_DISABLE_FTP - STRING_FTP_ACCOUNT, /* ftp account data */ + STRING_FTP_ACCOUNT, /* ftp account data */ STRING_FTP_ALTERNATIVE_TO_USER, /* command to send if USER/PASS fails */ - STRING_FTPPORT, /* port to send with the FTP PORT command */ + STRING_FTPPORT, /* port to send with the FTP PORT command */ #endif #if defined(HAVE_GSSAPI) - STRING_KRB_LEVEL, /* krb security level */ + STRING_KRB_LEVEL, /* krb security level */ #endif #ifndef CURL_DISABLE_NETRC - STRING_NETRC_FILE, /* if not NULL, use this instead of trying to find - $HOME/.netrc */ + STRING_NETRC_FILE, /* if not NULL, use this instead of trying to find + $HOME/.netrc */ #endif #ifndef CURL_DISABLE_PROXY - STRING_PROXY, /* proxy to use */ - STRING_PRE_PROXY, /* pre socks proxy to use */ -#endif - STRING_SET_RANGE, /* range, if used */ - STRING_SET_REFERER, /* custom string for the HTTP referer field */ - STRING_SET_URL, /* what original URL to work on */ - STRING_USERAGENT, /* User-Agent string */ - STRING_SSL_ENGINE, /* name of ssl engine */ - STRING_USERNAME, /* , if used */ - STRING_PASSWORD, /* , if used */ - STRING_OPTIONS, /* , if used */ + STRING_PROXY, /* proxy to use */ + STRING_PRE_PROXY, /* pre socks proxy to use */ +#endif + STRING_SET_RANGE, /* range, if used */ + STRING_SET_REFERER, /* custom string for the HTTP referer field */ + STRING_SET_URL, /* what original URL to work on */ + STRING_USERAGENT, /* User-Agent string */ + STRING_SSL_ENGINE, /* name of ssl engine */ + STRING_USERNAME, /* , if used */ + STRING_PASSWORD, /* , if used */ + STRING_OPTIONS, /* , if used */ #ifndef CURL_DISABLE_PROXY - STRING_PROXYUSERNAME, /* Proxy , if used */ - STRING_PROXYPASSWORD, /* Proxy , if used */ - STRING_NOPROXY, /* List of hosts which should not use the proxy, if - used */ + STRING_PROXYUSERNAME, /* Proxy , if used */ + STRING_PROXYPASSWORD, /* Proxy , if used */ + STRING_NOPROXY, /* List of hosts which should not use the proxy, if + used */ #endif #ifndef CURL_DISABLE_RTSP STRING_RTSP_SESSION_ID, /* Session ID to use */ @@ -1470,39 +1469,39 @@ enum dupstring { STRING_RTSP_TRANSPORT, /* Transport for this session */ #endif #ifdef USE_SSH - STRING_SSH_PRIVATE_KEY, /* path to the private key file for auth */ - STRING_SSH_PUBLIC_KEY, /* path to the public key file for auth */ - STRING_SSH_HOST_PUBLIC_KEY_MD5, /* md5 of host public key in ASCII hex */ + STRING_SSH_PRIVATE_KEY, /* path to the private key file for auth */ + STRING_SSH_PUBLIC_KEY, /* path to the public key file for auth */ + STRING_SSH_HOST_PUBLIC_KEY_MD5, /* md5 of host public key in ASCII hex */ STRING_SSH_HOST_PUBLIC_KEY_SHA256, /* sha256 of host public key in base64 */ - STRING_SSH_KNOWNHOSTS, /* filename of knownhosts file */ + STRING_SSH_KNOWNHOSTS, /* filename of knownhosts file */ #endif #ifndef CURL_DISABLE_SMTP STRING_MAIL_FROM, STRING_MAIL_AUTH, #endif #ifdef USE_TLS_SRP - STRING_TLSAUTH_USERNAME, /* TLS auth */ - STRING_TLSAUTH_PASSWORD, /* TLS auth */ + STRING_TLSAUTH_USERNAME, /* TLS auth */ + STRING_TLSAUTH_PASSWORD, /* TLS auth */ #ifndef CURL_DISABLE_PROXY STRING_TLSAUTH_USERNAME_PROXY, /* TLS auth */ STRING_TLSAUTH_PASSWORD_PROXY, /* TLS auth */ #endif #endif - STRING_BEARER, /* , if used */ + STRING_BEARER, /* , if used */ #ifdef USE_UNIX_SOCKETS - STRING_UNIX_SOCKET_PATH, /* path to Unix socket, if used */ + STRING_UNIX_SOCKET_PATH, /* path to Unix socket, if used */ #endif - STRING_TARGET, /* CURLOPT_REQUEST_TARGET */ + STRING_TARGET, /* CURLOPT_REQUEST_TARGET */ #ifndef CURL_DISABLE_DOH - STRING_DOH, /* CURLOPT_DOH_URL */ + STRING_DOH, /* CURLOPT_DOH_URL */ #endif #ifndef CURL_DISABLE_ALTSVC - STRING_ALTSVC, /* CURLOPT_ALTSVC */ + STRING_ALTSVC, /* CURLOPT_ALTSVC */ #endif #ifndef CURL_DISABLE_HSTS - STRING_HSTS, /* CURLOPT_HSTS */ + STRING_HSTS, /* CURLOPT_HSTS */ #endif - STRING_SASL_AUTHZID, /* CURLOPT_SASL_AUTHZID */ + STRING_SASL_AUTHZID, /* CURLOPT_SASL_AUTHZID */ #ifdef USE_ARES STRING_DNS_SERVERS, STRING_DNS_INTERFACE, @@ -1514,10 +1513,10 @@ enum dupstring { STRING_AWS_SIGV4, /* Parameters for V4 signature */ #endif #ifndef CURL_DISABLE_PROXY - STRING_HAPROXY_CLIENT_IP, /* CURLOPT_HAPROXY_CLIENT_IP */ + STRING_HAPROXY_CLIENT_IP, /* CURLOPT_HAPROXY_CLIENT_IP */ #endif - STRING_ECH_CONFIG, /* CURLOPT_ECH_CONFIG */ - STRING_ECH_PUBLIC, /* CURLOPT_ECH_PUBLIC */ + STRING_ECH_CONFIG, /* CURLOPT_ECH_CONFIG */ + STRING_ECH_PUBLIC, /* CURLOPT_ECH_PUBLIC */ /* -- end of null-terminated strings -- */ @@ -1525,7 +1524,7 @@ enum dupstring { /* -- below this are pointers to binary data that cannot be strdup'ed. --- */ - STRING_COPYPOSTFIELDS, /* if POST, set the fields' values here */ + STRING_COPYPOSTFIELDS, /* if POST, set the fields' values here */ STRING_LAST /* not used, just an end-of-list marker */ }; @@ -1550,25 +1549,25 @@ enum dupblob { typedef int (*multidone_func)(struct Curl_easy *easy, CURLcode result); struct UserDefined { - FILE *err; /* the stderr user data goes here */ - void *debugdata; /* the data that will be passed to fdebug */ - char *errorbuffer; /* (Static) store failure messages in here */ - void *out; /* CURLOPT_WRITEDATA */ - void *in_set; /* CURLOPT_READDATA */ - void *writeheader; /* write the header to this if non-NULL */ + FILE *err; /* the stderr user data goes here */ + void *debugdata; /* the data that will be passed to fdebug */ + char *errorbuffer; /* (Static) store failure messages in here */ + void *out; /* CURLOPT_WRITEDATA */ + void *in_set; /* CURLOPT_READDATA */ + void *writeheader; /* write the header to this if non-NULL */ unsigned short use_port; /* which port to use (when not using default) */ unsigned long httpauth; /* kind of HTTP authentication to use (bitmask) */ unsigned long proxyauth; /* kind of proxy authentication to use (bitmask) */ - long maxredirs; /* maximum no. of http(s) redirects to follow, set to -1 - for infinity */ + long maxredirs; /* maximum no. of http(s) redirects to follow, set to -1 + for infinity */ - void *postfields; /* if POST, set the fields' values here */ - curl_seek_callback seek_func; /* function that seeks the input */ + void *postfields; /* if POST, set the fields' values here */ + curl_seek_callback seek_func; /* function that seeks the input */ curl_off_t postfieldsize; /* if POST, this might have a size to use instead of strlen(), and then the data *may* be binary (contain zero bytes) */ #ifndef CURL_DISABLE_BINDLOCAL - unsigned short localport; /* local port number to bind to */ + unsigned short localport; /* local port number to bind to */ unsigned short localportrange; /* number of additional port numbers to test in case the 'localport' one cannot be bind()ed */ @@ -1577,11 +1576,11 @@ struct UserDefined { curl_write_callback fwrite_header; /* function that stores headers */ curl_write_callback fwrite_rtp; /* function that stores interleaved RTP */ curl_read_callback fread_func_set; /* function that reads the input */ - curl_progress_callback fprogress; /* OLD and deprecated progress callback */ - curl_xferinfo_callback fxferinfo; /* progress callback */ - curl_debug_callback fdebug; /* function that write informational data */ - curl_ioctl_callback ioctl_func; /* function for I/O control */ - curl_sockopt_callback fsockopt; /* function for setting socket options */ + curl_progress_callback fprogress; /* OLD and deprecated progress callback */ + curl_xferinfo_callback fxferinfo; /* progress callback */ + curl_debug_callback fdebug; /* function that write informational data */ + curl_ioctl_callback ioctl_func; /* function for I/O control */ + curl_sockopt_callback fsockopt; /* function for setting socket options */ void *sockopt_client; /* pointer to pass to the socket options callback */ curl_opensocket_callback fopensocket; /* function for checking/translating the address and opening the @@ -1591,85 +1590,85 @@ struct UserDefined { socket */ void *closesocket_client; curl_prereq_callback fprereq; /* pre-initial request callback */ - void *prereq_userp; /* pre-initial request user data */ + void *prereq_userp; /* pre-initial request user data */ - void *seek_client; /* pointer to pass to the seek callback */ + void *seek_client; /* pointer to pass to the seek callback */ #ifndef CURL_DISABLE_HSTS curl_hstsread_callback hsts_read; void *hsts_read_userp; curl_hstswrite_callback hsts_write; void *hsts_write_userp; #endif - void *progress_client; /* pointer to pass to the progress callback */ - void *ioctl_client; /* pointer to pass to the ioctl callback */ + void *progress_client; /* pointer to pass to the progress callback */ + void *ioctl_client; /* pointer to pass to the ioctl callback */ unsigned int timeout; /* ms, 0 means no timeout */ unsigned int connecttimeout; /* ms, 0 means default timeout */ - unsigned int happy_eyeballs_timeout; /* ms, 0 is a valid value */ + unsigned int happy_eyeballs_timeout; /* ms, 0 is a valid value */ unsigned int server_response_timeout; /* ms, 0 means no timeout */ - unsigned int shutdowntimeout; /* ms, 0 means default timeout */ - long maxage_conn; /* in seconds, max idle time to allow a connection that - is to be reused */ + unsigned int shutdowntimeout; /* ms, 0 means default timeout */ + long maxage_conn; /* in seconds, max idle time to allow a connection that + is to be reused */ long maxlifetime_conn; /* in seconds, max time since creation to allow a connection that is to be reused */ #ifndef CURL_DISABLE_TFTP - long tftp_blksize; /* in bytes, 0 means use default */ -#endif - curl_off_t filesize; /* size of file to upload, -1 means unknown */ - long low_speed_limit; /* bytes/second */ - long low_speed_time; /* number of seconds */ - curl_off_t max_send_speed; /* high speed limit in bytes/second for upload */ - curl_off_t max_recv_speed; /* high speed limit in bytes/second for - download */ - curl_off_t set_resume_from; /* continue [ftp] transfer from here */ + long tftp_blksize; /* in bytes, 0 means use default */ +#endif + curl_off_t filesize; /* size of file to upload, -1 means unknown */ + long low_speed_limit; /* bytes/second */ + long low_speed_time; /* number of seconds */ + curl_off_t max_send_speed; /* high speed limit in bytes/second for upload */ + curl_off_t max_recv_speed; /* high speed limit in bytes/second for + download */ + curl_off_t set_resume_from; /* continue [ftp] transfer from here */ struct curl_slist *headers; /* linked list of extra headers */ - struct curl_httppost *httppost; /* linked list of old POST data */ + struct curl_httppost *httppost; /* linked list of old POST data */ #if !defined(CURL_DISABLE_MIME) || !defined(CURL_DISABLE_FORM_API) - curl_mimepart mimepost; /* MIME/POST data. */ + curl_mimepart mimepost; /* MIME/POST data. */ #endif #ifndef CURL_DISABLE_TELNET struct curl_slist *telnet_options; /* linked list of telnet options */ #endif - struct curl_slist *resolve; /* list of names to add/remove from - DNS cache */ + struct curl_slist *resolve; /* list of names to add/remove from + DNS cache */ struct curl_slist *connect_to; /* list of host:port mappings to override the hostname and port to connect to */ - time_t timevalue; /* what time to compare with */ - unsigned char timecondition; /* kind of time comparison: curl_TimeCond */ - unsigned char method; /* what kind of HTTP request: Curl_HttpReq */ + time_t timevalue; /* what time to compare with */ + unsigned char timecondition; /* kind of time comparison: curl_TimeCond */ + unsigned char method; /* what kind of HTTP request: Curl_HttpReq */ unsigned char httpwant; /* when non-zero, a specific HTTP version requested to be used in the library's request(s) */ - struct ssl_config_data ssl; /* user defined SSL stuff */ + struct ssl_config_data ssl; /* user defined SSL stuff */ #ifndef CURL_DISABLE_PROXY - struct ssl_config_data proxy_ssl; /* user defined SSL stuff for proxy */ - struct curl_slist *proxyheaders; /* linked list of extra CONNECT headers */ - unsigned short proxyport; /* If non-zero, use this port number by - default. If the proxy string features a - ":[port]" that one will override this. */ - unsigned char proxytype; /* what kind of proxy: curl_proxytype */ - unsigned char socks5auth;/* kind of SOCKS5 authentication to use (bitmask) */ + struct ssl_config_data proxy_ssl; /* user defined SSL stuff for proxy */ + struct curl_slist *proxyheaders; /* linked list of extra CONNECT headers */ + unsigned short proxyport; /* If non-zero, use this port number by + default. If the proxy string features a + ":[port]" that one will override this. */ + unsigned char proxytype; /* what kind of proxy: curl_proxytype */ + unsigned char socks5auth; /* kind of SOCKS5 authentication to use (bitmask) */ #endif struct ssl_general_config general_ssl; /* general user defined SSL stuff */ - int dns_cache_timeout; /* DNS cache timeout (seconds) */ - unsigned int buffer_size; /* size of receive buffer to use */ - unsigned int upload_buffer_size; /* size of upload buffer to use, - keep it >= CURL_MAX_WRITE_SIZE */ - void *private_data; /* application-private data */ + int dns_cache_timeout; /* DNS cache timeout (seconds) */ + unsigned int buffer_size; /* size of receive buffer to use */ + unsigned int upload_buffer_size; /* size of upload buffer to use, + keep it >= CURL_MAX_WRITE_SIZE */ + void *private_data; /* application-private data */ #ifndef CURL_DISABLE_HTTP struct curl_slist *http200aliases; /* linked list of aliases for http200 */ #endif - unsigned char ipver; /* the CURL_IPRESOLVE_* defines in the public header - file 0 - whatever, 1 - v2, 2 - v6 */ + unsigned char ipver; /* the CURL_IPRESOLVE_* defines in the public header + file 0 - whatever, 1 - v2, 2 - v6 */ curl_off_t max_filesize; /* Maximum file size to download */ #ifndef CURL_DISABLE_FTP unsigned char ftp_filemethod; /* how to get to a file: curl_ftpfile */ - unsigned char ftpsslauth; /* what AUTH XXX to try: curl_ftpauth */ - unsigned char ftp_ccc; /* FTP CCC options: curl_ftpccc */ + unsigned char ftpsslauth; /* what AUTH XXX to try: curl_ftpauth */ + unsigned char ftp_ccc; /* FTP CCC options: curl_ftpccc */ unsigned int accepttimeout; /* in milliseconds, 0 means no timeout */ #endif #if !defined(CURL_DISABLE_FTP) || defined(USE_SSH) struct curl_slist *quote; /* after connection is established */ struct curl_slist *postquote; /* after the transfer */ - struct curl_slist *prequote; /* before the transfer, after type */ + struct curl_slist *prequote; /* before the transfer, after type */ /* Despite the name, ftp_create_missing_dirs is for FTP(S) and SFTP 1 - create directories that do not exist 2 - the same but also allow MKD to fail once @@ -1678,27 +1677,27 @@ struct UserDefined { #endif #ifdef USE_LIBSSH2 curl_sshhostkeycallback ssh_hostkeyfunc; /* hostkey check callback */ - void *ssh_hostkeyfunc_userp; /* custom pointer to callback */ + void *ssh_hostkeyfunc_userp; /* custom pointer to callback */ #endif #ifdef USE_SSH - curl_sshkeycallback ssh_keyfunc; /* key matching callback */ - void *ssh_keyfunc_userp; /* custom pointer to callback */ - int ssh_auth_types; /* allowed SSH auth types */ + curl_sshkeycallback ssh_keyfunc; /* key matching callback */ + void *ssh_keyfunc_userp; /* custom pointer to callback */ + int ssh_auth_types; /* allowed SSH auth types */ unsigned int new_directory_perms; /* when creating remote dirs */ #endif #ifndef CURL_DISABLE_NETRC - unsigned char use_netrc; /* enum CURL_NETRC_OPTION values */ + unsigned char use_netrc; /* enum CURL_NETRC_OPTION values */ #endif - unsigned int new_file_perms; /* when creating remote files */ + unsigned int new_file_perms; /* when creating remote files */ char *str[STRING_LAST]; /* array of strings, pointing to allocated memory */ struct curl_blob *blobs[BLOB_LAST]; #ifdef USE_IPV6 - unsigned int scope_id; /* Scope id for IPv6 */ + unsigned int scope_id; /* Scope id for IPv6 */ #endif curl_prot_t allowed_protocols; curl_prot_t redir_protocols; #ifndef CURL_DISABLE_RTSP - void *rtp_out; /* write RTP to this if non-NULL */ + void *rtp_out; /* write RTP to this if non-NULL */ /* Common RTSP header options */ Curl_RtspReq rtspreq; /* RTSP request type */ #endif @@ -1712,13 +1711,13 @@ struct UserDefined { void *fnmatch_data; void *wildcardptr; #endif - /* GSS-API credential delegation, see the documentation of - CURLOPT_GSSAPI_DELEGATION */ + /* GSS-API credential delegation, see the documentation of + CURLOPT_GSSAPI_DELEGATION */ unsigned char gssapi_delegation; - int tcp_keepidle; /* seconds in idle before sending keepalive probe */ - int tcp_keepintvl; /* seconds between TCP keepalive probes */ - int tcp_keepcnt; /* maximum number of keepalive probes */ + int tcp_keepidle; /* seconds in idle before sending keepalive probe */ + int tcp_keepintvl; /* seconds between TCP keepalive probes */ + int tcp_keepcnt; /* maximum number of keepalive probes */ long expect_100_timeout; /* in milliseconds */ #if defined(USE_HTTP2) || defined(USE_HTTP3) @@ -1727,7 +1726,7 @@ struct UserDefined { curl_resolver_start_callback resolver_start; /* optional callback called before resolver start */ void *resolver_start_client; /* pointer to pass to resolver start callback */ - long upkeep_interval_ms; /* Time between calls for connection upkeep. */ + long upkeep_interval_ms; /* Time between calls for connection upkeep. */ multidone_func fmultidone; #ifndef CURL_DISABLE_DOH curl_off_t dohfor_mid; /* this is a DoH request for that transfer */ @@ -1737,16 +1736,16 @@ struct UserDefined { void *trailer_data; /* pointer to pass to trailer data callback */ curl_trailer_callback trailer_callback; /* trailing data callback */ #endif - char keep_post; /* keep POSTs as POSTs after a 30x request; each - bit represents a request, from 301 to 303 */ + char keep_post; /* keep POSTs as POSTs after a 30x request; each + bit represents a request, from 301 to 303 */ #ifndef CURL_DISABLE_SMTP struct curl_slist *mail_rcpt; /* linked list of mail recipients */ - BIT(mail_rcpt_allowfails); /* allow RCPT TO command to fail for some - recipients */ + BIT(mail_rcpt_allowfails); /* allow RCPT TO command to fail for some + recipients */ #endif - unsigned int maxconnects; /* Max idle connections in the connection cache */ - unsigned char use_ssl; /* if AUTH TLS is to be attempted etc, for FTP or - IMAP or POP3 or others! (type: curl_usessl)*/ + unsigned int maxconnects; /* Max idle connections in the connection cache */ + unsigned char use_ssl; /* if AUTH TLS is to be attempted etc, for FTP or + IMAP or POP3 or others! (type: curl_usessl)*/ unsigned char connect_only; /* make connection/request, then let application use the socket */ #ifndef CURL_DISABLE_MIME @@ -1756,30 +1755,30 @@ struct UserDefined { #ifndef CURL_DISABLE_TFTP BIT(tftp_no_options); /* do not send TFTP options requests */ #endif - BIT(sep_headers); /* handle host and proxy headers separately */ + BIT(sep_headers); /* handle host and proxy headers separately */ #ifndef CURL_DISABLE_COOKIES - BIT(cookiesession); /* new cookie session? */ + BIT(cookiesession); /* new cookie session? */ #endif - BIT(crlf); /* convert crlf on ftp upload(?) */ + BIT(crlf); /* convert crlf on ftp upload(?) */ #ifdef USE_SSH - BIT(ssh_compression); /* enable SSH compression */ + BIT(ssh_compression); /* enable SSH compression */ #endif -/* Here follows boolean settings that define how to behave during - this session. They are STATIC, set by libcurl users or at least initially - and they do not change during operations. */ - BIT(quick_exit); /* set 1L when it is okay to leak things (like - threads), as we are about to exit() anyway and - do not want lengthy cleanups to delay termination, - e.g. after a DNS timeout */ - BIT(get_filetime); /* get the time and get of the remote file */ + /* Here follows boolean settings that define how to behave during + this session. They are STATIC, set by libcurl users or at least initially + and they do not change during operations. */ + BIT(quick_exit); /* set 1L when it is okay to leak things (like + threads), as we are about to exit() anyway and + do not want lengthy cleanups to delay termination, + e.g. after a DNS timeout */ + BIT(get_filetime); /* get the time and get of the remote file */ #ifndef CURL_DISABLE_PROXY BIT(tunnel_thru_httpproxy); /* use CONNECT through an HTTP proxy */ #endif - BIT(prefer_ascii); /* ASCII rather than binary */ - BIT(remote_append); /* append, not overwrite, on upload */ + BIT(prefer_ascii); /* ASCII rather than binary */ + BIT(remote_append); /* append, not overwrite, on upload */ #ifdef CURL_LIST_ONLY_PROTOCOL - BIT(list_only); /* list directory */ + BIT(list_only); /* list directory */ #endif #ifndef CURL_DISABLE_FTP BIT(ftp_use_port); /* use the FTP PORT command */ @@ -1790,45 +1789,45 @@ struct UserDefined { us */ BIT(wildcard_enabled); /* enable wildcard matching */ #endif - BIT(hide_progress); /* do not use the progress meter */ - BIT(http_fail_on_error); /* fail on HTTP error codes >= 400 */ + BIT(hide_progress); /* do not use the progress meter */ + BIT(http_fail_on_error); /* fail on HTTP error codes >= 400 */ BIT(http_keep_sending_on_error); /* for HTTP status codes >= 300 */ - BIT(http_follow_location); /* follow HTTP redirects */ + BIT(http_follow_location); /* follow HTTP redirects */ BIT(http_transfer_encoding); /* request compressed HTTP transfer-encoding */ BIT(allow_auth_to_other_hosts); - BIT(include_header); /* include received protocol headers in data output */ - BIT(http_set_referer); /* is a custom referer used */ + BIT(include_header); /* include received protocol headers in data output */ + BIT(http_set_referer); /* is a custom referer used */ BIT(http_auto_referer); /* set "correct" referer when following location: */ - BIT(opt_no_body); /* as set with CURLOPT_NOBODY */ - BIT(verbose); /* output verbosity */ + BIT(opt_no_body); /* as set with CURLOPT_NOBODY */ + BIT(verbose); /* output verbosity */ #if defined(HAVE_GSSAPI) - BIT(krb); /* Kerberos connection requested */ -#endif - BIT(reuse_forbid); /* forbidden to be reused, close after use */ - BIT(reuse_fresh); /* do not reuse an existing connection */ - BIT(no_signal); /* do not use any signal/alarm handler */ - BIT(tcp_nodelay); /* whether to enable TCP_NODELAY or not */ - BIT(ignorecl); /* ignore content length */ - BIT(http_te_skip); /* pass the raw body data to the user, even when - transfer-encoded (chunked, compressed) */ - BIT(http_ce_skip); /* pass the raw body data to the user, even when - content-encoded (chunked, compressed) */ + BIT(krb); /* Kerberos connection requested */ +#endif + BIT(reuse_forbid); /* forbidden to be reused, close after use */ + BIT(reuse_fresh); /* do not reuse an existing connection */ + BIT(no_signal); /* do not use any signal/alarm handler */ + BIT(tcp_nodelay); /* whether to enable TCP_NODELAY or not */ + BIT(ignorecl); /* ignore content length */ + BIT(http_te_skip); /* pass the raw body data to the user, even when + transfer-encoded (chunked, compressed) */ + BIT(http_ce_skip); /* pass the raw body data to the user, even when + content-encoded (chunked, compressed) */ BIT(proxy_transfer_mode); /* set transfer mode (;type=) when doing FTP via an HTTP proxy */ #if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI) BIT(socks5_gssapi_nec); /* Flag to support NEC SOCKS5 server */ #endif BIT(sasl_ir); /* Enable/disable SASL initial response */ - BIT(tcp_keepalive); /* use TCP keepalives */ - BIT(tcp_fastopen); /* use TCP Fast Open */ - BIT(ssl_enable_alpn);/* TLS ALPN extension? */ - BIT(path_as_is); /* allow dotdots? */ - BIT(pipewait); /* wait for multiplex status before starting a new - connection */ + BIT(tcp_keepalive); /* use TCP keepalives */ + BIT(tcp_fastopen); /* use TCP Fast Open */ + BIT(ssl_enable_alpn); /* TLS ALPN extension? */ + BIT(path_as_is); /* allow dotdots? */ + BIT(pipewait); /* wait for multiplex status before starting a new + connection */ BIT(suppress_connect_headers); /* suppress proxy CONNECT response headers from user callbacks */ - BIT(dns_shuffle_addresses); /* whether to shuffle addresses before use */ + BIT(dns_shuffle_addresses); /* whether to shuffle addresses before use */ #ifndef CURL_DISABLE_PROXY BIT(haproxyprotocol); /* whether to send HAProxy PROXY protocol v1 header */ @@ -1838,17 +1837,17 @@ struct UserDefined { #endif BIT(disallow_username_in_url); /* disallow username in URL */ #ifndef CURL_DISABLE_DOH - BIT(doh); /* DNS-over-HTTPS enabled */ - BIT(doh_verifypeer); /* DoH certificate peer verification */ - BIT(doh_verifyhost); /* DoH certificate hostname verification */ - BIT(doh_verifystatus); /* DoH certificate status verification */ + BIT(doh); /* DNS-over-HTTPS enabled */ + BIT(doh_verifypeer); /* DoH certificate peer verification */ + BIT(doh_verifyhost); /* DoH certificate hostname verification */ + BIT(doh_verifystatus); /* DoH certificate status verification */ #endif BIT(http09_allowed); /* allow HTTP/0.9 responses */ #ifdef USE_WEBSOCKETS BIT(ws_raw_mode); #endif #ifdef USE_ECH - int tls_ech; /* TLS ECH configuration */ + int tls_ech; /* TLS ECH configuration */ #endif }; @@ -1861,9 +1860,9 @@ struct UserDefined { struct Names { struct Curl_hash *hostcache; enum { - HCACHE_NONE, /* not pointing to anything */ - HCACHE_MULTI, /* points to a shared one in the multi handle */ - HCACHE_SHARED /* points to a shared one in a shared object */ + HCACHE_NONE, /* not pointing to anything */ + HCACHE_MULTI, /* points to a shared one in the multi handle */ + HCACHE_SHARED /* points to a shared one in a shared object */ } hostcachetype; }; @@ -1897,9 +1896,9 @@ struct Curl_easy { struct connectdata *conn; struct Curl_llist_node multi_queue; /* for multihandle list management */ - struct Curl_llist_node conn_queue; /* list per connectdata */ + struct Curl_llist_node conn_queue; /* list per connectdata */ - CURLMstate mstate; /* the handle's state */ + CURLMstate mstate; /* the handle's state */ CURLcode result; /* previous result */ struct Curl_message msg; /* A single posted message. */ @@ -1911,37 +1910,37 @@ struct Curl_easy { struct easy_pollset last_poll; struct Names dns; - struct Curl_multi *multi; /* if non-NULL, points to the multi handle - struct to which this "belongs" when used by - the multi interface */ + struct Curl_multi *multi; /* if non-NULL, points to the multi handle + struct to which this "belongs" when used by + the multi interface */ struct Curl_multi *multi_easy; /* if non-NULL, points to the multi handle struct to which this "belongs" when used by the easy interface */ - struct Curl_share *share; /* Share, handles global variable mutexing */ + struct Curl_share *share; /* Share, handles global variable mutexing */ #ifdef USE_LIBPSL - struct PslCache *psl; /* The associated PSL cache. */ + struct PslCache *psl; /* The associated PSL cache. */ #endif - struct SingleRequest req; /* Request-specific data */ - struct UserDefined set; /* values set by the libcurl user */ + struct SingleRequest req; /* Request-specific data */ + struct UserDefined set; /* values set by the libcurl user */ #ifndef CURL_DISABLE_COOKIES - struct CookieInfo *cookies; /* the cookies, read from files and servers. - NOTE that the 'cookie' field in the - UserDefined struct defines if the "engine" - is to be used or not. */ + struct CookieInfo *cookies; /* the cookies, read from files and servers. + NOTE that the 'cookie' field in the + UserDefined struct defines if the "engine" + is to be used or not. */ #endif #ifndef CURL_DISABLE_HSTS struct hsts *hsts; #endif #ifndef CURL_DISABLE_ALTSVC - struct altsvcinfo *asi; /* the alt-svc cache */ + struct altsvcinfo *asi; /* the alt-svc cache */ #endif - struct Progress progress; /* for all the progress meter data */ - struct UrlState state; /* struct for fields used for state info and - other dynamic purposes */ + struct Progress progress; /* for all the progress meter data */ + struct UrlState state; /* struct for fields used for state info and + other dynamic purposes */ #ifndef CURL_DISABLE_FTP struct WildcardData *wildcard; /* wildcard download state info */ #endif - struct PureInfo info; /* stats, reports and info data */ + struct PureInfo info; /* stats, reports and info data */ struct curl_tlssessioninfo tsi; /* Information about the TLS session, only valid after a client has asked for it */ #ifdef USE_HYPER diff --git a/vendor/hydra/vendor/curl/lib/vauth/digest.h b/vendor/hydra/vendor/curl/lib/vauth/digest.h index 99ce1f91..4acbc339 100644 --- a/vendor/hydra/vendor/curl/lib/vauth/digest.h +++ b/vendor/hydra/vendor/curl/lib/vauth/digest.h @@ -28,8 +28,8 @@ #ifndef CURL_DISABLE_DIGEST_AUTH -#define DIGEST_MAX_VALUE_LENGTH 256 -#define DIGEST_MAX_CONTENT_LENGTH 1024 +#define DIGEST_MAX_VALUE_LENGTH 256 +#define DIGEST_MAX_CONTENT_LENGTH 1024 /* This is used to extract the realm from a challenge message */ bool Curl_auth_digest_get_pair(const char *str, char *value, char *content, diff --git a/vendor/hydra/vendor/curl/lib/vauth/ntlm.h b/vendor/hydra/vendor/curl/lib/vauth/ntlm.h index 31ce921c..16209362 100644 --- a/vendor/hydra/vendor/curl/lib/vauth/ntlm.h +++ b/vendor/hydra/vendor/curl/lib/vauth/ntlm.h @@ -37,86 +37,86 @@ /* Flag bits definitions based on https://davenport.sourceforge.net/ntlm.html */ -#define NTLMFLAG_NEGOTIATE_UNICODE (1<<0) +#define NTLMFLAG_NEGOTIATE_UNICODE (1 << 0) /* Indicates that Unicode strings are supported for use in security buffer data. */ -#define NTLMFLAG_NEGOTIATE_OEM (1<<1) +#define NTLMFLAG_NEGOTIATE_OEM (1 << 1) /* Indicates that OEM strings are supported for use in security buffer data. */ -#define NTLMFLAG_REQUEST_TARGET (1<<2) +#define NTLMFLAG_REQUEST_TARGET (1 << 2) /* Requests that the server's authentication realm be included in the Type 2 message. */ /* unknown (1<<3) */ -#define NTLMFLAG_NEGOTIATE_SIGN (1<<4) +#define NTLMFLAG_NEGOTIATE_SIGN (1 << 4) /* Specifies that authenticated communication between the client and server should carry a digital signature (message integrity). */ -#define NTLMFLAG_NEGOTIATE_SEAL (1<<5) +#define NTLMFLAG_NEGOTIATE_SEAL (1 << 5) /* Specifies that authenticated communication between the client and server should be encrypted (message confidentiality). */ -#define NTLMFLAG_NEGOTIATE_DATAGRAM_STYLE (1<<6) +#define NTLMFLAG_NEGOTIATE_DATAGRAM_STYLE (1 << 6) /* Indicates that datagram authentication is being used. */ -#define NTLMFLAG_NEGOTIATE_LM_KEY (1<<7) +#define NTLMFLAG_NEGOTIATE_LM_KEY (1 << 7) /* Indicates that the LAN Manager session key should be used for signing and sealing authenticated communications. */ -#define NTLMFLAG_NEGOTIATE_NTLM_KEY (1<<9) +#define NTLMFLAG_NEGOTIATE_NTLM_KEY (1 << 9) /* Indicates that NTLM authentication is being used. */ /* unknown (1<<10) */ -#define NTLMFLAG_NEGOTIATE_ANONYMOUS (1<<11) +#define NTLMFLAG_NEGOTIATE_ANONYMOUS (1 << 11) /* Sent by the client in the Type 3 message to indicate that an anonymous context has been established. This also affects the response fields. */ -#define NTLMFLAG_NEGOTIATE_DOMAIN_SUPPLIED (1<<12) +#define NTLMFLAG_NEGOTIATE_DOMAIN_SUPPLIED (1 << 12) /* Sent by the client in the Type 1 message to indicate that a desired authentication realm is included in the message. */ -#define NTLMFLAG_NEGOTIATE_WORKSTATION_SUPPLIED (1<<13) +#define NTLMFLAG_NEGOTIATE_WORKSTATION_SUPPLIED (1 << 13) /* Sent by the client in the Type 1 message to indicate that the client workstation's name is included in the message. */ -#define NTLMFLAG_NEGOTIATE_LOCAL_CALL (1<<14) +#define NTLMFLAG_NEGOTIATE_LOCAL_CALL (1 << 14) /* Sent by the server to indicate that the server and client are on the same machine. Implies that the client may use a pre-established local security context rather than responding to the challenge. */ -#define NTLMFLAG_NEGOTIATE_ALWAYS_SIGN (1<<15) +#define NTLMFLAG_NEGOTIATE_ALWAYS_SIGN (1 << 15) /* Indicates that authenticated communication between the client and server should be signed with a "dummy" signature. */ -#define NTLMFLAG_TARGET_TYPE_DOMAIN (1<<16) +#define NTLMFLAG_TARGET_TYPE_DOMAIN (1 << 16) /* Sent by the server in the Type 2 message to indicate that the target authentication realm is a domain. */ -#define NTLMFLAG_TARGET_TYPE_SERVER (1<<17) +#define NTLMFLAG_TARGET_TYPE_SERVER (1 << 17) /* Sent by the server in the Type 2 message to indicate that the target authentication realm is a server. */ -#define NTLMFLAG_TARGET_TYPE_SHARE (1<<18) +#define NTLMFLAG_TARGET_TYPE_SHARE (1 << 18) /* Sent by the server in the Type 2 message to indicate that the target authentication realm is a share. Presumably, this is for share-level authentication. Usage is unclear. */ -#define NTLMFLAG_NEGOTIATE_NTLM2_KEY (1<<19) +#define NTLMFLAG_NEGOTIATE_NTLM2_KEY (1 << 19) /* Indicates that the NTLM2 signing and sealing scheme should be used for protecting authenticated communications. */ -#define NTLMFLAG_REQUEST_INIT_RESPONSE (1<<20) +#define NTLMFLAG_REQUEST_INIT_RESPONSE (1 << 20) /* unknown purpose */ -#define NTLMFLAG_REQUEST_ACCEPT_RESPONSE (1<<21) +#define NTLMFLAG_REQUEST_ACCEPT_RESPONSE (1 << 21) /* unknown purpose */ -#define NTLMFLAG_REQUEST_NONNT_SESSION_KEY (1<<22) +#define NTLMFLAG_REQUEST_NONNT_SESSION_KEY (1 << 22) /* unknown purpose */ -#define NTLMFLAG_NEGOTIATE_TARGET_INFO (1<<23) +#define NTLMFLAG_NEGOTIATE_TARGET_INFO (1 << 23) /* Sent by the server in the Type 2 message to indicate that it is including a Target Information block in the message. */ @@ -126,14 +126,14 @@ /* unknown (1<27) */ /* unknown (1<28) */ -#define NTLMFLAG_NEGOTIATE_128 (1<<29) +#define NTLMFLAG_NEGOTIATE_128 (1 << 29) /* Indicates that 128-bit encryption is supported. */ -#define NTLMFLAG_NEGOTIATE_KEY_EXCHANGE (1<<30) +#define NTLMFLAG_NEGOTIATE_KEY_EXCHANGE (1 << 30) /* Indicates that the client will provide an encrypted master key in the "Session Key" field of the Type 3 message. */ -#define NTLMFLAG_NEGOTIATE_56 (1<<31) +#define NTLMFLAG_NEGOTIATE_56 (1 << 31) /* Indicates that 56-bit encryption is supported. */ #endif /* BUILDING_CURL_NTLM_MSGS_C */ diff --git a/vendor/hydra/vendor/curl/lib/vauth/vauth.h b/vendor/hydra/vendor/curl/lib/vauth/vauth.h index 7e823484..18cb25f4 100644 --- a/vendor/hydra/vendor/curl/lib/vauth/vauth.h +++ b/vendor/hydra/vendor/curl/lib/vauth/vauth.h @@ -74,8 +74,7 @@ bool Curl_auth_user_contains_domain(const char *user); /* This is used to generate a PLAIN cleartext message */ CURLcode Curl_auth_create_plain_message(const char *authzid, - const char *authcid, - const char *passwd, + const char *authcid, const char *passwd, struct bufref *out); /* This is used to generate a LOGIN cleartext message */ @@ -95,25 +94,19 @@ CURLcode Curl_auth_create_cram_md5_message(const struct bufref *chlg, bool Curl_auth_is_digest_supported(void); /* This is used to generate a base64 encoded DIGEST-MD5 response message */ -CURLcode Curl_auth_create_digest_md5_message(struct Curl_easy *data, - const struct bufref *chlg, - const char *userp, - const char *passwdp, - const char *service, - struct bufref *out); +CURLcode Curl_auth_create_digest_md5_message( + struct Curl_easy *data, const struct bufref *chlg, const char *userp, + const char *passwdp, const char *service, struct bufref *out); /* This is used to decode an HTTP DIGEST challenge message */ CURLcode Curl_auth_decode_digest_http_message(const char *chlg, struct digestdata *digest); /* This is used to generate an HTTP DIGEST response message */ -CURLcode Curl_auth_create_digest_http_message(struct Curl_easy *data, - const char *userp, - const char *passwdp, - const unsigned char *request, - const unsigned char *uri, - struct digestdata *digest, - char **outptr, size_t *outlen); +CURLcode Curl_auth_create_digest_http_message( + struct Curl_easy *data, const char *userp, const char *passwdp, + const unsigned char *request, const unsigned char *uri, + struct digestdata *digest, char **outptr, size_t *outlen); /* This is used to clean up the digest specific data */ void Curl_auth_digest_cleanup(struct digestdata *digest); @@ -121,20 +114,16 @@ void Curl_auth_digest_cleanup(struct digestdata *digest); #ifdef USE_GSASL /* This is used to evaluate if MECH is supported by gsasl */ -bool Curl_auth_gsasl_is_supported(struct Curl_easy *data, - const char *mech, +bool Curl_auth_gsasl_is_supported(struct Curl_easy *data, const char *mech, struct gsasldata *gsasl); /* This is used to start a gsasl method */ -CURLcode Curl_auth_gsasl_start(struct Curl_easy *data, - const char *userp, - const char *passwdp, - struct gsasldata *gsasl); +CURLcode Curl_auth_gsasl_start(struct Curl_easy *data, const char *userp, + const char *passwdp, struct gsasldata *gsasl); /* This is used to process and generate a new SASL token */ CURLcode Curl_auth_gsasl_token(struct Curl_easy *data, const struct bufref *chlg, - struct gsasldata *gsasl, - struct bufref *out); + struct gsasldata *gsasl, struct bufref *out); /* This is used to clean up the gsasl specific data */ void Curl_auth_gsasl_cleanup(struct gsasldata *digest); @@ -145,13 +134,10 @@ void Curl_auth_gsasl_cleanup(struct gsasldata *digest); bool Curl_auth_is_ntlm_supported(void); /* This is used to generate a base64 encoded NTLM type-1 message */ -CURLcode Curl_auth_create_ntlm_type1_message(struct Curl_easy *data, - const char *userp, - const char *passwdp, - const char *service, - const char *host, - struct ntlmdata *ntlm, - struct bufref *out); +CURLcode Curl_auth_create_ntlm_type1_message( + struct Curl_easy *data, const char *userp, const char *passwdp, + const char *service, const char *host, struct ntlmdata *ntlm, + struct bufref *out); /* This is used to decode a base64 encoded NTLM type-2 message */ CURLcode Curl_auth_decode_ntlm_type2_message(struct Curl_easy *data, @@ -187,15 +173,10 @@ bool Curl_auth_is_gssapi_supported(void); /* This is used to generate a base64 encoded GSSAPI (Kerberos V5) user token message */ -CURLcode Curl_auth_create_gssapi_user_message(struct Curl_easy *data, - const char *userp, - const char *passwdp, - const char *service, - const char *host, - const bool mutual, - const struct bufref *chlg, - struct kerberos5data *krb5, - struct bufref *out); +CURLcode Curl_auth_create_gssapi_user_message( + struct Curl_easy *data, const char *userp, const char *passwdp, + const char *service, const char *host, const bool mutual, + const struct bufref *chlg, struct kerberos5data *krb5, struct bufref *out); /* This is used to generate a base64 encoded GSSAPI (Kerberos V5) security token message */ @@ -216,10 +197,8 @@ bool Curl_auth_is_spnego_supported(void); /* This is used to decode a base64 encoded SPNEGO (Negotiate) challenge message */ CURLcode Curl_auth_decode_spnego_message(struct Curl_easy *data, - const char *user, - const char *password, - const char *service, - const char *host, + const char *user, const char *password, + const char *service, const char *host, const char *chlg64, struct negotiatedata *nego); diff --git a/vendor/hydra/vendor/curl/lib/vquic/curl_msh3.h b/vendor/hydra/vendor/curl/lib/vquic/curl_msh3.h index 33931f59..b3fcfeb8 100644 --- a/vendor/hydra/vendor/curl/lib/vquic/curl_msh3.h +++ b/vendor/hydra/vendor/curl/lib/vquic/curl_msh3.h @@ -32,14 +32,12 @@ void Curl_msh3_ver(char *p, size_t len); -CURLcode Curl_cf_msh3_create(struct Curl_cfilter **pcf, - struct Curl_easy *data, +CURLcode Curl_cf_msh3_create(struct Curl_cfilter **pcf, struct Curl_easy *data, struct connectdata *conn, const struct Curl_addrinfo *ai); bool Curl_conn_is_msh3(const struct Curl_easy *data, - const struct connectdata *conn, - int sockindex); + const struct connectdata *conn, int sockindex); #endif /* USE_MSQUIC */ diff --git a/vendor/hydra/vendor/curl/lib/vquic/curl_ngtcp2.h b/vendor/hydra/vendor/curl/lib/vquic/curl_ngtcp2.h index db3e611b..f56ff946 100644 --- a/vendor/hydra/vendor/curl/lib/vquic/curl_ngtcp2.h +++ b/vendor/hydra/vendor/curl/lib/vquic/curl_ngtcp2.h @@ -32,14 +32,14 @@ #include #endif -#include #include +#include #ifdef USE_OPENSSL #include #elif defined(USE_WOLFSSL) #include -#include #include +#include #endif struct Curl_cfilter; @@ -49,13 +49,11 @@ struct Curl_cfilter; void Curl_ngtcp2_ver(char *p, size_t len); CURLcode Curl_cf_ngtcp2_create(struct Curl_cfilter **pcf, - struct Curl_easy *data, - struct connectdata *conn, - const struct Curl_addrinfo *ai); + struct Curl_easy *data, struct connectdata *conn, + const struct Curl_addrinfo *ai); bool Curl_conn_is_ngtcp2(const struct Curl_easy *data, - const struct connectdata *conn, - int sockindex); + const struct connectdata *conn, int sockindex); #endif #endif /* HEADER_CURL_VQUIC_CURL_NGTCP2_H */ diff --git a/vendor/hydra/vendor/curl/lib/vquic/curl_osslq.h b/vendor/hydra/vendor/curl/lib/vquic/curl_osslq.h index 0e12d702..03762f69 100644 --- a/vendor/hydra/vendor/curl/lib/vquic/curl_osslq.h +++ b/vendor/hydra/vendor/curl/lib/vquic/curl_osslq.h @@ -38,14 +38,12 @@ struct Curl_cfilter; void Curl_osslq_ver(char *p, size_t len); -CURLcode Curl_cf_osslq_create(struct Curl_cfilter **pcf, - struct Curl_easy *data, +CURLcode Curl_cf_osslq_create(struct Curl_cfilter **pcf, struct Curl_easy *data, struct connectdata *conn, const struct Curl_addrinfo *ai); bool Curl_conn_is_osslq(const struct Curl_easy *data, - const struct connectdata *conn, - int sockindex); + const struct connectdata *conn, int sockindex); #endif #endif /* HEADER_CURL_VQUIC_CURL_OSSLQ_H */ diff --git a/vendor/hydra/vendor/curl/lib/vquic/curl_quiche.h b/vendor/hydra/vendor/curl/lib/vquic/curl_quiche.h index bce781c1..b70c9733 100644 --- a/vendor/hydra/vendor/curl/lib/vquic/curl_quiche.h +++ b/vendor/hydra/vendor/curl/lib/vquic/curl_quiche.h @@ -28,8 +28,8 @@ #ifdef USE_QUICHE -#include #include +#include struct Curl_cfilter; struct Curl_easy; @@ -37,13 +37,11 @@ struct Curl_easy; void Curl_quiche_ver(char *p, size_t len); CURLcode Curl_cf_quiche_create(struct Curl_cfilter **pcf, - struct Curl_easy *data, - struct connectdata *conn, + struct Curl_easy *data, struct connectdata *conn, const struct Curl_addrinfo *ai); bool Curl_conn_is_quiche(const struct Curl_easy *data, - const struct connectdata *conn, - int sockindex); + const struct connectdata *conn, int sockindex); #endif diff --git a/vendor/hydra/vendor/curl/lib/vquic/vquic-tls.h b/vendor/hydra/vendor/curl/lib/vquic/vquic-tls.h index 0ec74bfb..3f4e56c7 100644 --- a/vendor/hydra/vendor/curl/lib/vquic/vquic-tls.h +++ b/vendor/hydra/vendor/curl/lib/vquic/vquic-tls.h @@ -24,12 +24,12 @@ * ***************************************************************************/ -#include "curl_setup.h" #include "bufq.h" +#include "curl_setup.h" #include "vtls/openssl.h" #if defined(USE_HTTP3) && \ - (defined(USE_OPENSSL) || defined(USE_GNUTLS) || defined(USE_WOLFSSL)) + (defined(USE_OPENSSL) || defined(USE_GNUTLS) || defined(USE_WOLFSSL)) #include "vtls/wolfssl.h" @@ -68,14 +68,11 @@ typedef CURLcode Curl_vquic_tls_ctx_setup(struct Curl_cfilter *cf, ± @param cb_user_data user_data param for callback * @param ssl_user_data optional pointer to set in TLS application context */ -CURLcode Curl_vquic_tls_init(struct curl_tls_ctx *ctx, - struct Curl_cfilter *cf, - struct Curl_easy *data, - struct ssl_peer *peer, +CURLcode Curl_vquic_tls_init(struct curl_tls_ctx *ctx, struct Curl_cfilter *cf, + struct Curl_easy *data, struct ssl_peer *peer, const char *alpn, size_t alpn_len, Curl_vquic_tls_ctx_setup *cb_setup, - void *cb_user_data, - void *ssl_user_data); + void *cb_user_data, void *ssl_user_data); /** * Cleanup all data that has been initialized. diff --git a/vendor/hydra/vendor/curl/lib/vquic/vquic.h b/vendor/hydra/vendor/curl/lib/vquic/vquic.h index c1ca1df6..309f9950 100644 --- a/vendor/hydra/vendor/curl/lib/vquic/vquic.h +++ b/vendor/hydra/vendor/curl/lib/vquic/vquic.h @@ -34,27 +34,21 @@ struct Curl_addrinfo; void Curl_quic_ver(char *p, size_t len); -CURLcode Curl_qlogdir(struct Curl_easy *data, - unsigned char *scid, - size_t scidlen, - int *qlogfdp); +CURLcode Curl_qlogdir(struct Curl_easy *data, unsigned char *scid, + size_t scidlen, int *qlogfdp); - -CURLcode Curl_cf_quic_create(struct Curl_cfilter **pcf, - struct Curl_easy *data, +CURLcode Curl_cf_quic_create(struct Curl_cfilter **pcf, struct Curl_easy *data, struct connectdata *conn, - const struct Curl_addrinfo *ai, - int transport); + const struct Curl_addrinfo *ai, int transport); bool Curl_conn_is_http3(const struct Curl_easy *data, - const struct connectdata *conn, - int sockindex); + const struct connectdata *conn, int sockindex); extern struct Curl_cftype Curl_cft_http3; #else /* USE_HTTP3 */ -#define Curl_conn_is_http3(a,b,c) FALSE +#define Curl_conn_is_http3(a, b, c) FALSE #endif /* !USE_HTTP3 */ diff --git a/vendor/hydra/vendor/curl/lib/vquic/vquic_int.h b/vendor/hydra/vendor/curl/lib/vquic/vquic_int.h index 754e1f59..c714f72b 100644 --- a/vendor/hydra/vendor/curl/lib/vquic/vquic_int.h +++ b/vendor/hydra/vendor/curl/lib/vquic/vquic_int.h @@ -24,33 +24,33 @@ * ***************************************************************************/ -#include "curl_setup.h" #include "bufq.h" +#include "curl_setup.h" #ifdef USE_HTTP3 #define MAX_PKT_BURST 10 -#define MAX_UDP_PAYLOAD_SIZE 1452 +#define MAX_UDP_PAYLOAD_SIZE 1452 /* Default QUIC connection timeout we announce from our side */ -#define CURL_QUIC_MAX_IDLE_MS (120 * 1000) +#define CURL_QUIC_MAX_IDLE_MS (120 * 1000) struct cf_quic_ctx { - curl_socket_t sockfd; /* connected UDP socket */ + curl_socket_t sockfd; /* connected UDP socket */ struct sockaddr_storage local_addr; /* address socket is bound to */ - socklen_t local_addrlen; /* length of local address */ - - struct bufq sendbuf; /* buffer for sending one or more packets */ - struct curltime first_byte_at; /* when first byte was recvd */ - struct curltime last_op; /* last (attempted) send/recv operation */ - struct curltime last_io; /* last successful socket IO */ - size_t gsolen; /* length of individual packets in send buf */ - size_t split_len; /* if != 0, buffer length after which GSO differs */ + socklen_t local_addrlen; /* length of local address */ + + struct bufq sendbuf; /* buffer for sending one or more packets */ + struct curltime first_byte_at; /* when first byte was recvd */ + struct curltime last_op; /* last (attempted) send/recv operation */ + struct curltime last_io; /* last successful socket IO */ + size_t gsolen; /* length of individual packets in send buf */ + size_t split_len; /* if != 0, buffer length after which GSO differs */ size_t split_gsolen; /* length of individual packets after split_len */ #ifdef DEBUGBUILD int wblock_percent; /* percent of writes doing EAGAIN */ #endif BIT(got_first_byte); /* if first byte was received */ - BIT(no_gso); /* do not use gso on sending */ + BIT(no_gso); /* do not use gso on sending */ }; CURLcode vquic_ctx_init(struct cf_quic_ctx *qctx); @@ -58,8 +58,7 @@ void vquic_ctx_free(struct cf_quic_ctx *qctx); void vquic_ctx_update_time(struct cf_quic_ctx *qctx); -void vquic_push_blocked_pkt(struct Curl_cfilter *cf, - struct cf_quic_ctx *qctx, +void vquic_push_blocked_pkt(struct Curl_cfilter *cf, struct cf_quic_ctx *qctx, const uint8_t *pkt, size_t pktlen, size_t gsolen); CURLcode vquic_send_blocked_pkts(struct Curl_cfilter *cf, @@ -67,7 +66,7 @@ CURLcode vquic_send_blocked_pkts(struct Curl_cfilter *cf, struct cf_quic_ctx *qctx); CURLcode vquic_send(struct Curl_cfilter *cf, struct Curl_easy *data, - struct cf_quic_ctx *qctx, size_t gsolen); + struct cf_quic_ctx *qctx, size_t gsolen); CURLcode vquic_send_tail_split(struct Curl_cfilter *cf, struct Curl_easy *data, struct cf_quic_ctx *qctx, size_t gsolen, @@ -76,16 +75,13 @@ CURLcode vquic_send_tail_split(struct Curl_cfilter *cf, struct Curl_easy *data, CURLcode vquic_flush(struct Curl_cfilter *cf, struct Curl_easy *data, struct cf_quic_ctx *qctx); - typedef CURLcode vquic_recv_pkt_cb(const unsigned char *pkt, size_t pktlen, struct sockaddr_storage *remote_addr, socklen_t remote_addrlen, int ecn, void *userp); -CURLcode vquic_recv_packets(struct Curl_cfilter *cf, - struct Curl_easy *data, - struct cf_quic_ctx *qctx, - size_t max_pkts, +CURLcode vquic_recv_packets(struct Curl_cfilter *cf, struct Curl_easy *data, + struct cf_quic_ctx *qctx, size_t max_pkts, vquic_recv_pkt_cb *recv_cb, void *userp); #endif /* !USE_HTTP3 */ diff --git a/vendor/hydra/vendor/curl/lib/vssh/ssh.h b/vendor/hydra/vendor/curl/lib/vssh/ssh.h index 2ed78649..0f195b53 100644 --- a/vendor/hydra/vendor/curl/lib/vssh/ssh.h +++ b/vendor/hydra/vendor/curl/lib/vssh/ssh.h @@ -43,12 +43,12 @@ * SSH unique setup ***************************************************************************/ typedef enum { - SSH_NO_STATE = -1, /* Used for "nextState" so say there is none */ - SSH_STOP = 0, /* do nothing state, stops the state machine */ + SSH_NO_STATE = -1, /* Used for "nextState" so say there is none */ + SSH_STOP = 0, /* do nothing state, stops the state machine */ - SSH_INIT, /* First state in SSH-CONNECT */ - SSH_S_STARTUP, /* Session startup */ - SSH_HOSTKEY, /* verify hostkey */ + SSH_INIT, /* First state in SSH-CONNECT */ + SSH_S_STARTUP, /* Session startup */ + SSH_HOSTKEY, /* verify hostkey */ SSH_AUTHLIST, SSH_AUTH_PKEY_INIT, SSH_AUTH_PKEY, @@ -64,9 +64,9 @@ typedef enum { SSH_AUTH_GSSAPI, SSH_AUTH_DONE, SSH_SFTP_INIT, - SSH_SFTP_REALPATH, /* Last state in SSH-CONNECT */ + SSH_SFTP_REALPATH, /* Last state in SSH-CONNECT */ - SSH_SFTP_QUOTE_INIT, /* First state in SFTP-DO */ + SSH_SFTP_QUOTE_INIT, /* First state in SFTP-DO */ SSH_SFTP_POSTQUOTE_INIT, /* (Possibly) First state in SFTP-DONE */ SSH_SFTP_QUOTE, SSH_SFTP_NEXT_QUOTE, @@ -92,9 +92,9 @@ typedef enum { SSH_SFTP_READDIR_DONE, SSH_SFTP_DOWNLOAD_INIT, SSH_SFTP_DOWNLOAD_STAT, /* Last state in SFTP-DO */ - SSH_SFTP_CLOSE, /* Last state in SFTP-DONE */ - SSH_SFTP_SHUTDOWN, /* First state in SFTP-DISCONNECT */ - SSH_SCP_TRANS_INIT, /* First state in SCP-DO */ + SSH_SFTP_CLOSE, /* Last state in SFTP-DONE */ + SSH_SFTP_SHUTDOWN, /* First state in SFTP-DISCONNECT */ + SSH_SCP_TRANS_INIT, /* First state in SCP-DO */ SSH_SCP_UPLOAD_INIT, SSH_SCP_DOWNLOAD_INIT, SSH_SCP_DOWNLOAD, @@ -106,7 +106,7 @@ typedef enum { SSH_SESSION_DISCONNECT, /* First state in SCP-DISCONNECT */ SSH_SESSION_FREE, /* Last state in SCP/SFTP-DISCONNECT */ SSH_QUIT, - SSH_LAST /* never used */ + SSH_LAST /* never used */ } sshstate; /* this struct is used in the HandleData struct which is part of the @@ -114,7 +114,7 @@ typedef enum { Everything that is strictly related to a connection is banned from this struct. */ struct SSHPROTO { - char *path; /* the path we operate on */ + char *path; /* the path we operate on */ #ifdef USE_LIBSSH2 struct dynbuf readdir_link; struct dynbuf readdir; @@ -131,37 +131,37 @@ struct SSHPROTO { /* ssh_conn is used for struct connection-oriented data in the connectdata struct */ struct ssh_conn { - const char *authlist; /* List of auth. methods, managed by libssh2 */ + const char *authlist; /* List of auth. methods, managed by libssh2 */ /* common */ - const char *passphrase; /* pass-phrase to use */ - char *rsa_pub; /* strdup'ed public key file */ - char *rsa; /* strdup'ed private key file */ - bool authed; /* the connection has been authenticated fine */ - bool acceptfail; /* used by the SFTP_QUOTE (continue if - quote command fails) */ - sshstate state; /* always use ssh.c:state() to change state! */ - sshstate nextstate; /* the state to goto after stopping */ - CURLcode actualcode; /* the actual error code */ + const char *passphrase; /* pass-phrase to use */ + char *rsa_pub; /* strdup'ed public key file */ + char *rsa; /* strdup'ed private key file */ + bool authed; /* the connection has been authenticated fine */ + bool acceptfail; /* used by the SFTP_QUOTE (continue if + quote command fails) */ + sshstate state; /* always use ssh.c:state() to change state! */ + sshstate nextstate; /* the state to goto after stopping */ + CURLcode actualcode; /* the actual error code */ struct curl_slist *quote_item; /* for the quote option */ - char *quote_path1; /* two generic pointers for the QUOTE stuff */ + char *quote_path1; /* two generic pointers for the QUOTE stuff */ char *quote_path2; - char *homedir; /* when doing SFTP we figure out home dir in the - connect phase */ + char *homedir; /* when doing SFTP we figure out home dir in the + connect phase */ /* end of READDIR stuff */ - int secondCreateDirs; /* counter use by the code to see if the - second attempt has been made to change - to/create a directory */ - int orig_waitfor; /* default READ/WRITE bits wait for */ - char *slash_pos; /* used by the SFTP_CREATE_DIRS state */ + int secondCreateDirs; /* counter use by the code to see if the + second attempt has been made to change + to/create a directory */ + int orig_waitfor; /* default READ/WRITE bits wait for */ + char *slash_pos; /* used by the SFTP_CREATE_DIRS state */ #if defined(USE_LIBSSH) char *readdir_linkPath; size_t readdir_len; struct dynbuf readdir_buf; -/* our variables */ + /* our variables */ unsigned kbd_state; /* 0 or 1 */ ssh_key privkey; ssh_key pubkey; @@ -172,11 +172,11 @@ struct ssh_conn { sftp_file sftp_file; sftp_dir sftp_dir; - unsigned sftp_recv_state; /* 0 or 1 */ - int sftp_file_index; /* for async read */ - sftp_attributes readdir_attrs; /* used by the SFTP readdir actions */ + unsigned sftp_recv_state; /* 0 or 1 */ + int sftp_file_index; /* for async read */ + sftp_attributes readdir_attrs; /* used by the SFTP readdir actions */ sftp_attributes readdir_link_attrs; /* used by the SFTP readdir actions */ - sftp_attributes quote_attrs; /* used by the SFTP_QUOTE state */ + sftp_attributes quote_attrs; /* used by the SFTP_QUOTE state */ const char *readdir_filename; /* points within readdir_attrs */ const char *readdir_longentry; @@ -194,9 +194,8 @@ struct ssh_conn { #endif #ifdef HAVE_LIBSSH2_AGENT_API - LIBSSH2_AGENT *ssh_agent; /* proxy to ssh-agent/pageant */ - struct libssh2_agent_publickey *sshagent_identity, - *sshagent_prev_identity; + LIBSSH2_AGENT *ssh_agent; /* proxy to ssh-agent/pageant */ + struct libssh2_agent_publickey *sshagent_identity, *sshagent_prev_identity; #endif /* note that HAVE_LIBSSH2_KNOWNHOST_API is a define set in the libssh2.h @@ -219,7 +218,7 @@ struct ssh_conn { non-configure platforms */ #if !defined(LIBSSH2_VERSION_NUM) || (LIBSSH2_VERSION_NUM < 0x001000) -# error "SCP/SFTP protocols require libssh2 0.16 or later" +#error "SCP/SFTP protocols require libssh2 0.16 or later" #endif #if LIBSSH2_VERSION_NUM >= 0x010000 @@ -263,12 +262,11 @@ extern const struct Curl_handler Curl_handler_sftp; CURLcode Curl_ssh_init(void); void Curl_ssh_cleanup(void); void Curl_ssh_version(char *buffer, size_t buflen); -void Curl_ssh_attach(struct Curl_easy *data, - struct connectdata *conn); +void Curl_ssh_attach(struct Curl_easy *data, struct connectdata *conn); #else /* for non-SSH builds */ #define Curl_ssh_cleanup() -#define Curl_ssh_attach(x,y) +#define Curl_ssh_attach(x, y) #define Curl_ssh_init() 0 #endif diff --git a/vendor/hydra/vendor/curl/lib/vtls/cipher_suite.h b/vendor/hydra/vendor/curl/lib/vtls/cipher_suite.h index 6d980103..bb8e3f66 100644 --- a/vendor/hydra/vendor/curl/lib/vtls/cipher_suite.h +++ b/vendor/hydra/vendor/curl/lib/vtls/cipher_suite.h @@ -26,8 +26,8 @@ #include "curl_setup.h" -#if defined(USE_SECTRANSP) || defined(USE_MBEDTLS) || \ - defined(USE_BEARSSL) || defined(USE_RUSTLS) +#if defined(USE_SECTRANSP) || defined(USE_MBEDTLS) || defined(USE_BEARSSL) || \ + defined(USE_RUSTLS) #include /* Lookup IANA id for cipher suite string, returns 0 if not recognized */ diff --git a/vendor/hydra/vendor/curl/lib/vtls/gtls.h b/vendor/hydra/vendor/curl/lib/vtls/gtls.h index b0ca55bf..25d118d5 100644 --- a/vendor/hydra/vendor/curl/lib/vtls/gtls.h +++ b/vendor/hydra/vendor/curl/lib/vtls/gtls.h @@ -24,12 +24,14 @@ * ***************************************************************************/ -#include "curl_setup.h" #include +#include "curl_setup.h" + #ifdef USE_GNUTLS #include + #include "timeval.h" #ifdef HAVE_GNUTLS_SRP @@ -48,7 +50,7 @@ struct ssl_peer; struct gtls_shared_creds { gnutls_certificate_credentials_t creds; - char *CAfile; /* CAfile path used to generate X509 store */ + char *CAfile; /* CAfile path used to generate X509 store */ struct curltime time; /* when the shared creds was created */ size_t refcount; BIT(trust_setup); /* x509 anchors + CRLs have been set up */ @@ -73,14 +75,11 @@ typedef CURLcode Curl_gtls_ctx_setup_cb(struct Curl_cfilter *cf, struct Curl_easy *data, void *user_data); -CURLcode Curl_gtls_ctx_init(struct gtls_ctx *gctx, - struct Curl_cfilter *cf, - struct Curl_easy *data, - struct ssl_peer *peer, +CURLcode Curl_gtls_ctx_init(struct gtls_ctx *gctx, struct Curl_cfilter *cf, + struct Curl_easy *data, struct ssl_peer *peer, const unsigned char *alpn, size_t alpn_len, Curl_gtls_ctx_setup_cb *cb_setup, - void *cb_user_data, - void *ssl_user_data); + void *cb_user_data, void *ssl_user_data); CURLcode Curl_gtls_client_trust_setup(struct Curl_cfilter *cf, struct Curl_easy *data, @@ -90,8 +89,7 @@ CURLcode Curl_gtls_verifyserver(struct Curl_easy *data, gnutls_session_t session, struct ssl_primary_config *config, struct ssl_config_data *ssl_config, - struct ssl_peer *peer, - const char *pinned_key); + struct ssl_peer *peer, const char *pinned_key); extern const struct Curl_ssl Curl_ssl_gnutls; diff --git a/vendor/hydra/vendor/curl/lib/vtls/mbedtls_threadlock.h b/vendor/hydra/vendor/curl/lib/vtls/mbedtls_threadlock.h index 48462685..16b1248f 100644 --- a/vendor/hydra/vendor/curl/lib/vtls/mbedtls_threadlock.h +++ b/vendor/hydra/vendor/curl/lib/vtls/mbedtls_threadlock.h @@ -28,8 +28,7 @@ #ifdef USE_MBEDTLS -#if (defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)) || \ - defined(_WIN32) +#if (defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)) || defined(_WIN32) int Curl_mbedtlsthreadlock_thread_setup(void); int Curl_mbedtlsthreadlock_thread_cleanup(void); diff --git a/vendor/hydra/vendor/curl/lib/vtls/openssl.h b/vendor/hydra/vendor/curl/lib/vtls/openssl.h index 7aba947d..2b2aa310 100644 --- a/vendor/hydra/vendor/curl/lib/vtls/openssl.h +++ b/vendor/hydra/vendor/curl/lib/vtls/openssl.h @@ -39,18 +39,18 @@ /* Struct to hold a Curl OpenSSL instance */ struct ossl_ctx { /* these ones requires specific SSL-types */ - SSL_CTX* ssl_ctx; - SSL* ssl; - X509* server_cert; + SSL_CTX *ssl_ctx; + SSL *ssl; + X509 *server_cert; BIO_METHOD *bio_method; - CURLcode io_result; /* result of last BIO cfilter operation */ + CURLcode io_result; /* result of last BIO cfilter operation */ #ifndef HAVE_KEYLOG_CALLBACK /* Set to true once a valid keylog entry has been created to avoid dupes. This is a bool and not a bitfield because it is passed by address. */ bool keylog_done; #endif - BIT(x509_store_setup); /* x509 store has been set up */ - BIT(reused_session); /* session-ID was reused for this */ + BIT(x509_store_setup); /* x509 store has been set up */ + BIT(reused_session); /* session-ID was reused for this */ }; typedef CURLcode Curl_ossl_ctx_setup_cb(struct Curl_cfilter *cf, @@ -59,10 +59,8 @@ typedef CURLcode Curl_ossl_ctx_setup_cb(struct Curl_cfilter *cf, typedef int Curl_ossl_new_session_cb(SSL *ssl, SSL_SESSION *ssl_sessionid); -CURLcode Curl_ossl_ctx_init(struct ossl_ctx *octx, - struct Curl_cfilter *cf, - struct Curl_easy *data, - struct ssl_peer *peer, +CURLcode Curl_ossl_ctx_init(struct ossl_ctx *octx, struct Curl_cfilter *cf, + struct Curl_easy *data, struct ssl_peer *peer, int transport, /* TCP or QUIC */ const unsigned char *alpn, size_t alpn_len, Curl_ossl_ctx_setup_cb *cb_setup, @@ -82,18 +80,15 @@ extern const struct Curl_ssl Curl_ssl_openssl; * and configured. */ CURLcode Curl_ssl_setup_x509_store(struct Curl_cfilter *cf, - struct Curl_easy *data, - SSL_CTX *ssl_ctx); + struct Curl_easy *data, SSL_CTX *ssl_ctx); CURLcode Curl_ossl_ctx_configure(struct Curl_cfilter *cf, - struct Curl_easy *data, - SSL_CTX *ssl_ctx); + struct Curl_easy *data, SSL_CTX *ssl_ctx); /* * Add a new session to the cache. Takes ownership of the session. */ -CURLcode Curl_ossl_add_session(struct Curl_cfilter *cf, - struct Curl_easy *data, +CURLcode Curl_ossl_add_session(struct Curl_cfilter *cf, struct Curl_easy *data, const struct ssl_peer *peer, SSL_SESSION *ssl_sessionid); @@ -103,8 +98,7 @@ CURLcode Curl_ossl_add_session(struct Curl_cfilter *cf, * informational purposes only! */ CURLcode Curl_oss_check_peer_cert(struct Curl_cfilter *cf, - struct Curl_easy *data, - struct ossl_ctx *octx, + struct Curl_easy *data, struct ossl_ctx *octx, struct ssl_peer *peer); #endif /* USE_OPENSSL */ diff --git a/vendor/hydra/vendor/curl/lib/vtls/schannel.h b/vendor/hydra/vendor/curl/lib/vtls/schannel.h index b26334bc..af393ab9 100644 --- a/vendor/hydra/vendor/curl/lib/vtls/schannel.h +++ b/vendor/hydra/vendor/curl/lib/vtls/schannel.h @@ -30,7 +30,7 @@ #ifdef _MSC_VER #pragma warning(push) -#pragma warning(disable: 4201) +#pragma warning(disable : 4201) #endif #include #ifdef _MSC_VER @@ -48,11 +48,11 @@ #undef OCSP_RESPONSE #endif -#include #include -#include "curl_sspi.h" +#include #include "cfilters.h" +#include "curl_sspi.h" #include "urldata.h" /* has been included via the above . @@ -69,15 +69,14 @@ * (and only here). */ #if defined(OPENSSL_IS_BORINGSSL) -# undef X509_NAME -# undef X509_CERT_PAIR -# undef X509_EXTENSIONS +#undef X509_NAME +#undef X509_CERT_PAIR +#undef X509_EXTENSIONS #endif extern const struct Curl_ssl Curl_ssl_schannel; -CURLcode Curl_verify_host(struct Curl_cfilter *cf, - struct Curl_easy *data); +CURLcode Curl_verify_host(struct Curl_cfilter *cf, struct Curl_easy *data); CURLcode Curl_verify_certificate(struct Curl_cfilter *cf, struct Curl_easy *data); diff --git a/vendor/hydra/vendor/curl/lib/vtls/schannel_int.h b/vendor/hydra/vendor/curl/lib/vtls/schannel_int.h index 800fdf88..8d557bc1 100644 --- a/vendor/hydra/vendor/curl/lib/vtls/schannel_int.h +++ b/vendor/hydra/vendor/curl/lib/vtls/schannel_int.h @@ -30,13 +30,13 @@ #include "vtls.h" -#if (defined(__MINGW32__) || defined(CERT_CHAIN_REVOCATION_CHECK_CHAIN)) \ - && !defined(CURL_WINDOWS_APP) +#if (defined(__MINGW32__) || defined(CERT_CHAIN_REVOCATION_CHECK_CHAIN)) && \ + !defined(CURL_WINDOWS_APP) #define HAS_MANUAL_VERIFY_API #endif -#if defined(CryptStringToBinary) && defined(CRYPT_STRING_HEX) \ - && !defined(DISABLE_SCHANNEL_CLIENT_CERT) +#if defined(CryptStringToBinary) && defined(CRYPT_STRING_HEX) && \ + !defined(DISABLE_SCHANNEL_CLIENT_CERT) #define HAS_CLIENT_CERT_PATH #endif @@ -62,60 +62,56 @@ #undef CERT_STORE_PROV_MEMORY #undef CERT_STORE_PROV_SYSTEM_A #undef CERT_STORE_PROV_SYSTEM_W -#define CERT_STORE_PROV_MEMORY ((LPCSTR)(size_t)2) -#define CERT_STORE_PROV_SYSTEM_A ((LPCSTR)(size_t)9) -#define CERT_STORE_PROV_SYSTEM_W ((LPCSTR)(size_t)10) +#define CERT_STORE_PROV_MEMORY ((LPCSTR)(size_t)2) +#define CERT_STORE_PROV_SYSTEM_A ((LPCSTR)(size_t)9) +#define CERT_STORE_PROV_SYSTEM_W ((LPCSTR)(size_t)10) #endif #ifndef SCH_CREDENTIALS_VERSION -#define SCH_CREDENTIALS_VERSION 0x00000005 +#define SCH_CREDENTIALS_VERSION 0x00000005 -typedef enum _eTlsAlgorithmUsage -{ - TlsParametersCngAlgUsageKeyExchange, - TlsParametersCngAlgUsageSignature, - TlsParametersCngAlgUsageCipher, - TlsParametersCngAlgUsageDigest, - TlsParametersCngAlgUsageCertSig +typedef enum _eTlsAlgorithmUsage { + TlsParametersCngAlgUsageKeyExchange, + TlsParametersCngAlgUsageSignature, + TlsParametersCngAlgUsageCipher, + TlsParametersCngAlgUsageDigest, + TlsParametersCngAlgUsageCertSig } eTlsAlgorithmUsage; -typedef struct _CRYPTO_SETTINGS -{ - eTlsAlgorithmUsage eAlgorithmUsage; - UNICODE_STRING strCngAlgId; - DWORD cChainingModes; - PUNICODE_STRING rgstrChainingModes; - DWORD dwMinBitLength; - DWORD dwMaxBitLength; -} CRYPTO_SETTINGS, * PCRYPTO_SETTINGS; - -typedef struct _TLS_PARAMETERS -{ - DWORD cAlpnIds; - PUNICODE_STRING rgstrAlpnIds; - DWORD grbitDisabledProtocols; - DWORD cDisabledCrypto; - PCRYPTO_SETTINGS pDisabledCrypto; - DWORD dwFlags; -} TLS_PARAMETERS, * PTLS_PARAMETERS; - -typedef struct _SCH_CREDENTIALS -{ - DWORD dwVersion; - DWORD dwCredFormat; - DWORD cCreds; - PCCERT_CONTEXT* paCred; - HCERTSTORE hRootStore; - - DWORD cMappers; - struct _HMAPPER **aphMappers; - - DWORD dwSessionLifespan; - DWORD dwFlags; - DWORD cTlsParameters; - PTLS_PARAMETERS pTlsParameters; -} SCH_CREDENTIALS, * PSCH_CREDENTIALS; +typedef struct _CRYPTO_SETTINGS { + eTlsAlgorithmUsage eAlgorithmUsage; + UNICODE_STRING strCngAlgId; + DWORD cChainingModes; + PUNICODE_STRING rgstrChainingModes; + DWORD dwMinBitLength; + DWORD dwMaxBitLength; +} CRYPTO_SETTINGS, *PCRYPTO_SETTINGS; + +typedef struct _TLS_PARAMETERS { + DWORD cAlpnIds; + PUNICODE_STRING rgstrAlpnIds; + DWORD grbitDisabledProtocols; + DWORD cDisabledCrypto; + PCRYPTO_SETTINGS pDisabledCrypto; + DWORD dwFlags; +} TLS_PARAMETERS, *PTLS_PARAMETERS; + +typedef struct _SCH_CREDENTIALS { + DWORD dwVersion; + DWORD dwCredFormat; + DWORD cCreds; + PCCERT_CONTEXT *paCred; + HCERTSTORE hRootStore; + + DWORD cMappers; + struct _HMAPPER **aphMappers; + + DWORD dwSessionLifespan; + DWORD dwFlags; + DWORD cTlsParameters; + PTLS_PARAMETERS pTlsParameters; +} SCH_CREDENTIALS, *PSCH_CREDENTIALS; #define SCH_CRED_MAX_SUPPORTED_PARAMETERS 16 #define SCH_CRED_MAX_SUPPORTED_ALPN_IDS 16 @@ -156,7 +152,7 @@ struct schannel_ssl_backend_data { bool recv_sspi_close_notify; /* true if connection closed by close_notify */ bool recv_connection_closed; /* true if connection closed, regardless how */ bool recv_renegotiating; /* true if recv is doing renegotiation */ - bool use_alpn; /* true if ALPN is used for this connection */ + bool use_alpn; /* true if ALPN is used for this connection */ #ifdef HAS_MANUAL_VERIFY_API bool use_manual_cred_validation; /* true if manual cred validation is used */ #endif @@ -164,16 +160,16 @@ struct schannel_ssl_backend_data { }; /* key to use at `multi->proto_hash` */ -#define MPROTO_SCHANNEL_CERT_SHARE_KEY "tls:schannel:cert:share" +#define MPROTO_SCHANNEL_CERT_SHARE_KEY "tls:schannel:cert:share" struct schannel_cert_share { unsigned char CAinfo_blob_digest[CURL_SHA256_DIGEST_LENGTH]; - size_t CAinfo_blob_size; /* CA info blob size */ - char *CAfile; /* CAfile path used to generate - certificate store */ - HCERTSTORE cert_store; /* cached certificate store or - NULL if none */ - struct curltime time; /* when the cached store was created */ + size_t CAinfo_blob_size; /* CA info blob size */ + char *CAfile; /* CAfile path used to generate + certificate store */ + HCERTSTORE cert_store; /* cached certificate store or + NULL if none */ + struct curltime time; /* when the cached store was created */ }; HCERTSTORE Curl_schannel_get_cached_cert_store(struct Curl_cfilter *cf, diff --git a/vendor/hydra/vendor/curl/lib/vtls/vtls.h b/vendor/hydra/vendor/curl/lib/vtls/vtls.h index fce1e001..f3146005 100644 --- a/vendor/hydra/vendor/curl/lib/vtls/vtls.h +++ b/vendor/hydra/vendor/curl/lib/vtls/vtls.h @@ -30,27 +30,25 @@ struct ssl_config_data; struct ssl_primary_config; struct Curl_ssl_session; -#define SSLSUPP_CA_PATH (1<<0) /* supports CAPATH */ -#define SSLSUPP_CERTINFO (1<<1) /* supports CURLOPT_CERTINFO */ -#define SSLSUPP_PINNEDPUBKEY (1<<2) /* supports CURLOPT_PINNEDPUBLICKEY */ -#define SSLSUPP_SSL_CTX (1<<3) /* supports CURLOPT_SSL_CTX */ -#define SSLSUPP_HTTPS_PROXY (1<<4) /* supports access via HTTPS proxies */ -#define SSLSUPP_TLS13_CIPHERSUITES (1<<5) /* supports TLS 1.3 ciphersuites */ -#define SSLSUPP_CAINFO_BLOB (1<<6) -#define SSLSUPP_ECH (1<<7) -#define SSLSUPP_CA_CACHE (1<<8) -#define SSLSUPP_CIPHER_LIST (1<<9) /* supports TLS 1.0-1.2 ciphersuites */ +#define SSLSUPP_CA_PATH (1 << 0) /* supports CAPATH */ +#define SSLSUPP_CERTINFO (1 << 1) /* supports CURLOPT_CERTINFO */ +#define SSLSUPP_PINNEDPUBKEY (1 << 2) /* supports CURLOPT_PINNEDPUBLICKEY */ +#define SSLSUPP_SSL_CTX (1 << 3) /* supports CURLOPT_SSL_CTX */ +#define SSLSUPP_HTTPS_PROXY (1 << 4) /* supports access via HTTPS proxies */ +#define SSLSUPP_TLS13_CIPHERSUITES (1 << 5) /* supports TLS 1.3 ciphersuites \ + */ +#define SSLSUPP_CAINFO_BLOB (1 << 6) +#define SSLSUPP_ECH (1 << 7) +#define SSLSUPP_CA_CACHE (1 << 8) +#define SSLSUPP_CIPHER_LIST (1 << 9) /* supports TLS 1.0-1.2 ciphersuites */ #define ALPN_ACCEPTED "ALPN: server accepted " -#define VTLS_INFOF_NO_ALPN \ +#define VTLS_INFOF_NO_ALPN \ "ALPN: server did not agree on a protocol. Uses default." -#define VTLS_INFOF_ALPN_OFFER_1STR \ - "ALPN: curl offers %s" -#define VTLS_INFOF_ALPN_ACCEPTED_1STR \ - ALPN_ACCEPTED "%s" -#define VTLS_INFOF_ALPN_ACCEPTED_LEN_1STR \ - ALPN_ACCEPTED "%.*s" +#define VTLS_INFOF_ALPN_OFFER_1STR "ALPN: curl offers %s" +#define VTLS_INFOF_ALPN_ACCEPTED_1STR ALPN_ACCEPTED "%s" +#define VTLS_INFOF_ALPN_ACCEPTED_LEN_1STR ALPN_ACCEPTED "%.*s" /* Curl_multi SSL backend-specific data; declared differently by each SSL backend */ @@ -98,8 +96,7 @@ void Curl_ssl_conn_config_cleanup(struct connectdata *conn); * @param proxy match the proxy SSL config or the main one */ bool Curl_ssl_conn_config_match(struct Curl_easy *data, - struct connectdata *candidate, - bool proxy); + struct connectdata *candidate, bool proxy); /* Update certain connection SSL config flags after they have * been changed on the easy handle. Will work for `verifypeer`, @@ -109,8 +106,8 @@ void Curl_ssl_conn_config_update(struct Curl_easy *data, bool for_proxy); /** * Init SSL peer information for filter. Can be called repeatedly. */ -CURLcode Curl_ssl_peer_init(struct ssl_peer *peer, - struct Curl_cfilter *cf, int transport); +CURLcode Curl_ssl_peer_init(struct ssl_peer *peer, struct Curl_cfilter *cf, + int transport); /** * Free all allocated data and reset peer information. */ @@ -132,7 +129,7 @@ CURLcode Curl_ssl_initsessions(struct Curl_easy *, size_t); void Curl_ssl_version(char *buffer, size_t size); /* Certificate information list handling. */ -#define CURL_X509_STR_MAX 100000 +#define CURL_X509_STR_MAX 100000 void Curl_ssl_free_certinfo(struct Curl_easy *data); CURLcode Curl_ssl_init_certinfo(struct Curl_easy *data, int num); @@ -175,8 +172,7 @@ void Curl_ssl_delsessionid(struct Curl_easy *data, void *ssl_sessionid); CURLcode Curl_ssl_random(struct Curl_easy *data, unsigned char *buffer, size_t length); /* Check pinned public key. */ -CURLcode Curl_pin_peer_pubkey(struct Curl_easy *data, - const char *pinnedpubkey, +CURLcode Curl_pin_peer_pubkey(struct Curl_easy *data, const char *pinnedpubkey, const unsigned char *pubkey, size_t pubkeylen); bool Curl_ssl_cert_status_request(void); @@ -200,19 +196,18 @@ bool Curl_ssl_false_start(struct Curl_easy *data); * returned. */ CURLcode Curl_ssl_get_channel_binding(struct Curl_easy *data, int sockindex, - struct dynbuf *binding); + struct dynbuf *binding); #define SSL_SHUTDOWN_TIMEOUT 10000 /* ms */ -CURLcode Curl_ssl_cfilter_add(struct Curl_easy *data, - struct connectdata *conn, +CURLcode Curl_ssl_cfilter_add(struct Curl_easy *data, struct connectdata *conn, int sockindex); CURLcode Curl_cf_ssl_insert_after(struct Curl_cfilter *cf_at, struct Curl_easy *data); -CURLcode Curl_ssl_cfilter_remove(struct Curl_easy *data, - int sockindex, bool send_shutdown); +CURLcode Curl_ssl_cfilter_remove(struct Curl_easy *data, int sockindex, + bool send_shutdown); #ifndef CURL_DISABLE_PROXY CURLcode Curl_cf_ssl_proxy_insert_after(struct Curl_cfilter *cf_at, @@ -245,8 +240,8 @@ struct ssl_config_data *Curl_ssl_cf_get_config(struct Curl_cfilter *cf, /** * Get the primary config relevant for the filter from its connection. */ -struct ssl_primary_config * - Curl_ssl_cf_get_primary_config(struct Curl_cfilter *cf); +struct ssl_primary_config *Curl_ssl_cf_get_primary_config( + struct Curl_cfilter *cf); extern struct Curl_cftype Curl_cft_ssl; #ifndef CURL_DISABLE_PROXY @@ -259,20 +254,20 @@ extern struct Curl_cftype Curl_cft_ssl_proxy; #define Curl_ssl_init() 1 #define Curl_ssl_cleanup() Curl_nop_stmt #define Curl_ssl_close_all(x) Curl_nop_stmt -#define Curl_ssl_set_engine(x,y) CURLE_NOT_BUILT_IN +#define Curl_ssl_set_engine(x, y) CURLE_NOT_BUILT_IN #define Curl_ssl_set_engine_default(x) CURLE_NOT_BUILT_IN #define Curl_ssl_engines_list(x) NULL -#define Curl_ssl_initsessions(x,y) CURLE_OK +#define Curl_ssl_initsessions(x, y) CURLE_OK #define Curl_ssl_free_certinfo(x) Curl_nop_stmt #define Curl_ssl_kill_session(x) Curl_nop_stmt -#define Curl_ssl_random(x,y,z) ((void)x, CURLE_NOT_BUILT_IN) +#define Curl_ssl_random(x, y, z) ((void)x, CURLE_NOT_BUILT_IN) #define Curl_ssl_cert_status_request() FALSE #define Curl_ssl_false_start(a) FALSE -#define Curl_ssl_get_internals(a,b,c,d) NULL -#define Curl_ssl_supports(a,b) FALSE -#define Curl_ssl_cfilter_add(a,b,c) CURLE_NOT_BUILT_IN -#define Curl_ssl_cfilter_remove(a,b,c) CURLE_OK -#define Curl_ssl_cf_get_config(a,b) NULL +#define Curl_ssl_get_internals(a, b, c, d) NULL +#define Curl_ssl_supports(a, b) FALSE +#define Curl_ssl_cfilter_add(a, b, c) CURLE_NOT_BUILT_IN +#define Curl_ssl_cfilter_remove(a, b, c) CURLE_OK +#define Curl_ssl_cf_get_config(a, b) NULL #define Curl_ssl_cf_get_primary_config(a) NULL #endif diff --git a/vendor/hydra/vendor/curl/lib/vtls/vtls_int.h b/vendor/hydra/vendor/curl/lib/vtls/vtls_int.h index 836bfad7..1ff50863 100644 --- a/vendor/hydra/vendor/curl/lib/vtls/vtls_int.h +++ b/vendor/hydra/vendor/curl/lib/vtls/vtls_int.h @@ -23,8 +23,8 @@ * SPDX-License-Identifier: curl * ***************************************************************************/ -#include "curl_setup.h" #include "cfilters.h" +#include "curl_setup.h" #include "urldata.h" #ifdef USE_SSL @@ -40,9 +40,9 @@ /* conservative sizes on the ALPN entries and count we are handling, * we can increase these if we ever feel the need or have to accommodate * ALPN strings from the "outside". */ -#define ALPN_NAME_MAX 10 -#define ALPN_ENTRIES_MAX 3 -#define ALPN_PROTO_BUF_MAX (ALPN_ENTRIES_MAX * (ALPN_NAME_MAX + 1)) +#define ALPN_NAME_MAX 10 +#define ALPN_ENTRIES_MAX 3 +#define ALPN_PROTO_BUF_MAX (ALPN_ENTRIES_MAX * (ALPN_NAME_MAX + 1)) struct alpn_spec { const char entries[ALPN_ENTRIES_MAX][ALPN_NAME_MAX]; @@ -61,8 +61,7 @@ CURLcode Curl_alpn_to_proto_str(struct alpn_proto_buf *buf, CURLcode Curl_alpn_set_negotiated(struct Curl_cfilter *cf, struct Curl_easy *data, - const unsigned char *proto, - size_t proto_len); + const unsigned char *proto, size_t proto_len); /* enum for the nonblocking SSL connection state machine */ typedef enum { @@ -78,29 +77,26 @@ typedef enum { ssl_connection_complete } ssl_connection_state; -#define CURL_SSL_IO_NEED_NONE (0) -#define CURL_SSL_IO_NEED_RECV (1<<0) -#define CURL_SSL_IO_NEED_SEND (1<<1) +#define CURL_SSL_IO_NEED_NONE (0) +#define CURL_SSL_IO_NEED_RECV (1 << 0) +#define CURL_SSL_IO_NEED_SEND (1 << 1) /* Information in each SSL cfilter context: cf->ctx */ struct ssl_connect_data { struct ssl_peer peer; - const struct alpn_spec *alpn; /* ALPN to use or NULL for none */ - void *backend; /* vtls backend specific props */ - struct cf_call_data call_data; /* data handle used in current call */ - struct curltime handshake_done; /* time when handshake finished */ + const struct alpn_spec *alpn; /* ALPN to use or NULL for none */ + void *backend; /* vtls backend specific props */ + struct cf_call_data call_data; /* data handle used in current call */ + struct curltime handshake_done; /* time when handshake finished */ ssl_connection_state state; ssl_connect_state connecting_state; - int io_need; /* TLS signals special SEND/RECV needs */ - BIT(use_alpn); /* if ALPN shall be used in handshake */ - BIT(peer_closed); /* peer has closed connection */ + int io_need; /* TLS signals special SEND/RECV needs */ + BIT(use_alpn); /* if ALPN shall be used in handshake */ + BIT(peer_closed); /* peer has closed connection */ }; - #undef CF_CTX_CALL_DATA -#define CF_CTX_CALL_DATA(cf) \ - ((struct ssl_connect_data *)(cf)->ctx)->call_data - +#define CF_CTX_CALL_DATA(cf) ((struct ssl_connect_data *)(cf)->ctx)->call_data /* Definitions for SSL Implementations */ @@ -120,24 +116,21 @@ struct Curl_ssl { int (*check_cxn)(struct Curl_cfilter *cf, struct Curl_easy *data); CURLcode (*shut_down)(struct Curl_cfilter *cf, struct Curl_easy *data, bool send_shutdown, bool *done); - bool (*data_pending)(struct Curl_cfilter *cf, - const struct Curl_easy *data); + bool (*data_pending)(struct Curl_cfilter *cf, const struct Curl_easy *data); /* return 0 if a find random is filled in */ CURLcode (*random)(struct Curl_easy *data, unsigned char *entropy, size_t length); bool (*cert_status_request)(void); - CURLcode (*connect_blocking)(struct Curl_cfilter *cf, - struct Curl_easy *data); + CURLcode (*connect_blocking)(struct Curl_cfilter *cf, struct Curl_easy *data); CURLcode (*connect_nonblocking)(struct Curl_cfilter *cf, - struct Curl_easy *data, - bool *done); + struct Curl_easy *data, bool *done); /* During handshake/shutdown, adjust the pollset to include the socket * for POLLOUT or POLLIN as needed. Mandatory. */ void (*adjust_pollset)(struct Curl_cfilter *cf, struct Curl_easy *data, - struct easy_pollset *ps); + struct easy_pollset *ps); void *(*get_internals)(struct ssl_connect_data *connssl, CURLINFO info); void (*close)(struct Curl_cfilter *cf, struct Curl_easy *data); void (*close_all)(struct Curl_easy *data); @@ -148,7 +141,7 @@ struct Curl_ssl { bool (*false_start)(void); CURLcode (*sha256sum)(const unsigned char *input, size_t inputlen, - unsigned char *sha256sum, size_t sha256sumlen); + unsigned char *sha256sum, size_t sha256sumlen); bool (*attach_data)(struct Curl_cfilter *cf, struct Curl_easy *data); void (*detach_data)(struct Curl_cfilter *cf, struct Curl_easy *data); @@ -160,12 +153,10 @@ struct Curl_ssl { CURLcode (*get_channel_binding)(struct Curl_easy *data, int sockindex, struct dynbuf *binding); - }; extern const struct Curl_ssl *Curl_ssl; - int Curl_none_init(void); void Curl_none_cleanup(void); CURLcode Curl_none_shutdown(struct Curl_cfilter *cf, struct Curl_easy *data, @@ -181,7 +172,7 @@ CURLcode Curl_none_set_engine_default(struct Curl_easy *data); struct curl_slist *Curl_none_engines_list(struct Curl_easy *data); bool Curl_none_false_start(void); void Curl_ssl_adjust_pollset(struct Curl_cfilter *cf, struct Curl_easy *data, - struct easy_pollset *ps); + struct easy_pollset *ps); /** * Get the SSL filter below the given one or NULL if there is none. @@ -194,10 +185,8 @@ bool Curl_ssl_cf_is_proxy(struct Curl_cfilter *cf); * is properly taken (e.g. its refcount is incremented * under sessionid mutex). */ -bool Curl_ssl_getsessionid(struct Curl_cfilter *cf, - struct Curl_easy *data, - const struct ssl_peer *peer, - void **ssl_sessionid, +bool Curl_ssl_getsessionid(struct Curl_cfilter *cf, struct Curl_easy *data, + const struct ssl_peer *peer, void **ssl_sessionid, size_t *idsize); /* set 0 if unknown */ /* Set a TLS session ID for `peer`. Replaces an existing session ID if @@ -209,21 +198,19 @@ bool Curl_ssl_getsessionid(struct Curl_cfilter *cf, * Caller must ensure that it has properly shared ownership of this sessionid * object with cache (e.g. incrementing refcount on success) */ -CURLcode Curl_ssl_set_sessionid(struct Curl_cfilter *cf, - struct Curl_easy *data, - const struct ssl_peer *peer, - void *sessionid, +CURLcode Curl_ssl_set_sessionid(struct Curl_cfilter *cf, struct Curl_easy *data, + const struct ssl_peer *peer, void *sessionid, size_t sessionid_size, Curl_ssl_sessionid_dtor *sessionid_free_cb); -#include "openssl.h" /* OpenSSL versions */ -#include "gtls.h" /* GnuTLS versions */ -#include "wolfssl.h" /* wolfSSL versions */ -#include "schannel.h" /* Schannel SSPI version */ -#include "sectransp.h" /* SecureTransport (Darwin) version */ -#include "mbedtls.h" /* mbedTLS versions */ -#include "bearssl.h" /* BearSSL versions */ -#include "rustls.h" /* Rustls versions */ +#include "bearssl.h" /* BearSSL versions */ +#include "gtls.h" /* GnuTLS versions */ +#include "mbedtls.h" /* mbedTLS versions */ +#include "openssl.h" /* OpenSSL versions */ +#include "rustls.h" /* Rustls versions */ +#include "schannel.h" /* Schannel SSPI version */ +#include "sectransp.h" /* SecureTransport (Darwin) version */ +#include "wolfssl.h" /* wolfSSL versions */ #endif /* USE_SSL */ diff --git a/vendor/hydra/vendor/curl/lib/vtls/wolfssl.h b/vendor/hydra/vendor/curl/lib/vtls/wolfssl.h index 318d8b4a..64c6ad9e 100644 --- a/vendor/hydra/vendor/curl/lib/vtls/wolfssl.h +++ b/vendor/hydra/vendor/curl/lib/vtls/wolfssl.h @@ -26,10 +26,10 @@ #include "curl_setup.h" #ifdef USE_WOLFSSL -#include +#include #include #include -#include +#include #include "urldata.h" @@ -37,8 +37,8 @@ extern const struct Curl_ssl Curl_ssl_wolfssl; struct wolfssl_ctx { WOLFSSL_CTX *ctx; - WOLFSSL *handle; - CURLcode io_result; /* result of last BIO cfilter operation */ + WOLFSSL *handle; + CURLcode io_result; /* result of last BIO cfilter operation */ int io_send_blocked_len; /* length of last BIO write that EAGAINed */ BIT(x509_store_setup); /* x509 store has been set up */ BIT(shutting_down); /* TLS is being shut down */ diff --git a/vendor/hydra/vendor/curl/lib/vtls/x509asn1.h b/vendor/hydra/vendor/curl/lib/vtls/x509asn1.h index 5b48596c..fdbfb1c0 100644 --- a/vendor/hydra/vendor/curl/lib/vtls/x509asn1.h +++ b/vendor/hydra/vendor/curl/lib/vtls/x509asn1.h @@ -27,9 +27,8 @@ #include "curl_setup.h" -#if defined(USE_GNUTLS) || defined(USE_WOLFSSL) || \ - defined(USE_SCHANNEL) || defined(USE_SECTRANSP) || \ - defined(USE_MBEDTLS) +#if defined(USE_GNUTLS) || defined(USE_WOLFSSL) || defined(USE_SCHANNEL) || \ + defined(USE_SECTRANSP) || defined(USE_MBEDTLS) #include "cfilters.h" #include "urldata.h" @@ -40,12 +39,12 @@ /* ASN.1 parsed element. */ struct Curl_asn1Element { - const char *header; /* Pointer to header byte. */ - const char *beg; /* Pointer to element data. */ - const char *end; /* Pointer to 1st byte after element. */ - unsigned char class; /* ASN.1 element class. */ - unsigned char tag; /* ASN.1 element tag. */ - bool constructed; /* Element is constructed. */ + const char *header; /* Pointer to header byte. */ + const char *beg; /* Pointer to element data. */ + const char *end; /* Pointer to 1st byte after element. */ + unsigned char class; /* ASN.1 element class. */ + unsigned char tag; /* ASN.1 element tag. */ + bool constructed; /* Element is constructed. */ }; /* X509 certificate: RFC 5280. */ @@ -71,8 +70,8 @@ struct Curl_X509certificate { * Prototypes. */ -int Curl_parseX509(struct Curl_X509certificate *cert, - const char *beg, const char *end); +int Curl_parseX509(struct Curl_X509certificate *cert, const char *beg, + const char *end); CURLcode Curl_extract_certinfo(struct Curl_easy *data, int certnum, const char *beg, const char *end); CURLcode Curl_verifyhost(struct Curl_cfilter *cf, struct Curl_easy *data, @@ -80,11 +79,11 @@ CURLcode Curl_verifyhost(struct Curl_cfilter *cf, struct Curl_easy *data, #ifdef UNITTESTS #if defined(USE_GNUTLS) || defined(USE_SCHANNEL) || defined(USE_SECTRANSP) || \ - defined(USE_MBEDTLS) + defined(USE_MBEDTLS) /* used by unit1656.c */ -CURLcode Curl_x509_GTime2str(struct dynbuf *store, - const char *beg, const char *end); +CURLcode Curl_x509_GTime2str(struct dynbuf *store, const char *beg, + const char *end); #endif #endif diff --git a/vendor/hydra/vendor/curl/lib/warnless.h b/vendor/hydra/vendor/curl/lib/warnless.h index 6adf63a7..8fd70af9 100644 --- a/vendor/hydra/vendor/curl/lib/warnless.h +++ b/vendor/hydra/vendor/curl/lib/warnless.h @@ -31,7 +31,7 @@ #endif #define CURLX_FUNCTION_CAST(target_type, func) \ - (target_type)(void (*) (void))(func) + (target_type)(void (*)(void))(func) unsigned short curlx_ultous(unsigned long ulnum); @@ -83,9 +83,9 @@ ssize_t curlx_write(int fd, const void *buf, size_t count); #define HEADER_CURL_WARNLESS_H_REDEFS #if defined(_WIN32) -#undef read -#define read(fd, buf, count) curlx_read(fd, buf, count) -#undef write +#undef read +#define read(fd, buf, count) curlx_read(fd, buf, count) +#undef write #define write(fd, buf, count) curlx_write(fd, buf, count) #endif diff --git a/vendor/hydra/vendor/curl/lib/ws.h b/vendor/hydra/vendor/curl/lib/ws.h index 398900cc..d49b4152 100644 --- a/vendor/hydra/vendor/curl/lib/ws.h +++ b/vendor/hydra/vendor/curl/lib/ws.h @@ -35,16 +35,12 @@ /* a client-side WS frame decoder, parsing frame headers and * payload, keeping track of current position and stats */ -enum ws_dec_state { - WS_DEC_INIT, - WS_DEC_HEAD, - WS_DEC_PAYLOAD -}; +enum ws_dec_state { WS_DEC_INIT, WS_DEC_HEAD, WS_DEC_PAYLOAD }; struct ws_decoder { - int frame_age; /* zero */ - int frame_flags; /* See the CURLWS_* defines */ - curl_off_t payload_offset; /* the offset parsing is at */ + int frame_age; /* zero */ + int frame_flags; /* See the CURLWS_* defines */ + curl_off_t payload_offset; /* the offset parsing is at */ curl_off_t payload_len; unsigned char head[10]; int head_len, head_total; @@ -54,23 +50,23 @@ struct ws_decoder { /* a client-side WS frame encoder, generating frame headers and * converting payloads, tracking remaining data in current frame */ struct ws_encoder { - curl_off_t payload_len; /* payload length of current frame */ - curl_off_t payload_remain; /* remaining payload of current */ - unsigned int xori; /* xor index */ - unsigned char mask[4]; /* 32-bit mask for this connection */ - unsigned char firstbyte; /* first byte of frame we encode */ + curl_off_t payload_len; /* payload length of current frame */ + curl_off_t payload_remain; /* remaining payload of current */ + unsigned int xori; /* xor index */ + unsigned char mask[4]; /* 32-bit mask for this connection */ + unsigned char firstbyte; /* first byte of frame we encode */ bool contfragment; /* set TRUE if the previous fragment sent was not final */ }; /* A websocket connection with en- and decoder that treat frames * and keep track of boundaries. */ struct websocket { - struct Curl_easy *data; /* used for write callback handling */ - struct ws_decoder dec; /* decode of we frames */ - struct ws_encoder enc; /* decode of we frames */ - struct bufq recvbuf; /* raw data from the server */ - struct bufq sendbuf; /* raw data to be sent to the server */ - struct curl_ws_frame frame; /* the current WS FRAME received */ + struct Curl_easy *data; /* used for write callback handling */ + struct ws_decoder dec; /* decode of we frames */ + struct ws_encoder enc; /* decode of we frames */ + struct bufq recvbuf; /* raw data from the server */ + struct bufq sendbuf; /* raw data to be sent to the server */ + struct curl_ws_frame frame; /* the current WS FRAME received */ }; CURLcode Curl_ws_request(struct Curl_easy *data, REQTYPE *req); @@ -81,9 +77,8 @@ extern const struct Curl_handler Curl_handler_ws; extern const struct Curl_handler Curl_handler_wss; #endif - #else -#define Curl_ws_request(x,y) CURLE_OK +#define Curl_ws_request(x, y) CURLE_OK #define Curl_ws_free(x) Curl_nop_stmt #endif diff --git a/vendor/hydra/vendor/uwebsockets/src/App.h b/vendor/hydra/vendor/uwebsockets/src/App.h index db916822..35903fde 100644 --- a/vendor/hydra/vendor/uwebsockets/src/App.h +++ b/vendor/hydra/vendor/uwebsockets/src/App.h @@ -20,637 +20,756 @@ #define _CRT_SECURE_NO_WARNINGS -#include #include +#include #include namespace uWS { - /* Safari 15.0 - 15.3 has a completely broken compression implementation (client_no_context_takeover not - * properly implemented) - so we fully disable compression for this browser :-( - * see https://github.com/uNetworking/uWebSockets/issues/1347 */ - inline bool hasBrokenCompression(std::string_view userAgent) { - size_t posStart = userAgent.find(" Version/15."); - if (posStart == std::string_view::npos) return false; - posStart += 12; - - size_t posEnd = userAgent.find(' ', posStart); - if (posEnd == std::string_view::npos) return false; - - unsigned int minorVersion = 0; - auto result = std::from_chars(userAgent.data() + posStart, userAgent.data() + posEnd, minorVersion); - if (result.ec != std::errc()) return false; - if (result.ptr != userAgent.data() + posEnd) return false; // do not accept trailing chars - if (minorVersion > 3) return false; // we target just Safari 15.0 - 15.3 - - if (userAgent.find(" Safari/", posEnd) == std::string_view::npos) return false; - - return true; - } +/* Safari 15.0 - 15.3 has a completely broken compression implementation + * (client_no_context_takeover not properly implemented) - so we fully disable + * compression for this browser :-( see + * https://github.com/uNetworking/uWebSockets/issues/1347 */ +inline bool hasBrokenCompression(std::string_view userAgent) { + size_t posStart = userAgent.find(" Version/15."); + if (posStart == std::string_view::npos) return false; + posStart += 12; + + size_t posEnd = userAgent.find(' ', posStart); + if (posEnd == std::string_view::npos) return false; + + unsigned int minorVersion = 0; + auto result = std::from_chars(userAgent.data() + posStart, + userAgent.data() + posEnd, minorVersion); + if (result.ec != std::errc()) return false; + if (result.ptr != userAgent.data() + posEnd) + return false; // do not accept trailing chars + if (minorVersion > 3) return false; // we target just Safari 15.0 - 15.3 + + if (userAgent.find(" Safari/", posEnd) == std::string_view::npos) + return false; + + return true; } +} // namespace uWS -/* An app is a convenience wrapper of some of the most used fuctionalities and allows a - * builder-pattern kind of init. Apps operate on the implicit thread local Loop */ +/* An app is a convenience wrapper of some of the most used fuctionalities and + * allows a builder-pattern kind of init. Apps operate on the implicit thread + * local Loop */ #include "HttpContext.h" #include "HttpResponse.h" -#include "WebSocketContext.h" -#include "WebSocket.h" #include "PerMessageDeflate.h" +#include "WebSocket.h" +#include "WebSocketContext.h" namespace uWS { - /* This one matches us_socket_context_options_t but has default values */ - struct SocketContextOptions { - const char *key_file_name = nullptr; - const char *cert_file_name = nullptr; - const char *passphrase = nullptr; - const char *dh_params_file_name = nullptr; - const char *ca_file_name = nullptr; - const char *ssl_ciphers = nullptr; - int ssl_prefer_low_memory_usage = 0; - - /* Conversion operator used internally */ - operator struct us_socket_context_options_t() const { - struct us_socket_context_options_t socket_context_options; - memcpy(&socket_context_options, this, sizeof(SocketContextOptions)); - return socket_context_options; - } - }; - - static_assert(sizeof(struct us_socket_context_options_t) == sizeof(SocketContextOptions), "Mismatching uSockets/uWebSockets ABI"); +/* This one matches us_socket_context_options_t but has default values */ +struct SocketContextOptions { + const char *key_file_name = nullptr; + const char *cert_file_name = nullptr; + const char *passphrase = nullptr; + const char *dh_params_file_name = nullptr; + const char *ca_file_name = nullptr; + const char *ssl_ciphers = nullptr; + int ssl_prefer_low_memory_usage = 0; + + /* Conversion operator used internally */ + operator struct us_socket_context_options_t() const { + struct us_socket_context_options_t socket_context_options; + memcpy(&socket_context_options, this, sizeof(SocketContextOptions)); + return socket_context_options; + } +}; + +static_assert(sizeof(struct us_socket_context_options_t) == + sizeof(SocketContextOptions), + "Mismatching uSockets/uWebSockets ABI"); template struct TemplatedApp { -private: - /* The app always owns at least one http context, but creates websocket contexts on demand */ - HttpContext *httpContext; - /* WebSocketContexts are of differing type, but we as owners and creators must delete them correctly */ - std::vector> webSocketContextDeleters; - - std::vector webSocketContexts; - -public: - - TopicTree *topicTree = nullptr; - - /* Server name */ - BuilderPatternReturnType &&addServerName(std::string hostname_pattern, SocketContextOptions options = {}) { - - /* Do nothing if not even on SSL */ - if constexpr (SSL) { - /* First we create a new router for this domain */ - auto *domainRouter = new HttpRouter::RouterData>(); - - us_socket_context_add_server_name(SSL, (struct us_socket_context_t *) httpContext, hostname_pattern.c_str(), options, domainRouter); - } - - return std::move(static_cast(*this)); - } - - BuilderPatternReturnType &&removeServerName(std::string hostname_pattern) { - - /* This will do for now, would be better if us_socket_context_remove_server_name returned the user data */ - auto *domainRouter = us_socket_context_find_server_name_userdata(SSL, (struct us_socket_context_t *) httpContext, hostname_pattern.c_str()); - if (domainRouter) { - delete (HttpRouter::RouterData> *) domainRouter; - } - - us_socket_context_remove_server_name(SSL, (struct us_socket_context_t *) httpContext, hostname_pattern.c_str()); - return std::move(static_cast(*this)); - } - - BuilderPatternReturnType &&missingServerName(MoveOnlyFunction handler) { - - if (!constructorFailed()) { - httpContext->getSocketContextData()->missingServerNameHandler = std::move(handler); - - us_socket_context_on_server_name(SSL, (struct us_socket_context_t *) httpContext, [](struct us_socket_context_t *context, const char *hostname) { - - /* This is the only requirements of being friends with HttpContextData */ - HttpContext *httpContext = (HttpContext *) context; - httpContext->getSocketContextData()->missingServerNameHandler(hostname); - }); - } - - return std::move(static_cast(*this)); - } - - /* Returns the SSL_CTX of this app, or nullptr. */ - void *getNativeHandle() { - return us_socket_context_get_native_handle(SSL, (struct us_socket_context_t *) httpContext); - } - - /* Attaches a "filter" function to track socket connections/disconnections */ - BuilderPatternReturnType &&filter(MoveOnlyFunction *, int)> &&filterHandler) { - httpContext->filter(std::move(filterHandler)); - - return std::move(static_cast(*this)); - } - - /* Publishes a message to all websocket contexts - conceptually as if publishing to the one single - * TopicTree of this app (technically there are many TopicTrees, however the concept is that one - * app has one conceptual Topic tree) */ - bool publish(std::string_view topic, std::string_view message, OpCode opCode, bool compress = false) { - /* Anything big bypasses corking efforts */ - if (message.length() >= LoopData::CORK_BUFFER_SIZE) { - return topicTree->publishBig(nullptr, topic, {message, opCode, compress}, [](Subscriber *s, TopicTreeBigMessage &message) { - auto *ws = (WebSocket *) s->user; - - /* Send will drain if needed */ - ws->send(message.message, (OpCode)message.opCode, message.compress); - }); - } else { - return topicTree->publish(nullptr, topic, {std::string(message), opCode, compress}); - } - } - - /* Returns number of subscribers for this topic, or 0 for failure. - * This function should probably be optimized a lot in future releases, - * it could be O(1) with a hash map of fullnames and their counts. */ - unsigned int numSubscribers(std::string_view topic) { - Topic *t = topicTree->lookupTopic(topic); - if (t) { - return (unsigned int) t->size(); - } - - return 0; - } - - ~TemplatedApp() { - /* Let's just put everything here */ - if (httpContext) { - httpContext->free(); - - /* Free all our webSocketContexts in a type less way */ - for (auto &webSocketContextDeleter : webSocketContextDeleters) { - webSocketContextDeleter(); + private: + /* The app always owns at least one http context, but creates websocket + * contexts on demand */ + HttpContext *httpContext; + /* WebSocketContexts are of differing type, but we as owners and creators must + * delete them correctly */ + std::vector> webSocketContextDeleters; + + std::vector webSocketContexts; + + public: + TopicTree *topicTree = nullptr; + + /* Server name */ + BuilderPatternReturnType &&addServerName(std::string hostname_pattern, + SocketContextOptions options = {}) { + /* Do nothing if not even on SSL */ + if constexpr (SSL) { + /* First we create a new router for this domain */ + auto *domainRouter = + new HttpRouter::RouterData>(); + + us_socket_context_add_server_name( + SSL, (struct us_socket_context_t *)httpContext, + hostname_pattern.c_str(), options, domainRouter); + } + + return std::move(static_cast(*this)); + } + + BuilderPatternReturnType &&removeServerName(std::string hostname_pattern) { + /* This will do for now, would be better if + * us_socket_context_remove_server_name returned the user data */ + auto *domainRouter = us_socket_context_find_server_name_userdata( + SSL, (struct us_socket_context_t *)httpContext, + hostname_pattern.c_str()); + if (domainRouter) { + delete ( + HttpRouter::RouterData> *)domainRouter; + } + + us_socket_context_remove_server_name( + SSL, (struct us_socket_context_t *)httpContext, + hostname_pattern.c_str()); + return std::move(static_cast(*this)); + } + + BuilderPatternReturnType &&missingServerName( + MoveOnlyFunction handler) { + if (!constructorFailed()) { + httpContext->getSocketContextData()->missingServerNameHandler = + std::move(handler); + + us_socket_context_on_server_name( + SSL, (struct us_socket_context_t *)httpContext, + [](struct us_socket_context_t *context, const char *hostname) { + /* This is the only requirements of being friends with + * HttpContextData */ + HttpContext *httpContext = (HttpContext *)context; + httpContext->getSocketContextData()->missingServerNameHandler( + hostname); + }); + } + + return std::move(static_cast(*this)); + } + + /* Returns the SSL_CTX of this app, or nullptr. */ + void *getNativeHandle() { + return us_socket_context_get_native_handle( + SSL, (struct us_socket_context_t *)httpContext); + } + + /* Attaches a "filter" function to track socket connections/disconnections */ + BuilderPatternReturnType &&filter( + MoveOnlyFunction *, int)> &&filterHandler) { + httpContext->filter(std::move(filterHandler)); + + return std::move(static_cast(*this)); + } + + /* Publishes a message to all websocket contexts - conceptually as if + * publishing to the one single TopicTree of this app (technically there are + * many TopicTrees, however the concept is that one app has one conceptual + * Topic tree) */ + bool publish(std::string_view topic, std::string_view message, OpCode opCode, + bool compress = false) { + /* Anything big bypasses corking efforts */ + if (message.length() >= LoopData::CORK_BUFFER_SIZE) { + return topicTree->publishBig( + nullptr, topic, {message, opCode, compress}, + [](Subscriber *s, TopicTreeBigMessage &message) { + auto *ws = (WebSocket *)s->user; + + /* Send will drain if needed */ + ws->send(message.message, (OpCode)message.opCode, message.compress); + }); + } else { + return topicTree->publish(nullptr, topic, + {std::string(message), opCode, compress}); + } + } + + /* Returns number of subscribers for this topic, or 0 for failure. + * This function should probably be optimized a lot in future releases, + * it could be O(1) with a hash map of fullnames and their counts. */ + unsigned int numSubscribers(std::string_view topic) { + Topic *t = topicTree->lookupTopic(topic); + if (t) { + return (unsigned int)t->size(); + } + + return 0; + } + + ~TemplatedApp() { + /* Let's just put everything here */ + if (httpContext) { + httpContext->free(); + + /* Free all our webSocketContexts in a type less way */ + for (auto &webSocketContextDeleter : webSocketContextDeleters) { + webSocketContextDeleter(); + } + } + + /* Delete TopicTree */ + if (topicTree) { + /* And unregister loop callbacks */ + /* We must unregister any loop post handler here */ + Loop::get()->removePostHandler(topicTree); + Loop::get()->removePreHandler(topicTree); + + delete topicTree; + } + } + + /* Disallow copying, only move */ + TemplatedApp(const TemplatedApp &other) = delete; + + TemplatedApp(TemplatedApp &&other) { + /* Move HttpContext */ + httpContext = other.httpContext; + other.httpContext = nullptr; + + /* Move webSocketContextDeleters */ + webSocketContextDeleters = std::move(other.webSocketContextDeleters); + + webSocketContexts = std::move(other.webSocketContexts); + + /* Move TopicTree */ + topicTree = other.topicTree; + other.topicTree = nullptr; + } + + TemplatedApp(SocketContextOptions options = {}) { + httpContext = HttpContext::create(Loop::get(), options); + + /* Register default handler for 404 (can be overridden by user) */ + this->any("/*", [](auto *res, auto * /*req*/) { + res->writeStatus("404 File Not Found"); + res->end( + "

File Not Found


uWebSockets/20 " + "Server"); + }); + } + + bool constructorFailed() { return !httpContext; } + + template + struct WebSocketBehavior { + /* Disabled compression by default - probably a bad default */ + CompressOptions compression = DISABLED; + /* Maximum message size we can receive */ + unsigned int maxPayloadLength = 16 * 1024; + /* 2 minutes timeout is good */ + unsigned short idleTimeout = 120; + /* 64kb backpressure is probably good */ + unsigned int maxBackpressure = 64 * 1024; + bool closeOnBackpressureLimit = false; + /* This one depends on kernel timeouts and is a bad default */ + bool resetIdleTimeoutOnSend = false; + /* A good default, esp. for newcomers */ + bool sendPingsAutomatically = true; + /* Maximum socket lifetime in minutes before forced closure (defaults to + * disabled) */ + unsigned short maxLifetime = 0; + MoveOnlyFunction *, HttpRequest *, + struct us_socket_context_t *)> + upgrade = nullptr; + MoveOnlyFunction *)> open = nullptr; + MoveOnlyFunction *, std::string_view, + OpCode)> + message = nullptr; + MoveOnlyFunction *, std::string_view, + OpCode)> + dropped = nullptr; + MoveOnlyFunction *)> drain = nullptr; + MoveOnlyFunction *, std::string_view)> + ping = nullptr; + MoveOnlyFunction *, std::string_view)> + pong = nullptr; + MoveOnlyFunction *, std::string_view, + int, int)> + subscription = nullptr; + MoveOnlyFunction *, int, + std::string_view)> + close = nullptr; + }; + + /* Closes all sockets including listen sockets. */ + BuilderPatternReturnType &&close() { + us_socket_context_close(SSL, (struct us_socket_context_t *)httpContext); + for (void *webSocketContext : webSocketContexts) { + us_socket_context_close(SSL, + (struct us_socket_context_t *)webSocketContext); + } + + return std::move(static_cast(*this)); + } + + template + BuilderPatternReturnType &&ws(std::string pattern, + WebSocketBehavior &&behavior) { + /* Don't compile if alignment rules cannot be satisfied */ + static_assert( + alignof(UserData) <= LIBUS_EXT_ALIGNMENT, + "µWebSockets cannot satisfy UserData alignment requirements. You need " + "to recompile µSockets with LIBUS_EXT_ALIGNMENT adjusted accordingly."); + + if (!httpContext) { + return std::move(static_cast(*this)); + } + + /* Terminate on misleading idleTimeout values */ + if (behavior.idleTimeout && behavior.idleTimeout < 8) { + std::cerr << "Error: idleTimeout must be either 0 or greater than 8!" + << std::endl; + std::terminate(); + } + + /* Maximum idleTimeout is 16 minutes */ + if (behavior.idleTimeout > 240 * 4) { + std::cerr << "Error: idleTimeout must not be greater than 960 seconds!" + << std::endl; + std::terminate(); + } + + /* Maximum maxLifetime is 4 hours */ + if (behavior.maxLifetime > 240) { + std::cerr << "Error: maxLifetime must not be greater than 240 minutes!" + << std::endl; + std::terminate(); + } + + /* If we don't have a TopicTree yet, create one now */ + if (!topicTree) { + bool needsUncork = false; + topicTree = new TopicTree( + [needsUncork]( + Subscriber *s, TopicTreeMessage &message, + TopicTree::IteratorFlags + flags) mutable { + /* Subscriber's user is the socket */ + /* Unfortunately we need to cast is to PerSocketData = int + * since many different WebSocketContexts use the same + * TopicTree now */ + auto *ws = (WebSocket *)s->user; + + /* If this is the first message we try and cork */ + if (flags & TopicTree::IteratorFlags::FIRST) { + if (ws->canCork() && !ws->isCorked()) { + ((AsyncSocket *)ws)->cork(); + needsUncork = true; + } } - } - - /* Delete TopicTree */ - if (topicTree) { - /* And unregister loop callbacks */ - /* We must unregister any loop post handler here */ - Loop::get()->removePostHandler(topicTree); - Loop::get()->removePreHandler(topicTree); - - delete topicTree; - } - } - - /* Disallow copying, only move */ - TemplatedApp(const TemplatedApp &other) = delete; - - TemplatedApp(TemplatedApp &&other) { - /* Move HttpContext */ - httpContext = other.httpContext; - other.httpContext = nullptr; - /* Move webSocketContextDeleters */ - webSocketContextDeleters = std::move(other.webSocketContextDeleters); + /* If we ever overstep maxBackpresure, exit immediately */ + if (WebSocket::SendStatus::DROPPED == + ws->send(message.message, (OpCode)message.opCode, + message.compress)) { + if (needsUncork) { + ((AsyncSocket *)ws)->uncork(); + needsUncork = false; + } + /* Stop draining */ + return true; + } - webSocketContexts = std::move(other.webSocketContexts); + /* If this is the last message we uncork if we are corked */ + if (flags & TopicTree::IteratorFlags::LAST) { + /* We should not uncork in all cases? */ + if (needsUncork) { + ((AsyncSocket *)ws)->uncork(); + } + } - /* Move TopicTree */ - topicTree = other.topicTree; - other.topicTree = nullptr; - } + /* Success */ + return false; + }); - TemplatedApp(SocketContextOptions options = {}) { - httpContext = HttpContext::create(Loop::get(), options); + /* And hook it up with the loop */ + /* We empty for both pre and post just to make sure */ + Loop::get()->addPostHandler(topicTree, + [topicTree = topicTree](Loop * /*loop*/) { + /* Commit pub/sub batches every loop + * iteration */ + topicTree->drain(); + }); - /* Register default handler for 404 (can be overridden by user) */ - this->any("/*", [](auto *res, auto */*req*/) { - res->writeStatus("404 File Not Found"); - res->end("

File Not Found


uWebSockets/20 Server"); - }); + Loop::get()->addPreHandler(topicTree, + [topicTree = topicTree](Loop * /*loop*/) { + /* Commit pub/sub batches every loop + * iteration */ + topicTree->drain(); + }); } - bool constructorFailed() { - return !httpContext; - } - - template - struct WebSocketBehavior { - /* Disabled compression by default - probably a bad default */ - CompressOptions compression = DISABLED; - /* Maximum message size we can receive */ - unsigned int maxPayloadLength = 16 * 1024; - /* 2 minutes timeout is good */ - unsigned short idleTimeout = 120; - /* 64kb backpressure is probably good */ - unsigned int maxBackpressure = 64 * 1024; - bool closeOnBackpressureLimit = false; - /* This one depends on kernel timeouts and is a bad default */ - bool resetIdleTimeoutOnSend = false; - /* A good default, esp. for newcomers */ - bool sendPingsAutomatically = true; - /* Maximum socket lifetime in minutes before forced closure (defaults to disabled) */ - unsigned short maxLifetime = 0; - MoveOnlyFunction *, HttpRequest *, struct us_socket_context_t *)> upgrade = nullptr; - MoveOnlyFunction *)> open = nullptr; - MoveOnlyFunction *, std::string_view, OpCode)> message = nullptr; - MoveOnlyFunction *, std::string_view, OpCode)> dropped = nullptr; - MoveOnlyFunction *)> drain = nullptr; - MoveOnlyFunction *, std::string_view)> ping = nullptr; - MoveOnlyFunction *, std::string_view)> pong = nullptr; - MoveOnlyFunction *, std::string_view, int, int)> subscription = nullptr; - MoveOnlyFunction *, int, std::string_view)> close = nullptr; - }; - - /* Closes all sockets including listen sockets. */ - BuilderPatternReturnType &&close() { - us_socket_context_close(SSL, (struct us_socket_context_t *) httpContext); - for (void *webSocketContext : webSocketContexts) { - us_socket_context_close(SSL, (struct us_socket_context_t *) webSocketContext); - } - - return std::move(static_cast(*this)); - } + /* Every route has its own websocket context with its own behavior and user + * data type */ + auto *webSocketContext = WebSocketContext::create( + Loop::get(), (us_socket_context_t *)httpContext, topicTree); - template - BuilderPatternReturnType &&ws(std::string pattern, WebSocketBehavior &&behavior) { - /* Don't compile if alignment rules cannot be satisfied */ - static_assert(alignof(UserData) <= LIBUS_EXT_ALIGNMENT, - "µWebSockets cannot satisfy UserData alignment requirements. You need to recompile µSockets with LIBUS_EXT_ALIGNMENT adjusted accordingly."); - - if (!httpContext) { - return std::move(static_cast(*this)); - } - - /* Terminate on misleading idleTimeout values */ - if (behavior.idleTimeout && behavior.idleTimeout < 8) { - std::cerr << "Error: idleTimeout must be either 0 or greater than 8!" << std::endl; - std::terminate(); - } - - /* Maximum idleTimeout is 16 minutes */ - if (behavior.idleTimeout > 240 * 4) { - std::cerr << "Error: idleTimeout must not be greater than 960 seconds!" << std::endl; - std::terminate(); - } - - /* Maximum maxLifetime is 4 hours */ - if (behavior.maxLifetime > 240) { - std::cerr << "Error: maxLifetime must not be greater than 240 minutes!" << std::endl; - std::terminate(); - } - - /* If we don't have a TopicTree yet, create one now */ - if (!topicTree) { - - bool needsUncork = false; - topicTree = new TopicTree([needsUncork](Subscriber *s, TopicTreeMessage &message, TopicTree::IteratorFlags flags) mutable { - /* Subscriber's user is the socket */ - /* Unfortunately we need to cast is to PerSocketData = int - * since many different WebSocketContexts use the same - * TopicTree now */ - auto *ws = (WebSocket *) s->user; - - /* If this is the first message we try and cork */ - if (flags & TopicTree::IteratorFlags::FIRST) { - if (ws->canCork() && !ws->isCorked()) { - ((AsyncSocket *)ws)->cork(); - needsUncork = true; - } - } - - /* If we ever overstep maxBackpresure, exit immediately */ - if (WebSocket::SendStatus::DROPPED == ws->send(message.message, (OpCode)message.opCode, message.compress)) { - if (needsUncork) { - ((AsyncSocket *)ws)->uncork(); - needsUncork = false; - } - /* Stop draining */ - return true; - } - - /* If this is the last message we uncork if we are corked */ - if (flags & TopicTree::IteratorFlags::LAST) { - /* We should not uncork in all cases? */ - if (needsUncork) { - ((AsyncSocket *)ws)->uncork(); - } - } - - /* Success */ - return false; - }); - - /* And hook it up with the loop */ - /* We empty for both pre and post just to make sure */ - Loop::get()->addPostHandler(topicTree, [topicTree = topicTree](Loop */*loop*/) { - /* Commit pub/sub batches every loop iteration */ - topicTree->drain(); - }); - - Loop::get()->addPreHandler(topicTree, [topicTree = topicTree](Loop */*loop*/) { - /* Commit pub/sub batches every loop iteration */ - topicTree->drain(); - }); - } - - /* Every route has its own websocket context with its own behavior and user data type */ - auto *webSocketContext = WebSocketContext::create(Loop::get(), (us_socket_context_t *) httpContext, topicTree); - - /* We need to clear this later on */ - webSocketContextDeleters.push_back([webSocketContext]() { - webSocketContext->free(); - }); + /* We need to clear this later on */ + webSocketContextDeleters.push_back( + [webSocketContext]() { webSocketContext->free(); }); - /* We also keep this list for easy closing */ - webSocketContexts.push_back((void *)webSocketContext); + /* We also keep this list for easy closing */ + webSocketContexts.push_back((void *)webSocketContext); - /* Quick fix to disable any compression if set */ + /* Quick fix to disable any compression if set */ #ifdef UWS_NO_ZLIB - behavior.compression = DISABLED; + behavior.compression = DISABLED; #endif - /* If we are the first one to use compression, initialize it */ - if (behavior.compression) { - LoopData *loopData = (LoopData *) us_loop_ext(us_socket_context_loop(SSL, webSocketContext->getSocketContext())); - - /* Initialize loop's deflate inflate streams */ - if (!loopData->zlibContext) { - loopData->zlibContext = new ZlibContext; - loopData->inflationStream = new InflationStream(CompressOptions::DEDICATED_DECOMPRESSOR); - loopData->deflationStream = new DeflationStream(CompressOptions::DEDICATED_COMPRESSOR); - } - } - - /* Copy all handlers */ - webSocketContext->getExt()->openHandler = std::move(behavior.open); - webSocketContext->getExt()->messageHandler = std::move(behavior.message); - webSocketContext->getExt()->droppedHandler = std::move(behavior.dropped); - webSocketContext->getExt()->drainHandler = std::move(behavior.drain); - webSocketContext->getExt()->subscriptionHandler = std::move(behavior.subscription); - webSocketContext->getExt()->closeHandler = std::move(behavior.close); - webSocketContext->getExt()->pingHandler = std::move(behavior.ping); - webSocketContext->getExt()->pongHandler = std::move(behavior.pong); - - /* Copy settings */ - webSocketContext->getExt()->maxPayloadLength = behavior.maxPayloadLength; - webSocketContext->getExt()->maxBackpressure = behavior.maxBackpressure; - webSocketContext->getExt()->closeOnBackpressureLimit = behavior.closeOnBackpressureLimit; - webSocketContext->getExt()->resetIdleTimeoutOnSend = behavior.resetIdleTimeoutOnSend; - webSocketContext->getExt()->sendPingsAutomatically = behavior.sendPingsAutomatically; - webSocketContext->getExt()->maxLifetime = behavior.maxLifetime; - webSocketContext->getExt()->compression = behavior.compression; - - /* Calculate idleTimeoutCompnents */ - webSocketContext->getExt()->calculateIdleTimeoutCompnents(behavior.idleTimeout); - - httpContext->onHttp("GET", pattern, [webSocketContext, behavior = std::move(behavior)](auto *res, auto *req) mutable { - - /* If we have this header set, it's a websocket */ - std::string_view secWebSocketKey = req->getHeader("sec-websocket-key"); - if (secWebSocketKey.length() == 24) { - - /* Emit upgrade handler */ - if (behavior.upgrade) { - - /* Nasty, ugly Safari 15 hack */ - if (hasBrokenCompression(req->getHeader("user-agent"))) { - std::string_view secWebSocketExtensions = req->getHeader("sec-websocket-extensions"); - memset((void *) secWebSocketExtensions.data(), ' ', secWebSocketExtensions.length()); - } - - behavior.upgrade(res, req, (struct us_socket_context_t *) webSocketContext); - } else { - /* Default handler upgrades to WebSocket */ - std::string_view secWebSocketProtocol = req->getHeader("sec-websocket-protocol"); - std::string_view secWebSocketExtensions = req->getHeader("sec-websocket-extensions"); - - /* Safari 15 hack */ - if (hasBrokenCompression(req->getHeader("user-agent"))) { - secWebSocketExtensions = ""; - } - - res->template upgrade({}, secWebSocketKey, secWebSocketProtocol, secWebSocketExtensions, (struct us_socket_context_t *) webSocketContext); - } - - /* We are going to get uncorked by the Http get return */ - - /* We do not need to check for any close or shutdown here as we immediately return from get handler */ - + /* If we are the first one to use compression, initialize it */ + if (behavior.compression) { + LoopData *loopData = (LoopData *)us_loop_ext( + us_socket_context_loop(SSL, webSocketContext->getSocketContext())); + + /* Initialize loop's deflate inflate streams */ + if (!loopData->zlibContext) { + loopData->zlibContext = new ZlibContext; + loopData->inflationStream = + new InflationStream(CompressOptions::DEDICATED_DECOMPRESSOR); + loopData->deflationStream = + new DeflationStream(CompressOptions::DEDICATED_COMPRESSOR); + } + } + + /* Copy all handlers */ + webSocketContext->getExt()->openHandler = std::move(behavior.open); + webSocketContext->getExt()->messageHandler = std::move(behavior.message); + webSocketContext->getExt()->droppedHandler = std::move(behavior.dropped); + webSocketContext->getExt()->drainHandler = std::move(behavior.drain); + webSocketContext->getExt()->subscriptionHandler = + std::move(behavior.subscription); + webSocketContext->getExt()->closeHandler = std::move(behavior.close); + webSocketContext->getExt()->pingHandler = std::move(behavior.ping); + webSocketContext->getExt()->pongHandler = std::move(behavior.pong); + + /* Copy settings */ + webSocketContext->getExt()->maxPayloadLength = behavior.maxPayloadLength; + webSocketContext->getExt()->maxBackpressure = behavior.maxBackpressure; + webSocketContext->getExt()->closeOnBackpressureLimit = + behavior.closeOnBackpressureLimit; + webSocketContext->getExt()->resetIdleTimeoutOnSend = + behavior.resetIdleTimeoutOnSend; + webSocketContext->getExt()->sendPingsAutomatically = + behavior.sendPingsAutomatically; + webSocketContext->getExt()->maxLifetime = behavior.maxLifetime; + webSocketContext->getExt()->compression = behavior.compression; + + /* Calculate idleTimeoutCompnents */ + webSocketContext->getExt()->calculateIdleTimeoutCompnents( + behavior.idleTimeout); + + httpContext->onHttp( + "GET", pattern, + [webSocketContext, behavior = std::move(behavior)](auto *res, + auto *req) mutable { + /* If we have this header set, it's a websocket */ + std::string_view secWebSocketKey = + req->getHeader("sec-websocket-key"); + if (secWebSocketKey.length() == 24) { + /* Emit upgrade handler */ + if (behavior.upgrade) { + /* Nasty, ugly Safari 15 hack */ + if (hasBrokenCompression(req->getHeader("user-agent"))) { + std::string_view secWebSocketExtensions = + req->getHeader("sec-websocket-extensions"); + memset((void *)secWebSocketExtensions.data(), ' ', + secWebSocketExtensions.length()); + } + + behavior.upgrade(res, req, + (struct us_socket_context_t *)webSocketContext); } else { - /* Tell the router that we did not handle this request */ - req->setYield(true); + /* Default handler upgrades to WebSocket */ + std::string_view secWebSocketProtocol = + req->getHeader("sec-websocket-protocol"); + std::string_view secWebSocketExtensions = + req->getHeader("sec-websocket-extensions"); + + /* Safari 15 hack */ + if (hasBrokenCompression(req->getHeader("user-agent"))) { + secWebSocketExtensions = ""; + } + + res->template upgrade( + {}, secWebSocketKey, secWebSocketProtocol, + secWebSocketExtensions, + (struct us_socket_context_t *)webSocketContext); } - }, true); - return std::move(static_cast(*this)); - } - - /* Browse to a server name, changing the router to this domain */ - BuilderPatternReturnType &&domain(std::string serverName) { - HttpContextData *httpContextData = httpContext->getSocketContextData(); - - void *domainRouter = us_socket_context_find_server_name_userdata(SSL, (struct us_socket_context_t *) httpContext, serverName.c_str()); - if (domainRouter) { - std::cout << "Browsed to SNI: " << serverName << std::endl; - httpContextData->currentRouter = (decltype(httpContextData->currentRouter)) domainRouter; - } else { - std::cout << "Cannot browse to SNI: " << serverName << std::endl; - httpContextData->currentRouter = &httpContextData->router; - } - - return std::move(static_cast(*this)); - } - BuilderPatternReturnType &&get(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("GET", pattern, std::move(handler)); - } - return std::move(static_cast(*this)); - } - - BuilderPatternReturnType &&post(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("POST", pattern, std::move(handler)); - } - return std::move(static_cast(*this)); - } - - BuilderPatternReturnType &&options(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("OPTIONS", pattern, std::move(handler)); - } - return std::move(static_cast(*this)); - } - - BuilderPatternReturnType &&del(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("DELETE", pattern, std::move(handler)); - } - return std::move(static_cast(*this)); - } - - BuilderPatternReturnType &&patch(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("PATCH", pattern, std::move(handler)); - } - return std::move(static_cast(*this)); - } - - BuilderPatternReturnType &&put(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("PUT", pattern, std::move(handler)); - } - return std::move(static_cast(*this)); - } - - BuilderPatternReturnType &&head(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("HEAD", pattern, std::move(handler)); - } - return std::move(static_cast(*this)); - } - - BuilderPatternReturnType &&connect(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("CONNECT", pattern, std::move(handler)); - } - return std::move(static_cast(*this)); - } - - BuilderPatternReturnType &&trace(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("TRACE", pattern, std::move(handler)); - } - return std::move(static_cast(*this)); - } - - /* This one catches any method */ - BuilderPatternReturnType &&any(std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler) { - if (httpContext) { - httpContext->onHttp("*", pattern, std::move(handler)); - } - return std::move(static_cast(*this)); - } - - /* Host, port, callback */ - BuilderPatternReturnType &&listen(std::string host, int port, MoveOnlyFunction &&handler) { - if (!host.length()) { - return listen(port, std::move(handler)); - } - handler(httpContext ? httpContext->listen(host.c_str(), port, 0) : nullptr); - return std::move(static_cast(*this)); - } - - /* Host, port, options, callback */ - BuilderPatternReturnType &&listen(std::string host, int port, int options, MoveOnlyFunction &&handler) { - if (!host.length()) { - return listen(port, options, std::move(handler)); - } - handler(httpContext ? httpContext->listen(host.c_str(), port, options) : nullptr); - return std::move(static_cast(*this)); - } - - /* Port, callback */ - BuilderPatternReturnType &&listen(int port, MoveOnlyFunction &&handler) { - handler(httpContext ? httpContext->listen(nullptr, port, 0) : nullptr); - return std::move(static_cast(*this)); - } - - /* Port, options, callback */ - BuilderPatternReturnType &&listen(int port, int options, MoveOnlyFunction &&handler) { - handler(httpContext ? httpContext->listen(nullptr, port, options) : nullptr); - return std::move(static_cast(*this)); - } - - /* options, callback, path to unix domain socket */ - BuilderPatternReturnType &&listen(int options, MoveOnlyFunction &&handler, std::string path) { - handler(httpContext ? httpContext->listen(path.c_str(), options) : nullptr); - return std::move(static_cast(*this)); - } - - /* callback, path to unix domain socket */ - BuilderPatternReturnType &&listen(MoveOnlyFunction &&handler, std::string path) { - handler(httpContext ? httpContext->listen(path.c_str(), 0) : nullptr); - return std::move(static_cast(*this)); - } - - /* Register event handler for accepted FD. Can be used together with adoptSocket. */ - BuilderPatternReturnType &&preOpen(LIBUS_SOCKET_DESCRIPTOR (*handler)(struct us_socket_context_t *, LIBUS_SOCKET_DESCRIPTOR)) { - httpContext->onPreOpen(handler); - return std::move(static_cast(*this)); - } - - BuilderPatternReturnType &&removeChildApp(BuilderPatternReturnType *app) { - /* Remove this app from httpContextData list over child apps and reset round robin */ - auto &childApps = httpContext->getSocketContextData()->childApps; - childApps.erase( - std::remove(childApps.begin(), childApps.end(), (void *) app), - childApps.end() - ); - httpContext->getSocketContextData()->roundRobin = 0; - - return std::move(static_cast(*this)); - } - - BuilderPatternReturnType &&addChildApp(BuilderPatternReturnType *app) { - /* Add this app to httpContextData list over child apps and set onPreOpen */ - httpContext->getSocketContextData()->childApps.push_back((void *) app); - - httpContext->onPreOpen([](struct us_socket_context_t *context, LIBUS_SOCKET_DESCRIPTOR fd) -> LIBUS_SOCKET_DESCRIPTOR { - - HttpContext *httpContext = (HttpContext *) context; - - if (httpContext->getSocketContextData()->childApps.empty()) { - return fd; - } - - //std::cout << "Distributing fd: " << fd << " from context: " << context << std::endl; - - unsigned int *roundRobin = &httpContext->getSocketContextData()->roundRobin; - - //std::cout << "Round robin is: " << *roundRobin << " and size of apps is: " << httpContext->getSocketContextData()->childApps.size() << std::endl; - - BuilderPatternReturnType *receivingApp = (BuilderPatternReturnType *) httpContext->getSocketContextData()->childApps[*roundRobin]; - - - //std::cout << "Loop is " << receivingApp->getLoop() << std::endl; - - - receivingApp->getLoop()->defer([fd, receivingApp]() { - //std::cout << "About to adopt socket " << fd << " on receivingApp " << receivingApp << std::endl; - receivingApp->adoptSocket(fd); - //std::cout << "Done " << std::endl; - }); - - if (++(*roundRobin) == httpContext->getSocketContextData()->childApps.size()) { - *roundRobin = 0; - } - - return fd + 1; + /* We are going to get uncorked by the Http get return */ + + /* We do not need to check for any close or shutdown here as we + * immediately return from get handler */ + + } else { + /* Tell the router that we did not handle this request */ + req->setYield(true); + } + }, + true); + return std::move(static_cast(*this)); + } + + /* Browse to a server name, changing the router to this domain */ + BuilderPatternReturnType &&domain(std::string serverName) { + HttpContextData *httpContextData = httpContext->getSocketContextData(); + + void *domainRouter = us_socket_context_find_server_name_userdata( + SSL, (struct us_socket_context_t *)httpContext, serverName.c_str()); + if (domainRouter) { + std::cout << "Browsed to SNI: " << serverName << std::endl; + httpContextData->currentRouter = + (decltype(httpContextData->currentRouter))domainRouter; + } else { + std::cout << "Cannot browse to SNI: " << serverName << std::endl; + httpContextData->currentRouter = &httpContextData->router; + } + + return std::move(static_cast(*this)); + } + + BuilderPatternReturnType &&get( + std::string pattern, + MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("GET", pattern, std::move(handler)); + } + return std::move(static_cast(*this)); + } + + BuilderPatternReturnType &&post( + std::string pattern, + MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("POST", pattern, std::move(handler)); + } + return std::move(static_cast(*this)); + } + + BuilderPatternReturnType &&options( + std::string pattern, + MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("OPTIONS", pattern, std::move(handler)); + } + return std::move(static_cast(*this)); + } + + BuilderPatternReturnType &&del( + std::string pattern, + MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("DELETE", pattern, std::move(handler)); + } + return std::move(static_cast(*this)); + } + + BuilderPatternReturnType &&patch( + std::string pattern, + MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("PATCH", pattern, std::move(handler)); + } + return std::move(static_cast(*this)); + } + + BuilderPatternReturnType &&put( + std::string pattern, + MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("PUT", pattern, std::move(handler)); + } + return std::move(static_cast(*this)); + } + + BuilderPatternReturnType &&head( + std::string pattern, + MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("HEAD", pattern, std::move(handler)); + } + return std::move(static_cast(*this)); + } + + BuilderPatternReturnType &&connect( + std::string pattern, + MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("CONNECT", pattern, std::move(handler)); + } + return std::move(static_cast(*this)); + } + + BuilderPatternReturnType &&trace( + std::string pattern, + MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("TRACE", pattern, std::move(handler)); + } + return std::move(static_cast(*this)); + } + + /* This one catches any method */ + BuilderPatternReturnType &&any( + std::string pattern, + MoveOnlyFunction *, HttpRequest *)> &&handler) { + if (httpContext) { + httpContext->onHttp("*", pattern, std::move(handler)); + } + return std::move(static_cast(*this)); + } + + /* Host, port, callback */ + BuilderPatternReturnType &&listen( + std::string host, int port, + MoveOnlyFunction &&handler) { + if (!host.length()) { + return listen(port, std::move(handler)); + } + handler(httpContext ? httpContext->listen(host.c_str(), port, 0) : nullptr); + return std::move(static_cast(*this)); + } + + /* Host, port, options, callback */ + BuilderPatternReturnType &&listen( + std::string host, int port, int options, + MoveOnlyFunction &&handler) { + if (!host.length()) { + return listen(port, options, std::move(handler)); + } + handler(httpContext ? httpContext->listen(host.c_str(), port, options) + : nullptr); + return std::move(static_cast(*this)); + } + + /* Port, callback */ + BuilderPatternReturnType &&listen( + int port, MoveOnlyFunction &&handler) { + handler(httpContext ? httpContext->listen(nullptr, port, 0) : nullptr); + return std::move(static_cast(*this)); + } + + /* Port, options, callback */ + BuilderPatternReturnType &&listen( + int port, int options, + MoveOnlyFunction &&handler) { + handler(httpContext ? httpContext->listen(nullptr, port, options) + : nullptr); + return std::move(static_cast(*this)); + } + + /* options, callback, path to unix domain socket */ + BuilderPatternReturnType &&listen( + int options, MoveOnlyFunction &&handler, + std::string path) { + handler(httpContext ? httpContext->listen(path.c_str(), options) : nullptr); + return std::move(static_cast(*this)); + } + + /* callback, path to unix domain socket */ + BuilderPatternReturnType &&listen( + MoveOnlyFunction &&handler, + std::string path) { + handler(httpContext ? httpContext->listen(path.c_str(), 0) : nullptr); + return std::move(static_cast(*this)); + } + + /* Register event handler for accepted FD. Can be used together with + * adoptSocket. */ + BuilderPatternReturnType &&preOpen(LIBUS_SOCKET_DESCRIPTOR (*handler)( + struct us_socket_context_t *, LIBUS_SOCKET_DESCRIPTOR)) { + httpContext->onPreOpen(handler); + return std::move(static_cast(*this)); + } + + BuilderPatternReturnType &&removeChildApp(BuilderPatternReturnType *app) { + /* Remove this app from httpContextData list over child apps and reset round + * robin */ + auto &childApps = httpContext->getSocketContextData()->childApps; + childApps.erase( + std::remove(childApps.begin(), childApps.end(), (void *)app), + childApps.end()); + httpContext->getSocketContextData()->roundRobin = 0; + + return std::move(static_cast(*this)); + } + + BuilderPatternReturnType &&addChildApp(BuilderPatternReturnType *app) { + /* Add this app to httpContextData list over child apps and set onPreOpen */ + httpContext->getSocketContextData()->childApps.push_back((void *)app); + + httpContext->onPreOpen( + [](struct us_socket_context_t *context, + LIBUS_SOCKET_DESCRIPTOR fd) -> LIBUS_SOCKET_DESCRIPTOR { + HttpContext *httpContext = (HttpContext *)context; + + if (httpContext->getSocketContextData()->childApps.empty()) { + return fd; + } + + // std::cout << "Distributing fd: " << fd << " from context: " << + // context << std::endl; + + unsigned int *roundRobin = + &httpContext->getSocketContextData()->roundRobin; + + // std::cout << "Round robin is: " << *roundRobin << " and size of + // apps is: " << httpContext->getSocketContextData()->childApps.size() + // << std::endl; + + BuilderPatternReturnType *receivingApp = + (BuilderPatternReturnType *)httpContext->getSocketContextData() + ->childApps[*roundRobin]; + + // std::cout << "Loop is " << receivingApp->getLoop() << std::endl; + + receivingApp->getLoop()->defer([fd, receivingApp]() { + // std::cout << "About to adopt socket " << fd << " on receivingApp + // " << receivingApp << std::endl; + receivingApp->adoptSocket(fd); + // std::cout << "Done " << std::endl; + }); + + if (++(*roundRobin) == + httpContext->getSocketContextData()->childApps.size()) { + *roundRobin = 0; + } + + return fd + 1; }); - return std::move(static_cast(*this)); - } + return std::move(static_cast(*this)); + } - /* adopt an externally accepted socket */ - BuilderPatternReturnType &&adoptSocket(LIBUS_SOCKET_DESCRIPTOR accepted_fd) { - httpContext->adoptAcceptedSocket(accepted_fd); - return std::move(static_cast(*this)); - } + /* adopt an externally accepted socket */ + BuilderPatternReturnType &&adoptSocket(LIBUS_SOCKET_DESCRIPTOR accepted_fd) { + httpContext->adoptAcceptedSocket(accepted_fd); + return std::move(static_cast(*this)); + } - BuilderPatternReturnType &&run() { - uWS::run(); - return std::move(static_cast(*this)); - } - - Loop *getLoop() { - return (Loop *) httpContext->getLoop(); - } + BuilderPatternReturnType &&run() { + uWS::run(); + return std::move(static_cast(*this)); + } + Loop *getLoop() { return (Loop *)httpContext->getLoop(); } }; -} +} // namespace uWS #include "CachingApp.h" namespace uWS { - typedef uWS::CachingApp App; - typedef uWS::CachingApp SSLApp; -} +typedef uWS::CachingApp App; +typedef uWS::CachingApp SSLApp; +} // namespace uWS -#endif // UWS_APP_H +#endif // UWS_APP_H diff --git a/vendor/hydra/vendor/uwebsockets/src/AsyncSocket.h b/vendor/hydra/vendor/uwebsockets/src/AsyncSocket.h index bf7b50a7..f4fef57b 100644 --- a/vendor/hydra/vendor/uwebsockets/src/AsyncSocket.h +++ b/vendor/hydra/vendor/uwebsockets/src/AsyncSocket.h @@ -20,336 +20,364 @@ /* This class implements async socket memory management strategies */ -/* NOTE: Many unsigned/signed conversion warnings could be solved by moving from int length - * to unsigned length for everything to/from uSockets - this would however remove the opportunity - * to signal error with -1 (which is how the entire UNIX syscalling is built). */ +/* NOTE: Many unsigned/signed conversion warnings could be solved by moving from + * int length to unsigned length for everything to/from uSockets - this would + * however remove the opportunity to signal error with -1 (which is how the + * entire UNIX syscalling is built). */ #include #include -#include "libusockets.h" - -#include "LoopData.h" #include "AsyncSocketData.h" +#include "LoopData.h" +#include "libusockets.h" namespace uWS { - enum SendBufferAttribute { - NEEDS_NOTHING, - NEEDS_DRAIN, - NEEDS_UNCORK - }; +enum SendBufferAttribute { NEEDS_NOTHING, NEEDS_DRAIN, NEEDS_UNCORK }; - template struct WebSocketContext; +template +struct WebSocketContext; template struct AsyncSocket { - /* This guy is promiscuous */ - template friend struct HttpContext; - template friend struct WebSocketContext; - template friend struct TemplatedApp; - template friend struct WebSocketContextData; - template friend struct TopicTree; - template friend struct HttpResponse; - -private: - /* Helper, do not use directly (todo: move to uSockets or de-crazify) */ - void throttle_helper(int toggle) { - /* These should be exposed by uSockets */ - static thread_local int us_events[2] = {0, 0}; - - struct us_poll_t *p = (struct us_poll_t *) this; - struct us_loop_t *loop = us_socket_context_loop(SSL, us_socket_context(SSL, (us_socket_t *) this)); - - if (toggle) { - /* Pause */ - int events = us_poll_events(p); - if (events) { - us_events[getBufferedAmount() ? 1 : 0] = events; - } - us_poll_change(p, loop, 0); - } else { - /* Resume */ - int events = us_events[getBufferedAmount() ? 1 : 0]; - us_poll_change(p, loop, events); - } + /* This guy is promiscuous */ + template + friend struct HttpContext; + template + friend struct WebSocketContext; + template + friend struct TemplatedApp; + template + friend struct WebSocketContextData; + template + friend struct TopicTree; + template + friend struct HttpResponse; + + private: + /* Helper, do not use directly (todo: move to uSockets or de-crazify) */ + void throttle_helper(int toggle) { + /* These should be exposed by uSockets */ + static thread_local int us_events[2] = {0, 0}; + + struct us_poll_t *p = (struct us_poll_t *)this; + struct us_loop_t *loop = us_socket_context_loop( + SSL, us_socket_context(SSL, (us_socket_t *)this)); + + if (toggle) { + /* Pause */ + int events = us_poll_events(p); + if (events) { + us_events[getBufferedAmount() ? 1 : 0] = events; + } + us_poll_change(p, loop, 0); + } else { + /* Resume */ + int events = us_events[getBufferedAmount() ? 1 : 0]; + us_poll_change(p, loop, events); } - -protected: - /* Returns SSL pointer or FD as pointer */ - void *getNativeHandle() { - return us_socket_get_native_handle(SSL, (us_socket_t *) this); + } + + protected: + /* Returns SSL pointer or FD as pointer */ + void *getNativeHandle() { + return us_socket_get_native_handle(SSL, (us_socket_t *)this); + } + + /* Get loop data for socket */ + LoopData *getLoopData() { + return (LoopData *)us_loop_ext(us_socket_context_loop( + SSL, us_socket_context(SSL, (us_socket_t *)this))); + } + + /* Get socket extension */ + AsyncSocketData *getAsyncSocketData() { + return (AsyncSocketData *)us_socket_ext(SSL, (us_socket_t *)this); + } + + /* Socket timeout */ + void timeout(unsigned int seconds) { + us_socket_timeout(SSL, (us_socket_t *)this, seconds); + } + + /* Shutdown socket without any automatic drainage */ + void shutdown() { us_socket_shutdown(SSL, (us_socket_t *)this); } + + /* Experimental pause */ + us_socket_t *pause() { + throttle_helper(1); + return (us_socket_t *)this; + } + + /* Experimental resume */ + us_socket_t *resume() { + throttle_helper(0); + return (us_socket_t *)this; + } + + /* Immediately close socket */ + us_socket_t *close() { + return us_socket_close(SSL, (us_socket_t *)this, 0, nullptr); + } + + void corkUnchecked() { + /* What if another socket is corked? */ + getLoopData()->corkedSocket = this; + } + + void uncorkWithoutSending() { + if (isCorked()) { + getLoopData()->corkedSocket = nullptr; } - - /* Get loop data for socket */ - LoopData *getLoopData() { - return (LoopData *) us_loop_ext(us_socket_context_loop(SSL, us_socket_context(SSL, (us_socket_t *) this))); - } - - /* Get socket extension */ - AsyncSocketData *getAsyncSocketData() { - return (AsyncSocketData *) us_socket_ext(SSL, (us_socket_t *) this); + } + + /* Cork this socket. Only one socket may ever be corked per-loop at any given + * time */ + void cork() { + /* Extra check for invalid corking of others */ + if (getLoopData()->corkOffset && getLoopData()->corkedSocket != this) { + std::cerr + << "Error: Cork buffer must not be acquired without checking canCork!" + << std::endl; + std::terminate(); } - /* Socket timeout */ - void timeout(unsigned int seconds) { - us_socket_timeout(SSL, (us_socket_t *) this, seconds); + /* What if another socket is corked? */ + getLoopData()->corkedSocket = this; + } + + /* Returns whether we are corked or not */ + bool isCorked() { return getLoopData()->corkedSocket == this; } + + /* Returns whether we could cork (it is free) */ + bool canCork() { return getLoopData()->corkedSocket == nullptr; } + + /* Returns a suitable buffer for temporary assemblation of send data */ + std::pair getSendBuffer(size_t size) { + /* First step is to determine if we already have backpressure or not */ + LoopData *loopData = getLoopData(); + BackPressure &backPressure = getAsyncSocketData()->buffer; + size_t existingBackpressure = backPressure.length(); + if ((!existingBackpressure) && (isCorked() || canCork()) && + (loopData->corkOffset + size < LoopData::CORK_BUFFER_SIZE)) { + /* Cork automatically if we can */ + if (isCorked()) { + char *sendBuffer = loopData->corkBuffer + loopData->corkOffset; + loopData->corkOffset += (unsigned int)size; + return {sendBuffer, SendBufferAttribute::NEEDS_NOTHING}; + } else { + cork(); + char *sendBuffer = loopData->corkBuffer + loopData->corkOffset; + loopData->corkOffset += (unsigned int)size; + return {sendBuffer, SendBufferAttribute::NEEDS_UNCORK}; + } + } else { + /* If we are corked and there is already data in the cork buffer, + mark how much is ours and reset it */ + unsigned int ourCorkOffset = 0; + if (isCorked() && loopData->corkOffset) { + ourCorkOffset = loopData->corkOffset; + loopData->corkOffset = 0; + } + + /* Fallback is to use the backpressure as buffer */ + backPressure.resize(ourCorkOffset + existingBackpressure + size); + + /* And copy corkbuffer in front */ + memcpy((char *)backPressure.data() + existingBackpressure, + loopData->corkBuffer, ourCorkOffset); + + return { + (char *)backPressure.data() + ourCorkOffset + existingBackpressure, + SendBufferAttribute::NEEDS_DRAIN}; } - - /* Shutdown socket without any automatic drainage */ - void shutdown() { - us_socket_shutdown(SSL, (us_socket_t *) this); + } + + /* Returns the user space backpressure. */ + unsigned int getBufferedAmount() { + /* We return the actual amount of bytes in backbuffer, including + * pendingRemoval */ + return (unsigned int)getAsyncSocketData()->buffer.totalLength(); + } + + /* Returns the text representation of an IPv4 or IPv6 address */ + std::string_view addressAsText(std::string_view binary) { + static thread_local char buf[64]; + int ipLength = 0; + + if (!binary.length()) { + return {}; } - /* Experimental pause */ - us_socket_t *pause() { - throttle_helper(1); - return (us_socket_t *) this; - } - - /* Experimental resume */ - us_socket_t *resume() { - throttle_helper(0); - return (us_socket_t *) this; - } + unsigned char *b = (unsigned char *)binary.data(); - /* Immediately close socket */ - us_socket_t *close() { - return us_socket_close(SSL, (us_socket_t *) this, 0, nullptr); + if (binary.length() == 4) { + ipLength = snprintf(buf, 64, "%u.%u.%u.%u", b[0], b[1], b[2], b[3]); + } else { + ipLength = snprintf(buf, 64, + "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%" + "02x:%02x%02x:%02x%02x", + b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8], + b[9], b[10], b[11], b[12], b[13], b[14], b[15]); } - void corkUnchecked() { - /* What if another socket is corked? */ - getLoopData()->corkedSocket = this; + return {buf, (unsigned int)ipLength}; + } + + /* Returns the remote IP address or empty string on failure */ + std::string_view getRemoteAddress() { + static thread_local char buf[16]; + int ipLength = 16; + us_socket_remote_address(SSL, (us_socket_t *)this, buf, &ipLength); + return std::string_view(buf, (unsigned int)ipLength); + } + + /* Returns the text representation of IP */ + std::string_view getRemoteAddressAsText() { + return addressAsText(getRemoteAddress()); + } + + /* Write in three levels of prioritization: cork-buffer, syscall, + * socket-buffer. Always drain if possible. Returns pair of bytes written + * (anywhere) and whether or not this call resulted in the polling for + * writable (or we are in a state that implies polling for writable). */ + std::pair write(const char *src, int length, + bool optionally = false, int nextLength = 0) { + /* Fake success if closed, simple fix to allow uncork of closed socket to + * succeed */ + if (us_socket_is_closed(SSL, (us_socket_t *)this)) { + return {length, false}; } - void uncorkWithoutSending() { - if (isCorked()) { - getLoopData()->corkedSocket = nullptr; - } - } - - /* Cork this socket. Only one socket may ever be corked per-loop at any given time */ - void cork() { - /* Extra check for invalid corking of others */ - if (getLoopData()->corkOffset && getLoopData()->corkedSocket != this) { - std::cerr << "Error: Cork buffer must not be acquired without checking canCork!" << std::endl; - std::terminate(); - } - - /* What if another socket is corked? */ - getLoopData()->corkedSocket = this; - } - - /* Returns whether we are corked or not */ - bool isCorked() { - return getLoopData()->corkedSocket == this; - } - - /* Returns whether we could cork (it is free) */ - bool canCork() { - return getLoopData()->corkedSocket == nullptr; - } - - /* Returns a suitable buffer for temporary assemblation of send data */ - std::pair getSendBuffer(size_t size) { - /* First step is to determine if we already have backpressure or not */ - LoopData *loopData = getLoopData(); - BackPressure &backPressure = getAsyncSocketData()->buffer; - size_t existingBackpressure = backPressure.length(); - if ((!existingBackpressure) && (isCorked() || canCork()) && (loopData->corkOffset + size < LoopData::CORK_BUFFER_SIZE)) { - /* Cork automatically if we can */ - if (isCorked()) { - char *sendBuffer = loopData->corkBuffer + loopData->corkOffset; - loopData->corkOffset += (unsigned int) size; - return {sendBuffer, SendBufferAttribute::NEEDS_NOTHING}; - } else { - cork(); - char *sendBuffer = loopData->corkBuffer + loopData->corkOffset; - loopData->corkOffset += (unsigned int) size; - return {sendBuffer, SendBufferAttribute::NEEDS_UNCORK}; - } + LoopData *loopData = getLoopData(); + AsyncSocketData *asyncSocketData = getAsyncSocketData(); + + /* We are limited if we have a per-socket buffer */ + if (asyncSocketData->buffer.length()) { + /* Write off as much as we can */ + int written = us_socket_write( + SSL, (us_socket_t *)this, asyncSocketData->buffer.data(), + (int)asyncSocketData->buffer.length(), /*nextLength != 0 | */ length); + + /* On failure return, otherwise continue down the function */ + if ((unsigned int)written < asyncSocketData->buffer.length()) { + /* Update buffering (todo: we can do better here if we keep track of + * what happens to this guy later on) */ + asyncSocketData->buffer.erase((unsigned int)written); + + if (optionally) { + /* Thankfully we can exit early here */ + return {0, true}; } else { + /* This path is horrible and points towards erroneous usage */ + asyncSocketData->buffer.append(src, (unsigned int)length); - /* If we are corked and there is already data in the cork buffer, - mark how much is ours and reset it */ - unsigned int ourCorkOffset = 0; - if (isCorked() && loopData->corkOffset) { - ourCorkOffset = loopData->corkOffset; - loopData->corkOffset = 0; - } - - /* Fallback is to use the backpressure as buffer */ - backPressure.resize(ourCorkOffset + existingBackpressure + size); - - /* And copy corkbuffer in front */ - memcpy((char *) backPressure.data() + existingBackpressure, loopData->corkBuffer, ourCorkOffset); - - return {(char *) backPressure.data() + ourCorkOffset + existingBackpressure, SendBufferAttribute::NEEDS_DRAIN}; + return {length, true}; } - } + } - /* Returns the user space backpressure. */ - unsigned int getBufferedAmount() { - /* We return the actual amount of bytes in backbuffer, including pendingRemoval */ - return (unsigned int) getAsyncSocketData()->buffer.totalLength(); + /* At this point we simply have no buffer and can continue as normal */ + asyncSocketData->buffer.clear(); } - /* Returns the text representation of an IPv4 or IPv6 address */ - std::string_view addressAsText(std::string_view binary) { - static thread_local char buf[64]; - int ipLength = 0; - - if (!binary.length()) { - return {}; - } - - unsigned char *b = (unsigned char *) binary.data(); - - if (binary.length() == 4) { - ipLength = snprintf(buf, 64, "%u.%u.%u.%u", b[0], b[1], b[2], b[3]); + if (length) { + if (loopData->corkedSocket == this) { + /* We are corked */ + if (LoopData::CORK_BUFFER_SIZE - loopData->corkOffset >= + (unsigned int)length) { + /* If the entire chunk fits in cork buffer */ + memcpy(loopData->corkBuffer + loopData->corkOffset, src, + (unsigned int)length); + loopData->corkOffset += (unsigned int)length; + /* Fall through to default return */ } else { - ipLength = snprintf(buf, 64, "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x", - b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8], b[9], b[10], b[11], - b[12], b[13], b[14], b[15]); - } - - return {buf, (unsigned int) ipLength}; - } - - /* Returns the remote IP address or empty string on failure */ - std::string_view getRemoteAddress() { - static thread_local char buf[16]; - int ipLength = 16; - us_socket_remote_address(SSL, (us_socket_t *) this, buf, &ipLength); - return std::string_view(buf, (unsigned int) ipLength); - } - - /* Returns the text representation of IP */ - std::string_view getRemoteAddressAsText() { - return addressAsText(getRemoteAddress()); - } - - /* Write in three levels of prioritization: cork-buffer, syscall, socket-buffer. Always drain if possible. - * Returns pair of bytes written (anywhere) and whether or not this call resulted in the polling for - * writable (or we are in a state that implies polling for writable). */ - std::pair write(const char *src, int length, bool optionally = false, int nextLength = 0) { - /* Fake success if closed, simple fix to allow uncork of closed socket to succeed */ - if (us_socket_is_closed(SSL, (us_socket_t *) this)) { - return {length, false}; - } - - LoopData *loopData = getLoopData(); - AsyncSocketData *asyncSocketData = getAsyncSocketData(); - - /* We are limited if we have a per-socket buffer */ - if (asyncSocketData->buffer.length()) { - /* Write off as much as we can */ - int written = us_socket_write(SSL, (us_socket_t *) this, asyncSocketData->buffer.data(), (int) asyncSocketData->buffer.length(), /*nextLength != 0 | */length); - - /* On failure return, otherwise continue down the function */ - if ((unsigned int) written < asyncSocketData->buffer.length()) { - - /* Update buffering (todo: we can do better here if we keep track of what happens to this guy later on) */ - asyncSocketData->buffer.erase((unsigned int) written); - - if (optionally) { - /* Thankfully we can exit early here */ - return {0, true}; - } else { - /* This path is horrible and points towards erroneous usage */ - asyncSocketData->buffer.append(src, (unsigned int) length); - - return {length, true}; - } - } - - /* At this point we simply have no buffer and can continue as normal */ - asyncSocketData->buffer.clear(); + /* Strategy differences between SSL and non-SSL regarding syscall + * minimizing */ + if constexpr (false) { + /* Cork up as much as we can */ + unsigned int stripped = + LoopData::CORK_BUFFER_SIZE - loopData->corkOffset; + memcpy(loopData->corkBuffer + loopData->corkOffset, src, stripped); + loopData->corkOffset = LoopData::CORK_BUFFER_SIZE; + + auto [written, failed] = + uncork(src + stripped, length - (int)stripped, optionally); + return {written + (int)stripped, failed}; + } + + /* For non-SSL we take the penalty of two syscalls */ + return uncork(src, length, optionally); } - - if (length) { - if (loopData->corkedSocket == this) { - /* We are corked */ - if (LoopData::CORK_BUFFER_SIZE - loopData->corkOffset >= (unsigned int) length) { - /* If the entire chunk fits in cork buffer */ - memcpy(loopData->corkBuffer + loopData->corkOffset, src, (unsigned int) length); - loopData->corkOffset += (unsigned int) length; - /* Fall through to default return */ - } else { - /* Strategy differences between SSL and non-SSL regarding syscall minimizing */ - if constexpr (false) { - /* Cork up as much as we can */ - unsigned int stripped = LoopData::CORK_BUFFER_SIZE - loopData->corkOffset; - memcpy(loopData->corkBuffer + loopData->corkOffset, src, stripped); - loopData->corkOffset = LoopData::CORK_BUFFER_SIZE; - - auto [written, failed] = uncork(src + stripped, length - (int) stripped, optionally); - return {written + (int) stripped, failed}; - } - - /* For non-SSL we take the penalty of two syscalls */ - return uncork(src, length, optionally); - } - } else { - /* We are not corked */ - int written = us_socket_write(SSL, (us_socket_t *) this, src, length, nextLength != 0); - - /* Did we fail? */ - if (written < length) { - /* If the write was optional then just bail out */ - if (optionally) { - return {written, true}; - } - - /* Fall back to worst possible case (should be very rare for HTTP) */ - /* At least we can reserve room for next chunk if we know it up front */ - if (nextLength) { - asyncSocketData->buffer.reserve(asyncSocketData->buffer.length() + (size_t) (length - written + nextLength)); - } - - /* Buffer this chunk */ - asyncSocketData->buffer.append(src + written, (size_t) (length - written)); - - /* Return the failure */ - return {length, true}; - } - /* Fall through to default return */ - } + } else { + /* We are not corked */ + int written = us_socket_write(SSL, (us_socket_t *)this, src, length, + nextLength != 0); + + /* Did we fail? */ + if (written < length) { + /* If the write was optional then just bail out */ + if (optionally) { + return {written, true}; + } + + /* Fall back to worst possible case (should be very rare for HTTP) */ + /* At least we can reserve room for next chunk if we know it up front + */ + if (nextLength) { + asyncSocketData->buffer.reserve( + asyncSocketData->buffer.length() + + (size_t)(length - written + nextLength)); + } + + /* Buffer this chunk */ + asyncSocketData->buffer.append(src + written, + (size_t)(length - written)); + + /* Return the failure */ + return {length, true}; } - - /* Default fall through return */ - return {length, false}; + /* Fall through to default return */ + } } - /* Uncork this socket and flush or buffer any corked and/or passed data. It is essential to remember doing this. */ - /* It does NOT count bytes written from cork buffer (they are already accounted for in the write call responsible for its corking)! */ - std::pair uncork(const char *src = nullptr, int length = 0, bool optionally = false) { - LoopData *loopData = getLoopData(); - - if (loopData->corkedSocket == this) { - loopData->corkedSocket = nullptr; - - if (loopData->corkOffset) { - /* Corked data is already accounted for via its write call */ - auto [written, failed] = write(loopData->corkBuffer, (int) loopData->corkOffset, false, length); - loopData->corkOffset = 0; - - if (failed) { - /* We do not need to care for buffering here, write does that */ - return {0, true}; - } - } - - /* We should only return with new writes, not things written to cork already */ - return write(src, length, optionally, 0); - } else { - /* We are not even corked! */ - return {0, false}; + /* Default fall through return */ + return {length, false}; + } + + /* Uncork this socket and flush or buffer any corked and/or passed data. It is + * essential to remember doing this. */ + /* It does NOT count bytes written from cork buffer (they are already + * accounted for in the write call responsible for its corking)! */ + std::pair uncork(const char *src = nullptr, int length = 0, + bool optionally = false) { + LoopData *loopData = getLoopData(); + + if (loopData->corkedSocket == this) { + loopData->corkedSocket = nullptr; + + if (loopData->corkOffset) { + /* Corked data is already accounted for via its write call */ + auto [written, failed] = write( + loopData->corkBuffer, (int)loopData->corkOffset, false, length); + loopData->corkOffset = 0; + + if (failed) { + /* We do not need to care for buffering here, write does that */ + return {0, true}; } + } + + /* We should only return with new writes, not things written to cork + * already */ + return write(src, length, optionally, 0); + } else { + /* We are not even corked! */ + return {0, false}; } + } }; -} +} // namespace uWS -#endif // UWS_ASYNCSOCKET_H +#endif // UWS_ASYNCSOCKET_H diff --git a/vendor/hydra/vendor/uwebsockets/src/AsyncSocketData.h b/vendor/hydra/vendor/uwebsockets/src/AsyncSocketData.h index b72b2c10..55afcf41 100644 --- a/vendor/hydra/vendor/uwebsockets/src/AsyncSocketData.h +++ b/vendor/hydra/vendor/uwebsockets/src/AsyncSocketData.h @@ -23,65 +23,50 @@ namespace uWS { struct BackPressure { - std::string buffer; - unsigned int pendingRemoval = 0; - BackPressure(BackPressure &&other) { - buffer = std::move(other.buffer); - pendingRemoval = other.pendingRemoval; - } - BackPressure() = default; - void append(const char *data, size_t length) { - buffer.append(data, length); - } - void erase(unsigned int length) { - pendingRemoval += length; - /* Always erase a minimum of 1/32th the current backpressure */ - if (pendingRemoval > (buffer.length() >> 5)) { - buffer.erase(0, pendingRemoval); - pendingRemoval = 0; - } - } - size_t length() { - return buffer.length() - pendingRemoval; - } - void clear() { - pendingRemoval = 0; - buffer.clear(); - } - void reserve(size_t length) { - buffer.reserve(length + pendingRemoval); - } - void resize(size_t length) { - buffer.resize(length + pendingRemoval); - } - const char *data() { - return buffer.data() + pendingRemoval; - } - size_t size() { - return length(); - } - /* The total length, incuding pending removal */ - size_t totalLength() { - return buffer.length(); + std::string buffer; + unsigned int pendingRemoval = 0; + BackPressure(BackPressure &&other) { + buffer = std::move(other.buffer); + pendingRemoval = other.pendingRemoval; + } + BackPressure() = default; + void append(const char *data, size_t length) { buffer.append(data, length); } + void erase(unsigned int length) { + pendingRemoval += length; + /* Always erase a minimum of 1/32th the current backpressure */ + if (pendingRemoval > (buffer.length() >> 5)) { + buffer.erase(0, pendingRemoval); + pendingRemoval = 0; } + } + size_t length() { return buffer.length() - pendingRemoval; } + void clear() { + pendingRemoval = 0; + buffer.clear(); + } + void reserve(size_t length) { buffer.reserve(length + pendingRemoval); } + void resize(size_t length) { buffer.resize(length + pendingRemoval); } + const char *data() { return buffer.data() + pendingRemoval; } + size_t size() { return length(); } + /* The total length, incuding pending removal */ + size_t totalLength() { return buffer.length(); } }; /* Depending on how we want AsyncSocket to function, this will need to change */ template struct AsyncSocketData { - /* This will do for now */ - BackPressure buffer; + /* This will do for now */ + BackPressure buffer; - /* Allow move constructing us */ - AsyncSocketData(BackPressure &&backpressure) : buffer(std::move(backpressure)) { - - } + /* Allow move constructing us */ + AsyncSocketData(BackPressure &&backpressure) + : buffer(std::move(backpressure)) {} - /* Or emppty */ - AsyncSocketData() = default; + /* Or emppty */ + AsyncSocketData() = default; }; -} +} // namespace uWS -#endif // UWS_ASYNCSOCKETDATA_H +#endif // UWS_ASYNCSOCKETDATA_H diff --git a/vendor/hydra/vendor/uwebsockets/src/BloomFilter.h b/vendor/hydra/vendor/uwebsockets/src/BloomFilter.h index a98cc395..f0df5801 100644 --- a/vendor/hydra/vendor/uwebsockets/src/BloomFilter.h +++ b/vendor/hydra/vendor/uwebsockets/src/BloomFilter.h @@ -21,62 +21,57 @@ /* This filter has no false positives or collisions for the standard * and non-standard common request headers */ -#include #include +#include namespace uWS { struct BloomFilter { -private: - std::bitset<256> filter; - static inline uint32_t perfectHash(uint32_t features) { - return features * 1843993368; - } + private: + std::bitset<256> filter; + static inline uint32_t perfectHash(uint32_t features) { + return features * 1843993368; + } - union ScrambleArea { - unsigned char p[4]; - uint32_t val; - }; - - ScrambleArea getFeatures(std::string_view key) { - ScrambleArea s; - s.p[0] = reinterpret_cast(key[0]); - s.p[1] = reinterpret_cast(key[key.length() - 1]); - s.p[2] = reinterpret_cast(key[key.length() - 2]); - s.p[3] = reinterpret_cast(key[key.length() >> 1]); - return s; - } + union ScrambleArea { + unsigned char p[4]; + uint32_t val; + }; -public: - bool mightHave(std::string_view key) { - if (key.length() < 2) { - return true; - } - - ScrambleArea s = getFeatures(key); - s.val = perfectHash(s.val); - return filter[s.p[0]] && - filter[s.p[1]] && - filter[s.p[2]] && - filter[s.p[3]]; - } + ScrambleArea getFeatures(std::string_view key) { + ScrambleArea s; + s.p[0] = reinterpret_cast(key[0]); + s.p[1] = reinterpret_cast(key[key.length() - 1]); + s.p[2] = reinterpret_cast(key[key.length() - 2]); + s.p[3] = reinterpret_cast(key[key.length() >> 1]); + return s; + } - void add(std::string_view key) { - if (key.length() >= 2) { - ScrambleArea s = getFeatures(key); - s.val = perfectHash(s.val); - filter[s.p[0]] = 1; - filter[s.p[1]] = 1; - filter[s.p[2]] = 1; - filter[s.p[3]] = 1; - } + public: + bool mightHave(std::string_view key) { + if (key.length() < 2) { + return true; } - void reset() { - filter.reset(); + ScrambleArea s = getFeatures(key); + s.val = perfectHash(s.val); + return filter[s.p[0]] && filter[s.p[1]] && filter[s.p[2]] && filter[s.p[3]]; + } + + void add(std::string_view key) { + if (key.length() >= 2) { + ScrambleArea s = getFeatures(key); + s.val = perfectHash(s.val); + filter[s.p[0]] = 1; + filter[s.p[1]] = 1; + filter[s.p[2]] = 1; + filter[s.p[3]] = 1; } + } + + void reset() { filter.reset(); } }; -} +} // namespace uWS -#endif // UWS_BLOOMFILTER_H +#endif // UWS_BLOOMFILTER_H diff --git a/vendor/hydra/vendor/uwebsockets/src/CachingApp.h b/vendor/hydra/vendor/uwebsockets/src/CachingApp.h index 7593bb7e..7590d002 100644 --- a/vendor/hydra/vendor/uwebsockets/src/CachingApp.h +++ b/vendor/hydra/vendor/uwebsockets/src/CachingApp.h @@ -1,113 +1,116 @@ #ifndef UWS_CACHINGAPP_H #define UWS_CACHINGAPP_H -#include "App.h" -#include -#include #include +#include #include +#include + +#include "App.h" namespace uWS { struct StringViewHash { - size_t operator()(std::string_view sv) const { - return std::hash{}(sv); - } + size_t operator()(std::string_view sv) const { + return std::hash{}(sv); + } }; struct StringViewEqual { - bool operator()(std::string_view sv1, std::string_view sv2) const { - return sv1 == sv2; - } + bool operator()(std::string_view sv1, std::string_view sv2) const { + return sv1 == sv2; + } }; - - class CachingHttpResponse { -public: - CachingHttpResponse(uWS::HttpResponse *res) - : res(res) {} - - void write(std::string_view data) { - buffer.append(data); - } + public: + CachingHttpResponse(uWS::HttpResponse *res) : res(res) {} - void end(std::string_view data = "", bool closeConnection = false) { - buffer.append(data); + void write(std::string_view data) { buffer.append(data); } - // end for all queued up sockets also - res->end(buffer); + void end(std::string_view data = "", bool closeConnection = false) { + buffer.append(data); - created = time(0); - } + // end for all queued up sockets also + res->end(buffer); -public: - uWS::HttpResponse* res; // should be a vector of waiting sockets + created = time(0); + } + public: + uWS::HttpResponse *res; // should be a vector of waiting sockets - std::string buffer; // body - time_t created; + std::string buffer; // body + time_t created; }; -typedef std::unordered_map CacheType; +typedef std::unordered_map + CacheType; // we can also derive from H3app later on template struct CachingApp : public uWS::TemplatedApp> { -public: - CachingApp(SocketContextOptions options = {}) : uWS::TemplatedApp>(options) {} - - using uWS::TemplatedApp>::get; - - CachingApp(const CachingApp &other) = delete; - CachingApp(CachingApp &&other) : uWS::TemplatedApp>(std::move(other)) { - // also move the cache - } - - ~CachingApp() { - - } - - // variant 1: only taking URL into account - CachingApp &&get(const std::string& url, uWS::MoveOnlyFunction &&handler, unsigned int secondsToExpiry) { - ((uWS::TemplatedApp> *)this)->get(url, [this, handler = std::move(handler), secondsToExpiry](auto* res, auto* req) mutable { - /* We need to know the cache key and the time of now */ - std::string_view cache_key = req->getFullUrl(); - time_t now = static_cast(us_loop_ext((us_loop_t *)uWS::Loop::get()))->cacheTimepoint; - - auto it = cache.find(cache_key); - if (it != cache.end()) { - - if (it->second->created + secondsToExpiry > now) { - res->end(it->second->buffer); // tryEnd! - return; - } + public: + CachingApp(SocketContextOptions options = {}) + : uWS::TemplatedApp>(options) {} + + using uWS::TemplatedApp>::get; + + CachingApp(const CachingApp &other) = delete; + CachingApp(CachingApp &&other) + : uWS::TemplatedApp>(std::move(other)) { + // also move the cache + } + + ~CachingApp() {} + + // variant 1: only taking URL into account + CachingApp &&get(const std::string &url, + uWS::MoveOnlyFunction &&handler, + unsigned int secondsToExpiry) { + ((uWS::TemplatedApp> *)this) + ->get(url, [this, handler = std::move(handler), secondsToExpiry]( + auto *res, auto *req) mutable { + /* We need to know the cache key and the time of now */ + std::string_view cache_key = req->getFullUrl(); + time_t now = static_cast( + us_loop_ext((us_loop_t *)uWS::Loop::get())) + ->cacheTimepoint; + + auto it = cache.find(cache_key); + if (it != cache.end()) { + if (it->second->created + secondsToExpiry > now) { + res->end(it->second->buffer); // tryEnd! + return; + } - /* We are no longer valid, delete old cache and fall through to create a new entry */ - delete it->second; + /* We are no longer valid, delete old cache and fall through to + * create a new entry */ + delete it->second; - // is the cache completed? if not, add yourself to the waiting list of sockets to that cache + // is the cache completed? if not, add yourself to the waiting list + // of sockets to that cache - // if the cache completed? ok, is it still valid? use it - } + // if the cache completed? ok, is it still valid? use it + } - // immediately take the place in the cache - CachingHttpResponse *cachingRes; - cache[cache_key] = (cachingRes = new CachingHttpResponse(res)); + // immediately take the place in the cache + CachingHttpResponse *cachingRes; + cache[cache_key] = (cachingRes = new CachingHttpResponse(res)); - handler(cachingRes, req); + handler(cachingRes, req); }); - return std::move(*this); - } + return std::move(*this); + } - // variant 2: taking URL and a list of headers into account - // todo + // variant 2: taking URL and a list of headers into account + // todo -private: - CacheType cache; + private: + CacheType cache; }; -} +} // namespace uWS #endif \ No newline at end of file diff --git a/vendor/hydra/vendor/uwebsockets/src/ChunkedEncoding.h b/vendor/hydra/vendor/uwebsockets/src/ChunkedEncoding.h index 9ecffd6e..7a9e86aa 100644 --- a/vendor/hydra/vendor/uwebsockets/src/ChunkedEncoding.h +++ b/vendor/hydra/vendor/uwebsockets/src/ChunkedEncoding.h @@ -20,217 +20,210 @@ /* Independent chunked encoding parser, used by HttpParser. */ -#include -#include #include +#include +#include +#include #include + #include "MoveOnlyFunction.h" -#include namespace uWS { - constexpr uint64_t STATE_HAS_SIZE = 1ull << (sizeof(uint64_t) * 8 - 1);//0x80000000; - constexpr uint64_t STATE_IS_CHUNKED = 1ull << (sizeof(uint64_t) * 8 - 2);//0x40000000; - constexpr uint64_t STATE_SIZE_MASK = ~(3ull << (sizeof(uint64_t) * 8 - 2));//0x3FFFFFFF; - constexpr uint64_t STATE_IS_ERROR = ~0ull;//0xFFFFFFFF; - constexpr uint64_t STATE_SIZE_OVERFLOW = 0x0Full << (sizeof(uint64_t) * 8 - 8);//0x0F000000; - - inline uint64_t chunkSize(uint64_t state) { - return state & STATE_SIZE_MASK; +constexpr uint64_t STATE_HAS_SIZE = + 1ull << (sizeof(uint64_t) * 8 - 1); // 0x80000000; +constexpr uint64_t STATE_IS_CHUNKED = + 1ull << (sizeof(uint64_t) * 8 - 2); // 0x40000000; +constexpr uint64_t STATE_SIZE_MASK = + ~(3ull << (sizeof(uint64_t) * 8 - 2)); // 0x3FFFFFFF; +constexpr uint64_t STATE_IS_ERROR = ~0ull; // 0xFFFFFFFF; +constexpr uint64_t STATE_SIZE_OVERFLOW = + 0x0Full << (sizeof(uint64_t) * 8 - 8); // 0x0F000000; + +inline uint64_t chunkSize(uint64_t state) { return state & STATE_SIZE_MASK; } + +/* Reads hex number until CR or out of data to consume. Updates state. Returns + * bytes consumed. */ +inline void consumeHexNumber(std::string_view &data, uint64_t &state) { + /* Consume everything higher than 32 */ + while (data.length() && data.data()[0] > 32) { + unsigned char digit = (unsigned char)data.data()[0]; + if (digit >= 'a') { + digit = (unsigned char)(digit - ('a' - ':')); + } else if (digit >= 'A') { + digit = (unsigned char)(digit - ('A' - ':')); } - /* Reads hex number until CR or out of data to consume. Updates state. Returns bytes consumed. */ - inline void consumeHexNumber(std::string_view &data, uint64_t &state) { - /* Consume everything higher than 32 */ - while (data.length() && data.data()[0] > 32) { - - unsigned char digit = (unsigned char)data.data()[0]; - if (digit >= 'a') { - digit = (unsigned char) (digit - ('a' - ':')); - } else if (digit >= 'A') { - digit = (unsigned char) (digit - ('A' - ':')); - } - - unsigned int number = ((unsigned int) digit - (unsigned int) '0'); + unsigned int number = ((unsigned int)digit - (unsigned int)'0'); - if (number > 16 || (chunkSize(state) & STATE_SIZE_OVERFLOW)) { - state = STATE_IS_ERROR; - return; - } + if (number > 16 || (chunkSize(state) & STATE_SIZE_OVERFLOW)) { + state = STATE_IS_ERROR; + return; + } - // extract state bits - uint64_t bits = /*state &*/ STATE_IS_CHUNKED; + // extract state bits + uint64_t bits = /*state &*/ STATE_IS_CHUNKED; + + state = (state & STATE_SIZE_MASK) * 16ull + number; + + state |= bits; + data.remove_prefix(1); + } + /* Consume everything not /n */ + while (data.length() && data.data()[0] != '\n') { + data.remove_prefix(1); + } + /* Now we stand on \n so consume it and enable size */ + if (data.length()) { + state += 2; // include the two last /r/n + state |= STATE_HAS_SIZE | STATE_IS_CHUNKED; + data.remove_prefix(1); + } +} - state = (state & STATE_SIZE_MASK) * 16ull + number; +inline void decChunkSize(uint64_t &state, unsigned int by) { + // unsigned int bits = state & STATE_IS_CHUNKED; - state |= bits; - data.remove_prefix(1); - } - /* Consume everything not /n */ - while (data.length() && data.data()[0] != '\n') { - data.remove_prefix(1); - } - /* Now we stand on \n so consume it and enable size */ - if (data.length()) { - state += 2; // include the two last /r/n - state |= STATE_HAS_SIZE | STATE_IS_CHUNKED; - data.remove_prefix(1); - } - } + state = (state & ~STATE_SIZE_MASK) | (chunkSize(state) - by); - inline void decChunkSize(uint64_t &state, unsigned int by) { + // state |= bits; +} - //unsigned int bits = state & STATE_IS_CHUNKED; +inline bool hasChunkSize(uint64_t state) { return state & STATE_HAS_SIZE; } - state = (state & ~STATE_SIZE_MASK) | (chunkSize(state) - by); +/* Are we in the middle of parsing chunked encoding? */ +inline bool isParsingChunkedEncoding(uint64_t state) { + return state & ~STATE_SIZE_MASK; +} - //state |= bits; - } +inline bool isParsingInvalidChunkedEncoding(uint64_t state) { + return state == STATE_IS_ERROR; +} - inline bool hasChunkSize(uint64_t state) { - return state & STATE_HAS_SIZE; +/* Returns next chunk (empty or not), or if all data was consumed, nullopt is + * returned. */ +static std::optional getNextChunk(std::string_view &data, + uint64_t &state, + bool trailer = false) { + while (data.length()) { + // if in "drop trailer mode", just drop up to what we have as size + if (((state & STATE_IS_CHUNKED) == 0) && hasChunkSize(state) && + chunkSize(state)) { + // printf("Parsing trailer now\n"); + + while (data.length() && chunkSize(state)) { + data.remove_prefix(1); + decChunkSize(state, 1); + + if (chunkSize(state) == 0) { + /* This is an actual place where we need 0 as state */ + state = 0; + + /* The parser MUST stop consuming here */ + return std::nullopt; + } + } + continue; } - /* Are we in the middle of parsing chunked encoding? */ - inline bool isParsingChunkedEncoding(uint64_t state) { - return state & ~STATE_SIZE_MASK; - } + if (!hasChunkSize(state)) { + consumeHexNumber(data, state); + if (isParsingInvalidChunkedEncoding(state)) { + return std::nullopt; + } + if (hasChunkSize(state) && chunkSize(state) == 2) { + // printf("Setting state to trailer-parsing and emitting empty + // chunk\n"); + + // set trailer state and increase size to 4 + if (trailer) { + state = 4 /*| STATE_IS_CHUNKED*/ | STATE_HAS_SIZE; + } else { + state = 2 /*| STATE_IS_CHUNKED*/ | STATE_HAS_SIZE; + } - inline bool isParsingInvalidChunkedEncoding(uint64_t state) { - return state == STATE_IS_ERROR; + return std::string_view(nullptr, 0); + } + continue; } - /* Returns next chunk (empty or not), or if all data was consumed, nullopt is returned. */ - static std::optional getNextChunk(std::string_view &data, uint64_t &state, bool trailer = false) { - - while (data.length()) { - - // if in "drop trailer mode", just drop up to what we have as size - if (((state & STATE_IS_CHUNKED) == 0) && hasChunkSize(state) && chunkSize(state)) { - - //printf("Parsing trailer now\n"); - - while(data.length() && chunkSize(state)) { - data.remove_prefix(1); - decChunkSize(state, 1); - - if (chunkSize(state) == 0) { - - /* This is an actual place where we need 0 as state */ - state = 0; - - /* The parser MUST stop consuming here */ - return std::nullopt; - } - } - continue; - } - - if (!hasChunkSize(state)) { - consumeHexNumber(data, state); - if (isParsingInvalidChunkedEncoding(state)) { - return std::nullopt; - } - if (hasChunkSize(state) && chunkSize(state) == 2) { - - //printf("Setting state to trailer-parsing and emitting empty chunk\n"); - - // set trailer state and increase size to 4 - if (trailer) { - state = 4 /*| STATE_IS_CHUNKED*/ | STATE_HAS_SIZE; - } else { - state = 2 /*| STATE_IS_CHUNKED*/ | STATE_HAS_SIZE; - } - - return std::string_view(nullptr, 0); - } - continue; - } - - // do we have data to emit all? - if (data.length() >= chunkSize(state)) { - // emit all but 2 bytes then reset state to 0 and goto beginning - // not fin - std::string_view emitSoon; - bool shouldEmit = false; - if (chunkSize(state) > 2) { - emitSoon = std::string_view(data.data(), chunkSize(state) - 2); - shouldEmit = true; - } - data.remove_prefix(chunkSize(state)); - state = STATE_IS_CHUNKED; - if (shouldEmit) { - return emitSoon; - } - continue; - } else { - /* We will consume all our input data */ - std::string_view emitSoon; - if (chunkSize(state) > 2) { - uint64_t maximalAppEmit = chunkSize(state) - 2; - if (data.length() > maximalAppEmit) { - emitSoon = data.substr(0, maximalAppEmit); - } else { - //cb(data); - emitSoon = data; - } - } - decChunkSize(state, (unsigned int) data.length()); - state |= STATE_IS_CHUNKED; - // new: decrease data by its size (bug) - data.remove_prefix(data.length()); // ny bug fix för getNextChunk - if (emitSoon.length()) { - return emitSoon; - } else { - return std::nullopt; - } - } + // do we have data to emit all? + if (data.length() >= chunkSize(state)) { + // emit all but 2 bytes then reset state to 0 and goto beginning + // not fin + std::string_view emitSoon; + bool shouldEmit = false; + if (chunkSize(state) > 2) { + emitSoon = std::string_view(data.data(), chunkSize(state) - 2); + shouldEmit = true; + } + data.remove_prefix(chunkSize(state)); + state = STATE_IS_CHUNKED; + if (shouldEmit) { + return emitSoon; + } + continue; + } else { + /* We will consume all our input data */ + std::string_view emitSoon; + if (chunkSize(state) > 2) { + uint64_t maximalAppEmit = chunkSize(state) - 2; + if (data.length() > maximalAppEmit) { + emitSoon = data.substr(0, maximalAppEmit); + } else { + // cb(data); + emitSoon = data; } - + } + decChunkSize(state, (unsigned int)data.length()); + state |= STATE_IS_CHUNKED; + // new: decrease data by its size (bug) + data.remove_prefix(data.length()); // ny bug fix för getNextChunk + if (emitSoon.length()) { + return emitSoon; + } else { return std::nullopt; + } } + } - /* This is really just a wrapper for convenience */ - struct ChunkIterator { - - std::string_view *data; - std::optional chunk; - uint64_t *state; - bool trailer; - - ChunkIterator(std::string_view *data, uint64_t *state, bool trailer = false) : data(data), state(state), trailer(trailer) { - chunk = uWS::getNextChunk(*data, *state, trailer); - } + return std::nullopt; +} - ChunkIterator() { +/* This is really just a wrapper for convenience */ +struct ChunkIterator { + std::string_view *data; + std::optional chunk; + uint64_t *state; + bool trailer; - } + ChunkIterator(std::string_view *data, uint64_t *state, bool trailer = false) + : data(data), state(state), trailer(trailer) { + chunk = uWS::getNextChunk(*data, *state, trailer); + } - ChunkIterator begin() { - return *this; - } + ChunkIterator() {} - ChunkIterator end() { - return ChunkIterator(); - } + ChunkIterator begin() { return *this; } - std::string_view operator*() { - if (!chunk.has_value()) { - std::abort(); - } - return chunk.value(); - } + ChunkIterator end() { return ChunkIterator(); } - bool operator!=(const ChunkIterator &other) const { - return other.chunk.has_value() != chunk.has_value(); - } + std::string_view operator*() { + if (!chunk.has_value()) { + std::abort(); + } + return chunk.value(); + } - ChunkIterator &operator++() { - chunk = uWS::getNextChunk(*data, *state, trailer); - return *this; - } + bool operator!=(const ChunkIterator &other) const { + return other.chunk.has_value() != chunk.has_value(); + } - }; -} + ChunkIterator &operator++() { + chunk = uWS::getNextChunk(*data, *state, trailer); + return *this; + } +}; +} // namespace uWS -#endif // UWS_CHUNKEDENCODING_H +#endif // UWS_CHUNKEDENCODING_H diff --git a/vendor/hydra/vendor/uwebsockets/src/ClientApp.h b/vendor/hydra/vendor/uwebsockets/src/ClientApp.h index d8696373..5bdbabd9 100644 --- a/vendor/hydra/vendor/uwebsockets/src/ClientApp.h +++ b/vendor/hydra/vendor/uwebsockets/src/ClientApp.h @@ -1,36 +1,32 @@ +#include + #include "MoveOnlyFunction.h" #include "WebSocketContext.h" -#include namespace uWS { - struct WebSocketClientBehavior { - MoveOnlyFunction open; - MoveOnlyFunction message; - MoveOnlyFunction close; - //MoveOnlyFunction failed; - - }; - - struct ClientApp { - - WebSocketContext<0, false, int> *webSocketContext; - // behöver ett nytt http context med minimal klient, som slÃ¥r om till den riktiga websocketcontext - // om samma storlek pÃ¥ httpsocket och websocket blir det enkel övergÃ¥ng - - ClientApp(WebSocketClientBehavior &&behavior) { - //webSocketContext = WebSocketContext<0, false, int>::create(); - } - - ClientApp &&connect(std::string url, std::string protocol = "") { +struct WebSocketClientBehavior { + MoveOnlyFunction open; + MoveOnlyFunction message; + MoveOnlyFunction close; + // MoveOnlyFunction failed; +}; - return std::move(*this); - } +struct ClientApp { + WebSocketContext<0, false, int> *webSocketContext; + // behöver ett nytt http context med minimal klient, som slÃ¥r om till den + // riktiga websocketcontext om samma storlek pÃ¥ httpsocket och websocket blir + // det enkel övergÃ¥ng - void run() { + ClientApp(WebSocketClientBehavior &&behavior) { + // webSocketContext = WebSocketContext<0, false, int>::create(); + } - } + ClientApp &&connect(std::string url, std::string protocol = "") { + return std::move(*this); + } - }; + void run() {} +}; -} \ No newline at end of file +} // namespace uWS \ No newline at end of file diff --git a/vendor/hydra/vendor/uwebsockets/src/Http3App.h b/vendor/hydra/vendor/uwebsockets/src/Http3App.h index 4c54b295..7c537d75 100644 --- a/vendor/hydra/vendor/uwebsockets/src/Http3App.h +++ b/vendor/hydra/vendor/uwebsockets/src/Http3App.h @@ -1,140 +1,169 @@ #include "App.h" - -#include "Http3Response.h" -#include "Http3Request.h" #include "Http3Context.h" +#include "Http3Request.h" +#include "Http3Response.h" namespace uWS { - struct H3App { - Http3Context *http3Context; - - H3App(SocketContextOptions options = {}) { - /* This conversion should not be needed */ - us_quic_socket_context_options_t h3options = {}; - - h3options.key_file_name = strdup(options.key_file_name); - h3options.cert_file_name = strdup(options.cert_file_name); - h3options.passphrase = strdup(options.passphrase); - - /* Create the http3 context */ - http3Context = Http3Context::create((us_loop_t *)Loop::get(), h3options); - - http3Context->init(); - } - - /* Disallow copying, only move */ - H3App(const H3App &other) = delete; - - H3App(H3App &&other) { - /* Move HttpContext */ - http3Context = other.http3Context; - other.http3Context = nullptr; - } - - /* Host, port, callback */ - H3App &&listen(std::string host, int port, MoveOnlyFunction &&handler) { - if (!host.length()) { - return listen(port, std::move(handler)); - } - handler(http3Context ? (us_listen_socket_t *) http3Context->listen(host.c_str(), port) : nullptr); - return std::move(*this); - } - - /* Host, port, options, callback */ - H3App &&listen(std::string host, int port, int options, MoveOnlyFunction &&handler) { - if (!host.length()) { - return listen(port, options, std::move(handler)); - } - handler(http3Context ? (us_listen_socket_t *) http3Context->listen(host.c_str(), port) : nullptr); - return std::move(*this); - } - - /* Port, callback */ - H3App &&listen(int port, MoveOnlyFunction &&handler) { - handler(http3Context ? (us_listen_socket_t *) http3Context->listen(nullptr, port) : nullptr); - return std::move(*this); - } - - /* Port, options, callback */ - H3App &&listen(int port, int options, MoveOnlyFunction &&handler) { - handler(http3Context ? (us_listen_socket_t *) http3Context->listen(nullptr, port) : nullptr); - return std::move(*this); - } - - H3App &&get(std::string pattern, MoveOnlyFunction &&handler) { - if (http3Context) { - http3Context->onHttp("GET", pattern, std::move(handler)); - } - return std::move(*this); - } - - H3App &&post(std::string pattern, MoveOnlyFunction &&handler) { - if (http3Context) { - http3Context->onHttp("POST", pattern, std::move(handler)); - } - return std::move(*this); - } - - H3App &&options(std::string pattern, MoveOnlyFunction &&handler) { - if (http3Context) { - http3Context->onHttp("OPTIONS", pattern, std::move(handler)); - } - return std::move(*this); - } - - H3App &&del(std::string pattern, MoveOnlyFunction &&handler) { - if (http3Context) { - http3Context->onHttp("DELETE", pattern, std::move(handler)); - } - return std::move(*this); - } - - H3App &&patch(std::string pattern, MoveOnlyFunction &&handler) { - if (http3Context) { - http3Context->onHttp("PATCH", pattern, std::move(handler)); - } - return std::move(*this); - } - - H3App &&put(std::string pattern, MoveOnlyFunction &&handler) { - if (http3Context) { - http3Context->onHttp("PUT", pattern, std::move(handler)); - } - return std::move(*this); - } - - H3App &&head(std::string pattern, MoveOnlyFunction &&handler) { - if (http3Context) { - http3Context->onHttp("HEAD", pattern, std::move(handler)); - } - return std::move(*this); - } - - H3App &&connect(std::string pattern, MoveOnlyFunction &&handler) { - if (http3Context) { - http3Context->onHttp("CONNECT", pattern, std::move(handler)); - } - return std::move(*this); - } - - H3App &&trace(std::string pattern, MoveOnlyFunction &&handler) { - if (http3Context) { - http3Context->onHttp("TRACE", pattern, std::move(handler)); - } - return std::move(*this); - } - - /* This one catches any method */ - H3App &&any(std::string pattern, MoveOnlyFunction &&handler) { - if (http3Context) { - http3Context->onHttp("*", pattern, std::move(handler)); - } - return std::move(*this); - } - - void run() { - uWS::Loop::get()->run(); - } - }; -} \ No newline at end of file +struct H3App { + Http3Context *http3Context; + + H3App(SocketContextOptions options = {}) { + /* This conversion should not be needed */ + us_quic_socket_context_options_t h3options = {}; + + h3options.key_file_name = strdup(options.key_file_name); + h3options.cert_file_name = strdup(options.cert_file_name); + h3options.passphrase = strdup(options.passphrase); + + /* Create the http3 context */ + http3Context = Http3Context::create((us_loop_t *)Loop::get(), h3options); + + http3Context->init(); + } + + /* Disallow copying, only move */ + H3App(const H3App &other) = delete; + + H3App(H3App &&other) { + /* Move HttpContext */ + http3Context = other.http3Context; + other.http3Context = nullptr; + } + + /* Host, port, callback */ + H3App &&listen(std::string host, int port, + MoveOnlyFunction &&handler) { + if (!host.length()) { + return listen(port, std::move(handler)); + } + handler(http3Context + ? (us_listen_socket_t *)http3Context->listen(host.c_str(), port) + : nullptr); + return std::move(*this); + } + + /* Host, port, options, callback */ + H3App &&listen(std::string host, int port, int options, + MoveOnlyFunction &&handler) { + if (!host.length()) { + return listen(port, options, std::move(handler)); + } + handler(http3Context + ? (us_listen_socket_t *)http3Context->listen(host.c_str(), port) + : nullptr); + return std::move(*this); + } + + /* Port, callback */ + H3App &&listen(int port, + MoveOnlyFunction &&handler) { + handler(http3Context + ? (us_listen_socket_t *)http3Context->listen(nullptr, port) + : nullptr); + return std::move(*this); + } + + /* Port, options, callback */ + H3App &&listen(int port, int options, + MoveOnlyFunction &&handler) { + handler(http3Context + ? (us_listen_socket_t *)http3Context->listen(nullptr, port) + : nullptr); + return std::move(*this); + } + + H3App &&get( + std::string pattern, + MoveOnlyFunction &&handler) { + if (http3Context) { + http3Context->onHttp("GET", pattern, std::move(handler)); + } + return std::move(*this); + } + + H3App &&post( + std::string pattern, + MoveOnlyFunction &&handler) { + if (http3Context) { + http3Context->onHttp("POST", pattern, std::move(handler)); + } + return std::move(*this); + } + + H3App &&options( + std::string pattern, + MoveOnlyFunction &&handler) { + if (http3Context) { + http3Context->onHttp("OPTIONS", pattern, std::move(handler)); + } + return std::move(*this); + } + + H3App &&del( + std::string pattern, + MoveOnlyFunction &&handler) { + if (http3Context) { + http3Context->onHttp("DELETE", pattern, std::move(handler)); + } + return std::move(*this); + } + + H3App &&patch( + std::string pattern, + MoveOnlyFunction &&handler) { + if (http3Context) { + http3Context->onHttp("PATCH", pattern, std::move(handler)); + } + return std::move(*this); + } + + H3App &&put( + std::string pattern, + MoveOnlyFunction &&handler) { + if (http3Context) { + http3Context->onHttp("PUT", pattern, std::move(handler)); + } + return std::move(*this); + } + + H3App &&head( + std::string pattern, + MoveOnlyFunction &&handler) { + if (http3Context) { + http3Context->onHttp("HEAD", pattern, std::move(handler)); + } + return std::move(*this); + } + + H3App &&connect( + std::string pattern, + MoveOnlyFunction &&handler) { + if (http3Context) { + http3Context->onHttp("CONNECT", pattern, std::move(handler)); + } + return std::move(*this); + } + + H3App &&trace( + std::string pattern, + MoveOnlyFunction &&handler) { + if (http3Context) { + http3Context->onHttp("TRACE", pattern, std::move(handler)); + } + return std::move(*this); + } + + /* This one catches any method */ + H3App &&any( + std::string pattern, + MoveOnlyFunction &&handler) { + if (http3Context) { + http3Context->onHttp("*", pattern, std::move(handler)); + } + return std::move(*this); + } + + void run() { uWS::Loop::get()->run(); } +}; +} // namespace uWS \ No newline at end of file diff --git a/vendor/hydra/vendor/uwebsockets/src/Http3Context.h b/vendor/hydra/vendor/uwebsockets/src/Http3Context.h index 46921738..f1738d3e 100644 --- a/vendor/hydra/vendor/uwebsockets/src/Http3Context.h +++ b/vendor/hydra/vendor/uwebsockets/src/Http3Context.h @@ -7,151 +7,167 @@ extern "C" { #include "Http3ResponseData.h" namespace uWS { - struct Http3Context { - static Http3Context *create(us_loop_t *loop, us_quic_socket_context_options_t options) { - - /* Create quic socket context (assumes h3 for now) */ - auto *context = us_create_quic_socket_context(loop, options, sizeof(Http3ContextData)); - - /* Specify application callbacks */ - us_quic_socket_context_on_stream_data(context, [](us_quic_stream_t *s, char *data, int length) { - - Http3ResponseData *responseData = (Http3ResponseData *) us_quic_stream_ext(s); - - /* We never emit FIN here */ - if (responseData->onData) { - responseData->onData({data, (size_t) length}, false); - } - }); - us_quic_socket_context_on_stream_end(context, [](us_quic_stream_t *s) { - - Http3ResponseData *responseData = (Http3ResponseData *) us_quic_stream_ext(s); - - /* Emit FIN to app */ - if (responseData->onData) { - responseData->onData({nullptr, 0}, true); - } - - /* Have we written our entire backpressure, if any? */ - // if (responseData->buffer.length() && (responseData->bufferOffset == (int) responseData->buffer.length())) { - // printf("We got FIN and we have no backpressure, closing stream now!\n"); - // //us_quic_stream_close(s); - // } else { - // //printf("We got FIN but we have data to write, so keeping connection half-closed!\n"); - // } - - }); - us_quic_socket_context_on_stream_open(context, [](us_quic_stream_t *s, int is_client) { - - printf("Stream open!\n"); - - /* Inplace init our per stream data */ - new (us_quic_stream_ext(s)) Http3ResponseData(); - }); - us_quic_socket_context_on_close(context, [](us_quic_socket_t *s) { - printf("QUIC socket disconnected!\n"); - }); - us_quic_socket_context_on_stream_writable(context, [](us_quic_stream_t *s) { - Http3ResponseData *responseData = (Http3ResponseData *) us_quic_stream_ext(s); - - /* Either we handle the streaming or we let the application handle it */ - if (responseData->onWritable) { - responseData->onWritable(responseData->offset); - } else { - int written = us_quic_stream_write(s, (char *) responseData->backpressure.data(), responseData->backpressure.length()); - responseData->backpressure.erase(written); - - if (responseData->backpressure.length() == 0) { - printf("wrote until end, shutting down now!\n"); - us_quic_stream_shutdown(s); - us_quic_stream_close(s); - } - } - }); - us_quic_socket_context_on_stream_headers(context, [](us_quic_stream_t *s) { - - /* This is the main place of start for requests */ - Http3ContextData *contextData = (Http3ContextData *) us_quic_socket_context_ext(us_quic_socket_context(us_quic_stream_socket(s))); - - Http3Request *req = nullptr; - - std::string_view upperCasedMethod = req->getHeader(":method"); - std::string_view path = req->getHeader(":path"); - - contextData->router.getUserData() = {(Http3Response *) s, (Http3Request *) nullptr}; - contextData->router.route(upperCasedMethod, path); - - }); - us_quic_socket_context_on_open(context, [](us_quic_socket_t *s, int is_client) { - printf("QUIC socket connected!\n"); - }); - us_quic_socket_context_on_stream_close(context, [](us_quic_stream_t *s) { - - printf("Stream closed!\n"); - - //lsquic_stream_has_unacked_data - - Http3ResponseData *responseData = (Http3ResponseData *) us_quic_stream_ext(s); - - if (responseData->onAborted) { - responseData->onAborted(); - } - - //printf("Freeing per stream data in on_stream_close in uws!\n"); - - responseData->~Http3ResponseData(); - }); - - return (Http3Context *) context; - - // call init here after setting the ext to Http3ContextData +struct Http3Context { + static Http3Context *create(us_loop_t *loop, + us_quic_socket_context_options_t options) { + /* Create quic socket context (assumes h3 for now) */ + auto *context = + us_create_quic_socket_context(loop, options, sizeof(Http3ContextData)); + + /* Specify application callbacks */ + us_quic_socket_context_on_stream_data( + context, [](us_quic_stream_t *s, char *data, int length) { + Http3ResponseData *responseData = + (Http3ResponseData *)us_quic_stream_ext(s); + + /* We never emit FIN here */ + if (responseData->onData) { + responseData->onData({data, (size_t)length}, false); + } + }); + us_quic_socket_context_on_stream_end(context, [](us_quic_stream_t *s) { + Http3ResponseData *responseData = + (Http3ResponseData *)us_quic_stream_ext(s); + + /* Emit FIN to app */ + if (responseData->onData) { + responseData->onData({nullptr, 0}, true); + } + + /* Have we written our entire backpressure, if any? */ + // if (responseData->buffer.length() && (responseData->bufferOffset == + // (int) responseData->buffer.length())) { + // printf("We got FIN and we have no backpressure, closing stream + // now!\n"); + // //us_quic_stream_close(s); + // } else { + // //printf("We got FIN but we have data to write, so keeping + // connection half-closed!\n"); + // } + }); + us_quic_socket_context_on_stream_open( + context, [](us_quic_stream_t *s, int is_client) { + printf("Stream open!\n"); + + /* Inplace init our per stream data */ + new (us_quic_stream_ext(s)) Http3ResponseData(); + }); + us_quic_socket_context_on_close(context, [](us_quic_socket_t *s) { + printf("QUIC socket disconnected!\n"); + }); + us_quic_socket_context_on_stream_writable(context, [](us_quic_stream_t *s) { + Http3ResponseData *responseData = + (Http3ResponseData *)us_quic_stream_ext(s); + + /* Either we handle the streaming or we let the application handle it */ + if (responseData->onWritable) { + responseData->onWritable(responseData->offset); + } else { + int written = + us_quic_stream_write(s, (char *)responseData->backpressure.data(), + responseData->backpressure.length()); + responseData->backpressure.erase(written); + + if (responseData->backpressure.length() == 0) { + printf("wrote until end, shutting down now!\n"); + us_quic_stream_shutdown(s); + us_quic_stream_close(s); } - - us_quic_listen_socket_t *listen(const char *host, int port) { - /* The listening socket is the actual UDP socket used */ - us_quic_listen_socket_t *listen_socket = us_quic_socket_context_listen((us_quic_socket_context_t *) this, host, port, sizeof(Http3ResponseData)); - - //printf("Listen socket is: %p\n", listen_socket); - - return listen_socket; - } - - void init() { - // set all callbacks here - - - - Http3ContextData *contextData = (Http3ContextData *) us_quic_socket_context_ext((us_quic_socket_context_t *) this); - - //printf("init: %p\n", contextData); - - new (contextData) Http3ContextData(); - - } - - // generic for get, post, any, etc - void onHttp(std::string method, std::string path, MoveOnlyFunction &&cb) { - // modifies the router we own as part of Http3ContextData, used in callbacks set in init - - Http3ContextData *contextData = (Http3ContextData *) us_quic_socket_context_ext((us_quic_socket_context_t *) this); - - /* Todo: This is ugly, fix */ - std::vector methods; - if (method == "*") { - methods = {"*"}; //bug! needs to be upper cased! - // router.upperCasedMethods; - } else { - methods = {method}; - } - - contextData->router.add(methods, path, [handler = std::move(cb)](HttpRouter *router) mutable { - - Http3ContextData::RouterData &routerData = router->getUserData(); - - handler(routerData.res, routerData.req); - - return true; - }); - } - }; -} \ No newline at end of file + } + }); + us_quic_socket_context_on_stream_headers(context, [](us_quic_stream_t *s) { + /* This is the main place of start for requests */ + Http3ContextData *contextData = + (Http3ContextData *)us_quic_socket_context_ext( + us_quic_socket_context(us_quic_stream_socket(s))); + + Http3Request *req = nullptr; + + std::string_view upperCasedMethod = req->getHeader(":method"); + std::string_view path = req->getHeader(":path"); + + contextData->router.getUserData() = {(Http3Response *)s, + (Http3Request *)nullptr}; + contextData->router.route(upperCasedMethod, path); + }); + us_quic_socket_context_on_open(context, + [](us_quic_socket_t *s, int is_client) { + printf("QUIC socket connected!\n"); + }); + us_quic_socket_context_on_stream_close(context, [](us_quic_stream_t *s) { + printf("Stream closed!\n"); + + // lsquic_stream_has_unacked_data + + Http3ResponseData *responseData = + (Http3ResponseData *)us_quic_stream_ext(s); + + if (responseData->onAborted) { + responseData->onAborted(); + } + + // printf("Freeing per stream data in on_stream_close in uws!\n"); + + responseData->~Http3ResponseData(); + }); + + return (Http3Context *)context; + + // call init here after setting the ext to Http3ContextData + } + + us_quic_listen_socket_t *listen(const char *host, int port) { + /* The listening socket is the actual UDP socket used */ + us_quic_listen_socket_t *listen_socket = + us_quic_socket_context_listen((us_quic_socket_context_t *)this, host, + port, sizeof(Http3ResponseData)); + + // printf("Listen socket is: %p\n", listen_socket); + + return listen_socket; + } + + void init() { + // set all callbacks here + + Http3ContextData *contextData = + (Http3ContextData *)us_quic_socket_context_ext( + (us_quic_socket_context_t *)this); + + // printf("init: %p\n", contextData); + + new (contextData) Http3ContextData(); + } + + // generic for get, post, any, etc + void onHttp(std::string method, std::string path, + MoveOnlyFunction &&cb) { + // modifies the router we own as part of Http3ContextData, used in callbacks + // set in init + + Http3ContextData *contextData = + (Http3ContextData *)us_quic_socket_context_ext( + (us_quic_socket_context_t *)this); + + /* Todo: This is ugly, fix */ + std::vector methods; + if (method == "*") { + methods = {"*"}; // bug! needs to be upper cased! + // router.upperCasedMethods; + } else { + methods = {method}; + } + + contextData->router.add( + methods, path, + [handler = std::move(cb)]( + HttpRouter *router) mutable { + Http3ContextData::RouterData &routerData = router->getUserData(); + + handler(routerData.res, routerData.req); + + return true; + }); + } +}; +} // namespace uWS \ No newline at end of file diff --git a/vendor/hydra/vendor/uwebsockets/src/Http3ContextData.h b/vendor/hydra/vendor/uwebsockets/src/Http3ContextData.h index 76031c2a..84273a7a 100644 --- a/vendor/hydra/vendor/uwebsockets/src/Http3ContextData.h +++ b/vendor/hydra/vendor/uwebsockets/src/Http3ContextData.h @@ -5,17 +5,17 @@ struct Http3Request; namespace uWS { - struct Http3ContextData { - struct RouterData { - Http3Response *res; - Http3Request *req; - }; +struct Http3ContextData { + struct RouterData { + Http3Response *res; + Http3Request *req; + }; - HttpRouter router; + HttpRouter router; - Http3ContextData() { - //printf("Constructing http3contextdata: %p\n", this); - } - }; - -} \ No newline at end of file + Http3ContextData() { + // printf("Constructing http3contextdata: %p\n", this); + } +}; + +} // namespace uWS \ No newline at end of file diff --git a/vendor/hydra/vendor/uwebsockets/src/Http3Request.h b/vendor/hydra/vendor/uwebsockets/src/Http3Request.h index 06fc80d2..44a8d1e1 100644 --- a/vendor/hydra/vendor/uwebsockets/src/Http3Request.h +++ b/vendor/hydra/vendor/uwebsockets/src/Http3Request.h @@ -4,19 +4,20 @@ extern "C" { namespace uWS { - struct Http3Request { - - std::string_view getHeader(std::string_view key) { - for (int i = 0, more = 1; more; i++) { - char *name, *value; - int name_length, value_length; - if ((more = us_quic_socket_context_get_header(nullptr, i, &name, &name_length, &value, &value_length))) { - if (name_length == (int) key.length() && !memcmp(name, key.data(), key.length())) { - return {value, (size_t) value_length}; - } - } - } - return {nullptr, 0}; +struct Http3Request { + std::string_view getHeader(std::string_view key) { + for (int i = 0, more = 1; more; i++) { + char *name, *value; + int name_length, value_length; + if ((more = us_quic_socket_context_get_header( + nullptr, i, &name, &name_length, &value, &value_length))) { + if (name_length == (int)key.length() && + !memcmp(name, key.data(), key.length())) { + return {value, (size_t)value_length}; } - }; -} \ No newline at end of file + } + } + return {nullptr, 0}; + } +}; +} // namespace uWS \ No newline at end of file diff --git a/vendor/hydra/vendor/uwebsockets/src/Http3Response.h b/vendor/hydra/vendor/uwebsockets/src/Http3Response.h index 1504c6e2..4e86c87f 100644 --- a/vendor/hydra/vendor/uwebsockets/src/Http3Response.h +++ b/vendor/hydra/vendor/uwebsockets/src/Http3Response.h @@ -6,115 +6,127 @@ extern "C" { namespace uWS { - /* Is a quic stream */ - struct Http3Response { +/* Is a quic stream */ +struct Http3Response { + // this one is AsyncSocket, so it has to translate to the stream - abrupt + // stream termination + void close() { + // us_quic_stream_close((us_quic_stream_t *) this); + } + + void endWithoutBody( + std::optional reportedContentLength = std::nullopt, + bool closeConnection = false) {} + + Http3Response *writeStatus(std::string_view status) { + Http3ResponseData *responseData = + (Http3ResponseData *)us_quic_stream_ext((us_quic_stream_t *)this); + + /* Nothing is done if status already written */ + if (responseData->headerOffset == 0) { + us_quic_socket_context_set_header(nullptr, 0, (char *)":status", 7, + status.data(), status.length()); + responseData->headerOffset = 1; + } + + return this; + } + + Http3Response *writeHeader(std::string_view key, std::string_view value) { + Http3ResponseData *responseData = + (Http3ResponseData *)us_quic_stream_ext((us_quic_stream_t *)this); + + writeStatus("200 OK"); + + us_quic_socket_context_set_header(nullptr, responseData->headerOffset++, + key.data(), key.length(), value.data(), + value.length()); + + return this; + } + + std::pair tryEnd(std::string_view data, uintmax_t totalSize = 0) { + Http3ResponseData *responseData = + (Http3ResponseData *)us_quic_stream_ext((us_quic_stream_t *)this); + + writeStatus("200 OK"); + + us_quic_socket_context_send_headers(nullptr, (us_quic_stream_t *)this, + responseData->headerOffset, + data.length() > 0); + + unsigned int written = us_quic_stream_write( + (us_quic_stream_t *)this, (char *)data.data(), (int)data.length()); + + if (written == data.length()) { + return {true, true}; + } else { + responseData->offset = written; + + return {true, false}; + } + + return {true, true}; + } + + /* Idnetical */ + Http3Response *write(std::string_view data) { return this; } + + /* Identical */ + void end(std::string_view data = {}, bool closeConnection = false) { + Http3ResponseData *responseData = + (Http3ResponseData *)us_quic_stream_ext((us_quic_stream_t *)this); + + /* If not already written */ + writeStatus("200 OK"); + + // has body is determined by the ending so this is perfect here + us_quic_socket_context_send_headers(nullptr, (us_quic_stream_t *)this, + responseData->headerOffset, + data.length() > 0); + + /* Write body and shutdown (unknown if content-length must be present?) */ + unsigned int written = us_quic_stream_write( + (us_quic_stream_t *)this, (char *)data.data(), (int)data.length()); + + /* Buffer up remains */ + if (written != data.length()) { + responseData->backpressure.append(data.data() + written, + data.length() - written); + } else { + /* Every request has its own stream, so we conceptually serve requests + * like in HTTP 1.0 */ + us_quic_stream_shutdown((us_quic_stream_t *)this); + } + } + + /* Attach handler for aborted HTTP request */ + Http3Response *onAborted(MoveOnlyFunction &&handler) { + Http3ResponseData *responseData = + (Http3ResponseData *)us_quic_stream_ext((us_quic_stream_t *)this); + + responseData->onAborted = std::move(handler); + return this; + } + + /* Attach a read handler for data sent. Will be called with FIN set true if + * last segment. */ + Http3Response *onData( + MoveOnlyFunction &&handler) { + Http3ResponseData *responseData = + (Http3ResponseData *)us_quic_stream_ext((us_quic_stream_t *)this); + + responseData->onData = std::move(handler); + return this; + } + + Http3Response *onWritable(MoveOnlyFunction &&handler) { + Http3ResponseData *responseData = + (Http3ResponseData *)us_quic_stream_ext((us_quic_stream_t *)this); + + responseData->onWritable = std::move(handler); + return this; + } +}; - // this one is AsyncSocket, so it has to translate to the stream - abrupt stream termination - void close() { - //us_quic_stream_close((us_quic_stream_t *) this); - } - - void endWithoutBody(std::optional reportedContentLength = std::nullopt, bool closeConnection = false) { - - } - - Http3Response *writeStatus(std::string_view status) { - Http3ResponseData *responseData = (Http3ResponseData *) us_quic_stream_ext((us_quic_stream_t *) this); - - /* Nothing is done if status already written */ - if (responseData->headerOffset == 0) { - us_quic_socket_context_set_header(nullptr, 0, (char *) ":status", 7, status.data(), status.length()); - responseData->headerOffset = 1; - } - - return this; - } - - Http3Response *writeHeader(std::string_view key, std::string_view value) { - Http3ResponseData *responseData = (Http3ResponseData *) us_quic_stream_ext((us_quic_stream_t *) this); - - writeStatus("200 OK"); - - us_quic_socket_context_set_header(nullptr, responseData->headerOffset++, key.data(), key.length(), value.data(), value.length()); - - return this; - } - - std::pair tryEnd(std::string_view data, uintmax_t totalSize = 0) { - Http3ResponseData *responseData = (Http3ResponseData *) us_quic_stream_ext((us_quic_stream_t *) this); - - writeStatus("200 OK"); - - us_quic_socket_context_send_headers(nullptr, (us_quic_stream_t *) this, responseData->headerOffset, data.length() > 0); - - - unsigned int written = us_quic_stream_write((us_quic_stream_t *) this, (char *) data.data(), (int) data.length()); - - if (written == data.length()) { - return {true, true}; - } else { - - responseData->offset = written; - - return {true, false}; - } - - - return {true, true}; - } - - /* Idnetical */ - Http3Response *write(std::string_view data) { - - - return this; - } - - /* Identical */ - void end(std::string_view data = {}, bool closeConnection = false) { - - Http3ResponseData *responseData = (Http3ResponseData *) us_quic_stream_ext((us_quic_stream_t *) this); - - /* If not already written */ - writeStatus("200 OK"); - - // has body is determined by the ending so this is perfect here - us_quic_socket_context_send_headers(nullptr, (us_quic_stream_t *) this, responseData->headerOffset, data.length() > 0); - - /* Write body and shutdown (unknown if content-length must be present?) */ - unsigned int written = us_quic_stream_write((us_quic_stream_t *) this, (char *) data.data(), (int) data.length()); - - /* Buffer up remains */ - if (written != data.length()) { - responseData->backpressure.append(data.data() + written, data.length() - written); - } else { - /* Every request has its own stream, so we conceptually serve requests like in HTTP 1.0 */ - us_quic_stream_shutdown((us_quic_stream_t *) this); - } - } - - /* Attach handler for aborted HTTP request */ - Http3Response *onAborted(MoveOnlyFunction &&handler) { - Http3ResponseData *responseData = (Http3ResponseData *) us_quic_stream_ext((us_quic_stream_t *) this); - - responseData->onAborted = std::move(handler); - return this; - } - - /* Attach a read handler for data sent. Will be called with FIN set true if last segment. */ - Http3Response *onData(MoveOnlyFunction &&handler) { - Http3ResponseData *responseData = (Http3ResponseData *) us_quic_stream_ext((us_quic_stream_t *) this); - - responseData->onData = std::move(handler); - return this; - } - - Http3Response *onWritable(MoveOnlyFunction &&handler) { - Http3ResponseData *responseData = (Http3ResponseData *) us_quic_stream_ext((us_quic_stream_t *) this); - - responseData->onWritable = std::move(handler); - return this; - } - }; - -} \ No newline at end of file +} // namespace uWS \ No newline at end of file diff --git a/vendor/hydra/vendor/uwebsockets/src/Http3ResponseData.h b/vendor/hydra/vendor/uwebsockets/src/Http3ResponseData.h index 6f8ad743..e3a0dad7 100644 --- a/vendor/hydra/vendor/uwebsockets/src/Http3ResponseData.h +++ b/vendor/hydra/vendor/uwebsockets/src/Http3ResponseData.h @@ -1,25 +1,25 @@ #ifndef UWS_H3RESPONSEDATA_H #define UWS_H3RESPONSEDATA_H -#include "MoveOnlyFunction.h" -#include "AsyncSocketData.h" #include +#include "AsyncSocketData.h" +#include "MoveOnlyFunction.h" + namespace uWS { - struct Http3ResponseData { +struct Http3ResponseData { + MoveOnlyFunction onAborted = nullptr; + MoveOnlyFunction onData = nullptr; + MoveOnlyFunction onWritable = nullptr; - MoveOnlyFunction onAborted = nullptr; - MoveOnlyFunction onData = nullptr; - MoveOnlyFunction onWritable = nullptr; + /* Status is always first header just like for h1 */ + unsigned int headerOffset = 0; - /* Status is always first header just like for h1 */ - unsigned int headerOffset = 0; - - /* Write offset */ - uintmax_t offset = 0; + /* Write offset */ + uintmax_t offset = 0; - BackPressure backpressure; - }; -} + BackPressure backpressure; +}; +} // namespace uWS #endif \ No newline at end of file diff --git a/vendor/hydra/vendor/uwebsockets/src/HttpContext.h b/vendor/hydra/vendor/uwebsockets/src/HttpContext.h index a5db82b4..a86072b5 100644 --- a/vendor/hydra/vendor/uwebsockets/src/HttpContext.h +++ b/vendor/hydra/vendor/uwebsockets/src/HttpContext.h @@ -20,485 +20,585 @@ /* This class defines the main behavior of HTTP and emits various events */ -#include "Loop.h" +#include +#include + +#include "AsyncSocket.h" #include "HttpContextData.h" #include "HttpResponseData.h" -#include "AsyncSocket.h" -#include "WebSocketData.h" - -#include -#include +#include "Loop.h" #include "MoveOnlyFunction.h" +#include "WebSocketData.h" namespace uWS { -template struct HttpResponse; +template +struct HttpResponse; template struct HttpContext { - template friend struct TemplatedApp; - template friend struct HttpResponse; -private: - HttpContext() = delete; - - /* Maximum delay allowed until an HTTP connection is terminated due to outstanding request or rejected data (slow loris protection) */ - static const int HTTP_IDLE_TIMEOUT_S = 10; - - /* Minimum allowed receive throughput per second (clients uploading less than 16kB/sec get dropped) */ - static const int HTTP_RECEIVE_THROUGHPUT_BYTES = 16 * 1024; - - us_loop_t *getLoop() { - return us_socket_context_loop(SSL, getSocketContext()); - } - - us_socket_context_t *getSocketContext() { - return (us_socket_context_t *) this; - } - - static us_socket_context_t *getSocketContext(us_socket_t *s) { - return (us_socket_context_t *) us_socket_context(SSL, s); - } - - HttpContextData *getSocketContextData() { - return (HttpContextData *) us_socket_context_ext(SSL, getSocketContext()); - } - - static HttpContextData *getSocketContextDataS(us_socket_t *s) { - return (HttpContextData *) us_socket_context_ext(SSL, getSocketContext(s)); - } - - /* Init the HttpContext by registering libusockets event handlers */ - HttpContext *init() { - /* Handle socket connections */ - us_socket_context_on_open(SSL, getSocketContext(), [](us_socket_t *s, int /*is_client*/, char */*ip*/, int /*ip_length*/) { - /* Any connected socket should timeout until it has a request */ - us_socket_timeout(SSL, s, HTTP_IDLE_TIMEOUT_S); - - /* Init socket ext */ - new (us_socket_ext(SSL, s)) HttpResponseData; - - /* Call filter */ - HttpContextData *httpContextData = getSocketContextDataS(s); - for (auto &f : httpContextData->filterHandlers) { - f((HttpResponse *) s, 1); - } - - return s; + template + friend struct TemplatedApp; + template + friend struct HttpResponse; + + private: + HttpContext() = delete; + + /* Maximum delay allowed until an HTTP connection is terminated due to + * outstanding request or rejected data (slow loris protection) */ + static const int HTTP_IDLE_TIMEOUT_S = 10; + + /* Minimum allowed receive throughput per second (clients uploading less than + * 16kB/sec get dropped) */ + static const int HTTP_RECEIVE_THROUGHPUT_BYTES = 16 * 1024; + + us_loop_t *getLoop() { + return us_socket_context_loop(SSL, getSocketContext()); + } + + us_socket_context_t *getSocketContext() { + return (us_socket_context_t *)this; + } + + static us_socket_context_t *getSocketContext(us_socket_t *s) { + return (us_socket_context_t *)us_socket_context(SSL, s); + } + + HttpContextData *getSocketContextData() { + return (HttpContextData *)us_socket_context_ext(SSL, + getSocketContext()); + } + + static HttpContextData *getSocketContextDataS(us_socket_t *s) { + return (HttpContextData *)us_socket_context_ext(SSL, + getSocketContext(s)); + } + + /* Init the HttpContext by registering libusockets event handlers */ + HttpContext *init() { + /* Handle socket connections */ + us_socket_context_on_open( + SSL, getSocketContext(), + [](us_socket_t *s, int /*is_client*/, char * /*ip*/, + int /*ip_length*/) { + /* Any connected socket should timeout until it has a request */ + us_socket_timeout(SSL, s, HTTP_IDLE_TIMEOUT_S); + + /* Init socket ext */ + new (us_socket_ext(SSL, s)) HttpResponseData; + + /* Call filter */ + HttpContextData *httpContextData = getSocketContextDataS(s); + for (auto &f : httpContextData->filterHandlers) { + f((HttpResponse *)s, 1); + } + + return s; }); - /* Handle socket disconnections */ - us_socket_context_on_close(SSL, getSocketContext(), [](us_socket_t *s, int /*code*/, void */*reason*/) { - /* Get socket ext */ - HttpResponseData *httpResponseData = (HttpResponseData *) us_socket_ext(SSL, s); - - /* Call filter */ - HttpContextData *httpContextData = getSocketContextDataS(s); - for (auto &f : httpContextData->filterHandlers) { - f((HttpResponse *) s, -1); - } - - /* Signal broken HTTP request only if we have a pending request */ - if (httpResponseData->onAborted) { - httpResponseData->onAborted(); - } - - /* Destruct socket ext */ - httpResponseData->~HttpResponseData(); - - return s; + /* Handle socket disconnections */ + us_socket_context_on_close( + SSL, getSocketContext(), + [](us_socket_t *s, int /*code*/, void * /*reason*/) { + /* Get socket ext */ + HttpResponseData *httpResponseData = + (HttpResponseData *)us_socket_ext(SSL, s); + + /* Call filter */ + HttpContextData *httpContextData = getSocketContextDataS(s); + for (auto &f : httpContextData->filterHandlers) { + f((HttpResponse *)s, -1); + } + + /* Signal broken HTTP request only if we have a pending request */ + if (httpResponseData->onAborted) { + httpResponseData->onAborted(); + } + + /* Destruct socket ext */ + httpResponseData->~HttpResponseData(); + + return s; }); - /* Handle HTTP data streams */ - us_socket_context_on_data(SSL, getSocketContext(), [](us_socket_t *s, char *data, int length) { - - // total overhead is about 210k down to 180k - // ~210k req/sec is the original perf with write in data - // ~200k req/sec is with cork and formatting - // ~190k req/sec is with http parsing - // ~180k - 190k req/sec is with varying routing + /* Handle HTTP data streams */ + us_socket_context_on_data( + SSL, getSocketContext(), [](us_socket_t *s, char *data, int length) { + // total overhead is about 210k down to 180k + // ~210k req/sec is the original perf with write in data + // ~200k req/sec is with cork and formatting + // ~190k req/sec is with http parsing + // ~180k - 190k req/sec is with varying routing - HttpContextData *httpContextData = getSocketContextDataS(s); + HttpContextData *httpContextData = getSocketContextDataS(s); - /* Do not accept any data while in shutdown state */ - if (us_socket_is_shut_down(SSL, (us_socket_t *) s)) { - return s; - } + /* Do not accept any data while in shutdown state */ + if (us_socket_is_shut_down(SSL, (us_socket_t *)s)) { + return s; + } - HttpResponseData *httpResponseData = (HttpResponseData *) us_socket_ext(SSL, s); + HttpResponseData *httpResponseData = + (HttpResponseData *)us_socket_ext(SSL, s); - /* Cork this socket */ - ((AsyncSocket *) s)->cork(); + /* Cork this socket */ + ((AsyncSocket *)s)->cork(); - /* Mark that we are inside the parser now */ - httpContextData->isParsingHttp = true; + /* Mark that we are inside the parser now */ + httpContextData->isParsingHttp = true; - // clients need to know the cursor after http parse, not servers! - // how far did we read then? we need to know to continue with websocket parsing data? or? + // clients need to know the cursor after http parse, not servers! + // how far did we read then? we need to know to continue with + // websocket parsing data? or? - void *proxyParser = nullptr; + void *proxyParser = nullptr; #ifdef UWS_WITH_PROXY - proxyParser = &httpResponseData->proxyParser; + proxyParser = &httpResponseData->proxyParser; #endif - /* The return value is entirely up to us to interpret. The HttpParser only care for whether the returned value is DIFFERENT or not from passed user */ - auto [err, returnedSocket] = httpResponseData->consumePostPadded(data, (unsigned int) length, s, proxyParser, [httpContextData](void *s, HttpRequest *httpRequest) -> void * { - /* For every request we reset the timeout and hang until user makes action */ - /* Warning: if we are in shutdown state, resetting the timer is a security issue! */ - us_socket_timeout(SSL, (us_socket_t *) s, 0); + /* The return value is entirely up to us to interpret. The HttpParser + * only care for whether the returned value is DIFFERENT or not from + * passed user */ + auto [err, returnedSocket] = httpResponseData->consumePostPadded( + data, (unsigned int)length, s, proxyParser, + [httpContextData](void *s, HttpRequest *httpRequest) -> void * { + /* For every request we reset the timeout and hang until user + * makes action */ + /* Warning: if we are in shutdown state, resetting the timer is + * a security issue! */ + us_socket_timeout(SSL, (us_socket_t *)s, 0); /* Reset httpResponse */ - HttpResponseData *httpResponseData = (HttpResponseData *) us_socket_ext(SSL, (us_socket_t *) s); + HttpResponseData *httpResponseData = + (HttpResponseData *)us_socket_ext(SSL, + (us_socket_t *)s); httpResponseData->offset = 0; - /* Are we not ready for another request yet? Terminate the connection. - * Important for denying async pipelining until, if ever, we want to suppot it. - * Otherwise requests can get mixed up on the same connection. We still support sync pipelining. */ - if (httpResponseData->state & HttpResponseData::HTTP_RESPONSE_PENDING) { - us_socket_close(SSL, (us_socket_t *) s, 0, nullptr); - return nullptr; + /* Are we not ready for another request yet? Terminate the + * connection. Important for denying async pipelining until, if + * ever, we want to suppot it. Otherwise requests can get mixed + * up on the same connection. We still support sync pipelining. + */ + if (httpResponseData->state & + HttpResponseData::HTTP_RESPONSE_PENDING) { + us_socket_close(SSL, (us_socket_t *)s, 0, nullptr); + return nullptr; } /* Mark pending request and emit it */ - httpResponseData->state = HttpResponseData::HTTP_RESPONSE_PENDING; - - /* Mark this response as connectionClose if ancient or connection: close */ - if (httpRequest->isAncient() || httpRequest->getHeader("connection").length() == 5) { - httpResponseData->state |= HttpResponseData::HTTP_CONNECTION_CLOSE; + httpResponseData->state = + HttpResponseData::HTTP_RESPONSE_PENDING; + + /* Mark this response as connectionClose if ancient or + * connection: close */ + if (httpRequest->isAncient() || + httpRequest->getHeader("connection").length() == 5) { + httpResponseData->state |= + HttpResponseData::HTTP_CONNECTION_CLOSE; } /* Select the router based on SNI (only possible for SSL) */ auto *selectedRouter = &httpContextData->router; if constexpr (SSL) { - void *domainRouter = us_socket_server_name_userdata(SSL, (struct us_socket_t *) s); - if (domainRouter) { - selectedRouter = (decltype(selectedRouter)) domainRouter; - } + void *domainRouter = us_socket_server_name_userdata( + SSL, (struct us_socket_t *)s); + if (domainRouter) { + selectedRouter = (decltype(selectedRouter))domainRouter; + } } /* Route the method and URL */ - selectedRouter->getUserData() = {(HttpResponse *) s, httpRequest}; - if (!selectedRouter->route(httpRequest->getCaseSensitiveMethod(), httpRequest->getUrl())) { - /* We have to force close this socket as we have no handler for it */ - us_socket_close(SSL, (us_socket_t *) s, 0, nullptr); - return nullptr; + selectedRouter->getUserData() = {(HttpResponse *)s, + httpRequest}; + if (!selectedRouter->route( + httpRequest->getCaseSensitiveMethod(), + httpRequest->getUrl())) { + /* We have to force close this socket as we have no handler + * for it */ + us_socket_close(SSL, (us_socket_t *)s, 0, nullptr); + return nullptr; } - /* First of all we need to check if this socket was deleted due to upgrade */ + /* First of all we need to check if this socket was deleted due + * to upgrade */ if (httpContextData->upgradedWebSocket) { - /* We differ between closed and upgraded below */ - return nullptr; + /* We differ between closed and upgraded below */ + return nullptr; } /* Was the socket closed? */ - if (us_socket_is_closed(SSL, (struct us_socket_t *) s)) { - return nullptr; + if (us_socket_is_closed(SSL, (struct us_socket_t *)s)) { + return nullptr; } /* We absolutely have to terminate parsing if shutdown */ - if (us_socket_is_shut_down(SSL, (us_socket_t *) s)) { - return nullptr; + if (us_socket_is_shut_down(SSL, (us_socket_t *)s)) { + return nullptr; } - /* Returning from a request handler without responding or attaching an onAborted handler is ill-use */ - if (!((HttpResponse *) s)->hasResponded() && !httpResponseData->onAborted) { - /* Throw exception here? */ - std::cerr << "Error: Returning from a request handler without responding or attaching an abort handler is forbidden!" << std::endl; - std::terminate(); + /* Returning from a request handler without responding or + * attaching an onAborted handler is ill-use */ + if (!((HttpResponse *)s)->hasResponded() && + !httpResponseData->onAborted) { + /* Throw exception here? */ + std::cerr << "Error: Returning from a request handler " + "without responding or attaching an abort " + "handler is forbidden!" + << std::endl; + std::terminate(); } - /* If we have not responded and we have a data handler, we need to timeout to enfore client sending the data */ - if (!((HttpResponse *) s)->hasResponded() && httpResponseData->inStream) { - us_socket_timeout(SSL, (us_socket_t *) s, HTTP_IDLE_TIMEOUT_S); + /* If we have not responded and we have a data handler, we need + * to timeout to enfore client sending the data */ + if (!((HttpResponse *)s)->hasResponded() && + httpResponseData->inStream) { + us_socket_timeout(SSL, (us_socket_t *)s, HTTP_IDLE_TIMEOUT_S); } /* Continue parsing */ return s; - - }, [httpResponseData](void *user, std::string_view data, bool fin) -> void * { + }, + [httpResponseData](void *user, std::string_view data, + bool fin) -> void * { /* We always get an empty chunk even if there is no data */ if (httpResponseData->inStream) { - - /* Todo: can this handle timeout for non-post as well? */ - if (fin) { - /* If we just got the last chunk (or empty chunk), disable timeout */ - us_socket_timeout(SSL, (struct us_socket_t *) user, 0); - } else { - /* We still have some more data coming in later, so reset timeout */ - /* Only reset timeout if we got enough bytes (16kb/sec) since last time we reset here */ - httpResponseData->received_bytes_per_timeout += (unsigned int) data.length(); - if (httpResponseData->received_bytes_per_timeout >= HTTP_RECEIVE_THROUGHPUT_BYTES * HTTP_IDLE_TIMEOUT_S) { - us_socket_timeout(SSL, (struct us_socket_t *) user, HTTP_IDLE_TIMEOUT_S); - httpResponseData->received_bytes_per_timeout = 0; - } + /* Todo: can this handle timeout for non-post as well? */ + if (fin) { + /* If we just got the last chunk (or empty chunk), disable + * timeout */ + us_socket_timeout(SSL, (struct us_socket_t *)user, 0); + } else { + /* We still have some more data coming in later, so reset + * timeout */ + /* Only reset timeout if we got enough bytes (16kb/sec) + * since last time we reset here */ + httpResponseData->received_bytes_per_timeout += + (unsigned int)data.length(); + if (httpResponseData->received_bytes_per_timeout >= + HTTP_RECEIVE_THROUGHPUT_BYTES * HTTP_IDLE_TIMEOUT_S) { + us_socket_timeout(SSL, (struct us_socket_t *)user, + HTTP_IDLE_TIMEOUT_S); + httpResponseData->received_bytes_per_timeout = 0; } + } - /* We might respond in the handler, so do not change timeout after this */ - httpResponseData->inStream(data, fin); - - /* Was the socket closed? */ - if (us_socket_is_closed(SSL, (struct us_socket_t *) user)) { - return nullptr; - } + /* We might respond in the handler, so do not change timeout + * after this */ + httpResponseData->inStream(data, fin); - /* We absolutely have to terminate parsing if shutdown */ - if (us_socket_is_shut_down(SSL, (us_socket_t *) user)) { - return nullptr; - } + /* Was the socket closed? */ + if (us_socket_is_closed(SSL, (struct us_socket_t *)user)) { + return nullptr; + } - /* If we were given the last data chunk, reset data handler to ensure following - * requests on the same socket won't trigger any previously registered behavior */ - if (fin) { - httpResponseData->inStream = nullptr; - } + /* We absolutely have to terminate parsing if shutdown */ + if (us_socket_is_shut_down(SSL, (us_socket_t *)user)) { + return nullptr; + } + + /* If we were given the last data chunk, reset data handler to + * ensure following requests on the same socket won't trigger + * any previously registered behavior */ + if (fin) { + httpResponseData->inStream = nullptr; + } } return user; - }); - - /* Mark that we are no longer parsing Http */ - httpContextData->isParsingHttp = false; - - /* If we got fullptr that means the parser wants us to close the socket from error (same as calling the errorHandler) */ - if (returnedSocket == FULLPTR) { - /* For errors, we only deliver them "at most once". We don't care if they get halfways delivered or not. */ - us_socket_write(SSL, s, httpErrorResponses[err].data(), (int) httpErrorResponses[err].length(), false); - us_socket_shutdown(SSL, s); - /* Close any socket on HTTP errors */ - us_socket_close(SSL, s, 0, nullptr); - /* This just makes the following code act as if the socket was closed from error inside the parser. */ - returnedSocket = nullptr; - } - - /* We need to uncork in all cases, except for nullptr (closed socket, or upgraded socket) */ - if (returnedSocket != nullptr) { - /* Timeout on uncork failure */ - auto [written, failed] = ((AsyncSocket *) returnedSocket)->uncork(); - if (failed) { - /* All Http sockets timeout by this, and this behavior match the one in HttpResponse::cork */ - /* Warning: both HTTP_IDLE_TIMEOUT_S and HTTP_TIMEOUT_S are 10 seconds and both are used the same */ - ((AsyncSocket *) s)->timeout(HTTP_IDLE_TIMEOUT_S); - } - - /* We need to check if we should close this socket here now */ - if (httpResponseData->state & HttpResponseData::HTTP_CONNECTION_CLOSE) { - if ((httpResponseData->state & HttpResponseData::HTTP_RESPONSE_PENDING) == 0) { - if (((AsyncSocket *) s)->getBufferedAmount() == 0) { - ((AsyncSocket *) s)->shutdown(); - /* We need to force close after sending FIN since we want to hinder - * clients from keeping to send their huge data */ - ((AsyncSocket *) s)->close(); - } - } - } - - return (us_socket_t *) returnedSocket; + }); + + /* Mark that we are no longer parsing Http */ + httpContextData->isParsingHttp = false; + + /* If we got fullptr that means the parser wants us to close the + * socket from error (same as calling the errorHandler) */ + if (returnedSocket == FULLPTR) { + /* For errors, we only deliver them "at most once". We don't care if + * they get halfways delivered or not. */ + us_socket_write(SSL, s, httpErrorResponses[err].data(), + (int)httpErrorResponses[err].length(), false); + us_socket_shutdown(SSL, s); + /* Close any socket on HTTP errors */ + us_socket_close(SSL, s, 0, nullptr); + /* This just makes the following code act as if the socket was + * closed from error inside the parser. */ + returnedSocket = nullptr; + } + + /* We need to uncork in all cases, except for nullptr (closed socket, + * or upgraded socket) */ + if (returnedSocket != nullptr) { + /* Timeout on uncork failure */ + auto [written, failed] = + ((AsyncSocket *)returnedSocket)->uncork(); + if (failed) { + /* All Http sockets timeout by this, and this behavior match the + * one in HttpResponse::cork */ + /* Warning: both HTTP_IDLE_TIMEOUT_S and HTTP_TIMEOUT_S are 10 + * seconds and both are used the same */ + ((AsyncSocket *)s)->timeout(HTTP_IDLE_TIMEOUT_S); } - /* If we upgraded, check here (differ between nullptr close and nullptr upgrade) */ - if (httpContextData->upgradedWebSocket) { - /* This path is only for upgraded websockets */ - AsyncSocket *asyncSocket = (AsyncSocket *) httpContextData->upgradedWebSocket; - - /* Uncork here as well (note: what if we failed to uncork and we then pub/sub before we even upgraded?) */ - auto [written, failed] = asyncSocket->uncork(); - - /* If we succeeded in uncorking, check if we have sent WebSocket FIN */ - if (!failed) { - WebSocketData *webSocketData = (WebSocketData *) asyncSocket->getAsyncSocketData(); - if (webSocketData->isShuttingDown) { - /* In that case, also send TCP FIN (this is similar to what we have in ws drain handler) */ - asyncSocket->shutdown(); - } - } - - /* Reset upgradedWebSocket before we return */ - httpContextData->upgradedWebSocket = nullptr; - - /* Return the new upgraded websocket */ - return (us_socket_t *) asyncSocket; - } - - /* It is okay to uncork a closed socket and we need to */ - ((AsyncSocket *) s)->uncork(); - - /* We cannot return nullptr to the underlying stack in any case */ - return s; - }); - - /* Handle HTTP write out (note: SSL_read may trigger this spuriously, the app need to handle spurious calls) */ - us_socket_context_on_writable(SSL, getSocketContext(), [](us_socket_t *s) { - - AsyncSocket *asyncSocket = (AsyncSocket *) s; - HttpResponseData *httpResponseData = (HttpResponseData *) asyncSocket->getAsyncSocketData(); - - /* Ask the developer to write data and return success (true) or failure (false), OR skip sending anything and return success (true). */ - if (httpResponseData->onWritable) { - /* We are now writable, so hang timeout again, the user does not have to do anything so we should hang until end or tryEnd rearms timeout */ - us_socket_timeout(SSL, s, 0); - - /* We expect the developer to return whether or not write was successful (true). - * If write was never called, the developer should still return true so that we may drain. */ - bool success = httpResponseData->callOnWritable(httpResponseData->offset); - - /* The developer indicated that their onWritable failed. */ - if (!success) { - /* Skip testing if we can drain anything since that might perform an extra syscall */ - return s; + /* We need to check if we should close this socket here now */ + if (httpResponseData->state & + HttpResponseData::HTTP_CONNECTION_CLOSE) { + if ((httpResponseData->state & + HttpResponseData::HTTP_RESPONSE_PENDING) == 0) { + if (((AsyncSocket *)s)->getBufferedAmount() == 0) { + ((AsyncSocket *)s)->shutdown(); + /* We need to force close after sending FIN since we want to + * hinder clients from keeping to send their huge data */ + ((AsyncSocket *)s)->close(); } - - /* We don't want to fall through since we don't want to mess with timeout. - * It makes little sense to drain any backpressure when the user has registered onWritable. */ - return s; + } } - /* Drain any socket buffer, this might empty our backpressure and thus finish the request */ - /*auto [written, failed] = */asyncSocket->write(nullptr, 0, true, 0); - - /* Should we close this connection after a response - and is this response really done? */ - if (httpResponseData->state & HttpResponseData::HTTP_CONNECTION_CLOSE) { - if ((httpResponseData->state & HttpResponseData::HTTP_RESPONSE_PENDING) == 0) { - if (asyncSocket->getBufferedAmount() == 0) { - asyncSocket->shutdown(); - /* We need to force close after sending FIN since we want to hinder - * clients from keeping to send their huge data */ - asyncSocket->close(); - } - } + return (us_socket_t *)returnedSocket; + } + + /* If we upgraded, check here (differ between nullptr close and + * nullptr upgrade) */ + if (httpContextData->upgradedWebSocket) { + /* This path is only for upgraded websockets */ + AsyncSocket *asyncSocket = + (AsyncSocket *)httpContextData->upgradedWebSocket; + + /* Uncork here as well (note: what if we failed to uncork and we + * then pub/sub before we even upgraded?) */ + auto [written, failed] = asyncSocket->uncork(); + + /* If we succeeded in uncorking, check if we have sent WebSocket FIN + */ + if (!failed) { + WebSocketData *webSocketData = + (WebSocketData *)asyncSocket->getAsyncSocketData(); + if (webSocketData->isShuttingDown) { + /* In that case, also send TCP FIN (this is similar to what we + * have in ws drain handler) */ + asyncSocket->shutdown(); + } } - /* Expect another writable event, or another request within the timeout */ - asyncSocket->timeout(HTTP_IDLE_TIMEOUT_S); - - return s; - }); + /* Reset upgradedWebSocket before we return */ + httpContextData->upgradedWebSocket = nullptr; - /* Handle FIN, HTTP does not support half-closed sockets, so simply close */ - us_socket_context_on_end(SSL, getSocketContext(), [](us_socket_t *s) { + /* Return the new upgraded websocket */ + return (us_socket_t *)asyncSocket; + } - /* We do not care for half closed sockets */ - AsyncSocket *asyncSocket = (AsyncSocket *) s; - return asyncSocket->close(); + /* It is okay to uncork a closed socket and we need to */ + ((AsyncSocket *)s)->uncork(); + /* We cannot return nullptr to the underlying stack in any case */ + return s; }); - /* Handle socket timeouts, simply close them so to not confuse client with FIN */ - us_socket_context_on_timeout(SSL, getSocketContext(), [](us_socket_t *s) { - - /* Force close rather than gracefully shutdown and risk confusing the client with a complete download */ - AsyncSocket *asyncSocket = (AsyncSocket *) s; - return asyncSocket->close(); - - }); - - return this; - } - -public: - /* Construct a new HttpContext using specified loop */ - static HttpContext *create(Loop *loop, us_socket_context_options_t options = {}) { - HttpContext *httpContext; - - httpContext = (HttpContext *) us_create_socket_context(SSL, (us_loop_t *) loop, sizeof(HttpContextData), options); - - if (!httpContext) { - return nullptr; + /* Handle HTTP write out (note: SSL_read may trigger this spuriously, the + * app need to handle spurious calls) */ + us_socket_context_on_writable(SSL, getSocketContext(), [](us_socket_t *s) { + AsyncSocket *asyncSocket = (AsyncSocket *)s; + HttpResponseData *httpResponseData = + (HttpResponseData *)asyncSocket->getAsyncSocketData(); + + /* Ask the developer to write data and return success (true) or failure + * (false), OR skip sending anything and return success (true). */ + if (httpResponseData->onWritable) { + /* We are now writable, so hang timeout again, the user does not have to + * do anything so we should hang until end or tryEnd rearms timeout */ + us_socket_timeout(SSL, s, 0); + + /* We expect the developer to return whether or not write was successful + * (true). If write was never called, the developer should still return + * true so that we may drain. */ + bool success = + httpResponseData->callOnWritable(httpResponseData->offset); + + /* The developer indicated that their onWritable failed. */ + if (!success) { + /* Skip testing if we can drain anything since that might perform an + * extra syscall */ + return s; } - /* Init socket context data */ - new ((HttpContextData *) us_socket_context_ext(SSL, (us_socket_context_t *) httpContext)) HttpContextData(); - return httpContext->init(); - } - - /* Destruct the HttpContext, it does not follow RAII */ - void free() { - /* Destruct socket context data */ - HttpContextData *httpContextData = getSocketContextData(); - httpContextData->~HttpContextData(); - - /* Free the socket context in whole */ - us_socket_context_free(SSL, getSocketContext()); - } - - void filter(MoveOnlyFunction *, int)> &&filterHandler) { - getSocketContextData()->filterHandlers.emplace_back(std::move(filterHandler)); - } - - /* Register an HTTP route handler acording to URL pattern */ - void onHttp(std::string method, std::string pattern, MoveOnlyFunction *, HttpRequest *)> &&handler, bool upgrade = false) { - HttpContextData *httpContextData = getSocketContextData(); - - /* Todo: This is ugly, fix */ - std::vector methods; - if (method == "*") { - methods = {"*"}; - } else { - methods = {method}; + /* We don't want to fall through since we don't want to mess with + * timeout. It makes little sense to drain any backpressure when the + * user has registered onWritable. */ + return s; + } + + /* Drain any socket buffer, this might empty our backpressure and thus + * finish the request */ + /*auto [written, failed] = */ asyncSocket->write(nullptr, 0, true, 0); + + /* Should we close this connection after a response - and is this response + * really done? */ + if (httpResponseData->state & + HttpResponseData::HTTP_CONNECTION_CLOSE) { + if ((httpResponseData->state & + HttpResponseData::HTTP_RESPONSE_PENDING) == 0) { + if (asyncSocket->getBufferedAmount() == 0) { + asyncSocket->shutdown(); + /* We need to force close after sending FIN since we want to hinder + * clients from keeping to send their huge data */ + asyncSocket->close(); + } } - - uint32_t priority = method == "*" ? httpContextData->currentRouter->LOW_PRIORITY : (upgrade ? httpContextData->currentRouter->HIGH_PRIORITY : httpContextData->currentRouter->MEDIUM_PRIORITY); - - /* If we are passed nullptr then remove this */ - if (!handler) { - httpContextData->currentRouter->remove(methods[0], pattern, priority); - return; - } - - /* Record this route's parameter offsets */ - std::map> parameterOffsets; - unsigned short offset = 0; - for (unsigned int i = 0; i < pattern.length(); i++) { - if (pattern[i] == ':') { - i++; - unsigned int start = i; - while (i < pattern.length() && pattern[i] != '/') { - i++; - } - parameterOffsets[std::string(pattern.data() + start, i - start)] = offset; - //std::cout << "<" << std::string(pattern.data() + start, i - start) << "> is offset " << offset; - offset++; - } - } - - httpContextData->currentRouter->add(methods, pattern, [handler = std::move(handler), parameterOffsets = std::move(parameterOffsets)](auto *r) mutable { - auto user = r->getUserData(); - user.httpRequest->setYield(false); - user.httpRequest->setParameters(r->getParameters()); - user.httpRequest->setParameterOffsets(¶meterOffsets); - - /* Middleware? Automatically respond to expectations */ - std::string_view expect = user.httpRequest->getHeader("expect"); - if (expect.length() && expect == "100-continue") { - user.httpResponse->writeContinue(); - } - - handler(user.httpResponse, user.httpRequest); - - /* If any handler yielded, the router will keep looking for a suitable handler. */ - if (user.httpRequest->getYield()) { - return false; - } - return true; - }, priority); + } + + /* Expect another writable event, or another request within the timeout */ + asyncSocket->timeout(HTTP_IDLE_TIMEOUT_S); + + return s; + }); + + /* Handle FIN, HTTP does not support half-closed sockets, so simply close */ + us_socket_context_on_end(SSL, getSocketContext(), [](us_socket_t *s) { + /* We do not care for half closed sockets */ + AsyncSocket *asyncSocket = (AsyncSocket *)s; + return asyncSocket->close(); + }); + + /* Handle socket timeouts, simply close them so to not confuse client with + * FIN */ + us_socket_context_on_timeout(SSL, getSocketContext(), [](us_socket_t *s) { + /* Force close rather than gracefully shutdown and risk confusing the + * client with a complete download */ + AsyncSocket *asyncSocket = (AsyncSocket *)s; + return asyncSocket->close(); + }); + + return this; + } + + public: + /* Construct a new HttpContext using specified loop */ + static HttpContext *create(Loop *loop, + us_socket_context_options_t options = {}) { + HttpContext *httpContext; + + httpContext = (HttpContext *)us_create_socket_context( + SSL, (us_loop_t *)loop, sizeof(HttpContextData), options); + + if (!httpContext) { + return nullptr; } - /* Listen to port using this HttpContext */ - us_listen_socket_t *listen(const char *host, int port, int options) { - return us_socket_context_listen(SSL, getSocketContext(), host, port, options, sizeof(HttpResponseData)); + /* Init socket context data */ + new ((HttpContextData *)us_socket_context_ext( + SSL, (us_socket_context_t *)httpContext)) HttpContextData(); + return httpContext->init(); + } + + /* Destruct the HttpContext, it does not follow RAII */ + void free() { + /* Destruct socket context data */ + HttpContextData *httpContextData = getSocketContextData(); + httpContextData->~HttpContextData(); + + /* Free the socket context in whole */ + us_socket_context_free(SSL, getSocketContext()); + } + + void filter( + MoveOnlyFunction *, int)> &&filterHandler) { + getSocketContextData()->filterHandlers.emplace_back( + std::move(filterHandler)); + } + + /* Register an HTTP route handler acording to URL pattern */ + void onHttp( + std::string method, std::string pattern, + MoveOnlyFunction *, HttpRequest *)> &&handler, + bool upgrade = false) { + HttpContextData *httpContextData = getSocketContextData(); + + /* Todo: This is ugly, fix */ + std::vector methods; + if (method == "*") { + methods = {"*"}; + } else { + methods = {method}; } - /* Listen to unix domain socket using this HttpContext */ - us_listen_socket_t *listen(const char *path, int options) { - return us_socket_context_listen_unix(SSL, getSocketContext(), path, options, sizeof(HttpResponseData)); - } + uint32_t priority = + method == "*" + ? httpContextData->currentRouter->LOW_PRIORITY + : (upgrade ? httpContextData->currentRouter->HIGH_PRIORITY + : httpContextData->currentRouter->MEDIUM_PRIORITY); - void onPreOpen(LIBUS_SOCKET_DESCRIPTOR (*handler)(struct us_socket_context_t *, LIBUS_SOCKET_DESCRIPTOR)) { - us_socket_context_on_pre_open(SSL, getSocketContext(), handler); + /* If we are passed nullptr then remove this */ + if (!handler) { + httpContextData->currentRouter->remove(methods[0], pattern, priority); + return; } - /* Adopt an externally accepted socket into this HttpContext */ - us_socket_t *adoptAcceptedSocket(LIBUS_SOCKET_DESCRIPTOR accepted_fd) { - return us_adopt_accepted_socket(SSL, getSocketContext(), accepted_fd, sizeof(HttpResponseData), 0, 0); + /* Record this route's parameter offsets */ + std::map> parameterOffsets; + unsigned short offset = 0; + for (unsigned int i = 0; i < pattern.length(); i++) { + if (pattern[i] == ':') { + i++; + unsigned int start = i; + while (i < pattern.length() && pattern[i] != '/') { + i++; + } + parameterOffsets[std::string(pattern.data() + start, i - start)] = + offset; + // std::cout << "<" << std::string(pattern.data() + start, i - start) << + // "> is offset " << offset; + offset++; + } } + + httpContextData->currentRouter->add( + methods, pattern, + [handler = std::move(handler), + parameterOffsets = std::move(parameterOffsets)](auto *r) mutable { + auto user = r->getUserData(); + user.httpRequest->setYield(false); + user.httpRequest->setParameters(r->getParameters()); + user.httpRequest->setParameterOffsets(¶meterOffsets); + + /* Middleware? Automatically respond to expectations */ + std::string_view expect = user.httpRequest->getHeader("expect"); + if (expect.length() && expect == "100-continue") { + user.httpResponse->writeContinue(); + } + + handler(user.httpResponse, user.httpRequest); + + /* If any handler yielded, the router will keep looking for a suitable + * handler. */ + if (user.httpRequest->getYield()) { + return false; + } + return true; + }, + priority); + } + + /* Listen to port using this HttpContext */ + us_listen_socket_t *listen(const char *host, int port, int options) { + return us_socket_context_listen(SSL, getSocketContext(), host, port, + options, sizeof(HttpResponseData)); + } + + /* Listen to unix domain socket using this HttpContext */ + us_listen_socket_t *listen(const char *path, int options) { + return us_socket_context_listen_unix(SSL, getSocketContext(), path, options, + sizeof(HttpResponseData)); + } + + void onPreOpen(LIBUS_SOCKET_DESCRIPTOR (*handler)( + struct us_socket_context_t *, LIBUS_SOCKET_DESCRIPTOR)) { + us_socket_context_on_pre_open(SSL, getSocketContext(), handler); + } + + /* Adopt an externally accepted socket into this HttpContext */ + us_socket_t *adoptAcceptedSocket(LIBUS_SOCKET_DESCRIPTOR accepted_fd) { + return us_adopt_accepted_socket(SSL, getSocketContext(), accepted_fd, + sizeof(HttpResponseData), 0, 0); + } }; -} +} // namespace uWS -#endif // UWS_HTTPCONTEXT_H +#endif // UWS_HTTPCONTEXT_H diff --git a/vendor/hydra/vendor/uwebsockets/src/HttpContextData.h b/vendor/hydra/vendor/uwebsockets/src/HttpContextData.h index 9473660a..2b92b2ad 100644 --- a/vendor/hydra/vendor/uwebsockets/src/HttpContextData.h +++ b/vendor/hydra/vendor/uwebsockets/src/HttpContextData.h @@ -18,43 +18,48 @@ #ifndef UWS_HTTPCONTEXTDATA_H #define UWS_HTTPCONTEXTDATA_H -#include "HttpRouter.h" - #include + +#include "HttpRouter.h" #include "MoveOnlyFunction.h" namespace uWS { -template struct HttpResponse; +template +struct HttpResponse; struct HttpRequest; template struct alignas(16) HttpContextData { - template friend struct HttpContext; - template friend struct HttpResponse; - template friend struct TemplatedApp; -private: - std::vector *, int)>> filterHandlers; - - MoveOnlyFunction missingServerNameHandler; - - struct RouterData { - HttpResponse *httpResponse; - HttpRequest *httpRequest; - }; - - /* This is the currently browsed-to router when using SNI */ - HttpRouter *currentRouter = &router; - - /* This is the default router for default SNI or non-SSL */ - HttpRouter router; - void *upgradedWebSocket = nullptr; - bool isParsingHttp = false; - - /* If we are main acceptor, distribute to these apps */ - std::vector childApps; - unsigned int roundRobin = 0; + template + friend struct HttpContext; + template + friend struct HttpResponse; + template + friend struct TemplatedApp; + + private: + std::vector *, int)>> filterHandlers; + + MoveOnlyFunction missingServerNameHandler; + + struct RouterData { + HttpResponse *httpResponse; + HttpRequest *httpRequest; + }; + + /* This is the currently browsed-to router when using SNI */ + HttpRouter *currentRouter = &router; + + /* This is the default router for default SNI or non-SSL */ + HttpRouter router; + void *upgradedWebSocket = nullptr; + bool isParsingHttp = false; + + /* If we are main acceptor, distribute to these apps */ + std::vector childApps; + unsigned int roundRobin = 0; }; -} +} // namespace uWS -#endif // UWS_HTTPCONTEXTDATA_H +#endif // UWS_HTTPCONTEXTDATA_H diff --git a/vendor/hydra/vendor/uwebsockets/src/HttpErrors.h b/vendor/hydra/vendor/uwebsockets/src/HttpErrors.h index a17a1c73..02e8542d 100644 --- a/vendor/hydra/vendor/uwebsockets/src/HttpErrors.h +++ b/vendor/hydra/vendor/uwebsockets/src/HttpErrors.h @@ -23,9 +23,9 @@ namespace uWS { /* Possible errors from http parsing */ enum HttpError { - HTTP_ERROR_505_HTTP_VERSION_NOT_SUPPORTED = 1, - HTTP_ERROR_431_REQUEST_HEADER_FIELDS_TOO_LARGE = 2, - HTTP_ERROR_400_BAD_REQUEST = 3 + HTTP_ERROR_505_HTTP_VERSION_NOT_SUPPORTED = 1, + HTTP_ERROR_431_REQUEST_HEADER_FIELDS_TOO_LARGE = 2, + HTTP_ERROR_400_BAD_REQUEST = 3 }; #ifndef UWS_HTTPRESPONSE_NO_WRITEMARK @@ -33,9 +33,14 @@ enum HttpError { /* Returned parser errors match this LUT. */ static const std::string_view httpErrorResponses[] = { "", /* Zeroth place is no error so don't use it */ - "HTTP/1.1 505 HTTP Version Not Supported\r\nConnection: close\r\n\r\n

HTTP Version Not Supported

This server does not support HTTP/1.0.


uWebSockets/20 Server", - "HTTP/1.1 431 Request Header Fields Too Large\r\nConnection: close\r\n\r\n

Request Header Fields Too Large


uWebSockets/20 Server", - "HTTP/1.1 400 Bad Request\r\nConnection: close\r\n\r\n

Bad Request


uWebSockets/20 Server", + "HTTP/1.1 505 HTTP Version Not Supported\r\nConnection: " + "close\r\n\r\n

HTTP Version Not Supported

This server does not " + "support HTTP/1.0.


uWebSockets/20 Server", + "HTTP/1.1 431 Request Header Fields Too Large\r\nConnection: " + "close\r\n\r\n

Request Header Fields Too " + "Large


uWebSockets/20 Server", + "HTTP/1.1 400 Bad Request\r\nConnection: close\r\n\r\n

Bad " + "Request


uWebSockets/20 Server", }; #else @@ -44,10 +49,9 @@ static const std::string_view httpErrorResponses[] = { "", /* Zeroth place is no error so don't use it */ "HTTP/1.1 505 HTTP Version Not Supported\r\nConnection: close\r\n\r\n", "HTTP/1.1 431 Request Header Fields Too Large\r\nConnection: close\r\n\r\n", - "HTTP/1.1 400 Bad Request\r\nConnection: close\r\n\r\n" -}; + "HTTP/1.1 400 Bad Request\r\nConnection: close\r\n\r\n"}; #endif -} +} // namespace uWS #endif \ No newline at end of file diff --git a/vendor/hydra/vendor/uwebsockets/src/HttpParser.h b/vendor/hydra/vendor/uwebsockets/src/HttpParser.h index cf86cd2b..9a437fd7 100644 --- a/vendor/hydra/vendor/uwebsockets/src/HttpParser.h +++ b/vendor/hydra/vendor/uwebsockets/src/HttpParser.h @@ -20,21 +20,22 @@ // todo: HttpParser is in need of a few clean-ups and refactorings -/* The HTTP parser is an independent module subject to unit testing / fuzz testing */ +/* The HTTP parser is an independent module subject to unit testing / fuzz + * testing */ -#include -#include #include #include -#include +#include #include -#include "MoveOnlyFunction.h" -#include "ChunkedEncoding.h" +#include +#include #include "BloomFilter.h" +#include "ChunkedEncoding.h" +#include "HttpErrors.h" +#include "MoveOnlyFunction.h" #include "ProxyParser.h" #include "QueryParser.h" -#include "HttpErrors.h" namespace uWS { @@ -45,677 +46,740 @@ static void *FULLPTR = (void *)~(uintptr_t)0; /* STL needs one of these */ template std::optional optional_ptr(T *ptr) { - return ptr ? std::optional(ptr) : std::nullopt; + return ptr ? std::optional(ptr) : std::nullopt; } -static const size_t MAX_FALLBACK_SIZE = (size_t) atoi(optional_ptr(getenv("UWS_HTTP_MAX_HEADERS_SIZE")).value_or((char *) "4096")); +static const size_t MAX_FALLBACK_SIZE = (size_t)atoi( + optional_ptr(getenv("UWS_HTTP_MAX_HEADERS_SIZE")).value_or((char *)"4096")); #ifndef UWS_HTTP_MAX_HEADERS_COUNT #define UWS_HTTP_MAX_HEADERS_COUNT 100 #endif struct HttpRequest { - - friend struct HttpParser; - -private: - struct Header { - std::string_view key, value; - } headers[UWS_HTTP_MAX_HEADERS_COUNT]; - bool ancientHttp; - unsigned int querySeparator; - bool didYield; - BloomFilter bf; - std::pair currentParameters; - std::map> *currentParameterOffsets = nullptr; - -public: - bool isAncient() { - return ancientHttp; + friend struct HttpParser; + + private: + struct Header { + std::string_view key, value; + } headers[UWS_HTTP_MAX_HEADERS_COUNT]; + bool ancientHttp; + unsigned int querySeparator; + bool didYield; + BloomFilter bf; + std::pair currentParameters; + std::map> *currentParameterOffsets = + nullptr; + + public: + bool isAncient() { return ancientHttp; } + + bool getYield() { return didYield; } + + /* Iteration over headers (key, value) */ + struct HeaderIterator { + Header *ptr; + + bool operator!=(const HeaderIterator &other) const { + /* Comparison with end is a special case */ + if (ptr != other.ptr) { + return other.ptr || ptr->key.length(); + } + return false; } - bool getYield() { - return didYield; + HeaderIterator &operator++() { + ptr++; + return *this; } - /* Iteration over headers (key, value) */ - struct HeaderIterator { - Header *ptr; - - bool operator!=(const HeaderIterator &other) const { - /* Comparison with end is a special case */ - if (ptr != other.ptr) { - return other.ptr || ptr->key.length(); - } - return false; - } - - HeaderIterator &operator++() { - ptr++; - return *this; - } - - std::pair operator*() const { - return {ptr->key, ptr->value}; - } - }; - - HeaderIterator begin() { - return {headers + 1}; - } - - HeaderIterator end() { - return {nullptr}; - } - - /* If you do not want to handle this route */ - void setYield(bool yield) { - didYield = yield; + std::pair operator*() const { + return {ptr->key, ptr->value}; } + }; - std::string_view getHeader(std::string_view lowerCasedHeader) { - if (bf.mightHave(lowerCasedHeader)) { - for (Header *h = headers; (++h)->key.length(); ) { - if (h->key.length() == lowerCasedHeader.length() && !strncmp(h->key.data(), lowerCasedHeader.data(), lowerCasedHeader.length())) { - return h->value; - } - } - } - return std::string_view(nullptr, 0); - } - - std::string_view getUrl() { - return std::string_view(headers->value.data(), querySeparator); - } + HeaderIterator begin() { return {headers + 1}; } - std::string_view getFullUrl() { - return std::string_view(headers->value.data(), headers->value.length()); - } + HeaderIterator end() { return {nullptr}; } - /* Hack: this should be getMethod */ - std::string_view getCaseSensitiveMethod() { - return std::string_view(headers->key.data(), headers->key.length()); - } + /* If you do not want to handle this route */ + void setYield(bool yield) { didYield = yield; } - std::string_view getMethod() { - /* Compatibility hack: lower case method (todo: remove when major version bumps) */ - for (unsigned int i = 0; i < headers->key.length(); i++) { - ((char *) headers->key.data())[i] |= 32; + std::string_view getHeader(std::string_view lowerCasedHeader) { + if (bf.mightHave(lowerCasedHeader)) { + for (Header *h = headers; (++h)->key.length();) { + if (h->key.length() == lowerCasedHeader.length() && + !strncmp(h->key.data(), lowerCasedHeader.data(), + lowerCasedHeader.length())) { + return h->value; } - - return std::string_view(headers->key.data(), headers->key.length()); + } } - - /* Returns the raw querystring as a whole, still encoded */ - std::string_view getQuery() { - if (querySeparator < headers->value.length()) { - /* Strip the initial ? */ - return std::string_view(headers->value.data() + querySeparator + 1, headers->value.length() - querySeparator - 1); - } else { - return std::string_view(nullptr, 0); - } - } - - /* Finds and decodes the URI component. */ - std::string_view getQuery(std::string_view key) { - /* Raw querystring including initial '?' sign */ - std::string_view queryString = std::string_view(headers->value.data() + querySeparator, headers->value.length() - querySeparator); - - return getDecodedQueryValue(key, queryString); + return std::string_view(nullptr, 0); + } + + std::string_view getUrl() { + return std::string_view(headers->value.data(), querySeparator); + } + + std::string_view getFullUrl() { + return std::string_view(headers->value.data(), headers->value.length()); + } + + /* Hack: this should be getMethod */ + std::string_view getCaseSensitiveMethod() { + return std::string_view(headers->key.data(), headers->key.length()); + } + + std::string_view getMethod() { + /* Compatibility hack: lower case method (todo: remove when major version + * bumps) */ + for (unsigned int i = 0; i < headers->key.length(); i++) { + ((char *)headers->key.data())[i] |= 32; } - void setParameters(std::pair parameters) { - currentParameters = parameters; + return std::string_view(headers->key.data(), headers->key.length()); + } + + /* Returns the raw querystring as a whole, still encoded */ + std::string_view getQuery() { + if (querySeparator < headers->value.length()) { + /* Strip the initial ? */ + return std::string_view(headers->value.data() + querySeparator + 1, + headers->value.length() - querySeparator - 1); + } else { + return std::string_view(nullptr, 0); } - - void setParameterOffsets(std::map> *offsets) { - currentParameterOffsets = offsets; + } + + /* Finds and decodes the URI component. */ + std::string_view getQuery(std::string_view key) { + /* Raw querystring including initial '?' sign */ + std::string_view queryString = + std::string_view(headers->value.data() + querySeparator, + headers->value.length() - querySeparator); + + return getDecodedQueryValue(key, queryString); + } + + void setParameters(std::pair parameters) { + currentParameters = parameters; + } + + void setParameterOffsets( + std::map> *offsets) { + currentParameterOffsets = offsets; + } + + std::string_view getParameter(std::string_view name) { + if (!currentParameterOffsets) { + return {nullptr, 0}; } - - std::string_view getParameter(std::string_view name) { - if (!currentParameterOffsets) { - return {nullptr, 0}; - } - auto it = currentParameterOffsets->find(name); - if (it == currentParameterOffsets->end()) { - return {nullptr, 0}; - } - return getParameter(it->second); + auto it = currentParameterOffsets->find(name); + if (it == currentParameterOffsets->end()) { + return {nullptr, 0}; } - - std::string_view getParameter(unsigned short index) { - if (currentParameters.first < (int) index) { - return {}; - } else { - return currentParameters.second[index]; - } + return getParameter(it->second); + } + + std::string_view getParameter(unsigned short index) { + if (currentParameters.first < (int)index) { + return {}; + } else { + return currentParameters.second[index]; } - + } }; struct HttpParser { - -private: - std::string fallback; - /* This guy really has only 30 bits since we reserve two highest bits to chunked encoding parsing state */ - uint64_t remainingStreamingBytes = 0; - - /* Returns UINT64_MAX on error. Maximum 999999999 is allowed. */ - static uint64_t toUnsignedInteger(std::string_view str) { - /* We assume at least 64-bit integer giving us safely 999999999999999999 (18 number of 9s) */ - if (str.length() > 18) { - return UINT64_MAX; - } - - uint64_t unsignedIntegerValue = 0; - for (char c : str) { - /* As long as the letter is 0-9 we cannot overflow. */ - if (c < '0' || c > '9') { - return UINT64_MAX; - } - unsignedIntegerValue = unsignedIntegerValue * 10ull + ((unsigned int) c - (unsigned int) '0'); - } - return unsignedIntegerValue; - } - - static inline uint64_t hasLess(uint64_t x, uint64_t n) { - return (((x)-~0ULL/255*(n))&~(x)&~0ULL/255*128); + private: + std::string fallback; + /* This guy really has only 30 bits since we reserve two highest bits to + * chunked encoding parsing state */ + uint64_t remainingStreamingBytes = 0; + + /* Returns UINT64_MAX on error. Maximum 999999999 is allowed. */ + static uint64_t toUnsignedInteger(std::string_view str) { + /* We assume at least 64-bit integer giving us safely 999999999999999999 (18 + * number of 9s) */ + if (str.length() > 18) { + return UINT64_MAX; } - static inline uint64_t hasMore(uint64_t x, uint64_t n) { - return (( ((x)+~0ULL/255*(127-(n))) |(x))&~0ULL/255*128); + uint64_t unsignedIntegerValue = 0; + for (char c : str) { + /* As long as the letter is 0-9 we cannot overflow. */ + if (c < '0' || c > '9') { + return UINT64_MAX; + } + unsignedIntegerValue = + unsignedIntegerValue * 10ull + ((unsigned int)c - (unsigned int)'0'); } - - static inline uint64_t hasBetween(uint64_t x, uint64_t m, uint64_t n) { - return (( (~0ULL/255*(127+(n))-((x)&~0ULL/255*127)) &~(x)& (((x)&~0ULL/255*127)+~0ULL/255*(127-(m))) )&~0ULL/255*128); + return unsignedIntegerValue; + } + + static inline uint64_t hasLess(uint64_t x, uint64_t n) { + return (((x) - ~0ULL / 255 * (n)) & ~(x) & ~0ULL / 255 * 128); + } + + static inline uint64_t hasMore(uint64_t x, uint64_t n) { + return ((((x) + ~0ULL / 255 * (127 - (n))) | (x)) & ~0ULL / 255 * 128); + } + + static inline uint64_t hasBetween(uint64_t x, uint64_t m, uint64_t n) { + return (((~0ULL / 255 * (127 + (n)) - ((x) & ~0ULL / 255 * 127)) & ~(x) & + (((x) & ~0ULL / 255 * 127) + ~0ULL / 255 * (127 - (m)))) & + ~0ULL / 255 * 128); + } + + static inline bool notFieldNameWord(uint64_t x) { + return hasLess(x, '-') | hasBetween(x, '-', '0') | hasBetween(x, '9', 'A') | + hasBetween(x, 'Z', 'a') | hasMore(x, 'z'); + } + + /* RFC 9110 5.6.2. Tokens */ + /* Hyphen is not checked here as it is very common */ + static inline bool isUnlikelyFieldNameByte(unsigned char c) { + /* Digits and 14 of the 15 non-alphanum characters (lacking hyphen) */ + return ((c == '~') | (c == '|') | (c == '`') | (c == '_') | (c == '^') | + (c == '.') | (c == '+') | (c == '*') | (c == '!')) || + ((c >= 48) & (c <= 57)) || ((c <= 39) & (c >= 35)); + } + + static inline bool isFieldNameByteFastLowercased(unsigned char &in) { + /* Most common is lowercase alpha and hyphen */ + if (((in >= 97) & (in <= 122)) | (in == '-')) [[likely]] { + return true; + /* Second is upper case alpha */ + } else if ((in >= 65) & (in <= 90)) [[unlikely]] { + in |= 32; + return true; + /* These are rarely used but still valid */ + } else if (isUnlikelyFieldNameByte(in)) [[unlikely]] { + return true; } - - static inline bool notFieldNameWord(uint64_t x) { - return hasLess(x, '-') | - hasBetween(x, '-', '0') | - hasBetween(x, '9', 'A') | - hasBetween(x, 'Z', 'a') | - hasMore(x, 'z'); + return false; + } + + static inline void *consumeFieldName(char *p) { + /* Best case fast path (particularly useful with clang) */ + while (true) { + while ((*p >= 65) & (*p <= 90)) [[likely]] { + *p |= 32; + p++; + } + while (((*p >= 97) & (*p <= 122))) [[likely]] { + p++; + } + if (*p == ':') { + return (void *)p; + } + if (*p == '-') { + p++; + } else if (!((*p >= 65) & (*p <= 90))) { + /* Exit fast path parsing */ + break; + } } - /* RFC 9110 5.6.2. Tokens */ - /* Hyphen is not checked here as it is very common */ - static inline bool isUnlikelyFieldNameByte(unsigned char c) - { - /* Digits and 14 of the 15 non-alphanum characters (lacking hyphen) */ - return ((c == '~') | (c == '|') | (c == '`') | (c == '_') | (c == '^') | (c == '.') | (c == '+') - | (c == '*') | (c == '!')) || ((c >= 48) & (c <= 57)) || ((c <= 39) & (c >= 35)); + /* Generic */ + while (isFieldNameByteFastLowercased(*(unsigned char *)p)) { + p++; } - - static inline bool isFieldNameByteFastLowercased(unsigned char &in) { - /* Most common is lowercase alpha and hyphen */ - if (((in >= 97) & (in <= 122)) | (in == '-')) [[likely]] { - return true; - /* Second is upper case alpha */ - } else if ((in >= 65) & (in <= 90)) [[unlikely]] { - in |= 32; - return true; - /* These are rarely used but still valid */ - } else if (isUnlikelyFieldNameByte(in)) [[unlikely]] { - return true; + return (void *)p; + } + + /* Puts method as key, target as value and returns non-null (or nullptr on + * error). */ + static inline char *consumeRequestLine(char *data, + HttpRequest::Header &header) { + /* Scan until single SP, assume next is / (origin request) */ + char *start = data; + /* This catches the post padded CR and fails */ + while (data[0] > 32) data++; + if (data[0] == 32 && data[1] == '/') { + header.key = {start, (size_t)(data - start)}; + data++; + /* Scan for less than 33 (catches post padded CR and fails) */ + start = data; + for (; true; data += 8) { + uint64_t word; + memcpy(&word, data, sizeof(uint64_t)); + if (hasLess(word, 33)) { + while (*(unsigned char *)data > 32) data++; + /* Now we stand on space */ + header.value = {start, (size_t)(data - start)}; + /* Check that the following is http 1.1 */ + if (memcmp(" HTTP/1.1\r\n", data, 11) == 0) { + return data + 11; + } + /* If we stand at the post padded CR, we have fragmented input so try + * again later */ + if (data[0] == '\r') { + return nullptr; + } + /* This is an error */ + return (char *)0x1; } - return false; + } } - - static inline void *consumeFieldName(char *p) { - /* Best case fast path (particularly useful with clang) */ - while (true) { - while ((*p >= 65) & (*p <= 90)) [[likely]] { - *p |= 32; - p++; - } - while (((*p >= 97) & (*p <= 122))) [[likely]] { - p++; - } - if (*p == ':') { - return (void *)p; - } - if (*p == '-') { - p++; - } else if (!((*p >= 65) & (*p <= 90))) { - /* Exit fast path parsing */ - break; - } - } - - /* Generic */ - while (isFieldNameByteFastLowercased(*(unsigned char *)p)) { - p++; - } + /* If we stand at the post padded CR, we have fragmented input so try again + * later */ + if (data[0] == '\r') { + return nullptr; + } + return (char *)0x1; + } + + /* RFC 9110: 5.5 Field Values (TLDR; anything above 31 is allowed; htab (9) is + * also allowed) Field values are usually constrained to the range of US-ASCII + * characters [...] Field values containing CR, LF, or NUL characters are + * invalid and dangerous [...] Field values containing other CTL characters + * are also invalid. */ + static inline void *tryConsumeFieldValue(char *p) { + for (; true; p += 8) { + uint64_t word; + memcpy(&word, p, sizeof(uint64_t)); + if (hasLess(word, 32)) { + while (*(unsigned char *)p > 31) p++; return (void *)p; + } } + } + + /* End is only used for the proxy parser. The HTTP parser recognizes "\ra" as + * invalid "\r\n" scan and breaks. */ + static unsigned int getHeaders(char *postPaddedBuffer, char *end, + struct HttpRequest::Header *headers, + void *reserved, unsigned int &err) { + char *preliminaryKey, *preliminaryValue, *start = postPaddedBuffer; + +#ifdef UWS_WITH_PROXY + /* ProxyParser is passed as reserved parameter */ + ProxyParser *pp = (ProxyParser *)reserved; + + /* Parse PROXY protocol */ + auto [done, offset] = + pp->parse({postPaddedBuffer, (size_t)(end - postPaddedBuffer)}); + if (!done) { + /* We do not reset the ProxyParser (on filure) since it is tied to this + * connection, which is really only supposed to ever get one PROXY frame + * anyways. We do however allow multiple PROXY frames to be sent + * (overwrites former). */ + return 0; + } else { + /* We have consumed this data so skip it */ + postPaddedBuffer += offset; + } +#else + /* This one is unused */ + (void)reserved; + (void)end; +#endif - /* Puts method as key, target as value and returns non-null (or nullptr on error). */ - static inline char *consumeRequestLine(char *data, HttpRequest::Header &header) { - /* Scan until single SP, assume next is / (origin request) */ - char *start = data; - /* This catches the post padded CR and fails */ - while (data[0] > 32) data++; - if (data[0] == 32 && data[1] == '/') { - header.key = {start, (size_t) (data - start)}; - data++; - /* Scan for less than 33 (catches post padded CR and fails) */ - start = data; - for (; true; data += 8) { - uint64_t word; - memcpy(&word, data, sizeof(uint64_t)); - if (hasLess(word, 33)) { - while (*(unsigned char *)data > 32) data++; - /* Now we stand on space */ - header.value = {start, (size_t) (data - start)}; - /* Check that the following is http 1.1 */ - if (memcmp(" HTTP/1.1\r\n", data, 11) == 0) { - return data + 11; - } - /* If we stand at the post padded CR, we have fragmented input so try again later */ - if (data[0] == '\r') { - return nullptr; - } - /* This is an error */ - return (char *) 0x1; - } - } + /* It is critical for fallback buffering logic that we only return with + * success if we managed to parse a complete HTTP request (minus data). + * Returning success for PROXY means we can end up succeeding, yet leaving + * bytes in the fallback buffer which is then removed, and our counters to + * flip due to overflow and we end up with a crash */ + + /* The request line is different from the field names / field values */ + if ((char *)2 > + (postPaddedBuffer = consumeRequestLine(postPaddedBuffer, headers[0]))) { + /* Error - invalid request line */ + /* Assuming it is 505 HTTP Version Not Supported */ + err = postPaddedBuffer ? HTTP_ERROR_505_HTTP_VERSION_NOT_SUPPORTED : 0; + return 0; + } + headers++; + + for (unsigned int i = 1; i < UWS_HTTP_MAX_HEADERS_COUNT - 1; i++) { + /* Lower case and consume the field name */ + preliminaryKey = postPaddedBuffer; + postPaddedBuffer = (char *)consumeFieldName(postPaddedBuffer); + headers->key = std::string_view( + preliminaryKey, (size_t)(postPaddedBuffer - preliminaryKey)); + + /* We should not accept whitespace between key and colon, so colon must + * foloow immediately */ + if (postPaddedBuffer[0] != ':') { + /* Error: invalid chars in field name */ + return 0; + } + postPaddedBuffer++; + + preliminaryValue = postPaddedBuffer; + /* The goal of this call is to find next "\r\n", or any invalid field + * value chars, fast */ + while (true) { + postPaddedBuffer = (char *)tryConsumeFieldValue(postPaddedBuffer); + /* If this is not CR then we caught some stinky invalid char on the way + */ + if (postPaddedBuffer[0] != '\r') { + /* If TAB then keep searching */ + if (postPaddedBuffer[0] == '\t') { + postPaddedBuffer++; + continue; + } + /* Error - invalid chars in field value */ + return 0; } - /* If we stand at the post padded CR, we have fragmented input so try again later */ - if (data[0] == '\r') { - return nullptr; + break; + } + /* We fence end[0] with \r, followed by end[1] being something that is + * "not \n", to signify "not found". This way we can have this one single + * check to see if we found \r\n WITHIN our allowed search space. */ + if (postPaddedBuffer[1] == '\n') { + /* Store this header, it is valid */ + headers->value = std::string_view( + preliminaryValue, (size_t)(postPaddedBuffer - preliminaryValue)); + postPaddedBuffer += 2; + + /* Trim trailing whitespace (SP, HTAB) */ + while (headers->value.length() && headers->value.back() < 33) { + headers->value.remove_suffix(1); } - return (char *) 0x1; - } - /* RFC 9110: 5.5 Field Values (TLDR; anything above 31 is allowed; htab (9) is also allowed) - * Field values are usually constrained to the range of US-ASCII characters [...] - * Field values containing CR, LF, or NUL characters are invalid and dangerous [...] - * Field values containing other CTL characters are also invalid. */ - static inline void *tryConsumeFieldValue(char *p) { - for (; true; p += 8) { - uint64_t word; - memcpy(&word, p, sizeof(uint64_t)); - if (hasLess(word, 32)) { - while (*(unsigned char *)p > 31) p++; - return (void *)p; - } + /* Trim initial whitespace (SP, HTAB) */ + while (headers->value.length() && headers->value.front() < 33) { + headers->value.remove_prefix(1); } - } - /* End is only used for the proxy parser. The HTTP parser recognizes "\ra" as invalid "\r\n" scan and breaks. */ - static unsigned int getHeaders(char *postPaddedBuffer, char *end, struct HttpRequest::Header *headers, void *reserved, unsigned int &err) { - char *preliminaryKey, *preliminaryValue, *start = postPaddedBuffer; - - #ifdef UWS_WITH_PROXY - /* ProxyParser is passed as reserved parameter */ - ProxyParser *pp = (ProxyParser *) reserved; - - /* Parse PROXY protocol */ - auto [done, offset] = pp->parse({postPaddedBuffer, (size_t) (end - postPaddedBuffer)}); - if (!done) { - /* We do not reset the ProxyParser (on filure) since it is tied to this - * connection, which is really only supposed to ever get one PROXY frame - * anyways. We do however allow multiple PROXY frames to be sent (overwrites former). */ - return 0; - } else { - /* We have consumed this data so skip it */ - postPaddedBuffer += offset; - } - #else - /* This one is unused */ - (void) reserved; - (void) end; - #endif - - /* It is critical for fallback buffering logic that we only return with success - * if we managed to parse a complete HTTP request (minus data). Returning success - * for PROXY means we can end up succeeding, yet leaving bytes in the fallback buffer - * which is then removed, and our counters to flip due to overflow and we end up with a crash */ - - /* The request line is different from the field names / field values */ - if ((char *) 2 > (postPaddedBuffer = consumeRequestLine(postPaddedBuffer, headers[0]))) { - /* Error - invalid request line */ - /* Assuming it is 505 HTTP Version Not Supported */ - err = postPaddedBuffer ? HTTP_ERROR_505_HTTP_VERSION_NOT_SUPPORTED : 0; - return 0; - } headers++; - for (unsigned int i = 1; i < UWS_HTTP_MAX_HEADERS_COUNT - 1; i++) { - /* Lower case and consume the field name */ - preliminaryKey = postPaddedBuffer; - postPaddedBuffer = (char *) consumeFieldName(postPaddedBuffer); - headers->key = std::string_view(preliminaryKey, (size_t) (postPaddedBuffer - preliminaryKey)); - - /* We should not accept whitespace between key and colon, so colon must foloow immediately */ - if (postPaddedBuffer[0] != ':') { - /* Error: invalid chars in field name */ - return 0; - } - postPaddedBuffer++; - - preliminaryValue = postPaddedBuffer; - /* The goal of this call is to find next "\r\n", or any invalid field value chars, fast */ - while (true) { - postPaddedBuffer = (char *) tryConsumeFieldValue(postPaddedBuffer); - /* If this is not CR then we caught some stinky invalid char on the way */ - if (postPaddedBuffer[0] != '\r') { - /* If TAB then keep searching */ - if (postPaddedBuffer[0] == '\t') { - postPaddedBuffer++; - continue; - } - /* Error - invalid chars in field value */ - return 0; - } - break; - } - /* We fence end[0] with \r, followed by end[1] being something that is "not \n", to signify "not found". - * This way we can have this one single check to see if we found \r\n WITHIN our allowed search space. */ - if (postPaddedBuffer[1] == '\n') { - /* Store this header, it is valid */ - headers->value = std::string_view(preliminaryValue, (size_t) (postPaddedBuffer - preliminaryValue)); - postPaddedBuffer += 2; - - /* Trim trailing whitespace (SP, HTAB) */ - while (headers->value.length() && headers->value.back() < 33) { - headers->value.remove_suffix(1); - } - - /* Trim initial whitespace (SP, HTAB) */ - while (headers->value.length() && headers->value.front() < 33) { - headers->value.remove_prefix(1); - } - - headers++; - - /* We definitely have at least one header (or request line), so check if we are done */ - if (*postPaddedBuffer == '\r') { - if (postPaddedBuffer[1] == '\n') { - /* This cann take the very last header space */ - headers->key = std::string_view(nullptr, 0); - return (unsigned int) ((postPaddedBuffer + 2) - start); - } else { - /* \r\n\r plus non-\n letter is malformed request, or simply out of search space */ - return 0; - } - } - } else { - /* We are either out of search space or this is a malformed request */ - return 0; - } + /* We definitely have at least one header (or request line), so check if + * we are done */ + if (*postPaddedBuffer == '\r') { + if (postPaddedBuffer[1] == '\n') { + /* This cann take the very last header space */ + headers->key = std::string_view(nullptr, 0); + return (unsigned int)((postPaddedBuffer + 2) - start); + } else { + /* \r\n\r plus non-\n letter is malformed request, or simply out of + * search space */ + return 0; + } } - /* We ran out of header space, too large request */ - err = HTTP_ERROR_431_REQUEST_HEADER_FIELDS_TOO_LARGE; + } else { + /* We are either out of search space or this is a malformed request */ return 0; + } } + /* We ran out of header space, too large request */ + err = HTTP_ERROR_431_REQUEST_HEADER_FIELDS_TOO_LARGE; + return 0; + } + + /* This is the only caller of getHeaders and is thus the deepest part of the + * parser. From here we return either [consumed, user] for "keep going", or + * [consumed, nullptr] for "break; I am closed or upgraded to websocket" or + * [whatever, fullptr] for "break and close me, I am a parser error!" */ + template + std::pair fenceAndConsumePostPadded( + char *data, unsigned int length, void *user, void *reserved, + HttpRequest *req, + MoveOnlyFunction &requestHandler, + MoveOnlyFunction &dataHandler) { + /* How much data we CONSUMED (to throw away) */ + unsigned int consumedTotal = 0; + unsigned int err = 0; + + /* Fence two bytes past end of our buffer (buffer has post padded margins). + * This is to always catch scan for \r but not for \r\n. */ + data[length] = '\r'; + data[length + 1] = + 'a'; /* Anything that is not \n, to trigger "invalid request" */ + + for (unsigned int consumed; + length && (consumed = getHeaders(data, data + length, req->headers, + reserved, err));) { + data += consumed; + length -= consumed; + consumedTotal += consumed; + + /* Even if we could parse it, check for length here as well */ + if (consumed > MAX_FALLBACK_SIZE) { + return {HTTP_ERROR_431_REQUEST_HEADER_FIELDS_TOO_LARGE, FULLPTR}; + } + + /* Store HTTP version (ancient 1.0 or 1.1) */ + req->ancientHttp = false; + + /* Add all headers to bloom filter */ + req->bf.reset(); + for (HttpRequest::Header *h = req->headers; (++h)->key.length();) { + req->bf.add(h->key); + } + + /* Break if no host header (but we can have empty string which is + * different from nullptr) */ + if (!req->getHeader("host").data()) { + return {HTTP_ERROR_400_BAD_REQUEST, FULLPTR}; + } + + /* RFC 9112 6.3 + * If a message is received with both a Transfer-Encoding and a + * Content-Length header field, the Transfer-Encoding overrides the + * Content-Length. Such a message might indicate an attempt to perform + * request smuggling (Section 11.2) or response splitting (Section 11.1) + * and ought to be handled as an error. */ + std::string_view transferEncodingString = + req->getHeader("transfer-encoding"); + std::string_view contentLengthString = req->getHeader("content-length"); + if (transferEncodingString.length() && contentLengthString.length()) { + /* Returning fullptr is the same as calling the errorHandler */ + /* We could be smart and set an error in the context along with this, to + * indicate what http error response we might want to return */ + return {HTTP_ERROR_400_BAD_REQUEST, FULLPTR}; + } + + /* Parse query */ + const char *querySeparatorPtr = (const char *)memchr( + req->headers->value.data(), '?', req->headers->value.length()); + req->querySeparator = + (unsigned int)((querySeparatorPtr + ? querySeparatorPtr + : req->headers->value.data() + + req->headers->value.length()) - + req->headers->value.data()); + + /* If returned socket is not what we put in we need + * to break here as we either have upgraded to + * WebSockets or otherwise closed the socket. */ + void *returnedUser = requestHandler(user, req); + if (returnedUser != user) { + /* We are upgraded to WebSocket or otherwise broken */ + return {consumedTotal, returnedUser}; + } + + /* The rules at play here according to RFC 9112 for requests are + * essentially: If both content-length and transfer-encoding then invalid + * message; must break. If has transfer-encoding then must be chunked + * regardless of value. If content-length then fixed length even if 0. If + * none of the above then fixed length is 0. */ + + /* RFC 9112 6.3 + * If a message is received with both a Transfer-Encoding and a + * Content-Length header field, the Transfer-Encoding overrides the + * Content-Length. */ + if (transferEncodingString.length()) { + /* If a proxy sent us the transfer-encoding header that 100% means it + * must be chunked or else the proxy is not RFC 9112 compliant. + * Therefore it is always better to assume this is the case, since that + * entirely eliminates all forms of transfer-encoding obfuscation + * tricks. We just rely on the header. */ + + /* RFC 9112 6.3 + * If a Transfer-Encoding header field is present in a request and the + * chunked transfer coding is not the final encoding, the message body + * length cannot be determined reliably; the server MUST respond with + * the 400 (Bad Request) status code and then close the connection. */ + + /* In this case we fail later by having the wrong interpretation + * (assuming chunked). This could be made stricter but makes no + * difference either way, unless forwarding the identical message as a + * proxy. */ + + remainingStreamingBytes = STATE_IS_CHUNKED; + /* If consume minimally, we do not want to consume anything but we want + * to mark this as being chunked */ + if (!CONSUME_MINIMALLY) { + /* Go ahead and parse it (todo: better heuristics for emitting FIN to + * the app level) */ + std::string_view dataToConsume(data, length); + for (auto chunk : + uWS::ChunkIterator(&dataToConsume, &remainingStreamingBytes)) { + dataHandler(user, chunk, chunk.length() == 0); + } + if (isParsingInvalidChunkedEncoding(remainingStreamingBytes)) { + return {HTTP_ERROR_400_BAD_REQUEST, FULLPTR}; + } + unsigned int consumed = + (length - (unsigned int)dataToConsume.length()); + data = (char *)dataToConsume.data(); + length = (unsigned int)dataToConsume.length(); + consumedTotal += consumed; + } + } else if (contentLengthString.length()) { + remainingStreamingBytes = toUnsignedInteger(contentLengthString); + if (remainingStreamingBytes == UINT64_MAX) { + /* Parser error */ + return {HTTP_ERROR_400_BAD_REQUEST, FULLPTR}; + } - /* This is the only caller of getHeaders and is thus the deepest part of the parser. - * From here we return either [consumed, user] for "keep going", - * or [consumed, nullptr] for "break; I am closed or upgraded to websocket" - * or [whatever, fullptr] for "break and close me, I am a parser error!" */ - template - std::pair fenceAndConsumePostPadded(char *data, unsigned int length, void *user, void *reserved, HttpRequest *req, MoveOnlyFunction &requestHandler, MoveOnlyFunction &dataHandler) { - - /* How much data we CONSUMED (to throw away) */ - unsigned int consumedTotal = 0; - unsigned int err = 0; - - /* Fence two bytes past end of our buffer (buffer has post padded margins). - * This is to always catch scan for \r but not for \r\n. */ - data[length] = '\r'; - data[length + 1] = 'a'; /* Anything that is not \n, to trigger "invalid request" */ - - for (unsigned int consumed; length && (consumed = getHeaders(data, data + length, req->headers, reserved, err)); ) { - data += consumed; - length -= consumed; - consumedTotal += consumed; - - /* Even if we could parse it, check for length here as well */ - if (consumed > MAX_FALLBACK_SIZE) { - return {HTTP_ERROR_431_REQUEST_HEADER_FIELDS_TOO_LARGE, FULLPTR}; - } - - /* Store HTTP version (ancient 1.0 or 1.1) */ - req->ancientHttp = false; - - /* Add all headers to bloom filter */ - req->bf.reset(); - for (HttpRequest::Header *h = req->headers; (++h)->key.length(); ) { - req->bf.add(h->key); - } - - /* Break if no host header (but we can have empty string which is different from nullptr) */ - if (!req->getHeader("host").data()) { - return {HTTP_ERROR_400_BAD_REQUEST, FULLPTR}; - } - - /* RFC 9112 6.3 - * If a message is received with both a Transfer-Encoding and a Content-Length header field, - * the Transfer-Encoding overrides the Content-Length. Such a message might indicate an attempt - * to perform request smuggling (Section 11.2) or response splitting (Section 11.1) and - * ought to be handled as an error. */ - std::string_view transferEncodingString = req->getHeader("transfer-encoding"); - std::string_view contentLengthString = req->getHeader("content-length"); - if (transferEncodingString.length() && contentLengthString.length()) { - /* Returning fullptr is the same as calling the errorHandler */ - /* We could be smart and set an error in the context along with this, to indicate what - * http error response we might want to return */ - return {HTTP_ERROR_400_BAD_REQUEST, FULLPTR}; - } - - /* Parse query */ - const char *querySeparatorPtr = (const char *) memchr(req->headers->value.data(), '?', req->headers->value.length()); - req->querySeparator = (unsigned int) ((querySeparatorPtr ? querySeparatorPtr : req->headers->value.data() + req->headers->value.length()) - req->headers->value.data()); - - /* If returned socket is not what we put in we need - * to break here as we either have upgraded to - * WebSockets or otherwise closed the socket. */ - void *returnedUser = requestHandler(user, req); - if (returnedUser != user) { - /* We are upgraded to WebSocket or otherwise broken */ - return {consumedTotal, returnedUser}; - } - - /* The rules at play here according to RFC 9112 for requests are essentially: - * If both content-length and transfer-encoding then invalid message; must break. - * If has transfer-encoding then must be chunked regardless of value. - * If content-length then fixed length even if 0. - * If none of the above then fixed length is 0. */ - - /* RFC 9112 6.3 - * If a message is received with both a Transfer-Encoding and a Content-Length header field, - * the Transfer-Encoding overrides the Content-Length. */ - if (transferEncodingString.length()) { - - /* If a proxy sent us the transfer-encoding header that 100% means it must be chunked or else the proxy is - * not RFC 9112 compliant. Therefore it is always better to assume this is the case, since that entirely eliminates - * all forms of transfer-encoding obfuscation tricks. We just rely on the header. */ - - /* RFC 9112 6.3 - * If a Transfer-Encoding header field is present in a request and the chunked transfer coding is not the - * final encoding, the message body length cannot be determined reliably; the server MUST respond with the - * 400 (Bad Request) status code and then close the connection. */ - - /* In this case we fail later by having the wrong interpretation (assuming chunked). - * This could be made stricter but makes no difference either way, unless forwarding the identical message as a proxy. */ - - remainingStreamingBytes = STATE_IS_CHUNKED; - /* If consume minimally, we do not want to consume anything but we want to mark this as being chunked */ - if (!CONSUME_MINIMALLY) { - /* Go ahead and parse it (todo: better heuristics for emitting FIN to the app level) */ - std::string_view dataToConsume(data, length); - for (auto chunk : uWS::ChunkIterator(&dataToConsume, &remainingStreamingBytes)) { - dataHandler(user, chunk, chunk.length() == 0); - } - if (isParsingInvalidChunkedEncoding(remainingStreamingBytes)) { - return {HTTP_ERROR_400_BAD_REQUEST, FULLPTR}; - } - unsigned int consumed = (length - (unsigned int) dataToConsume.length()); - data = (char *) dataToConsume.data(); - length = (unsigned int) dataToConsume.length(); - consumedTotal += consumed; - } - } else if (contentLengthString.length()) { - remainingStreamingBytes = toUnsignedInteger(contentLengthString); - if (remainingStreamingBytes == UINT64_MAX) { - /* Parser error */ - return {HTTP_ERROR_400_BAD_REQUEST, FULLPTR}; - } - - if (!CONSUME_MINIMALLY) { - unsigned int emittable = (unsigned int) std::min(remainingStreamingBytes, length); - dataHandler(user, std::string_view(data, emittable), emittable == remainingStreamingBytes); - remainingStreamingBytes -= emittable; - - data += emittable; - length -= emittable; - consumedTotal += emittable; - } - } else { - /* If we came here without a body; emit an empty data chunk to signal no data */ - dataHandler(user, {}, true); - } + if (!CONSUME_MINIMALLY) { + unsigned int emittable = + (unsigned int)std::min(remainingStreamingBytes, length); + dataHandler(user, std::string_view(data, emittable), + emittable == remainingStreamingBytes); + remainingStreamingBytes -= emittable; - /* Consume minimally should break as easrly as possible */ - if (CONSUME_MINIMALLY) { - break; - } - } - /* Whenever we return FULLPTR, the interpretation of "consumed" should be the HttpError enum. */ - if (err) { - return {err, FULLPTR}; + data += emittable; + length -= emittable; + consumedTotal += emittable; } - return {consumedTotal, user}; + } else { + /* If we came here without a body; emit an empty data chunk to signal no + * data */ + dataHandler(user, {}, true); + } + + /* Consume minimally should break as easrly as possible */ + if (CONSUME_MINIMALLY) { + break; + } } + /* Whenever we return FULLPTR, the interpretation of "consumed" should be + * the HttpError enum. */ + if (err) { + return {err, FULLPTR}; + } + return {consumedTotal, user}; + } + + public: + std::pair consumePostPadded( + char *data, unsigned int length, void *user, void *reserved, + MoveOnlyFunction &&requestHandler, + MoveOnlyFunction &&dataHandler) { + /* This resets BloomFilter by construction, but later we also reset it + * again. Optimize this to skip resetting twice (req could be made global) + */ + HttpRequest req; + + if (remainingStreamingBytes) { + /* It's either chunked or with a content-length */ + if (isParsingChunkedEncoding(remainingStreamingBytes)) { + std::string_view dataToConsume(data, length); + for (auto chunk : + uWS::ChunkIterator(&dataToConsume, &remainingStreamingBytes)) { + dataHandler(user, chunk, chunk.length() == 0); + } + if (isParsingInvalidChunkedEncoding(remainingStreamingBytes)) { + return {HTTP_ERROR_400_BAD_REQUEST, FULLPTR}; + } + data = (char *)dataToConsume.data(); + length = (unsigned int)dataToConsume.length(); + } else { + // this is exactly the same as below! + // todo: refactor this + if (remainingStreamingBytes >= length) { + void *returnedUser = dataHandler(user, std::string_view(data, length), + remainingStreamingBytes == length); + remainingStreamingBytes -= length; + return {0, returnedUser}; + } else { + void *returnedUser = dataHandler( + user, std::string_view(data, remainingStreamingBytes), true); -public: - std::pair consumePostPadded(char *data, unsigned int length, void *user, void *reserved, MoveOnlyFunction &&requestHandler, MoveOnlyFunction &&dataHandler) { + data += (unsigned int)remainingStreamingBytes; + length -= (unsigned int)remainingStreamingBytes; - /* This resets BloomFilter by construction, but later we also reset it again. - * Optimize this to skip resetting twice (req could be made global) */ - HttpRequest req; + remainingStreamingBytes = 0; - if (remainingStreamingBytes) { + if (returnedUser != user) { + return {0, returnedUser}; + } + } + } + + } else if (fallback.length()) { + unsigned int had = (unsigned int)fallback.length(); + + size_t maxCopyDistance = std::min( + MAX_FALLBACK_SIZE - fallback.length(), (size_t)length); + + /* We don't want fallback to be short string optimized, since we want to + * move it */ + fallback.reserve(fallback.length() + maxCopyDistance + + std::max(MINIMUM_HTTP_POST_PADDING, + sizeof(std::string))); + fallback.append(data, maxCopyDistance); + + // break here on break + std::pair consumed = + fenceAndConsumePostPadded( + fallback.data(), (unsigned int)fallback.length(), user, reserved, + &req, requestHandler, dataHandler); + if (consumed.second != user) { + return consumed; + } + + if (consumed.first) { + /* This logic assumes that we consumed everything in fallback buffer. + * This is critically important, as we will get an integer overflow in + * case of "had" being larger than what we consumed, and that we would + * drop data */ + fallback.clear(); + data += consumed.first - had; + length -= consumed.first - had; - /* It's either chunked or with a content-length */ - if (isParsingChunkedEncoding(remainingStreamingBytes)) { - std::string_view dataToConsume(data, length); - for (auto chunk : uWS::ChunkIterator(&dataToConsume, &remainingStreamingBytes)) { - dataHandler(user, chunk, chunk.length() == 0); - } - if (isParsingInvalidChunkedEncoding(remainingStreamingBytes)) { - return {HTTP_ERROR_400_BAD_REQUEST, FULLPTR}; - } - data = (char *) dataToConsume.data(); - length = (unsigned int) dataToConsume.length(); - } else { - // this is exactly the same as below! - // todo: refactor this - if (remainingStreamingBytes >= length) { - void *returnedUser = dataHandler(user, std::string_view(data, length), remainingStreamingBytes == length); - remainingStreamingBytes -= length; - return {0, returnedUser}; - } else { - void *returnedUser = dataHandler(user, std::string_view(data, remainingStreamingBytes), true); - - data += (unsigned int) remainingStreamingBytes; - length -= (unsigned int) remainingStreamingBytes; - - remainingStreamingBytes = 0; - - if (returnedUser != user) { - return {0, returnedUser}; - } - } + if (remainingStreamingBytes) { + /* It's either chunked or with a content-length */ + if (isParsingChunkedEncoding(remainingStreamingBytes)) { + std::string_view dataToConsume(data, length); + for (auto chunk : + uWS::ChunkIterator(&dataToConsume, &remainingStreamingBytes)) { + dataHandler(user, chunk, chunk.length() == 0); } - - } else if (fallback.length()) { - unsigned int had = (unsigned int) fallback.length(); - - size_t maxCopyDistance = std::min(MAX_FALLBACK_SIZE - fallback.length(), (size_t) length); - - /* We don't want fallback to be short string optimized, since we want to move it */ - fallback.reserve(fallback.length() + maxCopyDistance + std::max(MINIMUM_HTTP_POST_PADDING, sizeof(std::string))); - fallback.append(data, maxCopyDistance); - - // break here on break - std::pair consumed = fenceAndConsumePostPadded(fallback.data(), (unsigned int) fallback.length(), user, reserved, &req, requestHandler, dataHandler); - if (consumed.second != user) { - return consumed; + if (isParsingInvalidChunkedEncoding(remainingStreamingBytes)) { + return {HTTP_ERROR_400_BAD_REQUEST, FULLPTR}; } + data = (char *)dataToConsume.data(); + length = (unsigned int)dataToConsume.length(); + } else { + // this is exactly the same as above! + if (remainingStreamingBytes >= (unsigned int)length) { + void *returnedUser = + dataHandler(user, std::string_view(data, length), + remainingStreamingBytes == (unsigned int)length); + remainingStreamingBytes -= length; + return {0, returnedUser}; + } else { + void *returnedUser = dataHandler( + user, std::string_view(data, remainingStreamingBytes), true); - if (consumed.first) { - - /* This logic assumes that we consumed everything in fallback buffer. - * This is critically important, as we will get an integer overflow in case - * of "had" being larger than what we consumed, and that we would drop data */ - fallback.clear(); - data += consumed.first - had; - length -= consumed.first - had; - - if (remainingStreamingBytes) { - /* It's either chunked or with a content-length */ - if (isParsingChunkedEncoding(remainingStreamingBytes)) { - std::string_view dataToConsume(data, length); - for (auto chunk : uWS::ChunkIterator(&dataToConsume, &remainingStreamingBytes)) { - dataHandler(user, chunk, chunk.length() == 0); - } - if (isParsingInvalidChunkedEncoding(remainingStreamingBytes)) { - return {HTTP_ERROR_400_BAD_REQUEST, FULLPTR}; - } - data = (char *) dataToConsume.data(); - length = (unsigned int) dataToConsume.length(); - } else { - // this is exactly the same as above! - if (remainingStreamingBytes >= (unsigned int) length) { - void *returnedUser = dataHandler(user, std::string_view(data, length), remainingStreamingBytes == (unsigned int) length); - remainingStreamingBytes -= length; - return {0, returnedUser}; - } else { - void *returnedUser = dataHandler(user, std::string_view(data, remainingStreamingBytes), true); - - data += (unsigned int) remainingStreamingBytes; - length -= (unsigned int) remainingStreamingBytes; - - remainingStreamingBytes = 0; - - if (returnedUser != user) { - return {0, returnedUser}; - } - } - } - } + data += (unsigned int)remainingStreamingBytes; + length -= (unsigned int)remainingStreamingBytes; - } else { - if (fallback.length() == MAX_FALLBACK_SIZE) { - return {HTTP_ERROR_431_REQUEST_HEADER_FIELDS_TOO_LARGE, FULLPTR}; - } - return {0, user}; + remainingStreamingBytes = 0; + + if (returnedUser != user) { + return {0, returnedUser}; + } } + } } - std::pair consumed = fenceAndConsumePostPadded(data, length, user, reserved, &req, requestHandler, dataHandler); - if (consumed.second != user) { - return consumed; + } else { + if (fallback.length() == MAX_FALLBACK_SIZE) { + return {HTTP_ERROR_431_REQUEST_HEADER_FIELDS_TOO_LARGE, FULLPTR}; } + return {0, user}; + } + } - data += consumed.first; - length -= consumed.first; + std::pair consumed = fenceAndConsumePostPadded( + data, length, user, reserved, &req, requestHandler, dataHandler); + if (consumed.second != user) { + return consumed; + } - if (length) { - if (length < MAX_FALLBACK_SIZE) { - fallback.append(data, length); - } else { - return {HTTP_ERROR_431_REQUEST_HEADER_FIELDS_TOO_LARGE, FULLPTR}; - } - } + data += consumed.first; + length -= consumed.first; - // added for now - return {0, user}; + if (length) { + if (length < MAX_FALLBACK_SIZE) { + fallback.append(data, length); + } else { + return {HTTP_ERROR_431_REQUEST_HEADER_FIELDS_TOO_LARGE, FULLPTR}; + } } + + // added for now + return {0, user}; + } }; -} +} // namespace uWS -#endif // UWS_HTTPPARSER_H +#endif // UWS_HTTPPARSER_H diff --git a/vendor/hydra/vendor/uwebsockets/src/HttpResponse.h b/vendor/hydra/vendor/uwebsockets/src/HttpResponse.h index 633cd038..3cd16755 100644 --- a/vendor/hydra/vendor/uwebsockets/src/HttpResponse.h +++ b/vendor/hydra/vendor/uwebsockets/src/HttpResponse.h @@ -21,17 +21,15 @@ /* An HttpResponse is the channel on which you send back a response */ #include "AsyncSocket.h" -#include "HttpResponseData.h" #include "HttpContext.h" #include "HttpContextData.h" +#include "HttpResponseData.h" +#include "MoveOnlyFunction.h" #include "Utilities.h" - -#include "WebSocketExtensions.h" -#include "WebSocketHandshake.h" #include "WebSocket.h" #include "WebSocketContextData.h" - -#include "MoveOnlyFunction.h" +#include "WebSocketExtensions.h" +#include "WebSocketHandshake.h" /* todo: tryWrite is missing currently, only send smaller segments with write */ @@ -45,534 +43,598 @@ static const int HTTP_TIMEOUT_S = 10; template struct HttpResponse : public AsyncSocket { - /* Solely used for getHttpResponseData() */ - template friend struct TemplatedApp; - typedef AsyncSocket Super; -private: - HttpResponseData *getHttpResponseData() { - return (HttpResponseData *) Super::getAsyncSocketData(); - } - - /* Write an unsigned 32-bit integer in hex */ - void writeUnsignedHex(unsigned int value) { - /* Buf really only needs to be 8 long but building with - * -mavx2, GCC still wants to overstep it so made it 16 */ - char buf[16]; - int length = utils::u32toaHex(value, buf); - - /* For now we do this copy */ - Super::write(buf, length); - } - - /* Write an unsigned 64-bit integer */ - void writeUnsigned64(uint64_t value) { - char buf[20]; - int length = utils::u64toa(value, buf); - - /* For now we do this copy */ - Super::write(buf, length); - } - - /* Called only once per request */ - void writeMark() { - /* Date is always written */ - writeHeader("Date", std::string_view(((LoopData *) us_loop_ext(us_socket_context_loop(SSL, (us_socket_context(SSL, (us_socket_t *) this)))))->date, 29)); - - /* You can disable this altogether */ + /* Solely used for getHttpResponseData() */ + template + friend struct TemplatedApp; + typedef AsyncSocket Super; + + private: + HttpResponseData *getHttpResponseData() { + return (HttpResponseData *)Super::getAsyncSocketData(); + } + + /* Write an unsigned 32-bit integer in hex */ + void writeUnsignedHex(unsigned int value) { + /* Buf really only needs to be 8 long but building with + * -mavx2, GCC still wants to overstep it so made it 16 */ + char buf[16]; + int length = utils::u32toaHex(value, buf); + + /* For now we do this copy */ + Super::write(buf, length); + } + + /* Write an unsigned 64-bit integer */ + void writeUnsigned64(uint64_t value) { + char buf[20]; + int length = utils::u64toa(value, buf); + + /* For now we do this copy */ + Super::write(buf, length); + } + + /* Called only once per request */ + void writeMark() { + /* Date is always written */ + writeHeader("Date", + std::string_view( + ((LoopData *)us_loop_ext(us_socket_context_loop( + SSL, (us_socket_context(SSL, (us_socket_t *)this))))) + ->date, + 29)); + + /* You can disable this altogether */ #ifndef UWS_HTTPRESPONSE_NO_WRITEMARK - if (!Super::getLoopData()->noMark) { - /* We only expose major version */ - writeHeader("uWebSockets", "20"); - } + if (!Super::getLoopData()->noMark) { + /* We only expose major version */ + writeHeader("uWebSockets", "20"); + } #endif + } + + /* Returns true on success, indicating that it might be feasible to write more + * data. Will start timeout if stream reaches totalSize or write failure. */ + bool internalEnd(std::string_view data, uintmax_t totalSize, bool optional, + bool allowContentLength = true, + bool closeConnection = false) { + /* Write status if not already done */ + writeStatus(HTTP_200_OK); + + /* If no total size given then assume this chunk is everything */ + if (!totalSize) { + totalSize = data.length(); } - /* Returns true on success, indicating that it might be feasible to write more data. - * Will start timeout if stream reaches totalSize or write failure. */ - bool internalEnd(std::string_view data, uintmax_t totalSize, bool optional, bool allowContentLength = true, bool closeConnection = false) { - /* Write status if not already done */ - writeStatus(HTTP_200_OK); - - /* If no total size given then assume this chunk is everything */ - if (!totalSize) { - totalSize = data.length(); - } + HttpResponseData *httpResponseData = getHttpResponseData(); + + /* In some cases, such as when refusing huge data we want to close the + * connection when drained */ + if (closeConnection) { + /* HTTP 1.1 must send this back unless the client already sent it to us. + * It is a connection close when either of the two parties say so but the + * one party must tell the other one so. + * + * This check also serves to limit writing the header only once. */ + if ((httpResponseData->state & + HttpResponseData::HTTP_CONNECTION_CLOSE) == 0) { + writeHeader("Connection", "close"); + } + + httpResponseData->state |= HttpResponseData::HTTP_CONNECTION_CLOSE; + } - HttpResponseData *httpResponseData = getHttpResponseData(); + if (httpResponseData->state & HttpResponseData::HTTP_WRITE_CALLED) { + /* We do not have tryWrite-like functionalities, so ignore optional in + * this path */ - /* In some cases, such as when refusing huge data we want to close the connection when drained */ - if (closeConnection) { + /* Do not allow sending 0 chunk here */ + if (data.length()) { + Super::write("\r\n", 2); + writeUnsignedHex((unsigned int)data.length()); + Super::write("\r\n", 2); - /* HTTP 1.1 must send this back unless the client already sent it to us. - * It is a connection close when either of the two parties say so but the - * one party must tell the other one so. - * - * This check also serves to limit writing the header only once. */ - if ((httpResponseData->state & HttpResponseData::HTTP_CONNECTION_CLOSE) == 0) { - writeHeader("Connection", "close"); + /* Ignoring optional for now */ + Super::write(data.data(), (int)data.length()); + } + + /* Terminating 0 chunk */ + Super::write("\r\n0\r\n\r\n", 7); + + httpResponseData->markDone(); + + /* We need to check if we should close this socket here now */ + if (!Super::isCorked()) { + if (httpResponseData->state & + HttpResponseData::HTTP_CONNECTION_CLOSE) { + if ((httpResponseData->state & + HttpResponseData::HTTP_RESPONSE_PENDING) == 0) { + if (((AsyncSocket *)this)->getBufferedAmount() == 0) { + ((AsyncSocket *)this)->shutdown(); + /* We need to force close after sending FIN since we want to + * hinder clients from keeping to send their huge data */ + ((AsyncSocket *)this)->close(); + return true; } - - httpResponseData->state |= HttpResponseData::HTTP_CONNECTION_CLOSE; + } } - - if (httpResponseData->state & HttpResponseData::HTTP_WRITE_CALLED) { - - /* We do not have tryWrite-like functionalities, so ignore optional in this path */ - - /* Do not allow sending 0 chunk here */ - if (data.length()) { - Super::write("\r\n", 2); - writeUnsignedHex((unsigned int) data.length()); - Super::write("\r\n", 2); - - /* Ignoring optional for now */ - Super::write(data.data(), (int) data.length()); - } - - /* Terminating 0 chunk */ - Super::write("\r\n0\r\n\r\n", 7); - - httpResponseData->markDone(); - - /* We need to check if we should close this socket here now */ - if (!Super::isCorked()) { - if (httpResponseData->state & HttpResponseData::HTTP_CONNECTION_CLOSE) { - if ((httpResponseData->state & HttpResponseData::HTTP_RESPONSE_PENDING) == 0) { - if (((AsyncSocket *) this)->getBufferedAmount() == 0) { - ((AsyncSocket *) this)->shutdown(); - /* We need to force close after sending FIN since we want to hinder - * clients from keeping to send their huge data */ - ((AsyncSocket *) this)->close(); - return true; - } - } - } - } - - /* tryEnd can never fail when in chunked mode, since we do not have tryWrite (yet), only write */ - Super::timeout(HTTP_TIMEOUT_S); - return true; + } + + /* tryEnd can never fail when in chunked mode, since we do not have + * tryWrite (yet), only write */ + Super::timeout(HTTP_TIMEOUT_S); + return true; + } else { + /* Write content-length on first call */ + if (!(httpResponseData->state & HttpResponseData::HTTP_END_CALLED)) { + /* Write mark, this propagates to WebSockets too */ + writeMark(); + + /* WebSocket upgrades does not allow content-length */ + if (allowContentLength) { + /* Even zero is a valid content-length */ + Super::write("Content-Length: ", 16); + writeUnsigned64(totalSize); + Super::write("\r\n\r\n", 4); } else { - /* Write content-length on first call */ - if (!(httpResponseData->state & HttpResponseData::HTTP_END_CALLED)) { - /* Write mark, this propagates to WebSockets too */ - writeMark(); - - /* WebSocket upgrades does not allow content-length */ - if (allowContentLength) { - /* Even zero is a valid content-length */ - Super::write("Content-Length: ", 16); - writeUnsigned64(totalSize); - Super::write("\r\n\r\n", 4); - } else { - Super::write("\r\n", 2); - } - - /* Mark end called */ - httpResponseData->state |= HttpResponseData::HTTP_END_CALLED; - } + Super::write("\r\n", 2); + } - /* Even if we supply no new data to write, its failed boolean is useful to know - * if it failed to drain any prior failed header writes */ + /* Mark end called */ + httpResponseData->state |= HttpResponseData::HTTP_END_CALLED; + } - /* Write as much as possible without causing backpressure */ - size_t written = 0; - bool failed = false; - while (written < data.length() && !failed) { - /* uSockets only deals with int sizes, so pass chunks of max signed int size */ - auto writtenFailed = Super::write(data.data() + written, (int) std::min(data.length() - written, INT_MAX), optional); + /* Even if we supply no new data to write, its failed boolean is useful to + * know if it failed to drain any prior failed header writes */ - written += (size_t) writtenFailed.first; - failed = writtenFailed.second; - } + /* Write as much as possible without causing backpressure */ + size_t written = 0; + bool failed = false; + while (written < data.length() && !failed) { + /* uSockets only deals with int sizes, so pass chunks of max signed int + * size */ + auto writtenFailed = Super::write( + data.data() + written, + (int)std::min(data.length() - written, INT_MAX), optional); - httpResponseData->offset += written; + written += (size_t)writtenFailed.first; + failed = writtenFailed.second; + } - /* Success is when we wrote the entire thing without any failures */ - bool success = written == data.length() && !failed; + httpResponseData->offset += written; - /* If we are now at the end, start a timeout. Also start a timeout if we failed. */ - if (!success || httpResponseData->offset == totalSize) { - Super::timeout(HTTP_TIMEOUT_S); - } + /* Success is when we wrote the entire thing without any failures */ + bool success = written == data.length() && !failed; - /* Remove onAborted function if we reach the end */ - if (httpResponseData->offset == totalSize) { - httpResponseData->markDone(); - - /* We need to check if we should close this socket here now */ - if (!Super::isCorked()) { - if (httpResponseData->state & HttpResponseData::HTTP_CONNECTION_CLOSE) { - if ((httpResponseData->state & HttpResponseData::HTTP_RESPONSE_PENDING) == 0) { - if (((AsyncSocket *) this)->getBufferedAmount() == 0) { - ((AsyncSocket *) this)->shutdown(); - /* We need to force close after sending FIN since we want to hinder - * clients from keeping to send their huge data */ - ((AsyncSocket *) this)->close(); - } - } - } - } + /* If we are now at the end, start a timeout. Also start a timeout if we + * failed. */ + if (!success || httpResponseData->offset == totalSize) { + Super::timeout(HTTP_TIMEOUT_S); + } + + /* Remove onAborted function if we reach the end */ + if (httpResponseData->offset == totalSize) { + httpResponseData->markDone(); + + /* We need to check if we should close this socket here now */ + if (!Super::isCorked()) { + if (httpResponseData->state & + HttpResponseData::HTTP_CONNECTION_CLOSE) { + if ((httpResponseData->state & + HttpResponseData::HTTP_RESPONSE_PENDING) == 0) { + if (((AsyncSocket *)this)->getBufferedAmount() == 0) { + ((AsyncSocket *)this)->shutdown(); + /* We need to force close after sending FIN since we want to + * hinder clients from keeping to send their huge data */ + ((AsyncSocket *)this)->close(); + } } - - return success; + } } + } + + return success; } + } -public: - /* If we have proxy support; returns the proxed source address as reported by the proxy. */ + public: + /* If we have proxy support; returns the proxed source address as reported by + * the proxy. */ #ifdef UWS_WITH_PROXY - std::string_view getProxiedRemoteAddress() { - return getHttpResponseData()->proxyParser.getSourceAddress(); - } + std::string_view getProxiedRemoteAddress() { + return getHttpResponseData()->proxyParser.getSourceAddress(); + } - std::string_view getProxiedRemoteAddressAsText() { - return Super::addressAsText(getProxiedRemoteAddress()); - } + std::string_view getProxiedRemoteAddressAsText() { + return Super::addressAsText(getProxiedRemoteAddress()); + } #endif - /* Manually upgrade to WebSocket. Typically called in upgrade handler. Immediately calls open handler. - * NOTE: Will invalidate 'this' as socket might change location in memory. Throw away after use. */ - template - void upgrade(UserData &&userData, std::string_view secWebSocketKey, std::string_view secWebSocketProtocol, - std::string_view secWebSocketExtensions, - struct us_socket_context_t *webSocketContext) { - - /* Extract needed parameters from WebSocketContextData */ - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, webSocketContext); - - /* Note: OpenSSL can be used here to speed this up somewhat */ - char secWebSocketAccept[29] = {}; - WebSocketHandshake::generate(secWebSocketKey.data(), secWebSocketAccept); - - writeStatus("101 Switching Protocols") - ->writeHeader("Upgrade", "websocket") - ->writeHeader("Connection", "Upgrade") - ->writeHeader("Sec-WebSocket-Accept", secWebSocketAccept); - - /* Select first subprotocol if present */ - if (secWebSocketProtocol.length()) { - writeHeader("Sec-WebSocket-Protocol", secWebSocketProtocol.substr(0, secWebSocketProtocol.find(','))); - } - - /* Negotiate compression */ - bool perMessageDeflate = false; - CompressOptions compressOptions = CompressOptions::DISABLED; - if (secWebSocketExtensions.length() && webSocketContextData->compression != DISABLED) { - - /* Make sure to map SHARED_DECOMPRESSOR to windowBits = 0, not 1 */ - int wantedInflationWindow = 0; - if ((webSocketContextData->compression & CompressOptions::_DECOMPRESSOR_MASK) != CompressOptions::SHARED_DECOMPRESSOR) { - wantedInflationWindow = (webSocketContextData->compression & CompressOptions::_DECOMPRESSOR_MASK) >> 8; - } - - /* Map from selected compressor (this automatically maps SHARED_COMPRESSOR to windowBits 0, not 1) */ - int wantedCompressionWindow = (webSocketContextData->compression & CompressOptions::_COMPRESSOR_MASK) >> 4; - - auto [negCompression, negCompressionWindow, negInflationWindow, negResponse] = - negotiateCompression(true, wantedCompressionWindow, wantedInflationWindow, - secWebSocketExtensions); - - if (negCompression) { - perMessageDeflate = true; - - /* Map from negotiated windowBits to compressor and decompressor */ - if (negCompressionWindow == 0) { - compressOptions = CompressOptions::SHARED_COMPRESSOR; - } else { - compressOptions = (CompressOptions) ((uint32_t) (negCompressionWindow << 4) - | (uint32_t) (negCompressionWindow - 7)); - - /* If we are dedicated and have the 3kb then correct any 4kb to 3kb, - * (they both share the windowBits = 9) */ - if (webSocketContextData->compression & DEDICATED_COMPRESSOR_3KB) { - compressOptions = DEDICATED_COMPRESSOR_3KB; - } - } - - /* Here we modify the above compression with negotiated decompressor */ - if (negInflationWindow == 0) { - compressOptions = CompressOptions(compressOptions | CompressOptions::SHARED_DECOMPRESSOR); - } else { - compressOptions = CompressOptions(compressOptions | (negInflationWindow << 8)); - } - - writeHeader("Sec-WebSocket-Extensions", negResponse); - } - } - - internalEnd({nullptr, 0}, 0, false, false); - - /* Grab the httpContext from res */ - HttpContext *httpContext = (HttpContext *) us_socket_context(SSL, (struct us_socket_t *) this); - - /* Move any backpressure out of HttpResponse */ - BackPressure backpressure(std::move(((AsyncSocketData *) getHttpResponseData())->buffer)); - - /* Destroy HttpResponseData */ - getHttpResponseData()->~HttpResponseData(); - - /* Before we adopt and potentially change socket, check if we are corked */ - bool wasCorked = Super::isCorked(); - - /* Adopting a socket invalidates it, do not rely on it directly to carry any data */ - WebSocket *webSocket = (WebSocket *) us_socket_context_adopt_socket(SSL, - (us_socket_context_t *) webSocketContext, (us_socket_t *) this, sizeof(WebSocketData) + sizeof(UserData)); - - /* For whatever reason we were corked, update cork to the new socket */ - if (wasCorked) { - webSocket->AsyncSocket::corkUnchecked(); - } - - /* Initialize websocket with any moved backpressure intact */ - webSocket->init(perMessageDeflate, compressOptions, std::move(backpressure)); + /* Manually upgrade to WebSocket. Typically called in upgrade handler. + * Immediately calls open handler. NOTE: Will invalidate 'this' as socket + * might change location in memory. Throw away after use. */ + template + void upgrade(UserData &&userData, std::string_view secWebSocketKey, + std::string_view secWebSocketProtocol, + std::string_view secWebSocketExtensions, + struct us_socket_context_t *webSocketContext) { + /* Extract needed parameters from WebSocketContextData */ + WebSocketContextData *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, webSocketContext); + + /* Note: OpenSSL can be used here to speed this up somewhat */ + char secWebSocketAccept[29] = {}; + WebSocketHandshake::generate(secWebSocketKey.data(), secWebSocketAccept); + + writeStatus("101 Switching Protocols") + ->writeHeader("Upgrade", "websocket") + ->writeHeader("Connection", "Upgrade") + ->writeHeader("Sec-WebSocket-Accept", secWebSocketAccept); + + /* Select first subprotocol if present */ + if (secWebSocketProtocol.length()) { + writeHeader( + "Sec-WebSocket-Protocol", + secWebSocketProtocol.substr(0, secWebSocketProtocol.find(','))); + } - /* We should only mark this if inside the parser; if upgrading "async" we cannot set this */ - HttpContextData *httpContextData = httpContext->getSocketContextData(); - if (httpContextData->isParsingHttp) { - /* We need to tell the Http parser that we changed socket */ - httpContextData->upgradedWebSocket = webSocket; + /* Negotiate compression */ + bool perMessageDeflate = false; + CompressOptions compressOptions = CompressOptions::DISABLED; + if (secWebSocketExtensions.length() && + webSocketContextData->compression != DISABLED) { + /* Make sure to map SHARED_DECOMPRESSOR to windowBits = 0, not 1 */ + int wantedInflationWindow = 0; + if ((webSocketContextData->compression & + CompressOptions::_DECOMPRESSOR_MASK) != + CompressOptions::SHARED_DECOMPRESSOR) { + wantedInflationWindow = (webSocketContextData->compression & + CompressOptions::_DECOMPRESSOR_MASK) >> + 8; + } + + /* Map from selected compressor (this automatically maps SHARED_COMPRESSOR + * to windowBits 0, not 1) */ + int wantedCompressionWindow = (webSocketContextData->compression & + CompressOptions::_COMPRESSOR_MASK) >> + 4; + + auto [negCompression, negCompressionWindow, negInflationWindow, + negResponse] = + negotiateCompression(true, wantedCompressionWindow, + wantedInflationWindow, secWebSocketExtensions); + + if (negCompression) { + perMessageDeflate = true; + + /* Map from negotiated windowBits to compressor and decompressor */ + if (negCompressionWindow == 0) { + compressOptions = CompressOptions::SHARED_COMPRESSOR; + } else { + compressOptions = + (CompressOptions)((uint32_t)(negCompressionWindow << 4) | + (uint32_t)(negCompressionWindow - 7)); + + /* If we are dedicated and have the 3kb then correct any 4kb to 3kb, + * (they both share the windowBits = 9) */ + if (webSocketContextData->compression & DEDICATED_COMPRESSOR_3KB) { + compressOptions = DEDICATED_COMPRESSOR_3KB; + } } - /* Arm maxLifetime timeout */ - us_socket_long_timeout(SSL, (us_socket_t *) webSocket, webSocketContextData->maxLifetime); - - /* Arm idleTimeout */ - us_socket_timeout(SSL, (us_socket_t *) webSocket, webSocketContextData->idleTimeoutComponents.first); - - /* Move construct the UserData right before calling open handler */ - new (webSocket->getUserData()) UserData(std::move(userData)); - - /* Emit open event and start the timeout */ - if (webSocketContextData->openHandler) { - webSocketContextData->openHandler(webSocket); + /* Here we modify the above compression with negotiated decompressor */ + if (negInflationWindow == 0) { + compressOptions = CompressOptions( + compressOptions | CompressOptions::SHARED_DECOMPRESSOR); + } else { + compressOptions = + CompressOptions(compressOptions | (negInflationWindow << 8)); } - } - /* Immediately terminate this Http response */ - using Super::close; - - /* See AsyncSocket */ - using Super::getRemoteAddress; - using Super::getRemoteAddressAsText; - using Super::getNativeHandle; - - /* Throttle reads and writes */ - HttpResponse *pause() { - Super::pause(); - Super::timeout(0); - return this; + writeHeader("Sec-WebSocket-Extensions", negResponse); + } } - HttpResponse *resume() { - Super::resume(); - Super::timeout(HTTP_TIMEOUT_S); - return this; - } + internalEnd({nullptr, 0}, 0, false, false); - /* Note: Headers are not checked in regards to timeout. - * We only check when you actively push data or end the request */ + /* Grab the httpContext from res */ + HttpContext *httpContext = + (HttpContext *)us_socket_context(SSL, (struct us_socket_t *)this); - /* Write 100 Continue, can be done any amount of times */ - HttpResponse *writeContinue() { - Super::write("HTTP/1.1 100 Continue\r\n\r\n", 25); - return this; - } + /* Move any backpressure out of HttpResponse */ + BackPressure backpressure( + std::move(((AsyncSocketData *)getHttpResponseData())->buffer)); - /* Write the HTTP status */ - HttpResponse *writeStatus(std::string_view status) { - HttpResponseData *httpResponseData = getHttpResponseData(); + /* Destroy HttpResponseData */ + getHttpResponseData()->~HttpResponseData(); - /* Do not allow writing more than one status */ - if (httpResponseData->state & HttpResponseData::HTTP_STATUS_CALLED) { - return this; - } + /* Before we adopt and potentially change socket, check if we are corked */ + bool wasCorked = Super::isCorked(); - /* Update status */ - httpResponseData->state |= HttpResponseData::HTTP_STATUS_CALLED; + /* Adopting a socket invalidates it, do not rely on it directly to carry any + * data */ + WebSocket *webSocket = + (WebSocket *)us_socket_context_adopt_socket( + SSL, (us_socket_context_t *)webSocketContext, (us_socket_t *)this, + sizeof(WebSocketData) + sizeof(UserData)); - Super::write("HTTP/1.1 ", 9); - Super::write(status.data(), (int) status.length()); - Super::write("\r\n", 2); - return this; + /* For whatever reason we were corked, update cork to the new socket */ + if (wasCorked) { + webSocket->AsyncSocket::corkUnchecked(); } - /* Write an HTTP header with string value */ - HttpResponse *writeHeader(std::string_view key, std::string_view value) { - writeStatus(HTTP_200_OK); + /* Initialize websocket with any moved backpressure intact */ + webSocket->init(perMessageDeflate, compressOptions, + std::move(backpressure)); - Super::write(key.data(), (int) key.length()); - Super::write(": ", 2); - Super::write(value.data(), (int) value.length()); - Super::write("\r\n", 2); - return this; + /* We should only mark this if inside the parser; if upgrading "async" we + * cannot set this */ + HttpContextData *httpContextData = httpContext->getSocketContextData(); + if (httpContextData->isParsingHttp) { + /* We need to tell the Http parser that we changed socket */ + httpContextData->upgradedWebSocket = webSocket; } - /* Write an HTTP header with unsigned int value */ - HttpResponse *writeHeader(std::string_view key, uint64_t value) { - writeStatus(HTTP_200_OK); + /* Arm maxLifetime timeout */ + us_socket_long_timeout(SSL, (us_socket_t *)webSocket, + webSocketContextData->maxLifetime); - Super::write(key.data(), (int) key.length()); - Super::write(": ", 2); - writeUnsigned64(value); - Super::write("\r\n", 2); - return this; - } + /* Arm idleTimeout */ + us_socket_timeout(SSL, (us_socket_t *)webSocket, + webSocketContextData->idleTimeoutComponents.first); - /* End without a body (no content-length) or end with a spoofed content-length. */ - void endWithoutBody(std::optional reportedContentLength = std::nullopt, bool closeConnection = false) { - if (reportedContentLength.has_value()) { - internalEnd({nullptr, 0}, reportedContentLength.value(), false, true, closeConnection); - } else { - internalEnd({nullptr, 0}, 0, false, false, closeConnection); - } - } + /* Move construct the UserData right before calling open handler */ + new (webSocket->getUserData()) UserData(std::move(userData)); - /* End the response with an optional data chunk. Always starts a timeout. */ - void end(std::string_view data = {}, bool closeConnection = false) { - internalEnd(data, data.length(), false, true, closeConnection); + /* Emit open event and start the timeout */ + if (webSocketContextData->openHandler) { + webSocketContextData->openHandler(webSocket); } - - /* Try and end the response. Returns [true, true] on success. - * Starts a timeout in some cases. Returns [ok, hasResponded] */ - std::pair tryEnd(std::string_view data, uintmax_t totalSize = 0, bool closeConnection = false) { - return {internalEnd(data, totalSize, true, true, closeConnection), hasResponded()}; + } + + /* Immediately terminate this Http response */ + using Super::close; + + /* See AsyncSocket */ + using Super::getNativeHandle; + using Super::getRemoteAddress; + using Super::getRemoteAddressAsText; + + /* Throttle reads and writes */ + HttpResponse *pause() { + Super::pause(); + Super::timeout(0); + return this; + } + + HttpResponse *resume() { + Super::resume(); + Super::timeout(HTTP_TIMEOUT_S); + return this; + } + + /* Note: Headers are not checked in regards to timeout. + * We only check when you actively push data or end the request */ + + /* Write 100 Continue, can be done any amount of times */ + HttpResponse *writeContinue() { + Super::write("HTTP/1.1 100 Continue\r\n\r\n", 25); + return this; + } + + /* Write the HTTP status */ + HttpResponse *writeStatus(std::string_view status) { + HttpResponseData *httpResponseData = getHttpResponseData(); + + /* Do not allow writing more than one status */ + if (httpResponseData->state & HttpResponseData::HTTP_STATUS_CALLED) { + return this; } - /* Write parts of the response in chunking fashion. Starts timeout if failed. */ - bool write(std::string_view data) { - writeStatus(HTTP_200_OK); - - /* Do not allow sending 0 chunks, they mark end of response */ - if (!data.length()) { - /* If you called us, then according to you it was fine to call us so it's fine to still call us */ - return true; - } - - HttpResponseData *httpResponseData = getHttpResponseData(); - - if (!(httpResponseData->state & HttpResponseData::HTTP_WRITE_CALLED)) { - /* Write mark on first call to write */ - writeMark(); - - writeHeader("Transfer-Encoding", "chunked"); - httpResponseData->state |= HttpResponseData::HTTP_WRITE_CALLED; - } - - Super::write("\r\n", 2); - writeUnsignedHex((unsigned int) data.length()); - Super::write("\r\n", 2); - - auto [written, failed] = Super::write(data.data(), (int) data.length()); - if (failed) { - Super::timeout(HTTP_TIMEOUT_S); - } - - /* If we did not fail the write, accept more */ - return !failed; + /* Update status */ + httpResponseData->state |= HttpResponseData::HTTP_STATUS_CALLED; + + Super::write("HTTP/1.1 ", 9); + Super::write(status.data(), (int)status.length()); + Super::write("\r\n", 2); + return this; + } + + /* Write an HTTP header with string value */ + HttpResponse *writeHeader(std::string_view key, std::string_view value) { + writeStatus(HTTP_200_OK); + + Super::write(key.data(), (int)key.length()); + Super::write(": ", 2); + Super::write(value.data(), (int)value.length()); + Super::write("\r\n", 2); + return this; + } + + /* Write an HTTP header with unsigned int value */ + HttpResponse *writeHeader(std::string_view key, uint64_t value) { + writeStatus(HTTP_200_OK); + + Super::write(key.data(), (int)key.length()); + Super::write(": ", 2); + writeUnsigned64(value); + Super::write("\r\n", 2); + return this; + } + + /* End without a body (no content-length) or end with a spoofed + * content-length. */ + void endWithoutBody( + std::optional reportedContentLength = std::nullopt, + bool closeConnection = false) { + if (reportedContentLength.has_value()) { + internalEnd({nullptr, 0}, reportedContentLength.value(), false, true, + closeConnection); + } else { + internalEnd({nullptr, 0}, 0, false, false, closeConnection); } - - /* Get the current byte write offset for this Http response */ - uintmax_t getWriteOffset() { - HttpResponseData *httpResponseData = getHttpResponseData(); - - return httpResponseData->offset; + } + + /* End the response with an optional data chunk. Always starts a timeout. */ + void end(std::string_view data = {}, bool closeConnection = false) { + internalEnd(data, data.length(), false, true, closeConnection); + } + + /* Try and end the response. Returns [true, true] on success. + * Starts a timeout in some cases. Returns [ok, hasResponded] */ + std::pair tryEnd(std::string_view data, uintmax_t totalSize = 0, + bool closeConnection = false) { + return {internalEnd(data, totalSize, true, true, closeConnection), + hasResponded()}; + } + + /* Write parts of the response in chunking fashion. Starts timeout if failed. + */ + bool write(std::string_view data) { + writeStatus(HTTP_200_OK); + + /* Do not allow sending 0 chunks, they mark end of response */ + if (!data.length()) { + /* If you called us, then according to you it was fine to call us so it's + * fine to still call us */ + return true; } - /* If you are messing around with sendfile you might want to override the offset. */ - void overrideWriteOffset(uintmax_t offset) { - HttpResponseData *httpResponseData = getHttpResponseData(); - - httpResponseData->offset = offset; - } + HttpResponseData *httpResponseData = getHttpResponseData(); - /* Checking if we have fully responded and are ready for another request */ - bool hasResponded() { - HttpResponseData *httpResponseData = getHttpResponseData(); + if (!(httpResponseData->state & HttpResponseData::HTTP_WRITE_CALLED)) { + /* Write mark on first call to write */ + writeMark(); - return !(httpResponseData->state & HttpResponseData::HTTP_RESPONSE_PENDING); + writeHeader("Transfer-Encoding", "chunked"); + httpResponseData->state |= HttpResponseData::HTTP_WRITE_CALLED; } - /* Corks the response if possible. Leaves already corked socket be. */ - HttpResponse *cork(MoveOnlyFunction &&handler) { - if (!Super::isCorked() && Super::canCork()) { - LoopData *loopData = Super::getLoopData(); - Super::cork(); - handler(); - - /* The only way we could possibly have changed the corked socket during handler call, would be if - * the HTTP socket was upgraded to WebSocket and caused a realloc. Because of this we cannot use "this" - * from here downwards. The corking is done with corkUnchecked() in upgrade. It steals cork. */ - auto *newCorkedSocket = loopData->corkedSocket; - - /* If nobody is corked, it means most probably that large amounts of data has - * been written and the cork buffer has already been sent off and uncorked. - * We are done here, if that is the case. */ - if (!newCorkedSocket) { - return this; - } - - /* Timeout on uncork failure, since most writes will succeed while corked */ - auto [written, failed] = static_cast(newCorkedSocket)->uncork(); + Super::write("\r\n", 2); + writeUnsignedHex((unsigned int)data.length()); + Super::write("\r\n", 2); - /* If we are no longer an HTTP socket then early return the new "this". - * We don't want to even overwrite timeout as it is set in upgrade already. */ - if (this != newCorkedSocket) { - return static_cast(newCorkedSocket); - } - - if (failed) { - /* For now we only have one single timeout so let's use it */ - /* This behavior should equal the behavior in HttpContext when uncorking fails */ - Super::timeout(HTTP_TIMEOUT_S); - } - - /* If we have no backbuffer and we are connection close and we responded fully then close */ - HttpResponseData *httpResponseData = getHttpResponseData(); - if (httpResponseData->state & HttpResponseData::HTTP_CONNECTION_CLOSE) { - if ((httpResponseData->state & HttpResponseData::HTTP_RESPONSE_PENDING) == 0) { - if (((AsyncSocket *) this)->getBufferedAmount() == 0) { - ((AsyncSocket *) this)->shutdown(); - /* We need to force close after sending FIN since we want to hinder - * clients from keeping to send their huge data */ - ((AsyncSocket *) this)->close(); - } - } - } - } else { - /* We are already corked, or can't cork so let's just call the handler */ - handler(); - } + auto [written, failed] = Super::write(data.data(), (int)data.length()); + if (failed) { + Super::timeout(HTTP_TIMEOUT_S); + } + /* If we did not fail the write, accept more */ + return !failed; + } + + /* Get the current byte write offset for this Http response */ + uintmax_t getWriteOffset() { + HttpResponseData *httpResponseData = getHttpResponseData(); + + return httpResponseData->offset; + } + + /* If you are messing around with sendfile you might want to override the + * offset. */ + void overrideWriteOffset(uintmax_t offset) { + HttpResponseData *httpResponseData = getHttpResponseData(); + + httpResponseData->offset = offset; + } + + /* Checking if we have fully responded and are ready for another request */ + bool hasResponded() { + HttpResponseData *httpResponseData = getHttpResponseData(); + + return !(httpResponseData->state & + HttpResponseData::HTTP_RESPONSE_PENDING); + } + + /* Corks the response if possible. Leaves already corked socket be. */ + HttpResponse *cork(MoveOnlyFunction &&handler) { + if (!Super::isCorked() && Super::canCork()) { + LoopData *loopData = Super::getLoopData(); + Super::cork(); + handler(); + + /* The only way we could possibly have changed the corked socket during + * handler call, would be if the HTTP socket was upgraded to WebSocket and + * caused a realloc. Because of this we cannot use "this" from here + * downwards. The corking is done with corkUnchecked() in upgrade. It + * steals cork. */ + auto *newCorkedSocket = loopData->corkedSocket; + + /* If nobody is corked, it means most probably that large amounts of data + * has been written and the cork buffer has already been sent off and + * uncorked. We are done here, if that is the case. */ + if (!newCorkedSocket) { return this; + } + + /* Timeout on uncork failure, since most writes will succeed while corked + */ + auto [written, failed] = static_cast(newCorkedSocket)->uncork(); + + /* If we are no longer an HTTP socket then early return the new "this". + * We don't want to even overwrite timeout as it is set in upgrade + * already. */ + if (this != newCorkedSocket) { + return static_cast(newCorkedSocket); + } + + if (failed) { + /* For now we only have one single timeout so let's use it */ + /* This behavior should equal the behavior in HttpContext when uncorking + * fails */ + Super::timeout(HTTP_TIMEOUT_S); + } + + /* If we have no backbuffer and we are connection close and we responded + * fully then close */ + HttpResponseData *httpResponseData = getHttpResponseData(); + if (httpResponseData->state & + HttpResponseData::HTTP_CONNECTION_CLOSE) { + if ((httpResponseData->state & + HttpResponseData::HTTP_RESPONSE_PENDING) == 0) { + if (((AsyncSocket *)this)->getBufferedAmount() == 0) { + ((AsyncSocket *)this)->shutdown(); + /* We need to force close after sending FIN since we want to hinder + * clients from keeping to send their huge data */ + ((AsyncSocket *)this)->close(); + } + } + } + } else { + /* We are already corked, or can't cork so let's just call the handler */ + handler(); } - /* Attach handler for writable HTTP response */ - HttpResponse *onWritable(MoveOnlyFunction &&handler) { - HttpResponseData *httpResponseData = getHttpResponseData(); + return this; + } - httpResponseData->onWritable = std::move(handler); - return this; - } + /* Attach handler for writable HTTP response */ + HttpResponse *onWritable(MoveOnlyFunction &&handler) { + HttpResponseData *httpResponseData = getHttpResponseData(); - /* Attach handler for aborted HTTP request */ - HttpResponse *onAborted(MoveOnlyFunction &&handler) { - HttpResponseData *httpResponseData = getHttpResponseData(); + httpResponseData->onWritable = std::move(handler); + return this; + } - httpResponseData->onAborted = std::move(handler); - return this; - } + /* Attach handler for aborted HTTP request */ + HttpResponse *onAborted(MoveOnlyFunction &&handler) { + HttpResponseData *httpResponseData = getHttpResponseData(); - /* Attach a read handler for data sent. Will be called with FIN set true if last segment. */ - void onData(MoveOnlyFunction &&handler) { - HttpResponseData *data = getHttpResponseData(); - data->inStream = std::move(handler); + httpResponseData->onAborted = std::move(handler); + return this; + } - /* Always reset this counter here */ - data->received_bytes_per_timeout = 0; - } + /* Attach a read handler for data sent. Will be called with FIN set true if + * last segment. */ + void onData(MoveOnlyFunction &&handler) { + HttpResponseData *data = getHttpResponseData(); + data->inStream = std::move(handler); + + /* Always reset this counter here */ + data->received_bytes_per_timeout = 0; + } }; -} +} // namespace uWS -#endif // UWS_HTTPRESPONSE_H +#endif // UWS_HTTPRESPONSE_H diff --git a/vendor/hydra/vendor/uwebsockets/src/HttpResponseData.h b/vendor/hydra/vendor/uwebsockets/src/HttpResponseData.h index 1e7604c2..919d657a 100644 --- a/vendor/hydra/vendor/uwebsockets/src/HttpResponseData.h +++ b/vendor/hydra/vendor/uwebsockets/src/HttpResponseData.h @@ -20,76 +20,82 @@ /* This data belongs to the HttpResponse */ -#include "HttpParser.h" #include "AsyncSocketData.h" -#include "ProxyParser.h" - +#include "HttpParser.h" #include "MoveOnlyFunction.h" +#include "ProxyParser.h" namespace uWS { template struct HttpResponseData : AsyncSocketData, HttpParser { - template friend struct HttpResponse; - template friend struct HttpContext; - - /* When we are done with a response we mark it like so */ - void markDone() { - onAborted = nullptr; - /* Also remove onWritable so that we do not emit when draining behind the scenes. */ - onWritable = nullptr; - - /* We are done with this request */ - state &= ~HttpResponseData::HTTP_RESPONSE_PENDING; + template + friend struct HttpResponse; + template + friend struct HttpContext; + + /* When we are done with a response we mark it like so */ + void markDone() { + onAborted = nullptr; + /* Also remove onWritable so that we do not emit when draining behind the + * scenes. */ + onWritable = nullptr; + + /* We are done with this request */ + state &= ~HttpResponseData::HTTP_RESPONSE_PENDING; + } + + /* Caller of onWritable. It is possible onWritable calls markDone so we need + * to borrow it. */ + bool callOnWritable(uintmax_t offset) { + /* Borrow real onWritable */ + MoveOnlyFunction borrowedOnWritable = + std::move(onWritable); + + /* Set onWritable to placeholder */ + onWritable = [](uintmax_t) { return true; }; + + /* Run borrowed onWritable */ + bool ret = borrowedOnWritable(offset); + + /* If we still have onWritable (the placeholder) then move back the real one + */ + if (onWritable) { + /* We haven't reset onWritable, so give it back */ + onWritable = std::move(borrowedOnWritable); } - /* Caller of onWritable. It is possible onWritable calls markDone so we need to borrow it. */ - bool callOnWritable(uintmax_t offset) { - /* Borrow real onWritable */ - MoveOnlyFunction borrowedOnWritable = std::move(onWritable); + return ret; + } - /* Set onWritable to placeholder */ - onWritable = [](uintmax_t) {return true;}; + private: + /* Bits of status */ + enum { + HTTP_STATUS_CALLED = 1, // used + HTTP_WRITE_CALLED = 2, // used + HTTP_END_CALLED = 4, // used + HTTP_RESPONSE_PENDING = 8, // used + HTTP_CONNECTION_CLOSE = 16 // used + }; - /* Run borrowed onWritable */ - bool ret = borrowedOnWritable(offset); + /* Per socket event handlers */ + MoveOnlyFunction onWritable; + MoveOnlyFunction onAborted; + MoveOnlyFunction inStream; // onData + /* Outgoing offset */ + uintmax_t offset = 0; - /* If we still have onWritable (the placeholder) then move back the real one */ - if (onWritable) { - /* We haven't reset onWritable, so give it back */ - onWritable = std::move(borrowedOnWritable); - } + /* Let's track number of bytes since last timeout reset in data handler */ + unsigned int received_bytes_per_timeout = 0; - return ret; - } -private: - /* Bits of status */ - enum { - HTTP_STATUS_CALLED = 1, // used - HTTP_WRITE_CALLED = 2, // used - HTTP_END_CALLED = 4, // used - HTTP_RESPONSE_PENDING = 8, // used - HTTP_CONNECTION_CLOSE = 16 // used - }; - - /* Per socket event handlers */ - MoveOnlyFunction onWritable; - MoveOnlyFunction onAborted; - MoveOnlyFunction inStream; // onData - /* Outgoing offset */ - uintmax_t offset = 0; - - /* Let's track number of bytes since last timeout reset in data handler */ - unsigned int received_bytes_per_timeout = 0; - - /* Current state (content-length sent, status sent, write called, etc */ - int state = 0; + /* Current state (content-length sent, status sent, write called, etc */ + int state = 0; #ifdef UWS_WITH_PROXY - ProxyParser proxyParser; + ProxyParser proxyParser; #endif }; -} +} // namespace uWS -#endif // UWS_HTTPRESPONSEDATA_H +#endif // UWS_HTTPRESPONSEDATA_H diff --git a/vendor/hydra/vendor/uwebsockets/src/HttpRouter.h b/vendor/hydra/vendor/uwebsockets/src/HttpRouter.h index 39ebb2e7..9b46bf79 100644 --- a/vendor/hydra/vendor/uwebsockets/src/HttpRouter.h +++ b/vendor/hydra/vendor/uwebsockets/src/HttpRouter.h @@ -18,16 +18,15 @@ #ifndef UWS_HTTPROUTER_HPP #define UWS_HTTPROUTER_HPP -#include -#include -#include -#include -#include #include +#include +#include +#include #include +#include +#include #include - -#include +#include #include "MoveOnlyFunction.h" @@ -35,346 +34,363 @@ namespace uWS { template struct HttpRouter { - static constexpr std::string_view ANY_METHOD_TOKEN = "*"; - static const uint32_t HIGH_PRIORITY = 0xd0000000, MEDIUM_PRIORITY = 0xe0000000, LOW_PRIORITY = 0xf0000000; - -private: - USERDATA userData; - static const unsigned int MAX_URL_SEGMENTS = 100; - - /* Handler ids are 32-bit */ - static const uint32_t HANDLER_MASK = 0x0fffffff; - - /* List of handlers */ - std::vector> handlers; - - /* Current URL cache */ - std::string_view currentUrl; - std::string_view urlSegmentVector[MAX_URL_SEGMENTS]; - int urlSegmentTop; - - /* The matching tree */ - struct Node { - std::string name; - std::vector> children; - std::vector handlers; - bool isHighPriority; - - Node(std::string name) : name(name) {} - } root = {"rootNode"}; - - /* Sort wildcards after alphanum */ - int lexicalOrder(std::string &name) { - if (!name.length()) { - return 2; - } - if (name[0] == ':') { - return 1; - } - if (name[0] == '*') { - return 0; - } - return 2; + static constexpr std::string_view ANY_METHOD_TOKEN = "*"; + static const uint32_t HIGH_PRIORITY = 0xd0000000, + MEDIUM_PRIORITY = 0xe0000000, LOW_PRIORITY = 0xf0000000; + + private: + USERDATA userData; + static const unsigned int MAX_URL_SEGMENTS = 100; + + /* Handler ids are 32-bit */ + static const uint32_t HANDLER_MASK = 0x0fffffff; + + /* List of handlers */ + std::vector> handlers; + + /* Current URL cache */ + std::string_view currentUrl; + std::string_view urlSegmentVector[MAX_URL_SEGMENTS]; + int urlSegmentTop; + + /* The matching tree */ + struct Node { + std::string name; + std::vector> children; + std::vector handlers; + bool isHighPriority; + + Node(std::string name) : name(name) {} + } root = {"rootNode"}; + + /* Sort wildcards after alphanum */ + int lexicalOrder(std::string &name) { + if (!name.length()) { + return 2; } - - /* Advance from parent to child, adding child if necessary */ - Node *getNode(Node *parent, std::string child, bool isHighPriority) { - for (std::unique_ptr &node : parent->children) { - if (node->name == child && node->isHighPriority == isHighPriority) { - return node.get(); - } - } - - /* Insert sorted, but keep order if parent is root (we sort methods by priority elsewhere) */ - std::unique_ptr newNode(new Node(child)); - newNode->isHighPriority = isHighPriority; - return parent->children.emplace(std::upper_bound(parent->children.begin(), parent->children.end(), newNode, [parent, this](auto &a, auto &b) { - - if (a->isHighPriority != b->isHighPriority) { - return a->isHighPriority; - } - - return b->name.length() && (parent != &root) && (lexicalOrder(b->name) < lexicalOrder(a->name)); - }), std::move(newNode))->get(); + if (name[0] == ':') { + return 1; } - - /* Basically a pre-allocated stack */ - struct RouteParameters { - friend struct HttpRouter; - private: - std::string_view params[MAX_URL_SEGMENTS]; - int paramsTop; - - void reset() { - paramsTop = -1; - } - - void push(std::string_view param) { - /* We check these bounds indirectly via the urlSegments limit */ - params[++paramsTop] = param; - } - - void pop() { - /* Same here, we cannot pop outside */ - paramsTop--; - } - } routeParameters; - - /* Set URL for router. Will reset any URL cache */ - inline void setUrl(std::string_view url) { - - /* Todo: URL may also start with "http://domain/" or "*", not only "/" */ - - /* We expect to stand on a slash */ - currentUrl = url; - urlSegmentTop = -1; + if (name[0] == '*') { + return 0; + } + return 2; + } + + /* Advance from parent to child, adding child if necessary */ + Node *getNode(Node *parent, std::string child, bool isHighPriority) { + for (std::unique_ptr &node : parent->children) { + if (node->name == child && node->isHighPriority == isHighPriority) { + return node.get(); + } } - /* Lazily parse or read from cache */ - inline std::pair getUrlSegment(int urlSegment) { - if (urlSegment > urlSegmentTop) { - /* Signal as STOP when we have no more URL or stack space */ - if (!currentUrl.length() || urlSegment > int(MAX_URL_SEGMENTS - 1)) { - return {{}, true}; - } - - /* We always stand on a slash here, so step over it */ - currentUrl.remove_prefix(1); - - auto segmentLength = currentUrl.find('/'); - if (segmentLength == std::string::npos) { - segmentLength = currentUrl.length(); - - /* Push to url segment vector */ - urlSegmentVector[urlSegment] = currentUrl.substr(0, segmentLength); - urlSegmentTop++; - - /* Update currentUrl */ - currentUrl = currentUrl.substr(segmentLength); - } else { - /* Push to url segment vector */ - urlSegmentVector[urlSegment] = currentUrl.substr(0, segmentLength); - urlSegmentTop++; + /* Insert sorted, but keep order if parent is root (we sort methods by + * priority elsewhere) */ + std::unique_ptr newNode(new Node(child)); + newNode->isHighPriority = isHighPriority; + return parent->children + .emplace(std::upper_bound( + parent->children.begin(), parent->children.end(), newNode, + [parent, this](auto &a, auto &b) { + if (a->isHighPriority != b->isHighPriority) { + return a->isHighPriority; + } + + return b->name.length() && (parent != &root) && + (lexicalOrder(b->name) < lexicalOrder(a->name)); + }), + std::move(newNode)) + ->get(); + } + + /* Basically a pre-allocated stack */ + struct RouteParameters { + friend struct HttpRouter; + + private: + std::string_view params[MAX_URL_SEGMENTS]; + int paramsTop; + + void reset() { paramsTop = -1; } + + void push(std::string_view param) { + /* We check these bounds indirectly via the urlSegments limit */ + params[++paramsTop] = param; + } - /* Update currentUrl */ - currentUrl = currentUrl.substr(segmentLength); - } + void pop() { + /* Same here, we cannot pop outside */ + paramsTop--; + } + } routeParameters; + + /* Set URL for router. Will reset any URL cache */ + inline void setUrl(std::string_view url) { + /* Todo: URL may also start with "http://domain/" or "*", not only "/" */ + + /* We expect to stand on a slash */ + currentUrl = url; + urlSegmentTop = -1; + } + + /* Lazily parse or read from cache */ + inline std::pair getUrlSegment(int urlSegment) { + if (urlSegment > urlSegmentTop) { + /* Signal as STOP when we have no more URL or stack space */ + if (!currentUrl.length() || urlSegment > int(MAX_URL_SEGMENTS - 1)) { + return {{}, true}; + } + + /* We always stand on a slash here, so step over it */ + currentUrl.remove_prefix(1); + + auto segmentLength = currentUrl.find('/'); + if (segmentLength == std::string::npos) { + segmentLength = currentUrl.length(); + + /* Push to url segment vector */ + urlSegmentVector[urlSegment] = currentUrl.substr(0, segmentLength); + urlSegmentTop++; + + /* Update currentUrl */ + currentUrl = currentUrl.substr(segmentLength); + } else { + /* Push to url segment vector */ + urlSegmentVector[urlSegment] = currentUrl.substr(0, segmentLength); + urlSegmentTop++; + + /* Update currentUrl */ + currentUrl = currentUrl.substr(segmentLength); + } + } + /* In any case we return it */ + return {urlSegmentVector[urlSegment], false}; + } + + /* Executes as many handlers it can */ + bool executeHandlers(Node *parent, int urlSegment, USERDATA &userData) { + auto [segment, isStop] = getUrlSegment(urlSegment); + + /* If we are on STOP, return where we may stand */ + if (isStop) { + /* We have reached accross the entire URL with no stoppage, execute */ + for (uint32_t handler : parent->handlers) { + if (handlers[handler & HANDLER_MASK](this)) { + return true; } - /* In any case we return it */ - return {urlSegmentVector[urlSegment], false}; + } + /* We reached the end, so go back */ + return false; } - /* Executes as many handlers it can */ - bool executeHandlers(Node *parent, int urlSegment, USERDATA &userData) { - - auto [segment, isStop] = getUrlSegment(urlSegment); - - /* If we are on STOP, return where we may stand */ - if (isStop) { - /* We have reached accross the entire URL with no stoppage, execute */ - for (uint32_t handler : parent->handlers) { - if (handlers[handler & HANDLER_MASK](this)) { - return true; - } - } - /* We reached the end, so go back */ - return false; + for (auto &p : parent->children) { + if (p->name.length() && p->name[0] == '*') { + /* Wildcard match (can be seen as a shortcut) */ + for (uint32_t handler : p->handlers) { + if (handlers[handler & HANDLER_MASK](this)) { + return true; + } } - - for (auto &p : parent->children) { - if (p->name.length() && p->name[0] == '*') { - /* Wildcard match (can be seen as a shortcut) */ - for (uint32_t handler : p->handlers) { - if (handlers[handler & HANDLER_MASK](this)) { - return true; - } - } - } else if (p->name.length() && p->name[0] == ':' && segment.length()) { - /* Parameter match */ - routeParameters.push(segment); - if (executeHandlers(p.get(), urlSegment + 1, userData)) { - return true; - } - routeParameters.pop(); - } else if (p->name == segment) { - /* Static match */ - if (executeHandlers(p.get(), urlSegment + 1, userData)) { - return true; - } - } + } else if (p->name.length() && p->name[0] == ':' && segment.length()) { + /* Parameter match */ + routeParameters.push(segment); + if (executeHandlers(p.get(), urlSegment + 1, userData)) { + return true; + } + routeParameters.pop(); + } else if (p->name == segment) { + /* Static match */ + if (executeHandlers(p.get(), urlSegment + 1, userData)) { + return true; } - return false; + } } - - /* Scans for one matching handler, returning the handler and its priority or UINT32_MAX for not found */ - uint32_t findHandler(std::string method, std::string pattern, uint32_t priority) { - for (std::unique_ptr &node : root.children) { - if (method == node->name) { - setUrl(pattern); - Node *n = node.get(); - for (int i = 0; !getUrlSegment(i).second; i++) { - /* Go to next segment or quit */ - std::string segment = std::string(getUrlSegment(i).first); - Node *next = nullptr; - for (std::unique_ptr &child : n->children) { - if (child->name == segment && child->isHighPriority == (priority == HIGH_PRIORITY)) { - next = child.get(); - break; - } - } - if (!next) { - return UINT32_MAX; - } - n = next; - } - /* Seek for a priority match in the found node */ - for (unsigned int i = 0; i < n->handlers.size(); i++) { - if ((n->handlers[i] & ~HANDLER_MASK) == priority) { - return n->handlers[i]; - } - } - return UINT32_MAX; + return false; + } + + /* Scans for one matching handler, returning the handler and its priority or + * UINT32_MAX for not found */ + uint32_t findHandler(std::string method, std::string pattern, + uint32_t priority) { + for (std::unique_ptr &node : root.children) { + if (method == node->name) { + setUrl(pattern); + Node *n = node.get(); + for (int i = 0; !getUrlSegment(i).second; i++) { + /* Go to next segment or quit */ + std::string segment = std::string(getUrlSegment(i).first); + Node *next = nullptr; + for (std::unique_ptr &child : n->children) { + if (child->name == segment && + child->isHighPriority == (priority == HIGH_PRIORITY)) { + next = child.get(); + break; } + } + if (!next) { + return UINT32_MAX; + } + n = next; + } + /* Seek for a priority match in the found node */ + for (unsigned int i = 0; i < n->handlers.size(); i++) { + if ((n->handlers[i] & ~HANDLER_MASK) == priority) { + return n->handlers[i]; + } } return UINT32_MAX; + } } - -public: - HttpRouter() { - /* Always have ANY route */ - getNode(&root, std::string(ANY_METHOD_TOKEN.data(), ANY_METHOD_TOKEN.length()), false); - } - - std::pair getParameters() { - return {routeParameters.paramsTop, routeParameters.params}; + return UINT32_MAX; + } + + public: + HttpRouter() { + /* Always have ANY route */ + getNode(&root, + std::string(ANY_METHOD_TOKEN.data(), ANY_METHOD_TOKEN.length()), + false); + } + + std::pair getParameters() { + return {routeParameters.paramsTop, routeParameters.params}; + } + + USERDATA &getUserData() { return userData; } + + /* Fast path */ + bool route(std::string_view method, std::string_view url) { + /* Reset url parsing cache */ + setUrl(url); + routeParameters.reset(); + + /* Begin by finding the method node */ + for (auto &p : root.children) { + if (p->name == method) { + /* Then route the url */ + if (executeHandlers(p.get(), 0, userData)) { + return true; + } else { + break; + } + } } - USERDATA &getUserData() { - return userData; + /* Always test any route last */ + return executeHandlers(root.children.back().get(), 0, userData); + } + + /* Adds the corresponding entires in matching tree and handler list */ + void add(std::vector methods, std::string pattern, + MoveOnlyFunction &&handler, + uint32_t priority = MEDIUM_PRIORITY) { + /* First remove existing handler */ + remove(methods[0], pattern, priority); + + for (std::string method : methods) { + /* Lookup method */ + Node *node = getNode(&root, method, false); + /* Iterate over all segments */ + setUrl(pattern); + for (int i = 0; !getUrlSegment(i).second; i++) { + std::string strippedSegment(getUrlSegment(i).first); + if (strippedSegment.length() && strippedSegment[0] == ':') { + /* Parameter routes must be named only : */ + strippedSegment = ":"; + } + node = getNode(node, strippedSegment, priority == HIGH_PRIORITY); + } + /* Insert handler in order sorted by priority (most significant 1 byte) */ + node->handlers.insert( + std::upper_bound(node->handlers.begin(), node->handlers.end(), + (uint32_t)(priority | handlers.size())), + (uint32_t)(priority | handlers.size())); } - /* Fast path */ - bool route(std::string_view method, std::string_view url) { - /* Reset url parsing cache */ - setUrl(url); - routeParameters.reset(); - - /* Begin by finding the method node */ - for (auto &p : root.children) { - if (p->name == method) { - /* Then route the url */ - if (executeHandlers(p.get(), 0, userData)) { - return true; + /* Alloate this handler */ + handlers.emplace_back(std::move(handler)); + + /* ANY method must be last, GET must be first */ + std::sort(root.children.begin(), root.children.end(), + [](const auto &a, const auto &b) { + /* Assuming the list of methods is unique, non-repeating */ + if (a->name == "GET") { + return true; + } else if (b->name == "GET") { + return false; + } else if (a->name == ANY_METHOD_TOKEN) { + return false; + } else if (b->name == ANY_METHOD_TOKEN) { + return true; } else { - break; + return a->name < b->name; } - } - } - - /* Always test any route last */ - return executeHandlers(root.children.back().get(), 0, userData); + }); + } + + bool cullNode(Node *parent, Node *node, uint32_t handler) { + /* For all children */ + for (unsigned int i = 0; i < node->children.size();) { + /* Optimization todo: only enter those with same isHighPrioirty */ + /* Enter child so we get depth first */ + if (!cullNode(node, node->children[i].get(), handler)) { + /* Only increase if this node was not removed */ + i++; + } } - /* Adds the corresponding entires in matching tree and handler list */ - void add(std::vector methods, std::string pattern, MoveOnlyFunction &&handler, uint32_t priority = MEDIUM_PRIORITY) { - /* First remove existing handler */ - remove(methods[0], pattern, priority); - - for (std::string method : methods) { - /* Lookup method */ - Node *node = getNode(&root, method, false); - /* Iterate over all segments */ - setUrl(pattern); - for (int i = 0; !getUrlSegment(i).second; i++) { - std::string strippedSegment(getUrlSegment(i).first); - if (strippedSegment.length() && strippedSegment[0] == ':') { - /* Parameter routes must be named only : */ - strippedSegment = ":"; - } - node = getNode(node, strippedSegment, priority == HIGH_PRIORITY); - } - /* Insert handler in order sorted by priority (most significant 1 byte) */ - node->handlers.insert(std::upper_bound(node->handlers.begin(), node->handlers.end(), (uint32_t) (priority | handlers.size())), (uint32_t) (priority | handlers.size())); + /* Cull this node (but skip the root node) */ + if (parent /*&& parent != &root*/) { + /* Scan for equal (remove), greater (lower by 1) */ + for (auto it = node->handlers.begin(); it != node->handlers.end();) { + if ((*it & HANDLER_MASK) > (handler & HANDLER_MASK)) { + *it = ((*it & HANDLER_MASK) - 1) | (*it & ~HANDLER_MASK); + } else if (*it == handler) { + it = node->handlers.erase(it); + continue; } - - /* Alloate this handler */ - handlers.emplace_back(std::move(handler)); - - /* ANY method must be last, GET must be first */ - std::sort(root.children.begin(), root.children.end(), [](const auto &a, const auto &b) { - /* Assuming the list of methods is unique, non-repeating */ - if (a->name == "GET") { - return true; - } else if (b->name == "GET") { - return false; - } else if (a->name == ANY_METHOD_TOKEN) { - return false; - } else if (b->name == ANY_METHOD_TOKEN) { - return true; - } else { - return a->name < b->name; - } - }); + it++; + } + + /* If we have no children and no handlers, remove us from the + * parent->children list */ + if (!node->handlers.size() && !node->children.size()) { + parent->children.erase( + std::find_if(parent->children.begin(), parent->children.end(), + [node](const std::unique_ptr &a) { + return a.get() == node; + })); + /* Returning true means we removed node from parent */ + return true; + } } - bool cullNode(Node *parent, Node *node, uint32_t handler) { - /* For all children */ - for (unsigned int i = 0; i < node->children.size(); ) { - /* Optimization todo: only enter those with same isHighPrioirty */ - /* Enter child so we get depth first */ - if (!cullNode(node, node->children[i].get(), handler)) { - /* Only increase if this node was not removed */ - i++; - } - } - - /* Cull this node (but skip the root node) */ - if (parent /*&& parent != &root*/) { - /* Scan for equal (remove), greater (lower by 1) */ - for (auto it = node->handlers.begin(); it != node->handlers.end(); ) { - if ((*it & HANDLER_MASK) > (handler & HANDLER_MASK)) { - *it = ((*it & HANDLER_MASK) - 1) | (*it & ~HANDLER_MASK); - } else if (*it == handler) { - it = node->handlers.erase(it); - continue; - } - it++; - } - - /* If we have no children and no handlers, remove us from the parent->children list */ - if (!node->handlers.size() && !node->children.size()) { - parent->children.erase(std::find_if(parent->children.begin(), parent->children.end(), [node](const std::unique_ptr &a) { - return a.get() == node; - })); - /* Returning true means we removed node from parent */ - return true; - } - } - - return false; + return false; + } + + /* Removes ALL routes with the same handler as can be found with the given + * parameters. Removing a wildcard is done by removing ONE OF the methods the + * wildcard would match with. Example: If wildcard includes POST, GET, PUT, + * you can remove ALL THREE by removing GET. */ + void remove(std::string method, std::string pattern, uint32_t priority) { + uint32_t handler = findHandler(method, pattern, priority); + if (handler == UINT32_MAX) { + /* Not found or already removed, do nothing */ + return; } - /* Removes ALL routes with the same handler as can be found with the given parameters. - * Removing a wildcard is done by removing ONE OF the methods the wildcard would match with. - * Example: If wildcard includes POST, GET, PUT, you can remove ALL THREE by removing GET. */ - void remove(std::string method, std::string pattern, uint32_t priority) { - uint32_t handler = findHandler(method, pattern, priority); - if (handler == UINT32_MAX) { - /* Not found or already removed, do nothing */ - return; - } + /* Cull the entire tree */ + /* For all nodes in depth first tree traveral; + * if node contains handler - remove the handler - + * if node holds no handlers after removal, remove the node and return */ + cullNode(nullptr, &root, handler); - /* Cull the entire tree */ - /* For all nodes in depth first tree traveral; - * if node contains handler - remove the handler - - * if node holds no handlers after removal, remove the node and return */ - cullNode(nullptr, &root, handler); - - /* Now remove the actual handler */ - handlers.erase(handlers.begin() + (handler & HANDLER_MASK)); - } + /* Now remove the actual handler */ + handlers.erase(handlers.begin() + (handler & HANDLER_MASK)); + } }; -} +} // namespace uWS -#endif // UWS_HTTPROUTER_HPP +#endif // UWS_HTTPROUTER_HPP diff --git a/vendor/hydra/vendor/uwebsockets/src/LocalCluster.h b/vendor/hydra/vendor/uwebsockets/src/LocalCluster.h index f59a8d18..909f2305 100644 --- a/vendor/hydra/vendor/uwebsockets/src/LocalCluster.h +++ b/vendor/hydra/vendor/uwebsockets/src/LocalCluster.h @@ -1,8 +1,9 @@ -/* This header is highly experimental and needs refactorings but will do for now */ +/* This header is highly experimental and needs refactorings but will do for now + */ -#include #include #include +#include unsigned int roundRobin = 0; unsigned int hardwareConcurrency = std::thread::hardware_concurrency(); @@ -12,51 +13,50 @@ std::mutex m; namespace uWS { struct LocalCluster { - - //std::vector threads = std::thread::hardware_concurrency(); - //std::vector apps; - //std::mutex m; - - - static void loadBalancer() { - static std::atomic roundRobin = 0; // atomic fetch_add - } - - LocalCluster(SocketContextOptions options = {}, std::function cb = nullptr) { - std::transform(threads.begin(), threads.end(), threads.begin(), [options, &cb](std::thread *) { - - return new std::thread([options, &cb]() { - - // lock this - m.lock(); - apps.emplace_back(new uWS::SSLApp(options)); - uWS::SSLApp *app = apps.back(); - - cb(*app); - - app->preOpen([](struct us_socket_context_t *context, LIBUS_SOCKET_DESCRIPTOR fd) -> LIBUS_SOCKET_DESCRIPTOR { - - /* Distribute this socket in round robin fashion */ - //std::cout << "About to load balance " << fd << " to " << roundRobin << std::endl; - - auto receivingApp = apps[roundRobin]; - apps[roundRobin]->getLoop()->defer([fd, receivingApp]() { - receivingApp->adoptSocket(fd); - }); - - roundRobin = (roundRobin + 1) % hardwareConcurrency; - return (LIBUS_SOCKET_DESCRIPTOR) -1; + // std::vector threads = std::thread::hardware_concurrency(); + // std::vector apps; + // std::mutex m; + + static void loadBalancer() { + static std::atomic roundRobin = 0; // atomic fetch_add + } + + LocalCluster(SocketContextOptions options = {}, + std::function cb = nullptr) { + std::transform( + threads.begin(), threads.end(), threads.begin(), + [options, &cb](std::thread *) { + return new std::thread([options, &cb]() { + // lock this + m.lock(); + apps.emplace_back(new uWS::SSLApp(options)); + uWS::SSLApp *app = apps.back(); + + cb(*app); + + app->preOpen( + [](struct us_socket_context_t *context, + LIBUS_SOCKET_DESCRIPTOR fd) -> LIBUS_SOCKET_DESCRIPTOR { + /* Distribute this socket in round robin fashion */ + // std::cout << "About to load balance " << fd << " to " << + // roundRobin << std::endl; + + auto receivingApp = apps[roundRobin]; + apps[roundRobin]->getLoop()->defer( + [fd, receivingApp]() { receivingApp->adoptSocket(fd); }); + + roundRobin = (roundRobin + 1) % hardwareConcurrency; + return (LIBUS_SOCKET_DESCRIPTOR)-1; }); - m.unlock(); - app->run(); - std::cout << "Fallthrough!" << std::endl; - delete app; - }); + m.unlock(); + app->run(); + std::cout << "Fallthrough!" << std::endl; + delete app; + }); }); - std::for_each(threads.begin(), threads.end(), [](std::thread *t) { - t->join(); - }); - } + std::for_each(threads.begin(), threads.end(), + [](std::thread *t) { t->join(); }); + } }; -} \ No newline at end of file +} // namespace uWS \ No newline at end of file diff --git a/vendor/hydra/vendor/uwebsockets/src/Loop.h b/vendor/hydra/vendor/uwebsockets/src/Loop.h index ce8d3781..66342c8a 100644 --- a/vendor/hydra/vendor/uwebsockets/src/Loop.h +++ b/vendor/hydra/vendor/uwebsockets/src/Loop.h @@ -20,185 +20,193 @@ /* The loop is lazily created per-thread and run with run() */ -#include "LoopData.h" #include + #include +#include "LoopData.h" + namespace uWS { struct Loop { -private: - static void wakeupCb(us_loop_t *loop) { - LoopData *loopData = (LoopData *) us_loop_ext(loop); - - /* Swap current deferQueue */ - loopData->deferMutex.lock(); - int oldDeferQueue = loopData->currentDeferQueue; - loopData->currentDeferQueue = (loopData->currentDeferQueue + 1) % 2; - loopData->deferMutex.unlock(); - - /* Drain the queue */ - for (auto &x : loopData->deferQueues[oldDeferQueue]) { - x(); - } - loopData->deferQueues[oldDeferQueue].clear(); - } - - static void preCb(us_loop_t *loop) { - LoopData *loopData = (LoopData *) us_loop_ext(loop); - - for (auto &p : loopData->preHandlers) { - p.second((Loop *) loop); - } - } - - static void postCb(us_loop_t *loop) { - LoopData *loopData = (LoopData *) us_loop_ext(loop); - - for (auto &p : loopData->postHandlers) { - p.second((Loop *) loop); - } - - /* After every event loop iteration, we must not hold the cork buffer */ - if (loopData->corkedSocket) { - std::cerr << "Error: Cork buffer must not be held across event loop iterations!" << std::endl; - std::terminate(); - } - } - - Loop() = delete; - ~Loop() = default; - - Loop *init() { - new (us_loop_ext((us_loop_t *) this)) LoopData; - return this; - } - - static Loop *create(void *hint) { - Loop *loop = ((Loop *) us_create_loop(hint, wakeupCb, preCb, postCb, sizeof(LoopData)))->init(); - - /* We also need some timers (should live off the one 4 second timer rather) */ - LoopData *loopData = (LoopData *) us_loop_ext((struct us_loop_t *) loop); - loopData->dateTimer = us_create_timer((struct us_loop_t *) loop, 1, sizeof(LoopData *)); - memcpy(us_timer_ext(loopData->dateTimer), &loopData, sizeof(LoopData *)); - us_timer_set(loopData->dateTimer, [](struct us_timer_t *t) { - LoopData *loopData; - memcpy(&loopData, us_timer_ext(t), sizeof(LoopData *)); - loopData->updateDate(); - }, 1000, 1000); - - return loop; - } - - /* What to do with loops created with existingNativeLoop? */ - struct LoopCleaner { - ~LoopCleaner() { - if(loop && cleanMe) { - loop->free(); - } - } - Loop *loop = nullptr; - bool cleanMe = false; - }; - - static LoopCleaner &getLazyLoop() { - static thread_local LoopCleaner lazyLoop; - return lazyLoop; - } - -public: - /* Lazily initializes a per-thread loop and returns it. - * Will automatically free all initialized loops at exit. */ - static Loop *get(void *existingNativeLoop = nullptr) { - if (!getLazyLoop().loop) { - /* If we are given a native loop pointer we pass that to uSockets and let it deal with it */ - if (existingNativeLoop) { - /* Todo: here we want to pass the pointer, not a boolean */ - getLazyLoop().loop = create(existingNativeLoop); - /* We cannot register automatic free here, must be manually done */ - } else { - getLazyLoop().loop = create(nullptr); - getLazyLoop().cleanMe = true; - } - } - - return getLazyLoop().loop; - } - - /* Freeing the default loop should be done once */ - void free() { - LoopData *loopData = (LoopData *) us_loop_ext((us_loop_t *) this); - - /* Stop and free dateTimer first */ - us_timer_close(loopData->dateTimer); - - loopData->~LoopData(); - /* uSockets will track whether this loop is owned by us or a borrowed alien loop */ - us_loop_free((us_loop_t *) this); - - /* Reset lazyLoop */ - getLazyLoop().loop = nullptr; - } - - void addPostHandler(void *key, MoveOnlyFunction &&handler) { - LoopData *loopData = (LoopData *) us_loop_ext((us_loop_t *) this); - - loopData->postHandlers.emplace(key, std::move(handler)); - } - - /* Bug: what if you remove a handler while iterating them? */ - void removePostHandler(void *key) { - LoopData *loopData = (LoopData *) us_loop_ext((us_loop_t *) this); - - loopData->postHandlers.erase(key); - } - - void addPreHandler(void *key, MoveOnlyFunction &&handler) { - LoopData *loopData = (LoopData *) us_loop_ext((us_loop_t *) this); - - loopData->preHandlers.emplace(key, std::move(handler)); - } - - /* Bug: what if you remove a handler while iterating them? */ - void removePreHandler(void *key) { - LoopData *loopData = (LoopData *) us_loop_ext((us_loop_t *) this); - - loopData->preHandlers.erase(key); - } - - /* Defer this callback on Loop's thread of execution */ - void defer(MoveOnlyFunction &&cb) { - LoopData *loopData = (LoopData *) us_loop_ext((us_loop_t *) this); - - //if (std::thread::get_id() == ) // todo: add fast path for same thread id - loopData->deferMutex.lock(); - loopData->deferQueues[loopData->currentDeferQueue].emplace_back(std::move(cb)); - loopData->deferMutex.unlock(); - - us_wakeup_loop((us_loop_t *) this); - } - - /* Actively block and run this loop */ - void run() { - us_loop_run((us_loop_t *) this); - } - - /* Passively integrate with the underlying default loop */ - /* Used to seamlessly integrate with third parties such as Node.js */ - void integrate() { - us_loop_integrate((us_loop_t *) this); - } - - /* Dynamically change this */ - void setSilent(bool silent) { - ((LoopData *) us_loop_ext((us_loop_t *) this))->noMark = silent; - } + private: + static void wakeupCb(us_loop_t *loop) { + LoopData *loopData = (LoopData *)us_loop_ext(loop); + + /* Swap current deferQueue */ + loopData->deferMutex.lock(); + int oldDeferQueue = loopData->currentDeferQueue; + loopData->currentDeferQueue = (loopData->currentDeferQueue + 1) % 2; + loopData->deferMutex.unlock(); + + /* Drain the queue */ + for (auto &x : loopData->deferQueues[oldDeferQueue]) { + x(); + } + loopData->deferQueues[oldDeferQueue].clear(); + } + + static void preCb(us_loop_t *loop) { + LoopData *loopData = (LoopData *)us_loop_ext(loop); + + for (auto &p : loopData->preHandlers) { + p.second((Loop *)loop); + } + } + + static void postCb(us_loop_t *loop) { + LoopData *loopData = (LoopData *)us_loop_ext(loop); + + for (auto &p : loopData->postHandlers) { + p.second((Loop *)loop); + } + + /* After every event loop iteration, we must not hold the cork buffer */ + if (loopData->corkedSocket) { + std::cerr + << "Error: Cork buffer must not be held across event loop iterations!" + << std::endl; + std::terminate(); + } + } + + Loop() = delete; + ~Loop() = default; + + Loop *init() { + new (us_loop_ext((us_loop_t *)this)) LoopData; + return this; + } + + static Loop *create(void *hint) { + Loop *loop = ((Loop *)us_create_loop(hint, wakeupCb, preCb, postCb, + sizeof(LoopData))) + ->init(); + + /* We also need some timers (should live off the one 4 second timer rather) + */ + LoopData *loopData = (LoopData *)us_loop_ext((struct us_loop_t *)loop); + loopData->dateTimer = + us_create_timer((struct us_loop_t *)loop, 1, sizeof(LoopData *)); + memcpy(us_timer_ext(loopData->dateTimer), &loopData, sizeof(LoopData *)); + us_timer_set( + loopData->dateTimer, + [](struct us_timer_t *t) { + LoopData *loopData; + memcpy(&loopData, us_timer_ext(t), sizeof(LoopData *)); + loopData->updateDate(); + }, + 1000, 1000); + + return loop; + } + + /* What to do with loops created with existingNativeLoop? */ + struct LoopCleaner { + ~LoopCleaner() { + if (loop && cleanMe) { + loop->free(); + } + } + Loop *loop = nullptr; + bool cleanMe = false; + }; + + static LoopCleaner &getLazyLoop() { + static thread_local LoopCleaner lazyLoop; + return lazyLoop; + } + + public: + /* Lazily initializes a per-thread loop and returns it. + * Will automatically free all initialized loops at exit. */ + static Loop *get(void *existingNativeLoop = nullptr) { + if (!getLazyLoop().loop) { + /* If we are given a native loop pointer we pass that to uSockets and let + * it deal with it */ + if (existingNativeLoop) { + /* Todo: here we want to pass the pointer, not a boolean */ + getLazyLoop().loop = create(existingNativeLoop); + /* We cannot register automatic free here, must be manually done */ + } else { + getLazyLoop().loop = create(nullptr); + getLazyLoop().cleanMe = true; + } + } + + return getLazyLoop().loop; + } + + /* Freeing the default loop should be done once */ + void free() { + LoopData *loopData = (LoopData *)us_loop_ext((us_loop_t *)this); + + /* Stop and free dateTimer first */ + us_timer_close(loopData->dateTimer); + + loopData->~LoopData(); + /* uSockets will track whether this loop is owned by us or a borrowed alien + * loop */ + us_loop_free((us_loop_t *)this); + + /* Reset lazyLoop */ + getLazyLoop().loop = nullptr; + } + + void addPostHandler(void *key, MoveOnlyFunction &&handler) { + LoopData *loopData = (LoopData *)us_loop_ext((us_loop_t *)this); + + loopData->postHandlers.emplace(key, std::move(handler)); + } + + /* Bug: what if you remove a handler while iterating them? */ + void removePostHandler(void *key) { + LoopData *loopData = (LoopData *)us_loop_ext((us_loop_t *)this); + + loopData->postHandlers.erase(key); + } + + void addPreHandler(void *key, MoveOnlyFunction &&handler) { + LoopData *loopData = (LoopData *)us_loop_ext((us_loop_t *)this); + + loopData->preHandlers.emplace(key, std::move(handler)); + } + + /* Bug: what if you remove a handler while iterating them? */ + void removePreHandler(void *key) { + LoopData *loopData = (LoopData *)us_loop_ext((us_loop_t *)this); + + loopData->preHandlers.erase(key); + } + + /* Defer this callback on Loop's thread of execution */ + void defer(MoveOnlyFunction &&cb) { + LoopData *loopData = (LoopData *)us_loop_ext((us_loop_t *)this); + + // if (std::thread::get_id() == ) // todo: add fast path for same thread id + loopData->deferMutex.lock(); + loopData->deferQueues[loopData->currentDeferQueue].emplace_back( + std::move(cb)); + loopData->deferMutex.unlock(); + + us_wakeup_loop((us_loop_t *)this); + } + + /* Actively block and run this loop */ + void run() { us_loop_run((us_loop_t *)this); } + + /* Passively integrate with the underlying default loop */ + /* Used to seamlessly integrate with third parties such as Node.js */ + void integrate() { us_loop_integrate((us_loop_t *)this); } + + /* Dynamically change this */ + void setSilent(bool silent) { + ((LoopData *)us_loop_ext((us_loop_t *)this))->noMark = silent; + } }; /* Can be called from any thread to run the thread local loop */ -inline void run() { - Loop::get()->run(); -} +inline void run() { Loop::get()->run(); } -} +} // namespace uWS -#endif // UWS_LOOP_H +#endif // UWS_LOOP_H diff --git a/vendor/hydra/vendor/uwebsockets/src/LoopData.h b/vendor/hydra/vendor/uwebsockets/src/LoopData.h index 1b79659c..95433490 100644 --- a/vendor/hydra/vendor/uwebsockets/src/LoopData.h +++ b/vendor/hydra/vendor/uwebsockets/src/LoopData.h @@ -18,16 +18,16 @@ #ifndef UWS_LOOPDATA_H #define UWS_LOOPDATA_H -#include +#include +#include #include -#include -#include #include -#include -#include +#include +#include +#include -#include "PerMessageDeflate.h" #include "MoveOnlyFunction.h" +#include "PerMessageDeflate.h" struct us_timer_t; @@ -36,78 +36,71 @@ namespace uWS { struct Loop; struct alignas(16) LoopData { - friend struct Loop; -private: - std::mutex deferMutex; - int currentDeferQueue = 0; - std::vector> deferQueues[2]; - - /* Map from void ptr to handler */ - std::map> postHandlers, preHandlers; - -public: - LoopData() { - updateDate(); - } + friend struct Loop; + + private: + std::mutex deferMutex; + int currentDeferQueue = 0; + std::vector> deferQueues[2]; + + /* Map from void ptr to handler */ + std::map> postHandlers, preHandlers; - ~LoopData() { - /* If we have had App.ws called with compression we need to clear this */ - if (zlibContext) { - delete zlibContext; - delete inflationStream; - delete deflationStream; - } - delete [] corkBuffer; + public: + LoopData() { updateDate(); } + + ~LoopData() { + /* If we have had App.ws called with compression we need to clear this */ + if (zlibContext) { + delete zlibContext; + delete inflationStream; + delete deflationStream; } + delete[] corkBuffer; + } - void updateDate() { - cacheTimepoint = time(0); - struct tm tstruct = {}; + void updateDate() { + cacheTimepoint = time(0); + struct tm tstruct = {}; #ifdef _WIN32 - /* Micro, fucking soft never follows spec. */ - gmtime_s(&tstruct, &cacheTimepoint); + /* Micro, fucking soft never follows spec. */ + gmtime_s(&tstruct, &cacheTimepoint); #else - gmtime_r(&cacheTimepoint, &tstruct); + gmtime_r(&cacheTimepoint, &tstruct); #endif - static const char wday_name[][4] = { - "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" - }; - static const char mon_name[][4] = { - "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" - }; - snprintf(date, 32, "%.3s, %.2u %.3s %.4u %.2u:%.2u:%.2u GMT", - wday_name[tstruct.tm_wday], - tstruct.tm_mday % 99, - mon_name[tstruct.tm_mon], - (1900 + tstruct.tm_year) % 9999, - tstruct.tm_hour % 99, - tstruct.tm_min % 99, - tstruct.tm_sec % 99); - } - - char date[32]; - time_t cacheTimepoint = 0; - - /* Be silent */ - bool noMark = false; - - /* Good 16k for SSL perf. */ - static const unsigned int CORK_BUFFER_SIZE = 16 * 1024; - - /* Cork data */ - char *corkBuffer = new char[CORK_BUFFER_SIZE]; - unsigned int corkOffset = 0; - void *corkedSocket = nullptr; - - /* Per message deflate data */ - ZlibContext *zlibContext = nullptr; - InflationStream *inflationStream = nullptr; - DeflationStream *deflationStream = nullptr; - - us_timer_t *dateTimer; + static const char wday_name[][4] = {"Sun", "Mon", "Tue", "Wed", + "Thu", "Fri", "Sat"}; + static const char mon_name[][4] = {"Jan", "Feb", "Mar", "Apr", + "May", "Jun", "Jul", "Aug", + "Sep", "Oct", "Nov", "Dec"}; + snprintf(date, 32, "%.3s, %.2u %.3s %.4u %.2u:%.2u:%.2u GMT", + wday_name[tstruct.tm_wday], tstruct.tm_mday % 99, + mon_name[tstruct.tm_mon], (1900 + tstruct.tm_year) % 9999, + tstruct.tm_hour % 99, tstruct.tm_min % 99, tstruct.tm_sec % 99); + } + + char date[32]; + time_t cacheTimepoint = 0; + + /* Be silent */ + bool noMark = false; + + /* Good 16k for SSL perf. */ + static const unsigned int CORK_BUFFER_SIZE = 16 * 1024; + + /* Cork data */ + char *corkBuffer = new char[CORK_BUFFER_SIZE]; + unsigned int corkOffset = 0; + void *corkedSocket = nullptr; + + /* Per message deflate data */ + ZlibContext *zlibContext = nullptr; + InflationStream *inflationStream = nullptr; + DeflationStream *deflationStream = nullptr; + + us_timer_t *dateTimer; }; -} +} // namespace uWS -#endif // UWS_LOOPDATA_H +#endif // UWS_LOOPDATA_H diff --git a/vendor/hydra/vendor/uwebsockets/src/MessageParser.h b/vendor/hydra/vendor/uwebsockets/src/MessageParser.h index d418d282..c9a25623 100644 --- a/vendor/hydra/vendor/uwebsockets/src/MessageParser.h +++ b/vendor/hydra/vendor/uwebsockets/src/MessageParser.h @@ -15,50 +15,65 @@ * limitations under the License. */ -/* Implements the common parser (RFC 822) used in both HTTP and Multipart parsing */ +/* Implements the common parser (RFC 822) used in both HTTP and Multipart + * parsing */ #ifndef UWS_MESSAGE_PARSER_H #define UWS_MESSAGE_PARSER_H +#include #include #include -#include /* For now we have this one here */ #define MAX_HEADERS 10 namespace uWS { - // should be templated on whether it needs at lest one header (http), or not (multipart) - static inline unsigned int getHeaders(char *postPaddedBuffer, char *end, std::pair *headers) { - char *preliminaryKey, *preliminaryValue, *start = postPaddedBuffer; +// should be templated on whether it needs at lest one header (http), or not +// (multipart) +static inline unsigned int getHeaders( + char *postPaddedBuffer, char *end, + std::pair *headers) { + char *preliminaryKey, *preliminaryValue, *start = postPaddedBuffer; - for (unsigned int i = 0; i < MAX_HEADERS; i++) { - for (preliminaryKey = postPaddedBuffer; (*postPaddedBuffer != ':') & (*(unsigned char *)postPaddedBuffer > 32); *(postPaddedBuffer++) |= 32); - if (*postPaddedBuffer == '\r') { - if ((postPaddedBuffer != end) & (postPaddedBuffer[1] == '\n') /* & (i > 0) */) { // multipart does not require any headers like http does - headers->first = std::string_view(nullptr, 0); - return (unsigned int) ((postPaddedBuffer + 2) - start); - } else { - return 0; - } - } else { - headers->first = std::string_view(preliminaryKey, (size_t) (postPaddedBuffer - preliminaryKey)); - for (postPaddedBuffer++; (*postPaddedBuffer == ':' || *(unsigned char *)postPaddedBuffer < 33) && *postPaddedBuffer != '\r'; postPaddedBuffer++); - preliminaryValue = postPaddedBuffer; - postPaddedBuffer = (char *) memchr(postPaddedBuffer, '\r', end - postPaddedBuffer); - if (postPaddedBuffer && postPaddedBuffer[1] == '\n') { - headers->second = std::string_view(preliminaryValue, (size_t) (postPaddedBuffer - preliminaryValue)); - postPaddedBuffer += 2; - headers++; - } else { - return 0; - } - } - } + for (unsigned int i = 0; i < MAX_HEADERS; i++) { + for (preliminaryKey = postPaddedBuffer; + (*postPaddedBuffer != ':') & (*(unsigned char *)postPaddedBuffer > 32); + *(postPaddedBuffer++) |= 32); + if (*postPaddedBuffer == '\r') { + if ((postPaddedBuffer != end) & + (postPaddedBuffer[1] == + '\n') /* & (i > 0) */) { // multipart does not require any headers + // like http does + headers->first = std::string_view(nullptr, 0); + return (unsigned int)((postPaddedBuffer + 2) - start); + } else { + return 0; + } + } else { + headers->first = std::string_view( + preliminaryKey, (size_t)(postPaddedBuffer - preliminaryKey)); + for (postPaddedBuffer++; (*postPaddedBuffer == ':' || + *(unsigned char *)postPaddedBuffer < 33) && + *postPaddedBuffer != '\r'; + postPaddedBuffer++); + preliminaryValue = postPaddedBuffer; + postPaddedBuffer = + (char *)memchr(postPaddedBuffer, '\r', end - postPaddedBuffer); + if (postPaddedBuffer && postPaddedBuffer[1] == '\n') { + headers->second = std::string_view( + preliminaryValue, (size_t)(postPaddedBuffer - preliminaryValue)); + postPaddedBuffer += 2; + headers++; + } else { return 0; + } } - + } + return 0; } +} // namespace uWS + #endif \ No newline at end of file diff --git a/vendor/hydra/vendor/uwebsockets/src/MoveOnlyFunction.h b/vendor/hydra/vendor/uwebsockets/src/MoveOnlyFunction.h index b1ae785e..63bd1adb 100644 --- a/vendor/hydra/vendor/uwebsockets/src/MoveOnlyFunction.h +++ b/vendor/hydra/vendor/uwebsockets/src/MoveOnlyFunction.h @@ -370,8 +370,8 @@ __OFATS_ANY_INVOCABLE(const, &&, true, const&&) // 121 /* We, uWebSockets define our own type */ namespace uWS { - template - using MoveOnlyFunction = ofats::any_invocable; +template +using MoveOnlyFunction = ofats::any_invocable; } #endif // _ANY_INVOKABLE_H_ diff --git a/vendor/hydra/vendor/uwebsockets/src/Multipart.h b/vendor/hydra/vendor/uwebsockets/src/Multipart.h index 8538d642..c4cda76d 100644 --- a/vendor/hydra/vendor/uwebsockets/src/Multipart.h +++ b/vendor/hydra/vendor/uwebsockets/src/Multipart.h @@ -15,217 +15,217 @@ * limitations under the License. */ -/* Implements the multipart protocol. Builds atop parts of our common http parser (not yet refactored that way). */ +/* Implements the multipart protocol. Builds atop parts of our common http + * parser (not yet refactored that way). */ /* https://www.w3.org/Protocols/rfc1341/7_2_Multipart.html */ #ifndef UWS_MULTIPART_H #define UWS_MULTIPART_H -#include "MessageParser.h" - -#include -#include +#include #include +#include +#include #include -#include - -namespace uWS { - - /* This one could possibly be shared with ExtensionsParser to some degree */ - struct ParameterParser { - - /* Takes the line, commonly given as content-disposition header in the multipart */ - ParameterParser(std::string_view line) { - remainingLine = line; - } - - /* Returns next key/value where value can simply be empty. - * If key (first) is empty then we are at the end */ - std::pair getKeyValue() { - auto key = getToken(); - auto op = getToken(); - - if (!op.length()) { - return {key, ""}; - } - - if (op[0] != ';') { - auto value = getToken(); - /* Strip ; or if at end, nothing */ - getToken(); - return {key, value}; - } - - return {key, ""}; - } - private: - std::string_view remainingLine; - - /* Consumes a token from the line. Will "unquote" strings */ - std::string_view getToken() { - /* Strip whitespace */ - while (remainingLine.length() && isspace(remainingLine[0])) { - remainingLine.remove_prefix(1); - } - - if (!remainingLine.length()) { - /* All we had was space */ - return {}; - } else { - /* Are we at an operator? */ - if (remainingLine[0] == ';' || remainingLine[0] == '=') { - auto op = remainingLine.substr(0, 1); - remainingLine.remove_prefix(1); - return op; - } else { - /* Are we at a quoted string? */ - if (remainingLine[0] == '\"') { - /* Remove first quote and start counting */ - remainingLine.remove_prefix(1); - auto quote = remainingLine; - int quoteLength = 0; - - /* Read anything until other double quote appears */ - while (remainingLine.length() && remainingLine[0] != '\"') { - remainingLine.remove_prefix(1); - quoteLength++; - } - - /* We can't remove_prefix if we have nothing to remove */ - if (!remainingLine.length()) { - return {}; - } - - remainingLine.remove_prefix(1); - return quote.substr(0, quoteLength); - } else { - /* Read anything until ; = space or end */ - std::string_view token = remainingLine; - - int tokenLength = 0; - while (remainingLine.length() && remainingLine[0] != ';' && remainingLine[0] != '=' && !isspace(remainingLine[0])) { - remainingLine.remove_prefix(1); - tokenLength++; - } - - return token.substr(0, tokenLength); - } - } - } - - /* Nothing */ - return ""; - } - }; - - struct MultipartParser { - - /* 2 chars of hyphen + 1 - 70 chars of boundary */ - char prependedBoundaryBuffer[72]; - std::string_view prependedBoundary; - std::string_view remainingBody; - bool first = true; - - /* I think it is more than sane to limit this to 10 per part */ - //static const int MAX_HEADERS = 10; - - /* Construct the parser based on contentType (reads boundary) */ - MultipartParser(std::string_view contentType) { - - /* We expect the form "multipart/something;somethingboundary=something" */ - if (contentType.length() < 10 || contentType.substr(0, 10) != "multipart/") { - return; - } - - /* For now we simply guess boundary will lie between = and end. This is not entirely - * standards compliant as boundary may be expressed with or without " and spaces */ - auto equalToken = contentType.find('=', 10); - if (equalToken != std::string_view::npos) { - - /* Boundary must be less than or equal to 70 chars yet 1 char or longer */ - std::string_view boundary = contentType.substr(equalToken + 1); - if (!boundary.length() || boundary.length() > 70) { - /* Invalid size */ - return; - } - - /* Prepend it with two hyphens */ - prependedBoundaryBuffer[0] = prependedBoundaryBuffer[1] = '-'; - memcpy(&prependedBoundaryBuffer[2], boundary.data(), boundary.length()); - - prependedBoundary = {prependedBoundaryBuffer, boundary.length() + 2}; - } - } - - /* Is this even a valid multipart request? */ - bool isValid() { - return prependedBoundary.length() != 0; - } +#include "MessageParser.h" - /* Set the body once, before getting any parts */ - void setBody(std::string_view body) { - remainingBody = body; - } +namespace uWS { - /* Parse out the next part's data, filling the headers. Returns nullopt on end or error. */ - std::optional getNextPart(std::pair *headers) { - - /* The remaining two hyphens should be shorter than the boundary */ - if (remainingBody.length() < prependedBoundary.length()) { - /* We are done now */ - return std::nullopt; - } - - if (first) { - auto nextBoundary = remainingBody.find(prependedBoundary); - if (nextBoundary == std::string_view::npos) { - /* Cannot parse */ - return std::nullopt; - } - - /* Toss away boundary and anything before it */ - remainingBody.remove_prefix(nextBoundary + prependedBoundary.length()); - first = false; - } - - auto nextEndBoundary = remainingBody.find(prependedBoundary); - if (nextEndBoundary == std::string_view::npos) { - /* Cannot parse (or simply done) */ - return std::nullopt; - } - - std::string_view part = remainingBody.substr(0, nextEndBoundary); - remainingBody.remove_prefix(nextEndBoundary + prependedBoundary.length()); - - /* Also strip rn before and rn after the part */ - if (part.length() < 4) { - /* Cannot strip */ - return std::nullopt; - } - part.remove_prefix(2); - part.remove_suffix(2); - - /* We are allowed to post pad like this because we know the boundary is at least 2 bytes */ - /* This makes parsing a second pass invalid, so you can only iterate over parts once */ - memset((char *) part.data() + part.length(), '\r', 1); - - /* For this to be a valid part, we need to consume at least 4 bytes (\r\n\r\n) */ - int consumed = getHeaders((char *) part.data(), (char *) part.data() + part.length(), headers); - - if (!consumed) { - /* This is an invalid part */ - return std::nullopt; - } - - /* Strip away the headers from the part body data */ - part.remove_prefix(consumed); - - /* Now pass whatever is remaining of the part */ - return part; +/* This one could possibly be shared with ExtensionsParser to some degree */ +struct ParameterParser { + /* Takes the line, commonly given as content-disposition header in the + * multipart */ + ParameterParser(std::string_view line) { remainingLine = line; } + + /* Returns next key/value where value can simply be empty. + * If key (first) is empty then we are at the end */ + std::pair getKeyValue() { + auto key = getToken(); + auto op = getToken(); + + if (!op.length()) { + return {key, ""}; + } + + if (op[0] != ';') { + auto value = getToken(); + /* Strip ; or if at end, nothing */ + getToken(); + return {key, value}; + } + + return {key, ""}; + } + + private: + std::string_view remainingLine; + + /* Consumes a token from the line. Will "unquote" strings */ + std::string_view getToken() { + /* Strip whitespace */ + while (remainingLine.length() && isspace(remainingLine[0])) { + remainingLine.remove_prefix(1); + } + + if (!remainingLine.length()) { + /* All we had was space */ + return {}; + } else { + /* Are we at an operator? */ + if (remainingLine[0] == ';' || remainingLine[0] == '=') { + auto op = remainingLine.substr(0, 1); + remainingLine.remove_prefix(1); + return op; + } else { + /* Are we at a quoted string? */ + if (remainingLine[0] == '\"') { + /* Remove first quote and start counting */ + remainingLine.remove_prefix(1); + auto quote = remainingLine; + int quoteLength = 0; + + /* Read anything until other double quote appears */ + while (remainingLine.length() && remainingLine[0] != '\"') { + remainingLine.remove_prefix(1); + quoteLength++; + } + + /* We can't remove_prefix if we have nothing to remove */ + if (!remainingLine.length()) { + return {}; + } + + remainingLine.remove_prefix(1); + return quote.substr(0, quoteLength); + } else { + /* Read anything until ; = space or end */ + std::string_view token = remainingLine; + + int tokenLength = 0; + while (remainingLine.length() && remainingLine[0] != ';' && + remainingLine[0] != '=' && !isspace(remainingLine[0])) { + remainingLine.remove_prefix(1); + tokenLength++; + } + + return token.substr(0, tokenLength); } - }; - -} + } + } + + /* Nothing */ + return ""; + } +}; + +struct MultipartParser { + /* 2 chars of hyphen + 1 - 70 chars of boundary */ + char prependedBoundaryBuffer[72]; + std::string_view prependedBoundary; + std::string_view remainingBody; + bool first = true; + + /* I think it is more than sane to limit this to 10 per part */ + // static const int MAX_HEADERS = 10; + + /* Construct the parser based on contentType (reads boundary) */ + MultipartParser(std::string_view contentType) { + /* We expect the form "multipart/something;somethingboundary=something" */ + if (contentType.length() < 10 || + contentType.substr(0, 10) != "multipart/") { + return; + } + + /* For now we simply guess boundary will lie between = and end. This is not + * entirely standards compliant as boundary may be expressed with or without + * " and spaces */ + auto equalToken = contentType.find('=', 10); + if (equalToken != std::string_view::npos) { + /* Boundary must be less than or equal to 70 chars yet 1 char or longer */ + std::string_view boundary = contentType.substr(equalToken + 1); + if (!boundary.length() || boundary.length() > 70) { + /* Invalid size */ + return; + } + + /* Prepend it with two hyphens */ + prependedBoundaryBuffer[0] = prependedBoundaryBuffer[1] = '-'; + memcpy(&prependedBoundaryBuffer[2], boundary.data(), boundary.length()); + + prependedBoundary = {prependedBoundaryBuffer, boundary.length() + 2}; + } + } + + /* Is this even a valid multipart request? */ + bool isValid() { return prependedBoundary.length() != 0; } + + /* Set the body once, before getting any parts */ + void setBody(std::string_view body) { remainingBody = body; } + + /* Parse out the next part's data, filling the headers. Returns nullopt on end + * or error. */ + std::optional getNextPart( + std::pair *headers) { + /* The remaining two hyphens should be shorter than the boundary */ + if (remainingBody.length() < prependedBoundary.length()) { + /* We are done now */ + return std::nullopt; + } + + if (first) { + auto nextBoundary = remainingBody.find(prependedBoundary); + if (nextBoundary == std::string_view::npos) { + /* Cannot parse */ + return std::nullopt; + } + + /* Toss away boundary and anything before it */ + remainingBody.remove_prefix(nextBoundary + prependedBoundary.length()); + first = false; + } + + auto nextEndBoundary = remainingBody.find(prependedBoundary); + if (nextEndBoundary == std::string_view::npos) { + /* Cannot parse (or simply done) */ + return std::nullopt; + } + + std::string_view part = remainingBody.substr(0, nextEndBoundary); + remainingBody.remove_prefix(nextEndBoundary + prependedBoundary.length()); + + /* Also strip rn before and rn after the part */ + if (part.length() < 4) { + /* Cannot strip */ + return std::nullopt; + } + part.remove_prefix(2); + part.remove_suffix(2); + + /* We are allowed to post pad like this because we know the boundary is at + * least 2 bytes */ + /* This makes parsing a second pass invalid, so you can only iterate over + * parts once */ + memset((char *)part.data() + part.length(), '\r', 1); + + /* For this to be a valid part, we need to consume at least 4 bytes + * (\r\n\r\n) */ + int consumed = getHeaders((char *)part.data(), + (char *)part.data() + part.length(), headers); + + if (!consumed) { + /* This is an invalid part */ + return std::nullopt; + } + + /* Strip away the headers from the part body data */ + part.remove_prefix(consumed); + + /* Now pass whatever is remaining of the part */ + return part; + } +}; + +} // namespace uWS #endif diff --git a/vendor/hydra/vendor/uwebsockets/src/PerMessageDeflate.h b/vendor/hydra/vendor/uwebsockets/src/PerMessageDeflate.h index 17832c71..a8ef84da 100644 --- a/vendor/hydra/vendor/uwebsockets/src/PerMessageDeflate.h +++ b/vendor/hydra/vendor/uwebsockets/src/PerMessageDeflate.h @@ -25,53 +25,54 @@ /* We always define these options no matter if ZLIB is enabled or not */ namespace uWS { - /* Compressor mode is 8 lowest bits where HIGH4(windowBits), LOW4(memLevel). - * Decompressor mode is 8 highest bits LOW4(windowBits). - * If compressor or decompressor bits are 1, then they are shared. - * If everything is just simply 0, then everything is disabled. */ - enum CompressOptions : uint16_t { - /* These are not actual compression options */ - _COMPRESSOR_MASK = 0x00FF, - _DECOMPRESSOR_MASK = 0x0F00, - /* Disabled, shared, shared are "special" values */ - DISABLED = 0, - SHARED_COMPRESSOR = 1, - SHARED_DECOMPRESSOR = 1 << 8, - /* Highest 4 bits describe decompressor */ - DEDICATED_DECOMPRESSOR_32KB = 15 << 8, - DEDICATED_DECOMPRESSOR_16KB = 14 << 8, - DEDICATED_DECOMPRESSOR_8KB = 13 << 8, - DEDICATED_DECOMPRESSOR_4KB = 12 << 8, - DEDICATED_DECOMPRESSOR_2KB = 11 << 8, - DEDICATED_DECOMPRESSOR_1KB = 10 << 8, - DEDICATED_DECOMPRESSOR_512B = 9 << 8, - /* Same as 32kb */ - DEDICATED_DECOMPRESSOR = 15 << 8, - - /* Lowest 8 bit describe compressor */ - DEDICATED_COMPRESSOR_3KB = 9 << 4 | 1, - DEDICATED_COMPRESSOR_4KB = 9 << 4 | 2, - DEDICATED_COMPRESSOR_8KB = 10 << 4 | 3, - DEDICATED_COMPRESSOR_16KB = 11 << 4 | 4, - DEDICATED_COMPRESSOR_32KB = 12 << 4 | 5, - DEDICATED_COMPRESSOR_64KB = 13 << 4 | 6, - DEDICATED_COMPRESSOR_128KB = 14 << 4 | 7, - DEDICATED_COMPRESSOR_256KB = 15 << 4 | 8, - /* Same as 256kb */ - DEDICATED_COMPRESSOR = 15 << 4 | 8 - }; -} +/* Compressor mode is 8 lowest bits where HIGH4(windowBits), LOW4(memLevel). + * Decompressor mode is 8 highest bits LOW4(windowBits). + * If compressor or decompressor bits are 1, then they are shared. + * If everything is just simply 0, then everything is disabled. */ +enum CompressOptions : uint16_t { + /* These are not actual compression options */ + _COMPRESSOR_MASK = 0x00FF, + _DECOMPRESSOR_MASK = 0x0F00, + /* Disabled, shared, shared are "special" values */ + DISABLED = 0, + SHARED_COMPRESSOR = 1, + SHARED_DECOMPRESSOR = 1 << 8, + /* Highest 4 bits describe decompressor */ + DEDICATED_DECOMPRESSOR_32KB = 15 << 8, + DEDICATED_DECOMPRESSOR_16KB = 14 << 8, + DEDICATED_DECOMPRESSOR_8KB = 13 << 8, + DEDICATED_DECOMPRESSOR_4KB = 12 << 8, + DEDICATED_DECOMPRESSOR_2KB = 11 << 8, + DEDICATED_DECOMPRESSOR_1KB = 10 << 8, + DEDICATED_DECOMPRESSOR_512B = 9 << 8, + /* Same as 32kb */ + DEDICATED_DECOMPRESSOR = 15 << 8, + + /* Lowest 8 bit describe compressor */ + DEDICATED_COMPRESSOR_3KB = 9 << 4 | 1, + DEDICATED_COMPRESSOR_4KB = 9 << 4 | 2, + DEDICATED_COMPRESSOR_8KB = 10 << 4 | 3, + DEDICATED_COMPRESSOR_16KB = 11 << 4 | 4, + DEDICATED_COMPRESSOR_32KB = 12 << 4 | 5, + DEDICATED_COMPRESSOR_64KB = 13 << 4 | 6, + DEDICATED_COMPRESSOR_128KB = 14 << 4 | 7, + DEDICATED_COMPRESSOR_256KB = 15 << 4 | 8, + /* Same as 256kb */ + DEDICATED_COMPRESSOR = 15 << 4 | 8 +}; +} // namespace uWS #if !defined(UWS_NO_ZLIB) && !defined(UWS_MOCK_ZLIB) #include #endif -#include #include +#include #ifdef UWS_USE_LIBDEFLATE -#include "libdeflate.h" #include + +#include "libdeflate.h" #endif namespace uWS { @@ -80,236 +81,255 @@ namespace uWS { #if defined(UWS_NO_ZLIB) || defined(UWS_MOCK_ZLIB) struct ZlibContext {}; struct InflationStream { - std::optional inflate(ZlibContext * /*zlibContext*/, std::string_view compressed, size_t maxPayloadLength, bool /*reset*/) { - return compressed.substr(0, std::min(maxPayloadLength, compressed.length())); - } - InflationStream(CompressOptions /*compressOptions*/) { - } + std::optional inflate(ZlibContext* /*zlibContext*/, + std::string_view compressed, + size_t maxPayloadLength, + bool /*reset*/) { + return compressed.substr(0, + std::min(maxPayloadLength, compressed.length())); + } + InflationStream(CompressOptions /*compressOptions*/) {} }; struct DeflationStream { - std::string_view deflate(ZlibContext * /*zlibContext*/, std::string_view raw, bool /*reset*/) { - return raw; - } - DeflationStream(CompressOptions /*compressOptions*/) { - } + std::string_view deflate(ZlibContext* /*zlibContext*/, std::string_view raw, + bool /*reset*/) { + return raw; + } + DeflationStream(CompressOptions /*compressOptions*/) {} }; #else -#define LARGE_BUFFER_SIZE 1024 * 16 // todo: fix this +#define LARGE_BUFFER_SIZE 1024 * 16 // todo: fix this struct ZlibContext { - /* Any returned data is valid until next same-class call. - * We need to have two classes to allow inflation followed - * by many deflations without modifying the inflation */ - std::string dynamicDeflationBuffer; - std::string dynamicInflationBuffer; - char *deflationBuffer; - char *inflationBuffer; + /* Any returned data is valid until next same-class call. + * We need to have two classes to allow inflation followed + * by many deflations without modifying the inflation */ + std::string dynamicDeflationBuffer; + std::string dynamicInflationBuffer; + char *deflationBuffer; + char *inflationBuffer; #ifdef UWS_USE_LIBDEFLATE - libdeflate_decompressor *decompressor; - libdeflate_compressor *compressor; + libdeflate_decompressor *decompressor; + libdeflate_compressor *compressor; #endif - ZlibContext() { - deflationBuffer = (char *) malloc(LARGE_BUFFER_SIZE); - inflationBuffer = (char *) malloc(LARGE_BUFFER_SIZE); + ZlibContext() { + deflationBuffer = (char *)malloc(LARGE_BUFFER_SIZE); + inflationBuffer = (char *)malloc(LARGE_BUFFER_SIZE); #ifdef UWS_USE_LIBDEFLATE - decompressor = libdeflate_alloc_decompressor(); - compressor = libdeflate_alloc_compressor(6); + decompressor = libdeflate_alloc_decompressor(); + compressor = libdeflate_alloc_compressor(6); #endif - } + } - ~ZlibContext() { - free(deflationBuffer); - free(inflationBuffer); + ~ZlibContext() { + free(deflationBuffer); + free(inflationBuffer); #ifdef UWS_USE_LIBDEFLATE - libdeflate_free_decompressor(decompressor); - libdeflate_free_compressor(compressor); + libdeflate_free_decompressor(decompressor); + libdeflate_free_compressor(compressor); #endif - } + } }; struct DeflationStream { - z_stream deflationStream = {}; + z_stream deflationStream = {}; - DeflationStream(CompressOptions compressOptions) { + DeflationStream(CompressOptions compressOptions) { + /* Sliding inflator should be about 44kb by default, less than compressor */ - /* Sliding inflator should be about 44kb by default, less than compressor */ + /* Memory usage is given by 2 ^ (windowBits + 2) + 2 ^ (memLevel + 9) */ + int windowBits = -(int)((compressOptions & _COMPRESSOR_MASK) >> 4), + memLevel = compressOptions & 0xF; - /* Memory usage is given by 2 ^ (windowBits + 2) + 2 ^ (memLevel + 9) */ - int windowBits = -(int) ((compressOptions & _COMPRESSOR_MASK) >> 4), memLevel = compressOptions & 0xF; + // printf("windowBits: %d, memLevel: %d\n", windowBits, memLevel); - //printf("windowBits: %d, memLevel: %d\n", windowBits, memLevel); + deflateInit2(&deflationStream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, + windowBits, memLevel, Z_DEFAULT_STRATEGY); + } - deflateInit2(&deflationStream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, windowBits, memLevel, Z_DEFAULT_STRATEGY); - } - - /* Deflate and optionally reset. You must not deflate an empty string. */ - std::string_view deflate(ZlibContext *zlibContext, std::string_view raw, bool reset) { + /* Deflate and optionally reset. You must not deflate an empty string. */ + std::string_view deflate(ZlibContext *zlibContext, std::string_view raw, + bool reset) { #ifdef UWS_USE_LIBDEFLATE - /* Run a fast path in case of shared_compressor */ - if (reset) { - size_t written = 0; - static unsigned char buf[1024 + 1]; - - written = libdeflate_deflate_compress(zlibContext->compressor, raw.data(), raw.length(), buf, 1024); - - if (written) { - memcpy(&buf[written], "\x00", 1); - return std::string_view((char *) buf, written + 1); - } - } + /* Run a fast path in case of shared_compressor */ + if (reset) { + size_t written = 0; + static unsigned char buf[1024 + 1]; + + written = libdeflate_deflate_compress(zlibContext->compressor, raw.data(), + raw.length(), buf, 1024); + + if (written) { + memcpy(&buf[written], "\x00", 1); + return std::string_view((char *)buf, written + 1); + } + } #endif - /* Odd place to clear this one, fix */ - zlibContext->dynamicDeflationBuffer.clear(); + /* Odd place to clear this one, fix */ + zlibContext->dynamicDeflationBuffer.clear(); - deflationStream.next_in = (Bytef *) raw.data(); - deflationStream.avail_in = (unsigned int) raw.length(); + deflationStream.next_in = (Bytef *)raw.data(); + deflationStream.avail_in = (unsigned int)raw.length(); - /* This buffer size has to be at least 6 bytes for Z_SYNC_FLUSH to work */ - const int DEFLATE_OUTPUT_CHUNK = LARGE_BUFFER_SIZE; + /* This buffer size has to be at least 6 bytes for Z_SYNC_FLUSH to work */ + const int DEFLATE_OUTPUT_CHUNK = LARGE_BUFFER_SIZE; - int err; - do { - deflationStream.next_out = (Bytef *) zlibContext->deflationBuffer; - deflationStream.avail_out = DEFLATE_OUTPUT_CHUNK; + int err; + do { + deflationStream.next_out = (Bytef *)zlibContext->deflationBuffer; + deflationStream.avail_out = DEFLATE_OUTPUT_CHUNK; - err = ::deflate(&deflationStream, Z_SYNC_FLUSH); - if (Z_OK == err && deflationStream.avail_out == 0) { - zlibContext->dynamicDeflationBuffer.append(zlibContext->deflationBuffer, DEFLATE_OUTPUT_CHUNK - deflationStream.avail_out); - continue; - } else { - break; - } - } while (true); - - /* This must not change avail_out */ - if (reset) { - deflateReset(&deflationStream); - } - - if (zlibContext->dynamicDeflationBuffer.length()) { - zlibContext->dynamicDeflationBuffer.append(zlibContext->deflationBuffer, DEFLATE_OUTPUT_CHUNK - deflationStream.avail_out); - - return std::string_view((char *) zlibContext->dynamicDeflationBuffer.data(), zlibContext->dynamicDeflationBuffer.length() - 4); - } - - /* Note: We will get an interger overflow resulting in heap buffer overflow if Z_BUF_ERROR is returned - * from passing 0 as avail_in. Therefore we must not deflate an empty string */ - return { + err = ::deflate(&deflationStream, Z_SYNC_FLUSH); + if (Z_OK == err && deflationStream.avail_out == 0) { + zlibContext->dynamicDeflationBuffer.append( zlibContext->deflationBuffer, - DEFLATE_OUTPUT_CHUNK - deflationStream.avail_out - 4 - }; + DEFLATE_OUTPUT_CHUNK - deflationStream.avail_out); + continue; + } else { + break; + } + } while (true); + + /* This must not change avail_out */ + if (reset) { + deflateReset(&deflationStream); } - ~DeflationStream() { - deflateEnd(&deflationStream); + if (zlibContext->dynamicDeflationBuffer.length()) { + zlibContext->dynamicDeflationBuffer.append( + zlibContext->deflationBuffer, + DEFLATE_OUTPUT_CHUNK - deflationStream.avail_out); + + return std::string_view( + (char *)zlibContext->dynamicDeflationBuffer.data(), + zlibContext->dynamicDeflationBuffer.length() - 4); } + + /* Note: We will get an interger overflow resulting in heap buffer overflow + * if Z_BUF_ERROR is returned from passing 0 as avail_in. Therefore we must + * not deflate an empty string */ + return {zlibContext->deflationBuffer, + DEFLATE_OUTPUT_CHUNK - deflationStream.avail_out - 4}; + } + + ~DeflationStream() { deflateEnd(&deflationStream); } }; struct InflationStream { - z_stream inflationStream = {}; + z_stream inflationStream = {}; - InflationStream(CompressOptions compressOptions) { - /* Inflation windowBits are the top 8 bits of the 16 bit compressOptions */ - inflateInit2(&inflationStream, -(compressOptions >> 8)); - } + InflationStream(CompressOptions compressOptions) { + /* Inflation windowBits are the top 8 bits of the 16 bit compressOptions */ + inflateInit2(&inflationStream, -(compressOptions >> 8)); + } - ~InflationStream() { - inflateEnd(&inflationStream); - } + ~InflationStream() { inflateEnd(&inflationStream); } - /* Zero length inflates are possible and valid */ - std::optional inflate(ZlibContext *zlibContext, std::string_view compressed, size_t maxPayloadLength, bool reset) { + /* Zero length inflates are possible and valid */ + std::optional inflate(ZlibContext *zlibContext, + std::string_view compressed, + size_t maxPayloadLength, bool reset) { #ifdef UWS_USE_LIBDEFLATE - /* Try fast path first */ - size_t written = 0; - static char buf[1024]; - - /* We have to pad 9 bytes and restore those bytes when done since 9 is more than 6 of next WebSocket message */ - char tmp[9]; - memcpy(tmp, (char *) compressed.data() + compressed.length(), 9); - memcpy((char *) compressed.data() + compressed.length(), "\x00\x00\xff\xff\x01\x00\x00\xff\xff", 9); - libdeflate_result res = libdeflate_deflate_decompress(zlibContext->decompressor, compressed.data(), compressed.length() + 9, buf, 1024, &written); - memcpy((char *) compressed.data() + compressed.length(), tmp, 9); - - if (res == 0) { - /* Fast path wins */ - return std::string_view(buf, written); - } + /* Try fast path first */ + size_t written = 0; + static char buf[1024]; + + /* We have to pad 9 bytes and restore those bytes when done since 9 is more + * than 6 of next WebSocket message */ + char tmp[9]; + memcpy(tmp, (char *)compressed.data() + compressed.length(), 9); + memcpy((char *)compressed.data() + compressed.length(), + "\x00\x00\xff\xff\x01\x00\x00\xff\xff", 9); + libdeflate_result res = libdeflate_deflate_decompress( + zlibContext->decompressor, compressed.data(), compressed.length() + 9, + buf, 1024, &written); + memcpy((char *)compressed.data() + compressed.length(), tmp, 9); + + if (res == 0) { + /* Fast path wins */ + return std::string_view(buf, written); + } #endif - /* Save off the bytes we're about to overwrite */ - char* tailLocation = (char*)compressed.data() + compressed.length(); - char preTailBytes[4]; - memcpy(preTailBytes, tailLocation, 4); - - /* Append tail to chunk */ - unsigned char tail[4] = {0x00, 0x00, 0xff, 0xff}; - memcpy(tailLocation, tail, 4); - compressed = {compressed.data(), compressed.length() + 4}; - - /* We clear this one here, could be done better */ - zlibContext->dynamicInflationBuffer.clear(); + /* Save off the bytes we're about to overwrite */ + char *tailLocation = (char *)compressed.data() + compressed.length(); + char preTailBytes[4]; + memcpy(preTailBytes, tailLocation, 4); - inflationStream.next_in = (Bytef *) compressed.data(); - inflationStream.avail_in = (unsigned int) compressed.length(); + /* Append tail to chunk */ + unsigned char tail[4] = {0x00, 0x00, 0xff, 0xff}; + memcpy(tailLocation, tail, 4); + compressed = {compressed.data(), compressed.length() + 4}; - int err; - do { - inflationStream.next_out = (Bytef *) zlibContext->inflationBuffer; - inflationStream.avail_out = LARGE_BUFFER_SIZE; + /* We clear this one here, could be done better */ + zlibContext->dynamicInflationBuffer.clear(); - err = ::inflate(&inflationStream, Z_SYNC_FLUSH); - if (err == Z_OK && inflationStream.avail_out) { - break; - } + inflationStream.next_in = (Bytef *)compressed.data(); + inflationStream.avail_in = (unsigned int)compressed.length(); - zlibContext->dynamicInflationBuffer.append(zlibContext->inflationBuffer, LARGE_BUFFER_SIZE - inflationStream.avail_out); + int err; + do { + inflationStream.next_out = (Bytef *)zlibContext->inflationBuffer; + inflationStream.avail_out = LARGE_BUFFER_SIZE; + err = ::inflate(&inflationStream, Z_SYNC_FLUSH); + if (err == Z_OK && inflationStream.avail_out) { + break; + } - } while (inflationStream.avail_out == 0 && zlibContext->dynamicInflationBuffer.length() <= maxPayloadLength); + zlibContext->dynamicInflationBuffer.append( + zlibContext->inflationBuffer, + LARGE_BUFFER_SIZE - inflationStream.avail_out); - if (reset) { - inflateReset(&inflationStream); - } + } while (inflationStream.avail_out == 0 && + zlibContext->dynamicInflationBuffer.length() <= maxPayloadLength); - /* Restore the bytes we used for the tail */ - memcpy(tailLocation, preTailBytes, 4); + if (reset) { + inflateReset(&inflationStream); + } - if ((err != Z_BUF_ERROR && err != Z_OK) || zlibContext->dynamicInflationBuffer.length() > maxPayloadLength) { - return std::nullopt; - } + /* Restore the bytes we used for the tail */ + memcpy(tailLocation, preTailBytes, 4); - if (zlibContext->dynamicInflationBuffer.length()) { - zlibContext->dynamicInflationBuffer.append(zlibContext->inflationBuffer, LARGE_BUFFER_SIZE - inflationStream.avail_out); + if ((err != Z_BUF_ERROR && err != Z_OK) || + zlibContext->dynamicInflationBuffer.length() > maxPayloadLength) { + return std::nullopt; + } - /* Let's be strict about the max size */ - if (zlibContext->dynamicInflationBuffer.length() > maxPayloadLength) { - return std::nullopt; - } + if (zlibContext->dynamicInflationBuffer.length()) { + zlibContext->dynamicInflationBuffer.append( + zlibContext->inflationBuffer, + LARGE_BUFFER_SIZE - inflationStream.avail_out); - return std::string_view(zlibContext->dynamicInflationBuffer.data(), zlibContext->dynamicInflationBuffer.length()); - } + /* Let's be strict about the max size */ + if (zlibContext->dynamicInflationBuffer.length() > maxPayloadLength) { + return std::nullopt; + } - /* Let's be strict about the max size */ - if ((LARGE_BUFFER_SIZE - inflationStream.avail_out) > maxPayloadLength) { - return std::nullopt; - } + return std::string_view(zlibContext->dynamicInflationBuffer.data(), + zlibContext->dynamicInflationBuffer.length()); + } - return std::string_view(zlibContext->inflationBuffer, LARGE_BUFFER_SIZE - inflationStream.avail_out); + /* Let's be strict about the max size */ + if ((LARGE_BUFFER_SIZE - inflationStream.avail_out) > maxPayloadLength) { + return std::nullopt; } + return std::string_view(zlibContext->inflationBuffer, + LARGE_BUFFER_SIZE - inflationStream.avail_out); + } }; #endif -} +} // namespace uWS -#endif // UWS_PERMESSAGEDEFLATE_H +#endif // UWS_PERMESSAGEDEFLATE_H diff --git a/vendor/hydra/vendor/uwebsockets/src/ProxyParser.h b/vendor/hydra/vendor/uwebsockets/src/ProxyParser.h index 95ee3d11..d1da76e7 100644 --- a/vendor/hydra/vendor/uwebsockets/src/ProxyParser.h +++ b/vendor/hydra/vendor/uwebsockets/src/ProxyParser.h @@ -25,139 +25,139 @@ namespace uWS { struct proxy_hdr_v2 { - uint8_t sig[12]; /* hex 0D 0A 0D 0A 00 0D 0A 51 55 49 54 0A */ - uint8_t ver_cmd; /* protocol version and command */ - uint8_t fam; /* protocol family and address */ - uint16_t len; /* number of following bytes part of the header */ + uint8_t sig[12]; /* hex 0D 0A 0D 0A 00 0D 0A 51 55 49 54 0A */ + uint8_t ver_cmd; /* protocol version and command */ + uint8_t fam; /* protocol family and address */ + uint16_t len; /* number of following bytes part of the header */ }; union proxy_addr { - struct { /* for TCP/UDP over IPv4, len = 12 */ - uint32_t src_addr; - uint32_t dst_addr; - uint16_t src_port; - uint16_t dst_port; - } ipv4_addr; - struct { /* for TCP/UDP over IPv6, len = 36 */ - uint8_t src_addr[16]; - uint8_t dst_addr[16]; - uint16_t src_port; - uint16_t dst_port; - } ipv6_addr; + struct { /* for TCP/UDP over IPv4, len = 12 */ + uint32_t src_addr; + uint32_t dst_addr; + uint16_t src_port; + uint16_t dst_port; + } ipv4_addr; + struct { /* for TCP/UDP over IPv6, len = 36 */ + uint8_t src_addr[16]; + uint8_t dst_addr[16]; + uint16_t src_port; + uint16_t dst_port; + } ipv6_addr; }; /* Byte swap for little-endian systems */ /* Todo: This functions should be shared with the one in WebSocketProtocol.h! */ template T _cond_byte_swap(T value) { - uint32_t endian_test = 1; - if (*((char *)&endian_test)) { - union { - T i; - uint8_t b[sizeof(T)]; - } src = { value }, dst; - - for (unsigned int i = 0; i < sizeof(value); i++) { - dst.b[i] = src.b[sizeof(value) - 1 - i]; - } - - return dst.i; + uint32_t endian_test = 1; + if (*((char *)&endian_test)) { + union { + T i; + uint8_t b[sizeof(T)]; + } src = {value}, dst; + + for (unsigned int i = 0; i < sizeof(value); i++) { + dst.b[i] = src.b[sizeof(value) - 1 - i]; } - return value; + + return dst.i; + } + return value; } struct ProxyParser { -private: - union proxy_addr addr; - - /* Default family of 0 signals no proxy address */ - uint8_t family = 0; - -public: - /* Returns 4 or 16 bytes source address */ - std::string_view getSourceAddress() { - - // UNSPEC family and protocol - if (family == 0) { - return {}; - } - - if ((family & 0xf0) >> 4 == 1) { - /* Family 1 is INET4 */ - return {(char *) &addr.ipv4_addr.src_addr, 4}; - } else { - /* Family 2 is INET6 */ - return {(char *) &addr.ipv6_addr.src_addr, 16}; - } + private: + union proxy_addr addr; + + /* Default family of 0 signals no proxy address */ + uint8_t family = 0; + + public: + /* Returns 4 or 16 bytes source address */ + std::string_view getSourceAddress() { + // UNSPEC family and protocol + if (family == 0) { + return {}; } - /* Returns [done, consumed] where done = false on failure */ - std::pair parse(std::string_view data) { + if ((family & 0xf0) >> 4 == 1) { + /* Family 1 is INET4 */ + return {(char *)&addr.ipv4_addr.src_addr, 4}; + } else { + /* Family 2 is INET6 */ + return {(char *)&addr.ipv6_addr.src_addr, 16}; + } + } - /* We require at least four bytes to determine protocol */ - if (data.length() < 4) { - return {false, 0}; - } + /* Returns [done, consumed] where done = false on failure */ + std::pair parse(std::string_view data) { + /* We require at least four bytes to determine protocol */ + if (data.length() < 4) { + return {false, 0}; + } - /* HTTP can never start with "\r\n\r\n", but PROXY always does */ - if (memcmp(data.data(), "\r\n\r\n", 4)) { - /* This is HTTP, so be done */ - return {true, 0}; - } + /* HTTP can never start with "\r\n\r\n", but PROXY always does */ + if (memcmp(data.data(), "\r\n\r\n", 4)) { + /* This is HTTP, so be done */ + return {true, 0}; + } - /* We assume we are parsing PROXY V2 here */ + /* We assume we are parsing PROXY V2 here */ - /* We require 16 bytes here */ - if (data.length() < 16) { - return {false, 0}; - } + /* We require 16 bytes here */ + if (data.length() < 16) { + return {false, 0}; + } - /* Header is 16 bytes */ - struct proxy_hdr_v2 header; - memcpy(&header, data.data(), 16); + /* Header is 16 bytes */ + struct proxy_hdr_v2 header; + memcpy(&header, data.data(), 16); - if (memcmp(header.sig, "\x0D\x0A\x0D\x0A\x00\x0D\x0A\x51\x55\x49\x54\x0A", 12)) { - /* This is not PROXY protocol at all */ - return {false, 0}; - } + if (memcmp(header.sig, "\x0D\x0A\x0D\x0A\x00\x0D\x0A\x51\x55\x49\x54\x0A", + 12)) { + /* This is not PROXY protocol at all */ + return {false, 0}; + } - /* We only support version 2 */ - if ((header.ver_cmd & 0xf0) >> 4 != 2) { - return {false, 0}; - } + /* We only support version 2 */ + if ((header.ver_cmd & 0xf0) >> 4 != 2) { + return {false, 0}; + } - //printf("Version: %d\n", (header.ver_cmd & 0xf0) >> 4); - //printf("Command: %d\n", (header.ver_cmd & 0x0f)); + // printf("Version: %d\n", (header.ver_cmd & 0xf0) >> 4); + // printf("Command: %d\n", (header.ver_cmd & 0x0f)); - /* We get length in network byte order (todo: share this function with the rest) */ - uint16_t hostLength = _cond_byte_swap(header.len); + /* We get length in network byte order (todo: share this function with the + * rest) */ + uint16_t hostLength = _cond_byte_swap(header.len); - /* We must have all the data available */ - if (data.length() < 16u + hostLength) { - return {false, 0}; - } + /* We must have all the data available */ + if (data.length() < 16u + hostLength) { + return {false, 0}; + } - /* Payload cannot be more than sizeof proxy_addr */ - if (sizeof(proxy_addr) < hostLength) { - return {false, 0}; - } + /* Payload cannot be more than sizeof proxy_addr */ + if (sizeof(proxy_addr) < hostLength) { + return {false, 0}; + } - //printf("Family: %d\n", (header.fam & 0xf0) >> 4); - //printf("Transport: %d\n", (header.fam & 0x0f)); + // printf("Family: %d\n", (header.fam & 0xf0) >> 4); + // printf("Transport: %d\n", (header.fam & 0x0f)); - /* We have 0 family by default, and UNSPEC is 0 as well */ - family = header.fam; + /* We have 0 family by default, and UNSPEC is 0 as well */ + family = header.fam; - /* Copy payload */ - memcpy(&addr, data.data() + 16, hostLength); + /* Copy payload */ + memcpy(&addr, data.data() + 16, hostLength); - /* We consumed everything */ - return {true, 16 + hostLength}; - } + /* We consumed everything */ + return {true, 16 + hostLength}; + } }; -} +} // namespace uWS #endif -#endif // UWS_PROXY_PARSER_H \ No newline at end of file +#endif // UWS_PROXY_PARSER_H \ No newline at end of file diff --git a/vendor/hydra/vendor/uwebsockets/src/QueryParser.h b/vendor/hydra/vendor/uwebsockets/src/QueryParser.h index 55e504ac..769bcbdc 100644 --- a/vendor/hydra/vendor/uwebsockets/src/QueryParser.h +++ b/vendor/hydra/vendor/uwebsockets/src/QueryParser.h @@ -24,97 +24,101 @@ namespace uWS { - /* Takes raw query including initial '?' sign. Will inplace decode, so input will mutate */ - static inline std::string_view getDecodedQueryValue(std::string_view key, std::string_view rawQuery) { +/* Takes raw query including initial '?' sign. Will inplace decode, so input + * will mutate */ +static inline std::string_view getDecodedQueryValue(std::string_view key, + std::string_view rawQuery) { + /* Can't have a value without a key */ + if (!key.length()) { + return {}; + } + + /* Start with the whole querystring including initial '?' */ + std::string_view queryString = rawQuery; + + /* List of key, value could be cached for repeated fetches similar to how + * headers are, todo! */ + while (queryString.length()) { + /* Find boundaries of this statement */ + std::string_view statement = + queryString.substr(1, queryString.find('&', 1) - 1); + + /* Only bother if first char of key match (early exit) */ + if (statement.length() && statement[0] == key[0]) { + /* Equal sign must be present and not in the end of statement */ + auto equality = statement.find('='); + if (equality != std::string_view::npos) { + std::string_view statementKey = statement.substr(0, equality); + std::string_view statementValue = statement.substr(equality + 1); + + /* String comparison */ + if (key == statementKey) { + /* Decode value inplace, put null at end if before length of original + */ + char *in = (char *)statementValue.data(); + + /* Write offset */ + unsigned int out = 0; + + /* Walk over all chars until end or null char, decoding in place */ + for (unsigned int i = 0; i < statementValue.length() && in[i]; i++) { + /* Only bother with '%' */ + if (in[i] == '%') { + /* Do we have enough data for two bytes hex? */ + if (i + 2 >= statementValue.length()) { + return {}; + } + + /* Two bytes hex */ + int hex1 = in[i + 1] - '0'; + if (hex1 > 9) { + hex1 &= 223; + hex1 -= 7; + } + + int hex2 = in[i + 2] - '0'; + if (hex2 > 9) { + hex2 &= 223; + hex2 -= 7; + } + + *((unsigned char *)&in[out]) = (unsigned char)(hex1 * 16 + hex2); + i += 2; + } else { + /* Is this even a rule? */ + if (in[i] == '+') { + in[out] = ' '; + } else { + in[out] = in[i]; + } + } - /* Can't have a value without a key */ - if (!key.length()) { - return {}; - } + /* We always only write one char */ + out++; + } - /* Start with the whole querystring including initial '?' */ - std::string_view queryString = rawQuery; - - /* List of key, value could be cached for repeated fetches similar to how headers are, todo! */ - while (queryString.length()) { - /* Find boundaries of this statement */ - std::string_view statement = queryString.substr(1, queryString.find('&', 1) - 1); - - /* Only bother if first char of key match (early exit) */ - if (statement.length() && statement[0] == key[0]) { - /* Equal sign must be present and not in the end of statement */ - auto equality = statement.find('='); - if (equality != std::string_view::npos) { - - std::string_view statementKey = statement.substr(0, equality); - std::string_view statementValue = statement.substr(equality + 1); - - /* String comparison */ - if (key == statementKey) { - - /* Decode value inplace, put null at end if before length of original */ - char *in = (char *) statementValue.data(); - - /* Write offset */ - unsigned int out = 0; - - /* Walk over all chars until end or null char, decoding in place */ - for (unsigned int i = 0; i < statementValue.length() && in[i]; i++) { - /* Only bother with '%' */ - if (in[i] == '%') { - /* Do we have enough data for two bytes hex? */ - if (i + 2 >= statementValue.length()) { - return {}; - } - - /* Two bytes hex */ - int hex1 = in[i + 1] - '0'; - if (hex1 > 9) { - hex1 &= 223; - hex1 -= 7; - } - - int hex2 = in[i + 2] - '0'; - if (hex2 > 9) { - hex2 &= 223; - hex2 -= 7; - } - - *((unsigned char *) &in[out]) = (unsigned char) (hex1 * 16 + hex2); - i += 2; - } else { - /* Is this even a rule? */ - if (in[i] == '+') { - in[out] = ' '; - } else { - in[out] = in[i]; - } - } - - /* We always only write one char */ - out++; - } - - /* If decoded string is shorter than original, put null char to stop next read */ - if (out < statementValue.length()) { - in[out] = 0; - } - - return statementValue.substr(0, out); - } - } else { - /* This querystring is invalid, cannot parse it */ - return {nullptr, 0}; - } - } + /* If decoded string is shorter than original, put null char to stop + * next read */ + if (out < statementValue.length()) { + in[out] = 0; + } - queryString.remove_prefix(statement.length() + 1); + return statementValue.substr(0, out); } - - /* Nothing found is given as nullptr, while empty string is given as some pointer to the given buffer */ + } else { + /* This querystring is invalid, cannot parse it */ return {nullptr, 0}; + } } + queryString.remove_prefix(statement.length() + 1); + } + + /* Nothing found is given as nullptr, while empty string is given as some + * pointer to the given buffer */ + return {nullptr, 0}; } +} // namespace uWS + #endif diff --git a/vendor/hydra/vendor/uwebsockets/src/TopicTree.h b/vendor/hydra/vendor/uwebsockets/src/TopicTree.h index 88788a69..5e5ba461 100644 --- a/vendor/hydra/vendor/uwebsockets/src/TopicTree.h +++ b/vendor/hydra/vendor/uwebsockets/src/TopicTree.h @@ -18,346 +18,346 @@ #ifndef UWS_TOPICTREE_H #define UWS_TOPICTREE_H -#include -#include +#include #include -#include -#include +#include +#include #include -#include -#include -#include -#include #include #include +#include +#include +#include +#include +#include namespace uWS { struct Subscriber; struct Topic : std::unordered_set { + Topic(std::string_view topic) : name(topic) {} - Topic(std::string_view topic) : name(topic) { - - } - - std::string name; + std::string name; }; struct Subscriber { + template + friend struct TopicTree; - template friend struct TopicTree; - -private: - /* We use a factory */ - Subscriber() = default; - - /* State of prev, next does not matter unless we are needsDrainage() since we are not in the list */ - Subscriber *prev, *next; + private: + /* We use a factory */ + Subscriber() = default; - /* Any one subscriber can be part of at most 32 publishes before it needs a drain, - * or whatever encoding of runs or whatever we might do in the future */ - uint16_t messageIndices[32]; + /* State of prev, next does not matter unless we are needsDrainage() since we + * are not in the list */ + Subscriber *prev, *next; - /* This one matters the most, if it is 0 we are not in the list of drainableSubscribers */ - unsigned char numMessageIndices = 0; + /* Any one subscriber can be part of at most 32 publishes before it needs a + * drain, or whatever encoding of runs or whatever we might do in the future + */ + uint16_t messageIndices[32]; -public: + /* This one matters the most, if it is 0 we are not in the list of + * drainableSubscribers */ + unsigned char numMessageIndices = 0; - /* We have a list of topics we subscribe to (read by WebSocket::iterateTopics) */ - std::set topics; + public: + /* We have a list of topics we subscribe to (read by WebSocket::iterateTopics) + */ + std::set topics; - /* User data */ - void *user; + /* User data */ + void *user; - bool needsDrainage() { - return numMessageIndices; - } + bool needsDrainage() { return numMessageIndices; } }; template struct TopicTree { + enum IteratorFlags { LAST = 1, FIRST = 2 }; - enum IteratorFlags { - LAST = 1, - FIRST = 2 - }; - - /* Whomever is iterating this topic is locked to not modify its own list */ - Subscriber *iteratingSubscriber = nullptr; + /* Whomever is iterating this topic is locked to not modify its own list */ + Subscriber *iteratingSubscriber = nullptr; -private: + private: + /* The drain callback must not publish, unsubscribe or subscribe. + * It must only cork, uncork, send, write */ + std::function cb; - /* The drain callback must not publish, unsubscribe or subscribe. - * It must only cork, uncork, send, write */ - std::function cb; + /* The topics */ + std::unordered_map> topics; - /* The topics */ - std::unordered_map> topics; + /* List of subscribers that needs drainage */ + Subscriber *drainableSubscribers = nullptr; - /* List of subscribers that needs drainage */ - Subscriber *drainableSubscribers = nullptr; + /* Palette of outgoing messages, up to 64k */ + std::vector outgoingMessages; - /* Palette of outgoing messages, up to 64k */ - std::vector outgoingMessages; - - void checkIteratingSubscriber(Subscriber *s) { - /* Notify user that they are doing something wrong here */ - if (iteratingSubscriber == s) { - std::cerr << "Error: WebSocket must not subscribe or unsubscribe to topics while iterating its topics!" << std::endl; - std::terminate(); - } + void checkIteratingSubscriber(Subscriber *s) { + /* Notify user that they are doing something wrong here */ + if (iteratingSubscriber == s) { + std::cerr << "Error: WebSocket must not subscribe or unsubscribe to " + "topics while iterating its topics!" + << std::endl; + std::terminate(); } - - /* Warning: does NOT unlink from drainableSubscribers or modify next, prev. */ - void drainImpl(Subscriber *s) { - /* Before we call cb we need to make sure this subscriber will not report needsDrainage() - * since WebSocket::send will call drain from within the cb in that case.*/ - int numMessageIndices = s->numMessageIndices; - s->numMessageIndices = 0; - - /* Then we emit cb */ - for (int i = 0; i < numMessageIndices; i++) { - T &outgoingMessage = outgoingMessages[s->messageIndices[i]]; - - int flags = (i == numMessageIndices - 1) ? LAST : 0; - - /* Returning true will stop drainage short (such as when backpressure is too high) */ - if (cb(s, outgoingMessage, (IteratorFlags)(flags | (i == 0 ? FIRST : 0)))) { - break; - } - } + } + + /* Warning: does NOT unlink from drainableSubscribers or modify next, prev. */ + void drainImpl(Subscriber *s) { + /* Before we call cb we need to make sure this subscriber will not report + * needsDrainage() since WebSocket::send will call drain from within the cb + * in that case.*/ + int numMessageIndices = s->numMessageIndices; + s->numMessageIndices = 0; + + /* Then we emit cb */ + for (int i = 0; i < numMessageIndices; i++) { + T &outgoingMessage = outgoingMessages[s->messageIndices[i]]; + + int flags = (i == numMessageIndices - 1) ? LAST : 0; + + /* Returning true will stop drainage short (such as when backpressure is + * too high) */ + if (cb(s, outgoingMessage, + (IteratorFlags)(flags | (i == 0 ? FIRST : 0)))) { + break; + } } + } - void unlinkDrainableSubscriber(Subscriber *s) { - if (s->prev) { - s->prev->next = s->next; - } - if (s->next) { - s->next->prev = s->prev; - } - /* If we are the head, then we also need to reset the head */ - if (drainableSubscribers == s) { - drainableSubscribers = s->next; - } + void unlinkDrainableSubscriber(Subscriber *s) { + if (s->prev) { + s->prev->next = s->next; + } + if (s->next) { + s->next->prev = s->prev; + } + /* If we are the head, then we also need to reset the head */ + if (drainableSubscribers == s) { + drainableSubscribers = s->next; } + } -public: + public: + TopicTree(std::function cb) + : cb(cb) {} - TopicTree(std::function cb) : cb(cb) { + /* Returns nullptr if not found */ + Topic *lookupTopic(std::string_view topic) { + auto it = topics.find(topic); + if (it == topics.end()) { + return nullptr; + } + return it->second.get(); + } + + /* Subscribe fails if we already are subscribed */ + Topic *subscribe(Subscriber *s, std::string_view topic) { + /* Notify user that they are doing something wrong here */ + checkIteratingSubscriber(s); + + /* Lookup or create new topic */ + Topic *topicPtr = lookupTopic(topic); + if (!topicPtr) { + Topic *newTopic = new Topic(topic); + topics.insert( + {std::string_view(newTopic->name.data(), newTopic->name.length()), + std::unique_ptr(newTopic)}); + topicPtr = newTopic; + } + /* Insert us in topic, insert topic in us */ + auto [it, inserted] = s->topics.insert(topicPtr); + if (!inserted) { + return nullptr; + } + topicPtr->insert(s); + + /* Success */ + return topicPtr; + } + + /* Returns ok, last, newCount */ + std::tuple unsubscribe(Subscriber *s, + std::string_view topic) { + /* Notify user that they are doing something wrong here */ + checkIteratingSubscriber(s); + + /* Lookup topic */ + Topic *topicPtr = lookupTopic(topic); + if (!topicPtr) { + /* If the topic doesn't exist we are assumed to still be subscribers of + * something */ + return {false, false, -1}; } - /* Returns nullptr if not found */ - Topic *lookupTopic(std::string_view topic) { - auto it = topics.find(topic); - if (it == topics.end()) { - return nullptr; - } - return it->second.get(); + /* Erase from our list first */ + if (s->topics.erase(topicPtr) == 0) { + return {false, false, -1}; } - /* Subscribe fails if we already are subscribed */ - Topic *subscribe(Subscriber *s, std::string_view topic) { - /* Notify user that they are doing something wrong here */ - checkIteratingSubscriber(s); - - /* Lookup or create new topic */ - Topic *topicPtr = lookupTopic(topic); - if (!topicPtr) { - Topic *newTopic = new Topic(topic); - topics.insert({std::string_view(newTopic->name.data(), newTopic->name.length()), std::unique_ptr(newTopic)}); - topicPtr = newTopic; - } + /* Remove us from topic */ + topicPtr->erase(s); - /* Insert us in topic, insert topic in us */ - auto [it, inserted] = s->topics.insert(topicPtr); - if (!inserted) { - return nullptr; - } - topicPtr->insert(s); + int newCount = topicPtr->size(); - /* Success */ - return topicPtr; + /* If there is no subscriber to this topic, remove it */ + if (!topicPtr->size()) { + /* Unique_ptr deletes the topic */ + topics.erase(topic); } - /* Returns ok, last, newCount */ - std::tuple unsubscribe(Subscriber *s, std::string_view topic) { - /* Notify user that they are doing something wrong here */ - checkIteratingSubscriber(s); + /* If we don't hold any topics we are to be freed altogether */ + return {true, s->topics.size() == 0, newCount}; + } - /* Lookup topic */ - Topic *topicPtr = lookupTopic(topic); - if (!topicPtr) { - /* If the topic doesn't exist we are assumed to still be subscribers of something */ - return {false, false, -1}; - } + /* Factory function for creating a Subscriber */ + Subscriber *createSubscriber() { return new Subscriber(); } - /* Erase from our list first */ - if (s->topics.erase(topicPtr) == 0) { - return {false, false, -1}; - } + /* This is used to end a Subscriber, before freeing it */ + void freeSubscriber(Subscriber *s) { + /* I guess we call this one even if we are not subscribers */ + if (!s) { + return; + } - /* Remove us from topic */ + /* For all topics, unsubscribe */ + for (Topic *topicPtr : s->topics) { + /* If we are the last subscriber, simply remove the whole topic */ + if (topicPtr->size() == 1) { + topics.erase(topicPtr->name); + } else { + /* Otherwise just remove us */ topicPtr->erase(s); - - int newCount = topicPtr->size(); - - /* If there is no subscriber to this topic, remove it */ - if (!topicPtr->size()) { - /* Unique_ptr deletes the topic */ - topics.erase(topic); - } - - /* If we don't hold any topics we are to be freed altogether */ - return {true, s->topics.size() == 0, newCount}; + } } - /* Factory function for creating a Subscriber */ - Subscriber *createSubscriber() { - return new Subscriber(); + /* We also need to unlink us */ + if (s->needsDrainage()) { + unlinkDrainableSubscriber(s); } - /* This is used to end a Subscriber, before freeing it */ - void freeSubscriber(Subscriber *s) { - - /* I guess we call this one even if we are not subscribers */ - if (!s) { - return; - } - - /* For all topics, unsubscribe */ - for (Topic *topicPtr : s->topics) { - /* If we are the last subscriber, simply remove the whole topic */ - if (topicPtr->size() == 1) { - topics.erase(topicPtr->name); - } else { - /* Otherwise just remove us */ - topicPtr->erase(s); - } - } - - /* We also need to unlink us */ - if (s->needsDrainage()) { - unlinkDrainableSubscriber(s); - } - - delete s; + delete s; + } + + /* Mainly used by WebSocket::send to drain one socket before sending */ + void drain(Subscriber *s) { + /* The list is undefined and cannot be touched unless needsDrainage(). */ + if (s->needsDrainage()) { + /* This function differs from drainImpl by properly unlinking + * the subscriber from drainableSubscribers. drainImpl does not. */ + unlinkDrainableSubscriber(s); + + /* This one always resets needsDrainage before it calls any cb's. + * Otherwise we would stackoverflow when sending after publish but before + * drain. */ + drainImpl(s); + + /* If we drained last subscriber, also clear outgoingMessages */ + if (!drainableSubscribers) { + outgoingMessages.clear(); + } } - - /* Mainly used by WebSocket::send to drain one socket before sending */ - void drain(Subscriber *s) { - /* The list is undefined and cannot be touched unless needsDrainage(). */ - if (s->needsDrainage()) { - /* This function differs from drainImpl by properly unlinking - * the subscriber from drainableSubscribers. drainImpl does not. */ - unlinkDrainableSubscriber(s); - - /* This one always resets needsDrainage before it calls any cb's. - * Otherwise we would stackoverflow when sending after publish but before drain. */ - drainImpl(s); - - /* If we drained last subscriber, also clear outgoingMessages */ - if (!drainableSubscribers) { - outgoingMessages.clear(); - } - } + } + + /* Called everytime we call send, to drain published messages so to sync + * outgoing messages */ + void drain() { + if (drainableSubscribers) { + /* Drain one socket a time */ + for (Subscriber *s = drainableSubscribers; s; s = s->next) { + /* Instead of unlinking every single subscriber, we just leave the list + * undefined and reset drainableSubscribers ptr below. */ + drainImpl(s); + } + /* Drain always clears drainableSubscribers and outgoingMessages */ + drainableSubscribers = nullptr; + outgoingMessages.clear(); } - - /* Called everytime we call send, to drain published messages so to sync outgoing messages */ - void drain() { - if (drainableSubscribers) { - /* Drain one socket a time */ - for (Subscriber *s = drainableSubscribers; s; s = s->next) { - /* Instead of unlinking every single subscriber, we just leave the list undefined - * and reset drainableSubscribers ptr below. */ - drainImpl(s); - } - /* Drain always clears drainableSubscribers and outgoingMessages */ - drainableSubscribers = nullptr; - outgoingMessages.clear(); - } + } + + /* Big messages bypass all buffering and land directly in backpressure */ + template + bool publishBig(Subscriber *sender, std::string_view topic, B &&bigMessage, + F cb) { + /* Do we even have this topic? */ + auto it = topics.find(topic); + if (it == topics.end()) { + return false; } - /* Big messages bypass all buffering and land directly in backpressure */ - template - bool publishBig(Subscriber *sender, std::string_view topic, B &&bigMessage, F cb) { - /* Do we even have this topic? */ - auto it = topics.find(topic); - if (it == topics.end()) { - return false; - } - - /* For all subscribers in topic */ - for (Subscriber *s : *it->second) { + /* For all subscribers in topic */ + for (Subscriber *s : *it->second) { + /* If we are sender then ignore us */ + if (sender != s) { + cb(s, bigMessage); + } + } - /* If we are sender then ignore us */ - if (sender != s) { - cb(s, bigMessage); - } - } + return true; + } - return true; + /* Linear in number of affected subscribers */ + bool publish(Subscriber *sender, std::string_view topic, T &&message) { + /* Do we even have this topic? */ + auto it = topics.find(topic); + if (it == topics.end()) { + return false; } - /* Linear in number of affected subscribers */ - bool publish(Subscriber *sender, std::string_view topic, T &&message) { - /* Do we even have this topic? */ - auto it = topics.find(topic); - if (it == topics.end()) { - return false; - } - - /* If we have more than 65k messages we need to drain every socket. */ - if (outgoingMessages.size() == UINT16_MAX) { - /* If there is a socket that is currently corked, this will be ugly as all sockets will drain - * to their own backpressure */ - drain(); - } + /* If we have more than 65k messages we need to drain every socket. */ + if (outgoingMessages.size() == UINT16_MAX) { + /* If there is a socket that is currently corked, this will be ugly as all + * sockets will drain to their own backpressure */ + drain(); + } - /* If nobody references this message, don't buffer it */ - bool referencedMessage = false; - - /* For all subscribers in topic */ - for (Subscriber *s : *it->second) { - - /* If we are sender then ignore us */ - if (sender != s) { - - /* At least one subscriber wants this message */ - referencedMessage = true; - - /* If we already have too many outgoing messages on this subscriber, drain it now */ - if (s->numMessageIndices == 32) { - /* This one does not need to check needsDrainage here but still does. */ - drain(s); - } - - /* Finally we can continue */ - s->messageIndices[s->numMessageIndices++] = (uint16_t)outgoingMessages.size(); - /* First message adds subscriber to list of drainable subscribers */ - if (s->numMessageIndices == 1) { - /* Insert us in the head of drainable subscribers */ - s->next = drainableSubscribers; - s->prev = nullptr; - if (s->next) { - s->next->prev = s; - } - drainableSubscribers = s; - } - } + /* If nobody references this message, don't buffer it */ + bool referencedMessage = false; + + /* For all subscribers in topic */ + for (Subscriber *s : *it->second) { + /* If we are sender then ignore us */ + if (sender != s) { + /* At least one subscriber wants this message */ + referencedMessage = true; + + /* If we already have too many outgoing messages on this subscriber, + * drain it now */ + if (s->numMessageIndices == 32) { + /* This one does not need to check needsDrainage here but still does. + */ + drain(s); } - /* Push this message and return with success */ - if (referencedMessage) { - outgoingMessages.emplace_back(message); + /* Finally we can continue */ + s->messageIndices[s->numMessageIndices++] = + (uint16_t)outgoingMessages.size(); + /* First message adds subscriber to list of drainable subscribers */ + if (s->numMessageIndices == 1) { + /* Insert us in the head of drainable subscribers */ + s->next = drainableSubscribers; + s->prev = nullptr; + if (s->next) { + s->next->prev = s; + } + drainableSubscribers = s; } + } + } - /* Success if someone wants it */ - return referencedMessage; + /* Push this message and return with success */ + if (referencedMessage) { + outgoingMessages.emplace_back(message); } + + /* Success if someone wants it */ + return referencedMessage; + } }; -} +} // namespace uWS #endif diff --git a/vendor/hydra/vendor/uwebsockets/src/Utilities.h b/vendor/hydra/vendor/uwebsockets/src/Utilities.h index 48c67e7d..841bc554 100644 --- a/vendor/hydra/vendor/uwebsockets/src/Utilities.h +++ b/vendor/hydra/vendor/uwebsockets/src/Utilities.h @@ -26,41 +26,41 @@ namespace uWS { namespace utils { inline int u32toaHex(uint32_t value, char *dst) { - char palette[] = "0123456789abcdef"; - char temp[10]; - char *p = temp; - do { - *p++ = palette[value & 15]; - value >>= 4; - } while (value > 0); + char palette[] = "0123456789abcdef"; + char temp[10]; + char *p = temp; + do { + *p++ = palette[value & 15]; + value >>= 4; + } while (value > 0); - int ret = (int) (p - temp); + int ret = (int)(p - temp); - do { - *dst++ = *--p; - } while (p != temp); + do { + *dst++ = *--p; + } while (p != temp); - return ret; + return ret; } inline int u64toa(uint64_t value, char *dst) { - char temp[20]; - char *p = temp; - do { - *p++ = (char) ((value % 10) + '0'); - value /= 10; - } while (value > 0); + char temp[20]; + char *p = temp; + do { + *p++ = (char)((value % 10) + '0'); + value /= 10; + } while (value > 0); - int ret = (int) (p - temp); + int ret = (int)(p - temp); - do { - *dst++ = *--p; - } while (p != temp); + do { + *dst++ = *--p; + } while (p != temp); - return ret; + return ret; } -} -} +} // namespace utils +} // namespace uWS -#endif // UWS_UTILITIES_H +#endif // UWS_UTILITIES_H diff --git a/vendor/hydra/vendor/uwebsockets/src/WebSocket.h b/vendor/hydra/vendor/uwebsockets/src/WebSocket.h index 0b738abe..26cc167c 100644 --- a/vendor/hydra/vendor/uwebsockets/src/WebSocket.h +++ b/vendor/hydra/vendor/uwebsockets/src/WebSocket.h @@ -18,365 +18,432 @@ #ifndef UWS_WEBSOCKET_H #define UWS_WEBSOCKET_H -#include "WebSocketData.h" -#include "WebSocketProtocol.h" +#include + #include "AsyncSocket.h" #include "WebSocketContextData.h" - -#include +#include "WebSocketData.h" +#include "WebSocketProtocol.h" namespace uWS { template struct WebSocket : AsyncSocket { - template friend struct TemplatedApp; - template friend struct HttpResponse; -private: - typedef AsyncSocket Super; - - void *init(bool perMessageDeflate, CompressOptions compressOptions, BackPressure &&backpressure) { - new (us_socket_ext(SSL, (us_socket_t *) this)) WebSocketData(perMessageDeflate, compressOptions, std::move(backpressure)); - return this; + template + friend struct TemplatedApp; + template + friend struct HttpResponse; + + private: + typedef AsyncSocket Super; + + void *init(bool perMessageDeflate, CompressOptions compressOptions, + BackPressure &&backpressure) { + new (us_socket_ext(SSL, (us_socket_t *)this)) WebSocketData( + perMessageDeflate, compressOptions, std::move(backpressure)); + return this; + } + + public: + /* Returns pointer to the per socket user data */ + USERDATA *getUserData() { + WebSocketData *webSocketData = + (WebSocketData *)us_socket_ext(SSL, (us_socket_t *)this); + /* We just have it overallocated by sizeof type */ + return (USERDATA *)(webSocketData + 1); + } + + /* See AsyncSocket */ + using Super::getBufferedAmount; + using Super::getNativeHandle; + using Super::getRemoteAddress; + using Super::getRemoteAddressAsText; + + /* WebSocket close cannot be an alias to AsyncSocket::close since + * we need to check first if it was shut down by remote peer */ + us_socket_t *close() { + if (us_socket_is_closed(SSL, (us_socket_t *)this)) { + return nullptr; + } + WebSocketData *webSocketData = (WebSocketData *)Super::getAsyncSocketData(); + if (webSocketData->isShuttingDown) { + return nullptr; } -public: - /* Returns pointer to the per socket user data */ - USERDATA *getUserData() { - WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); - /* We just have it overallocated by sizeof type */ - return (USERDATA *) (webSocketData + 1); + return us_socket_close(SSL, (us_socket_t *)this, 0, nullptr); + } + + enum SendStatus : int { BACKPRESSURE, SUCCESS, DROPPED }; + + /* Sending fragmented messages puts a bit of effort on the user; you must not + * interleave regular sends with fragmented sends and you must + * sendFirstFragment, [sendFragment], then finally sendLastFragment. */ + SendStatus sendFirstFragment(std::string_view message, + OpCode opCode = OpCode::BINARY, + bool compress = false) { + return send(message, opCode, compress, false); + } + + SendStatus sendFragment(std::string_view message, bool compress = false) { + return send(message, CONTINUATION, compress, false); + } + + SendStatus sendLastFragment(std::string_view message, bool compress = false) { + return send(message, CONTINUATION, compress, true); + } + + /* Send or buffer a WebSocket frame, compressed or not. Returns BACKPRESSURE + * on increased user space backpressure, DROPPED on dropped message (due to + * backpressure) or SUCCCESS if you are free to send even more now. */ + SendStatus send(std::string_view message, OpCode opCode = OpCode::BINARY, + bool compress = false, bool fin = true) { + WebSocketContextData *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, + (us_socket_context_t *)us_socket_context(SSL, (us_socket_t *)this)); + + /* Skip sending and report success if we are over the limit of + * maxBackpressure */ + if (webSocketContextData->maxBackpressure && + webSocketContextData->maxBackpressure < getBufferedAmount()) { + /* Also defer a close if we should */ + if (webSocketContextData->closeOnBackpressureLimit) { + us_socket_shutdown_read(SSL, (us_socket_t *)this); + } + + /* It is okay to call send again from within this callback since we + * immediately return with DROPPED afterwards */ + if (webSocketContextData->droppedHandler) { + webSocketContextData->droppedHandler(this, message, opCode); + } + + return DROPPED; } - /* See AsyncSocket */ - using Super::getBufferedAmount; - using Super::getRemoteAddress; - using Super::getRemoteAddressAsText; - using Super::getNativeHandle; - - /* WebSocket close cannot be an alias to AsyncSocket::close since - * we need to check first if it was shut down by remote peer */ - us_socket_t *close() { - if (us_socket_is_closed(SSL, (us_socket_t *) this)) { - return nullptr; + /* If we are subscribers and have messages to drain we need to drain them + * here to stay synced */ + WebSocketData *webSocketData = (WebSocketData *)Super::getAsyncSocketData(); + + /* Special path for long sends of non-compressed, non-SSL messages */ + if (message.length() >= 16 * 1024 && !compress && !SSL && + !webSocketData->subscriber && getBufferedAmount() == 0 && + Super::getLoopData()->corkOffset == 0) { + char header[10]; + int header_length = (int)protocol::formatMessage( + header, "", 0, opCode, message.length(), compress, fin); + int written = + us_socket_write2(0, (struct us_socket_t *)this, header, header_length, + message.data(), (int)message.length()); + + if (written != header_length + (int)message.length()) { + /* Buffer up backpressure */ + if (written > header_length) { + webSocketData->buffer.append( + message.data() + written - header_length, + message.length() - (size_t)(written - header_length)); + } else { + webSocketData->buffer.append(header + written, + (size_t)header_length - (size_t)written); + webSocketData->buffer.append(message.data(), message.length()); } - WebSocketData *webSocketData = (WebSocketData *) Super::getAsyncSocketData(); - if (webSocketData->isShuttingDown) { - return nullptr; + /* We cannot still be corked if we have backpressure. + * We also cannot uncork normally since it will re-write the already + * buffered up backpressure again. */ + Super::uncorkWithoutSending(); + return BACKPRESSURE; + } + } else { + if (webSocketData->subscriber) { + /* This will call back into us, send. */ + webSocketContextData->topicTree->drain(webSocketData->subscriber); + } + + /* Transform the message to compressed domain if requested */ + if (compress) { + WebSocketData *webSocketData = + (WebSocketData *)Super::getAsyncSocketData(); + + /* Check and correct the compress hint. It is never valid to compress 0 + * bytes */ + if (message.length() && opCode < 3 && + webSocketData->compressionStatus == WebSocketData::ENABLED) { + LoopData *loopData = Super::getLoopData(); + /* Compress using either shared or dedicated deflationStream */ + if (webSocketData->deflationStream) { + message = webSocketData->deflationStream->deflate( + loopData->zlibContext, message, false); + } else { + message = loopData->deflationStream->deflate(loopData->zlibContext, + message, true); + } + } else { + compress = false; } - - return us_socket_close(SSL, (us_socket_t *) this, 0, nullptr); + } + + /* Get size, allocate size, write if needed */ + size_t messageFrameSize = protocol::messageFrameSize(message.length()); + auto [sendBuffer, sendBufferAttribute] = + Super::getSendBuffer(messageFrameSize); + protocol::formatMessage(sendBuffer, message.data(), + message.length(), opCode, + message.length(), compress, fin); + + /* Depending on size of message we have different paths */ + if (sendBufferAttribute == SendBufferAttribute::NEEDS_DRAIN) { + /* This is a drain */ + auto [written, failed] = Super::write(nullptr, 0); + if (failed) { + /* Return false for failure, skipping to reset the timeout below */ + return BACKPRESSURE; + } + } else if (sendBufferAttribute == SendBufferAttribute::NEEDS_UNCORK) { + /* Uncork if we came here uncorked */ + auto [written, failed] = Super::uncork(); + if (failed) { + return BACKPRESSURE; + } + } } - enum SendStatus : int { - BACKPRESSURE, - SUCCESS, - DROPPED - }; - - /* Sending fragmented messages puts a bit of effort on the user; you must not interleave regular sends - * with fragmented sends and you must sendFirstFragment, [sendFragment], then finally sendLastFragment. */ - SendStatus sendFirstFragment(std::string_view message, OpCode opCode = OpCode::BINARY, bool compress = false) { - return send(message, opCode, compress, false); + /* Every successful send resets the timeout */ + if (webSocketContextData->resetIdleTimeoutOnSend) { + Super::timeout(webSocketContextData->idleTimeoutComponents.first); + WebSocketData *webSocketData = + (WebSocketData *)Super::getAsyncSocketData(); + webSocketData->hasTimedOut = false; } - SendStatus sendFragment(std::string_view message, bool compress = false) { - return send(message, CONTINUATION, compress, false); + /* Return success */ + return SUCCESS; + } + + /* Send websocket close frame, emit close event, send FIN if successful. + * Will not append a close reason if code is 0 or 1005. */ + void end(int code = 0, std::string_view message = {}) { + /* Check if we already called this one */ + WebSocketData *webSocketData = + (WebSocketData *)us_socket_ext(SSL, (us_socket_t *)this); + if (webSocketData->isShuttingDown) { + return; } - SendStatus sendLastFragment(std::string_view message, bool compress = false) { - return send(message, CONTINUATION, compress, true); + /* We postpone any FIN sending to either drainage or uncorking */ + webSocketData->isShuttingDown = true; + + /* Format and send the close frame */ + static const int MAX_CLOSE_PAYLOAD = 123; + size_t length = std::min(MAX_CLOSE_PAYLOAD, message.length()); + char closePayload[MAX_CLOSE_PAYLOAD + 2]; + size_t closePayloadLength = protocol::formatClosePayload( + closePayload, (uint16_t)code, message.data(), length); + bool ok = + send(std::string_view(closePayload, closePayloadLength), OpCode::CLOSE); + + /* FIN if we are ok and not corked */ + if (!this->isCorked()) { + if (ok) { + /* If we are not corked, and we just sent off everything, we need to FIN + * right here. In all other cases, we need to fin either if uncork was + * successful, or when drainage is complete. */ + this->shutdown(); + } } - /* Send or buffer a WebSocket frame, compressed or not. Returns BACKPRESSURE on increased user space backpressure, - * DROPPED on dropped message (due to backpressure) or SUCCCESS if you are free to send even more now. */ - SendStatus send(std::string_view message, OpCode opCode = OpCode::BINARY, bool compress = false, bool fin = true) { - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, - (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) - ); - - /* Skip sending and report success if we are over the limit of maxBackpressure */ - if (webSocketContextData->maxBackpressure && webSocketContextData->maxBackpressure < getBufferedAmount()) { - /* Also defer a close if we should */ - if (webSocketContextData->closeOnBackpressureLimit) { - us_socket_shutdown_read(SSL, (us_socket_t *) this); - } - - /* It is okay to call send again from within this callback since we immediately return with DROPPED afterwards */ - if (webSocketContextData->droppedHandler) { - webSocketContextData->droppedHandler(this, message, opCode); - } - - return DROPPED; - } - - /* If we are subscribers and have messages to drain we need to drain them here to stay synced */ - WebSocketData *webSocketData = (WebSocketData *) Super::getAsyncSocketData(); - - /* Special path for long sends of non-compressed, non-SSL messages */ - if (message.length() >= 16 * 1024 && !compress && !SSL && !webSocketData->subscriber && getBufferedAmount() == 0 && Super::getLoopData()->corkOffset == 0) { - char header[10]; - int header_length = (int) protocol::formatMessage(header, "", 0, opCode, message.length(), compress, fin); - int written = us_socket_write2(0, (struct us_socket_t *)this, header, header_length, message.data(), (int) message.length()); - - if (written != header_length + (int) message.length()) { - /* Buffer up backpressure */ - if (written > header_length) { - webSocketData->buffer.append(message.data() + written - header_length, message.length() - (size_t) (written - header_length)); - } else { - webSocketData->buffer.append(header + written, (size_t) header_length - (size_t) written); - webSocketData->buffer.append(message.data(), message.length()); - } - /* We cannot still be corked if we have backpressure. - * We also cannot uncork normally since it will re-write the already buffered - * up backpressure again. */ - Super::uncorkWithoutSending(); - return BACKPRESSURE; - } - } else { - - if (webSocketData->subscriber) { - /* This will call back into us, send. */ - webSocketContextData->topicTree->drain(webSocketData->subscriber); - } - - /* Transform the message to compressed domain if requested */ - if (compress) { - WebSocketData *webSocketData = (WebSocketData *) Super::getAsyncSocketData(); - - /* Check and correct the compress hint. It is never valid to compress 0 bytes */ - if (message.length() && opCode < 3 && webSocketData->compressionStatus == WebSocketData::ENABLED) { - LoopData *loopData = Super::getLoopData(); - /* Compress using either shared or dedicated deflationStream */ - if (webSocketData->deflationStream) { - message = webSocketData->deflationStream->deflate(loopData->zlibContext, message, false); - } else { - message = loopData->deflationStream->deflate(loopData->zlibContext, message, true); - } - } else { - compress = false; - } - } - - /* Get size, allocate size, write if needed */ - size_t messageFrameSize = protocol::messageFrameSize(message.length()); - auto [sendBuffer, sendBufferAttribute] = Super::getSendBuffer(messageFrameSize); - protocol::formatMessage(sendBuffer, message.data(), message.length(), opCode, message.length(), compress, fin); - - /* Depending on size of message we have different paths */ - if (sendBufferAttribute == SendBufferAttribute::NEEDS_DRAIN) { - /* This is a drain */ - auto[written, failed] = Super::write(nullptr, 0); - if (failed) { - /* Return false for failure, skipping to reset the timeout below */ - return BACKPRESSURE; - } - } else if (sendBufferAttribute == SendBufferAttribute::NEEDS_UNCORK) { - /* Uncork if we came here uncorked */ - auto [written, failed] = Super::uncork(); - if (failed) { - return BACKPRESSURE; - } - } - - } - - /* Every successful send resets the timeout */ - if (webSocketContextData->resetIdleTimeoutOnSend) { - Super::timeout(webSocketContextData->idleTimeoutComponents.first); - WebSocketData *webSocketData = (WebSocketData *) Super::getAsyncSocketData(); - webSocketData->hasTimedOut = false; - } - - /* Return success */ - return SUCCESS; + WebSocketContextData *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, + (us_socket_context_t *)us_socket_context(SSL, (us_socket_t *)this)); + + /* Set shorter timeout (use ping-timeout) to avoid long hanging sockets + * after end() on broken connections */ + Super::timeout(webSocketContextData->idleTimeoutComponents.second); + + /* At this point we iterate all currently held subscriptions and emit an + * event for all of them */ + if (webSocketData->subscriber && + webSocketContextData->subscriptionHandler) { + for (Topic *t : webSocketData->subscriber->topics) { + webSocketContextData->subscriptionHandler( + this, t->name, (int)t->size() - 1, (int)t->size()); + } } - /* Send websocket close frame, emit close event, send FIN if successful. - * Will not append a close reason if code is 0 or 1005. */ - void end(int code = 0, std::string_view message = {}) { - /* Check if we already called this one */ - WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); - if (webSocketData->isShuttingDown) { - return; - } - - /* We postpone any FIN sending to either drainage or uncorking */ - webSocketData->isShuttingDown = true; - - /* Format and send the close frame */ - static const int MAX_CLOSE_PAYLOAD = 123; - size_t length = std::min(MAX_CLOSE_PAYLOAD, message.length()); - char closePayload[MAX_CLOSE_PAYLOAD + 2]; - size_t closePayloadLength = protocol::formatClosePayload(closePayload, (uint16_t) code, message.data(), length); - bool ok = send(std::string_view(closePayload, closePayloadLength), OpCode::CLOSE); - - /* FIN if we are ok and not corked */ - if (!this->isCorked()) { - if (ok) { - /* If we are not corked, and we just sent off everything, we need to FIN right here. - * In all other cases, we need to fin either if uncork was successful, or when drainage is complete. */ - this->shutdown(); - } - } - - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, - (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) - ); + /* Make sure to unsubscribe from any pub/sub node at exit */ + webSocketContextData->topicTree->freeSubscriber(webSocketData->subscriber); + webSocketData->subscriber = nullptr; - /* Set shorter timeout (use ping-timeout) to avoid long hanging sockets after end() on broken connections */ - Super::timeout(webSocketContextData->idleTimeoutComponents.second); - - /* At this point we iterate all currently held subscriptions and emit an event for all of them */ - if (webSocketData->subscriber && webSocketContextData->subscriptionHandler) { - for (Topic *t : webSocketData->subscriber->topics) { - webSocketContextData->subscriptionHandler(this, t->name, (int) t->size() - 1, (int) t->size()); - } - } - - /* Make sure to unsubscribe from any pub/sub node at exit */ - webSocketContextData->topicTree->freeSubscriber(webSocketData->subscriber); - webSocketData->subscriber = nullptr; - - /* Emit close event */ - if (webSocketContextData->closeHandler) { - webSocketContextData->closeHandler(this, code, message); - } - ((USERDATA *) this->getUserData())->~USERDATA(); + /* Emit close event */ + if (webSocketContextData->closeHandler) { + webSocketContextData->closeHandler(this, code, message); } - - /* Corks the response if possible. Leaves already corked socket be. */ - void cork(MoveOnlyFunction &&handler) { - if (!Super::isCorked() && Super::canCork()) { - Super::cork(); - handler(); - - /* There is no timeout when failing to uncork for WebSockets, - * as that is handled by idleTimeout */ - auto [written, failed] = Super::uncork(); - (void)written; - (void)failed; - } else { - /* We are already corked, or can't cork so let's just call the handler */ - handler(); - } + ((USERDATA *)this->getUserData())->~USERDATA(); + } + + /* Corks the response if possible. Leaves already corked socket be. */ + void cork(MoveOnlyFunction &&handler) { + if (!Super::isCorked() && Super::canCork()) { + Super::cork(); + handler(); + + /* There is no timeout when failing to uncork for WebSockets, + * as that is handled by idleTimeout */ + auto [written, failed] = Super::uncork(); + (void)written; + (void)failed; + } else { + /* We are already corked, or can't cork so let's just call the handler */ + handler(); + } + } + + /* Subscribe to a topic according to MQTT rules and syntax. Returns success */ + bool subscribe(std::string_view topic, bool = false) { + WebSocketContextData *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, + (us_socket_context_t *)us_socket_context(SSL, (us_socket_t *)this)); + + /* Make us a subscriber if we aren't yet */ + WebSocketData *webSocketData = + (WebSocketData *)us_socket_ext(SSL, (us_socket_t *)this); + if (!webSocketData->subscriber) { + webSocketData->subscriber = + webSocketContextData->topicTree->createSubscriber(); + webSocketData->subscriber->user = this; } - /* Subscribe to a topic according to MQTT rules and syntax. Returns success */ - bool subscribe(std::string_view topic, bool = false) { - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, - (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) - ); - - /* Make us a subscriber if we aren't yet */ - WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); - if (!webSocketData->subscriber) { - webSocketData->subscriber = webSocketContextData->topicTree->createSubscriber(); - webSocketData->subscriber->user = this; - } + /* Cannot return numSubscribers as this is only for this particular + * websocket context */ + Topic *topicOrNull = webSocketContextData->topicTree->subscribe( + webSocketData->subscriber, topic); + if (topicOrNull && webSocketContextData->subscriptionHandler) { + /* Emit this socket, the topic, new count, old count */ + webSocketContextData->subscriptionHandler( + this, topic, (int)topicOrNull->size(), (int)topicOrNull->size() - 1); + } - /* Cannot return numSubscribers as this is only for this particular websocket context */ - Topic *topicOrNull = webSocketContextData->topicTree->subscribe(webSocketData->subscriber, topic); - if (topicOrNull && webSocketContextData->subscriptionHandler) { - /* Emit this socket, the topic, new count, old count */ - webSocketContextData->subscriptionHandler(this, topic, (int) topicOrNull->size(), (int) topicOrNull->size() - 1); - } + /* Subscribe always succeeds */ + return true; + } - /* Subscribe always succeeds */ - return true; - } + /* Unsubscribe from a topic, returns true if we were subscribed. */ + bool unsubscribe(std::string_view topic, bool = false) { + WebSocketContextData *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, + (us_socket_context_t *)us_socket_context(SSL, (us_socket_t *)this)); - /* Unsubscribe from a topic, returns true if we were subscribed. */ - bool unsubscribe(std::string_view topic, bool = false) { - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, - (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) - ); - - WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); - - if (!webSocketData->subscriber) { return false; } - - /* Cannot return numSubscribers as this is only for this particular websocket context */ - auto [ok, last, newCount] = webSocketContextData->topicTree->unsubscribe(webSocketData->subscriber, topic); - /* Emit subscription event if last */ - if (ok && webSocketContextData->subscriptionHandler) { - webSocketContextData->subscriptionHandler(this, topic, newCount, newCount + 1); - } + WebSocketData *webSocketData = + (WebSocketData *)us_socket_ext(SSL, (us_socket_t *)this); - /* Leave us as subscribers even if we subscribe to nothing (last unsubscribed topic might miss its message otherwise) */ + if (!webSocketData->subscriber) { + return false; + } - return ok; + /* Cannot return numSubscribers as this is only for this particular + * websocket context */ + auto [ok, last, newCount] = webSocketContextData->topicTree->unsubscribe( + webSocketData->subscriber, topic); + /* Emit subscription event if last */ + if (ok && webSocketContextData->subscriptionHandler) { + webSocketContextData->subscriptionHandler(this, topic, newCount, + newCount + 1); } - /* Returns whether this socket is subscribed to the specified topic */ - bool isSubscribed(std::string_view topic) { - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, - (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) - ); + /* Leave us as subscribers even if we subscribe to nothing (last + * unsubscribed topic might miss its message otherwise) */ - WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); - if (!webSocketData->subscriber) { - return false; - } + return ok; + } - Topic *topicPtr = webSocketContextData->topicTree->lookupTopic(topic); - if (!topicPtr) { - return false; - } + /* Returns whether this socket is subscribed to the specified topic */ + bool isSubscribed(std::string_view topic) { + WebSocketContextData *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, + (us_socket_context_t *)us_socket_context(SSL, (us_socket_t *)this)); - return topicPtr->count(webSocketData->subscriber); + WebSocketData *webSocketData = + (WebSocketData *)us_socket_ext(SSL, (us_socket_t *)this); + if (!webSocketData->subscriber) { + return false; } - /* Iterates all topics of this WebSocket. Every topic is represented by its full name. - * Can be called in close handler. It is possible to modify the subscription list while - * inside the callback ONLY IF not modifying the topic passed to the callback. - * Topic names are valid only for the duration of the callback. */ - void iterateTopics(MoveOnlyFunction cb) { - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, - (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) - ); - - WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); - if (webSocketData->subscriber) { - /* Lock this subscriber for unsubscription / subscription */ - webSocketContextData->topicTree->iteratingSubscriber = webSocketData->subscriber; - - for (Topic *topicPtr : webSocketData->subscriber->topics) { - cb({topicPtr->name.data(), topicPtr->name.length()}); - } - - /* Unlock subscriber */ - webSocketContextData->topicTree->iteratingSubscriber = nullptr; - } + Topic *topicPtr = webSocketContextData->topicTree->lookupTopic(topic); + if (!topicPtr) { + return false; } - /* Publish a message to a topic according to MQTT rules and syntax. Returns success. - * We, the WebSocket, must be subscribed to the topic itself and if so - no message will be sent to ourselves. - * Use App::publish for an unconditional publish that simply publishes to whomever might be subscribed. */ - bool publish(std::string_view topic, std::string_view message, OpCode opCode = OpCode::TEXT, bool compress = false) { - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, - (us_socket_context_t *) us_socket_context(SSL, (us_socket_t *) this) - ); - - /* We cannot be a subscriber of this topic if we are not a subscriber of anything */ - WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) this); - if (!webSocketData->subscriber) { - /* Failure, but still do return the number of subscribers */ - return false; - } - - /* Publish as sender, does not receive its own messages even if subscribed to relevant topics */ - if (message.length() >= LoopData::CORK_BUFFER_SIZE) { - return webSocketContextData->topicTree->publishBig(webSocketData->subscriber, topic, {message, opCode, compress}, [](Subscriber *s, TopicTreeBigMessage &message) { - auto *ws = (WebSocket *) s->user; + return topicPtr->count(webSocketData->subscriber); + } + + /* Iterates all topics of this WebSocket. Every topic is represented by its + * full name. Can be called in close handler. It is possible to modify the + * subscription list while inside the callback ONLY IF not modifying the topic + * passed to the callback. Topic names are valid only for the duration of the + * callback. */ + void iterateTopics(MoveOnlyFunction cb) { + WebSocketContextData *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, + (us_socket_context_t *)us_socket_context(SSL, (us_socket_t *)this)); + + WebSocketData *webSocketData = + (WebSocketData *)us_socket_ext(SSL, (us_socket_t *)this); + if (webSocketData->subscriber) { + /* Lock this subscriber for unsubscription / subscription */ + webSocketContextData->topicTree->iteratingSubscriber = + webSocketData->subscriber; + + for (Topic *topicPtr : webSocketData->subscriber->topics) { + cb({topicPtr->name.data(), topicPtr->name.length()}); + } + + /* Unlock subscriber */ + webSocketContextData->topicTree->iteratingSubscriber = nullptr; + } + } + + /* Publish a message to a topic according to MQTT rules and syntax. Returns + * success. We, the WebSocket, must be subscribed to the topic itself and if + * so - no message will be sent to ourselves. Use App::publish for an + * unconditional publish that simply publishes to whomever might be + * subscribed. */ + bool publish(std::string_view topic, std::string_view message, + OpCode opCode = OpCode::TEXT, bool compress = false) { + WebSocketContextData *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, + (us_socket_context_t *)us_socket_context(SSL, (us_socket_t *)this)); + + /* We cannot be a subscriber of this topic if we are not a subscriber of + * anything */ + WebSocketData *webSocketData = + (WebSocketData *)us_socket_ext(SSL, (us_socket_t *)this); + if (!webSocketData->subscriber) { + /* Failure, but still do return the number of subscribers */ + return false; + } - ws->send(message.message, (OpCode)message.opCode, message.compress); - }); - } else { - return webSocketContextData->topicTree->publish(webSocketData->subscriber, topic, {std::string(message), opCode, compress}); - } + /* Publish as sender, does not receive its own messages even if subscribed + * to relevant topics */ + if (message.length() >= LoopData::CORK_BUFFER_SIZE) { + return webSocketContextData->topicTree->publishBig( + webSocketData->subscriber, topic, {message, opCode, compress}, + [](Subscriber *s, TopicTreeBigMessage &message) { + auto *ws = (WebSocket *)s->user; + + ws->send(message.message, (OpCode)message.opCode, message.compress); + }); + } else { + return webSocketContextData->topicTree->publish( + webSocketData->subscriber, topic, + {std::string(message), opCode, compress}); } + } }; -} +} // namespace uWS -#endif // UWS_WEBSOCKET_H +#endif // UWS_WEBSOCKET_H diff --git a/vendor/hydra/vendor/uwebsockets/src/WebSocketContext.h b/vendor/hydra/vendor/uwebsockets/src/WebSocketContext.h index 8b8b418b..40e49d1f 100644 --- a/vendor/hydra/vendor/uwebsockets/src/WebSocketContext.h +++ b/vendor/hydra/vendor/uwebsockets/src/WebSocketContext.h @@ -18,419 +18,536 @@ #ifndef UWS_WEBSOCKETCONTEXT_H #define UWS_WEBSOCKETCONTEXT_H +#include "WebSocket.h" #include "WebSocketContextData.h" -#include "WebSocketProtocol.h" #include "WebSocketData.h" -#include "WebSocket.h" +#include "WebSocketProtocol.h" namespace uWS { template struct WebSocketContext { - template friend struct TemplatedApp; - template friend struct WebSocketProtocol; -private: - WebSocketContext() = delete; - - us_socket_context_t *getSocketContext() { - return (us_socket_context_t *) this; - } - - WebSocketContextData *getExt() { - return (WebSocketContextData *) us_socket_context_ext(SSL, (us_socket_context_t *) this); + template + friend struct TemplatedApp; + template + friend struct WebSocketProtocol; + + private: + WebSocketContext() = delete; + + us_socket_context_t *getSocketContext() { + return (us_socket_context_t *)this; + } + + WebSocketContextData *getExt() { + return (WebSocketContextData *)us_socket_context_ext( + SSL, (us_socket_context_t *)this); + } + + /* If we have negotiated compression, set this frame compressed */ + static bool setCompressed(WebSocketState * /*wState*/, void *s) { + WebSocketData *webSocketData = + (WebSocketData *)us_socket_ext(SSL, (us_socket_t *)s); + + if (webSocketData->compressionStatus == + WebSocketData::CompressionStatus::ENABLED) { + webSocketData->compressionStatus = + WebSocketData::CompressionStatus::COMPRESSED_FRAME; + return true; + } else { + return false; } - - /* If we have negotiated compression, set this frame compressed */ - static bool setCompressed(WebSocketState */*wState*/, void *s) { - WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) s); - - if (webSocketData->compressionStatus == WebSocketData::CompressionStatus::ENABLED) { - webSocketData->compressionStatus = WebSocketData::CompressionStatus::COMPRESSED_FRAME; + } + + static void forceClose(WebSocketState * /*wState*/, void *s, + std::string_view reason = {}) { + us_socket_close(SSL, (us_socket_t *)s, (int)reason.length(), + (void *)reason.data()); + } + + /* Returns true on breakage */ + static bool handleFragment(char *data, size_t length, + unsigned int remainingBytes, int opCode, bool fin, + WebSocketState *webSocketState, + void *s) { + /* WebSocketData and WebSocketContextData */ + WebSocketContextData *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, us_socket_context(SSL, (us_socket_t *)s)); + WebSocketData *webSocketData = + (WebSocketData *)us_socket_ext(SSL, (us_socket_t *)s); + + /* Is this a non-control frame? */ + if (opCode < 3) { + /* Did we get everything in one go? */ + if (!remainingBytes && fin && !webSocketData->fragmentBuffer.length()) { + /* Handle compressed frame */ + if (webSocketData->compressionStatus == + WebSocketData::CompressionStatus::COMPRESSED_FRAME) { + webSocketData->compressionStatus = + WebSocketData::CompressionStatus::ENABLED; + + LoopData *loopData = (LoopData *)us_loop_ext(us_socket_context_loop( + SSL, us_socket_context(SSL, (us_socket_t *)s))); + /* Decompress using shared or dedicated decompressor */ + std::optional inflatedFrame; + if (webSocketData->inflationStream) { + inflatedFrame = webSocketData->inflationStream->inflate( + loopData->zlibContext, {data, length}, + webSocketContextData->maxPayloadLength, false); + } else { + inflatedFrame = loopData->inflationStream->inflate( + loopData->zlibContext, {data, length}, + webSocketContextData->maxPayloadLength, true); + } + + if (!inflatedFrame.has_value()) { + forceClose(webSocketState, s, ERR_TOO_BIG_MESSAGE_INFLATION); return true; - } else { - return false; + } else { + data = (char *)inflatedFrame->data(); + length = inflatedFrame->length(); + } } - } - - static void forceClose(WebSocketState */*wState*/, void *s, std::string_view reason = {}) { - us_socket_close(SSL, (us_socket_t *) s, (int) reason.length(), (void *) reason.data()); - } - - /* Returns true on breakage */ - static bool handleFragment(char *data, size_t length, unsigned int remainingBytes, int opCode, bool fin, WebSocketState *webSocketState, void *s) { - /* WebSocketData and WebSocketContextData */ - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); - WebSocketData *webSocketData = (WebSocketData *) us_socket_ext(SSL, (us_socket_t *) s); - - /* Is this a non-control frame? */ - if (opCode < 3) { - /* Did we get everything in one go? */ - if (!remainingBytes && fin && !webSocketData->fragmentBuffer.length()) { - - /* Handle compressed frame */ - if (webSocketData->compressionStatus == WebSocketData::CompressionStatus::COMPRESSED_FRAME) { - webSocketData->compressionStatus = WebSocketData::CompressionStatus::ENABLED; - - LoopData *loopData = (LoopData *) us_loop_ext(us_socket_context_loop(SSL, us_socket_context(SSL, (us_socket_t *) s))); - /* Decompress using shared or dedicated decompressor */ - std::optional inflatedFrame; - if (webSocketData->inflationStream) { - inflatedFrame = webSocketData->inflationStream->inflate(loopData->zlibContext, {data, length}, webSocketContextData->maxPayloadLength, false); - } else { - inflatedFrame = loopData->inflationStream->inflate(loopData->zlibContext, {data, length}, webSocketContextData->maxPayloadLength, true); - } - - if (!inflatedFrame.has_value()) { - forceClose(webSocketState, s, ERR_TOO_BIG_MESSAGE_INFLATION); - return true; - } else { - data = (char *) inflatedFrame->data(); - length = inflatedFrame->length(); - } - } - /* Check text messages for Utf-8 validity */ - if (opCode == 1 && !protocol::isValidUtf8((unsigned char *) data, length)) { - forceClose(webSocketState, s, ERR_INVALID_TEXT); - return true; - } - - /* Emit message event & break if we are closed or shut down when returning */ - if (webSocketContextData->messageHandler) { - webSocketContextData->messageHandler((WebSocket *) s, std::string_view(data, length), (OpCode) opCode); - if (us_socket_is_closed(SSL, (us_socket_t *) s) || webSocketData->isShuttingDown) { - return true; - } - } - } else { - /* Allocate fragment buffer up front first time */ - if (!webSocketData->fragmentBuffer.length()) { - webSocketData->fragmentBuffer.reserve(length + remainingBytes); - } - /* Fragments forming a big message are not caught until appending them */ - if (refusePayloadLength(length + webSocketData->fragmentBuffer.length(), webSocketState, s)) { - forceClose(webSocketState, s, ERR_TOO_BIG_MESSAGE); - return true; - } - webSocketData->fragmentBuffer.append(data, length); - - /* Are we done now? */ - // todo: what if we don't have any remaining bytes yet we are not fin? forceclose! - if (!remainingBytes && fin) { - - /* Handle compression */ - if (webSocketData->compressionStatus == WebSocketData::CompressionStatus::COMPRESSED_FRAME) { - webSocketData->compressionStatus = WebSocketData::CompressionStatus::ENABLED; - - /* 9 bytes of padding for libdeflate, 4 for zlib */ - webSocketData->fragmentBuffer.append("123456789"); - - LoopData *loopData = (LoopData *) us_loop_ext( - us_socket_context_loop(SSL, - us_socket_context(SSL, (us_socket_t *) s) - ) - ); - - /* Decompress using shared or dedicated decompressor */ - std::optional inflatedFrame; - if (webSocketData->inflationStream) { - inflatedFrame = webSocketData->inflationStream->inflate(loopData->zlibContext, {webSocketData->fragmentBuffer.data(), webSocketData->fragmentBuffer.length() - 9}, webSocketContextData->maxPayloadLength, false); - } else { - inflatedFrame = loopData->inflationStream->inflate(loopData->zlibContext, {webSocketData->fragmentBuffer.data(), webSocketData->fragmentBuffer.length() - 9}, webSocketContextData->maxPayloadLength, true); - } - - if (!inflatedFrame.has_value()) { - forceClose(webSocketState, s, ERR_TOO_BIG_MESSAGE_INFLATION); - return true; - } else { - data = (char *) inflatedFrame->data(); - length = inflatedFrame->length(); - } - - - } else { - // reset length and data ptrs - length = webSocketData->fragmentBuffer.length(); - data = webSocketData->fragmentBuffer.data(); - } - - /* Check text messages for Utf-8 validity */ - if (opCode == 1 && !protocol::isValidUtf8((unsigned char *) data, length)) { - forceClose(webSocketState, s, ERR_INVALID_TEXT); - return true; - } - - /* Emit message and check for shutdown or close */ - if (webSocketContextData->messageHandler) { - webSocketContextData->messageHandler((WebSocket *) s, std::string_view(data, length), (OpCode) opCode); - if (us_socket_is_closed(SSL, (us_socket_t *) s) || webSocketData->isShuttingDown) { - return true; - } - } - - /* If we shutdown or closed, this will be taken care of elsewhere */ - webSocketData->fragmentBuffer.clear(); - } - } - } else { - /* Control frames need the websocket to send pings, pongs and close */ - WebSocket *webSocket = (WebSocket *) s; - - if (!remainingBytes && fin && !webSocketData->controlTipLength) { - if (opCode == CLOSE) { - auto closeFrame = protocol::parseClosePayload(data, length); - webSocket->end(closeFrame.code, std::string_view(closeFrame.message, closeFrame.length)); - return true; - } else { - if (opCode == PING) { - webSocket->send(std::string_view(data, length), (OpCode) OpCode::PONG); - if (webSocketContextData->pingHandler) { - webSocketContextData->pingHandler(webSocket, {data, length}); - if (us_socket_is_closed(SSL, (us_socket_t *) s) || webSocketData->isShuttingDown) { - return true; - } - } - } else if (opCode == PONG) { - if (webSocketContextData->pongHandler) { - webSocketContextData->pongHandler(webSocket, {data, length}); - if (us_socket_is_closed(SSL, (us_socket_t *) s) || webSocketData->isShuttingDown) { - return true; - } - } - } - } - } else { - /* Here we never mind any size optimizations as we are in the worst possible path */ - webSocketData->fragmentBuffer.append(data, length); - webSocketData->controlTipLength += (unsigned int) length; - - if (!remainingBytes && fin) { - char *controlBuffer = (char *) webSocketData->fragmentBuffer.data() + webSocketData->fragmentBuffer.length() - webSocketData->controlTipLength; - if (opCode == CLOSE) { - protocol::CloseFrame closeFrame = protocol::parseClosePayload(controlBuffer, webSocketData->controlTipLength); - webSocket->end(closeFrame.code, std::string_view(closeFrame.message, closeFrame.length)); - return true; - } else { - if (opCode == PING) { - webSocket->send(std::string_view(controlBuffer, webSocketData->controlTipLength), (OpCode) OpCode::PONG); - if (webSocketContextData->pingHandler) { - webSocketContextData->pingHandler(webSocket, std::string_view(controlBuffer, webSocketData->controlTipLength)); - if (us_socket_is_closed(SSL, (us_socket_t *) s) || webSocketData->isShuttingDown) { - return true; - } - } - } else if (opCode == PONG) { - if (webSocketContextData->pongHandler) { - webSocketContextData->pongHandler(webSocket, std::string_view(controlBuffer, webSocketData->controlTipLength)); - if (us_socket_is_closed(SSL, (us_socket_t *) s) || webSocketData->isShuttingDown) { - return true; - } - } - } - } - - /* Same here, we do not care for any particular smart allocation scheme */ - webSocketData->fragmentBuffer.resize((unsigned int) webSocketData->fragmentBuffer.length() - webSocketData->controlTipLength); - webSocketData->controlTipLength = 0; - } - } + /* Check text messages for Utf-8 validity */ + if (opCode == 1 && + !protocol::isValidUtf8((unsigned char *)data, length)) { + forceClose(webSocketState, s, ERR_INVALID_TEXT); + return true; } - return false; - } - - static bool refusePayloadLength(uint64_t length, WebSocketState */*wState*/, void *s) { - auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); - /* Return true for refuse, false for accept */ - return webSocketContextData->maxPayloadLength < length; - } - - WebSocketContext *init() { - /* Adopting a socket does not trigger open event. - * We arreive as WebSocket with timeout set and - * any backpressure from HTTP state kept. */ - - /* Handle socket disconnections */ - us_socket_context_on_close(SSL, getSocketContext(), [](auto *s, int code, void *reason) { - /* For whatever reason, if we already have emitted close event, do not emit it again */ - WebSocketData *webSocketData = (WebSocketData *) (us_socket_ext(SSL, s)); - if (!webSocketData->isShuttingDown) { - /* Emit close event */ - auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); - - /* At this point we iterate all currently held subscriptions and emit an event for all of them */ - if (webSocketData->subscriber && webSocketContextData->subscriptionHandler) { - for (Topic *t : webSocketData->subscriber->topics) { - webSocketContextData->subscriptionHandler((WebSocket *) s, t->name, (int) t->size() - 1, (int) t->size()); - } - } - - /* Make sure to unsubscribe from any pub/sub node at exit */ - webSocketContextData->topicTree->freeSubscriber(webSocketData->subscriber); - webSocketData->subscriber = nullptr; - - auto *ws = (WebSocket *) s; - if (webSocketContextData->closeHandler) { - webSocketContextData->closeHandler(ws, 1006, {(char *) reason, (size_t) code}); - } - ((USERDATA *) ws->getUserData())->~USERDATA(); + /* Emit message event & break if we are closed or shut down when + * returning */ + if (webSocketContextData->messageHandler) { + webSocketContextData->messageHandler( + (WebSocket *)s, + std::string_view(data, length), (OpCode)opCode); + if (us_socket_is_closed(SSL, (us_socket_t *)s) || + webSocketData->isShuttingDown) { + return true; + } + } + } else { + /* Allocate fragment buffer up front first time */ + if (!webSocketData->fragmentBuffer.length()) { + webSocketData->fragmentBuffer.reserve(length + remainingBytes); + } + /* Fragments forming a big message are not caught until appending them + */ + if (refusePayloadLength(length + webSocketData->fragmentBuffer.length(), + webSocketState, s)) { + forceClose(webSocketState, s, ERR_TOO_BIG_MESSAGE); + return true; + } + webSocketData->fragmentBuffer.append(data, length); + + /* Are we done now? */ + // todo: what if we don't have any remaining bytes yet we are not fin? + // forceclose! + if (!remainingBytes && fin) { + /* Handle compression */ + if (webSocketData->compressionStatus == + WebSocketData::CompressionStatus::COMPRESSED_FRAME) { + webSocketData->compressionStatus = + WebSocketData::CompressionStatus::ENABLED; + + /* 9 bytes of padding for libdeflate, 4 for zlib */ + webSocketData->fragmentBuffer.append("123456789"); + + LoopData *loopData = (LoopData *)us_loop_ext(us_socket_context_loop( + SSL, us_socket_context(SSL, (us_socket_t *)s))); + + /* Decompress using shared or dedicated decompressor */ + std::optional inflatedFrame; + if (webSocketData->inflationStream) { + inflatedFrame = webSocketData->inflationStream->inflate( + loopData->zlibContext, + {webSocketData->fragmentBuffer.data(), + webSocketData->fragmentBuffer.length() - 9}, + webSocketContextData->maxPayloadLength, false); + } else { + inflatedFrame = loopData->inflationStream->inflate( + loopData->zlibContext, + {webSocketData->fragmentBuffer.data(), + webSocketData->fragmentBuffer.length() - 9}, + webSocketContextData->maxPayloadLength, true); } - /* Destruct in-placed data struct */ - webSocketData->~WebSocketData(); - - return s; - }); - - /* Handle WebSocket data streams */ - us_socket_context_on_data(SSL, getSocketContext(), [](auto *s, char *data, int length) { - - /* We need the websocket data */ - WebSocketData *webSocketData = (WebSocketData *) (us_socket_ext(SSL, s)); - - /* When in websocket shutdown mode, we do not care for ANY message, whether responding close frame or not. - * We only care for the TCP FIN really, not emitting any message after closing is key */ - if (webSocketData->isShuttingDown) { - return s; + if (!inflatedFrame.has_value()) { + forceClose(webSocketState, s, ERR_TOO_BIG_MESSAGE_INFLATION); + return true; + } else { + data = (char *)inflatedFrame->data(); + length = inflatedFrame->length(); } - auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); - auto *asyncSocket = (AsyncSocket *) s; - - /* Every time we get data and not in shutdown state we simply reset the timeout */ - asyncSocket->timeout(webSocketContextData->idleTimeoutComponents.first); - webSocketData->hasTimedOut = false; - - /* We always cork on data */ - asyncSocket->cork(); - - /* This parser has virtually no overhead */ - WebSocketProtocol>::consume(data, (unsigned int) length, (WebSocketState *) webSocketData, s); - - /* Uncorking a closed socekt is fine, in fact it is needed */ - asyncSocket->uncork(); + } else { + // reset length and data ptrs + length = webSocketData->fragmentBuffer.length(); + data = webSocketData->fragmentBuffer.data(); + } - /* If uncorking was successful and we are in shutdown state then send TCP FIN */ - if (asyncSocket->getBufferedAmount() == 0) { - /* We can now be in shutdown state */ - if (webSocketData->isShuttingDown) { - /* Shutting down a closed socket is handled by uSockets and just fine */ - asyncSocket->shutdown(); - } + /* Check text messages for Utf-8 validity */ + if (opCode == 1 && + !protocol::isValidUtf8((unsigned char *)data, length)) { + forceClose(webSocketState, s, ERR_INVALID_TEXT); + return true; + } + + /* Emit message and check for shutdown or close */ + if (webSocketContextData->messageHandler) { + webSocketContextData->messageHandler( + (WebSocket *)s, + std::string_view(data, length), (OpCode)opCode); + if (us_socket_is_closed(SSL, (us_socket_t *)s) || + webSocketData->isShuttingDown) { + return true; } + } - return s; - }); - - /* Handle HTTP write out (note: SSL_read may trigger this spuriously, the app need to handle spurious calls) */ - us_socket_context_on_writable(SSL, getSocketContext(), [](auto *s) { - - /* NOTE: Are we called here corked? If so, the below write code is broken, since - * we will have 0 as getBufferedAmount due to writing to cork buffer, then sending TCP FIN before - * we actually uncorked and sent off things */ - - /* It makes sense to check for us_is_shut_down here and return if so, to avoid shutting down twice */ - if (us_socket_is_shut_down(SSL, (us_socket_t *) s)) { - return s; + /* If we shutdown or closed, this will be taken care of elsewhere */ + webSocketData->fragmentBuffer.clear(); + } + } + } else { + /* Control frames need the websocket to send pings, pongs and close */ + WebSocket *webSocket = + (WebSocket *)s; + + if (!remainingBytes && fin && !webSocketData->controlTipLength) { + if (opCode == CLOSE) { + auto closeFrame = protocol::parseClosePayload(data, length); + webSocket->end(closeFrame.code, std::string_view(closeFrame.message, + closeFrame.length)); + return true; + } else { + if (opCode == PING) { + webSocket->send(std::string_view(data, length), + (OpCode)OpCode::PONG); + if (webSocketContextData->pingHandler) { + webSocketContextData->pingHandler(webSocket, {data, length}); + if (us_socket_is_closed(SSL, (us_socket_t *)s) || + webSocketData->isShuttingDown) { + return true; + } } - - AsyncSocket *asyncSocket = (AsyncSocket *) s; - WebSocketData *webSocketData = (WebSocketData *)(us_socket_ext(SSL, s)); - - /* We store old backpressure since it is unclear whether write drained anything, - * however, in case of coming here with 0 backpressure we still need to emit drain event */ - unsigned int backpressure = asyncSocket->getBufferedAmount(); - - /* Drain as much as possible */ - asyncSocket->write(nullptr, 0); - - /* Behavior: if we actively drain backpressure, always reset timeout (even if we are in shutdown) */ - /* Also reset timeout if we came here with 0 backpressure */ - if (!backpressure || backpressure > asyncSocket->getBufferedAmount()) { - auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); - asyncSocket->timeout(webSocketContextData->idleTimeoutComponents.first); - webSocketData->hasTimedOut = false; + } else if (opCode == PONG) { + if (webSocketContextData->pongHandler) { + webSocketContextData->pongHandler(webSocket, {data, length}); + if (us_socket_is_closed(SSL, (us_socket_t *)s) || + webSocketData->isShuttingDown) { + return true; + } } - - /* Are we in (WebSocket) shutdown mode? */ - if (webSocketData->isShuttingDown) { - /* Check if we just now drained completely */ - if (asyncSocket->getBufferedAmount() == 0) { - /* Now perform the actual TCP/TLS shutdown which was postponed due to backpressure */ - asyncSocket->shutdown(); + } + } + } else { + /* Here we never mind any size optimizations as we are in the worst + * possible path */ + webSocketData->fragmentBuffer.append(data, length); + webSocketData->controlTipLength += (unsigned int)length; + + if (!remainingBytes && fin) { + char *controlBuffer = (char *)webSocketData->fragmentBuffer.data() + + webSocketData->fragmentBuffer.length() - + webSocketData->controlTipLength; + if (opCode == CLOSE) { + protocol::CloseFrame closeFrame = protocol::parseClosePayload( + controlBuffer, webSocketData->controlTipLength); + webSocket->end( + closeFrame.code, + std::string_view(closeFrame.message, closeFrame.length)); + return true; + } else { + if (opCode == PING) { + webSocket->send(std::string_view(controlBuffer, + webSocketData->controlTipLength), + (OpCode)OpCode::PONG); + if (webSocketContextData->pingHandler) { + webSocketContextData->pingHandler( + webSocket, + std::string_view(controlBuffer, + webSocketData->controlTipLength)); + if (us_socket_is_closed(SSL, (us_socket_t *)s) || + webSocketData->isShuttingDown) { + return true; } - } else if (!backpressure || backpressure > asyncSocket->getBufferedAmount()) { - /* Only call drain if we actually drained backpressure or if we came here with 0 backpressure */ - auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); - if (webSocketContextData->drainHandler) { - webSocketContextData->drainHandler((WebSocket *) s); + } + } else if (opCode == PONG) { + if (webSocketContextData->pongHandler) { + webSocketContextData->pongHandler( + webSocket, + std::string_view(controlBuffer, + webSocketData->controlTipLength)); + if (us_socket_is_closed(SSL, (us_socket_t *)s) || + webSocketData->isShuttingDown) { + return true; } - /* No need to check for closed here as we leave the handler immediately*/ + } + } + } + + /* Same here, we do not care for any particular smart allocation + * scheme */ + webSocketData->fragmentBuffer.resize( + (unsigned int)webSocketData->fragmentBuffer.length() - + webSocketData->controlTipLength); + webSocketData->controlTipLength = 0; + } + } + } + return false; + } + + static bool refusePayloadLength(uint64_t length, + WebSocketState * /*wState*/, + void *s) { + auto *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, us_socket_context(SSL, (us_socket_t *)s)); + + /* Return true for refuse, false for accept */ + return webSocketContextData->maxPayloadLength < length; + } + + WebSocketContext *init() { + /* Adopting a socket does not trigger open event. + * We arreive as WebSocket with timeout set and + * any backpressure from HTTP state kept. */ + + /* Handle socket disconnections */ + us_socket_context_on_close( + SSL, getSocketContext(), [](auto *s, int code, void *reason) { + /* For whatever reason, if we already have emitted close event, do not + * emit it again */ + WebSocketData *webSocketData = + (WebSocketData *)(us_socket_ext(SSL, s)); + if (!webSocketData->isShuttingDown) { + /* Emit close event */ + auto *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, us_socket_context(SSL, (us_socket_t *)s)); + + /* At this point we iterate all currently held subscriptions and + * emit an event for all of them */ + if (webSocketData->subscriber && + webSocketContextData->subscriptionHandler) { + for (Topic *t : webSocketData->subscriber->topics) { + webSocketContextData->subscriptionHandler( + (WebSocket *)s, t->name, + (int)t->size() - 1, (int)t->size()); + } } - return s; - }); + /* Make sure to unsubscribe from any pub/sub node at exit */ + webSocketContextData->topicTree->freeSubscriber( + webSocketData->subscriber); + webSocketData->subscriber = nullptr; - /* Handle FIN, WebSocket does not support half-closed sockets, so simply close */ - us_socket_context_on_end(SSL, getSocketContext(), [](auto *s) { + auto *ws = (WebSocket *)s; + if (webSocketContextData->closeHandler) { + webSocketContextData->closeHandler( + ws, 1006, {(char *)reason, (size_t)code}); + } + ((USERDATA *)ws->getUserData())->~USERDATA(); + } - /* If we get a fin, we just close I guess */ - us_socket_close(SSL, (us_socket_t *) s, (int) ERR_TCP_FIN.length(), (void *) ERR_TCP_FIN.data()); + /* Destruct in-placed data struct */ + webSocketData->~WebSocketData(); - return s; + return s; }); - us_socket_context_on_long_timeout(SSL, getSocketContext(), [](auto *s) { - ((WebSocket *) s)->end(1000, "please reconnect"); - + /* Handle WebSocket data streams */ + us_socket_context_on_data( + SSL, getSocketContext(), [](auto *s, char *data, int length) { + /* We need the websocket data */ + WebSocketData *webSocketData = + (WebSocketData *)(us_socket_ext(SSL, s)); + + /* When in websocket shutdown mode, we do not care for ANY message, + * whether responding close frame or not. We only care for the TCP FIN + * really, not emitting any message after closing is key */ + if (webSocketData->isShuttingDown) { return s; - }); - - /* Handle socket timeouts, simply close them so to not confuse client with FIN */ - us_socket_context_on_timeout(SSL, getSocketContext(), [](auto *s) { - - auto *webSocketData = (WebSocketData *)(us_socket_ext(SSL, s)); - auto *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, us_socket_context(SSL, (us_socket_t *) s)); - - if (webSocketContextData->sendPingsAutomatically && !webSocketData->isShuttingDown && !webSocketData->hasTimedOut) { - webSocketData->hasTimedOut = true; - us_socket_timeout(SSL, s, webSocketContextData->idleTimeoutComponents.second); - /* Send ping without being corked */ - ((AsyncSocket *) s)->write("\x89\x00", 2); - return s; + } + + auto *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, us_socket_context(SSL, (us_socket_t *)s)); + auto *asyncSocket = (AsyncSocket *)s; + + /* Every time we get data and not in shutdown state we simply reset + * the timeout */ + asyncSocket->timeout( + webSocketContextData->idleTimeoutComponents.first); + webSocketData->hasTimedOut = false; + + /* We always cork on data */ + asyncSocket->cork(); + + /* This parser has virtually no overhead */ + WebSocketProtocol>:: + consume(data, (unsigned int)length, + (WebSocketState *)webSocketData, s); + + /* Uncorking a closed socekt is fine, in fact it is needed */ + asyncSocket->uncork(); + + /* If uncorking was successful and we are in shutdown state then send + * TCP FIN */ + if (asyncSocket->getBufferedAmount() == 0) { + /* We can now be in shutdown state */ + if (webSocketData->isShuttingDown) { + /* Shutting down a closed socket is handled by uSockets and just + * fine */ + asyncSocket->shutdown(); } + } - /* Timeout is very simple; we just close it */ - /* Warning: we happen to know forceClose will not use first parameter so pass nullptr here */ - forceClose(nullptr, s, ERR_WEBSOCKET_TIMEOUT); - - return s; + return s; }); - return this; - } - - void free() { - WebSocketContextData *webSocketContextData = (WebSocketContextData *) us_socket_context_ext(SSL, (us_socket_context_t *) this); - webSocketContextData->~WebSocketContextData(); - - us_socket_context_free(SSL, (us_socket_context_t *) this); - } - -public: - /* WebSocket contexts are always child contexts to a HTTP context so no SSL options are needed as they are inherited */ - static WebSocketContext *create(Loop */*loop*/, us_socket_context_t *parentSocketContext, TopicTree *topicTree) { - WebSocketContext *webSocketContext = (WebSocketContext *) us_create_child_socket_context(SSL, parentSocketContext, sizeof(WebSocketContextData)); - if (!webSocketContext) { - return nullptr; + /* Handle HTTP write out (note: SSL_read may trigger this spuriously, the + * app need to handle spurious calls) */ + us_socket_context_on_writable(SSL, getSocketContext(), [](auto *s) { + /* NOTE: Are we called here corked? If so, the below write code is broken, + * since we will have 0 as getBufferedAmount due to writing to cork + * buffer, then sending TCP FIN before we actually uncorked and sent off + * things */ + + /* It makes sense to check for us_is_shut_down here and return if so, to + * avoid shutting down twice */ + if (us_socket_is_shut_down(SSL, (us_socket_t *)s)) { + return s; + } + + AsyncSocket *asyncSocket = (AsyncSocket *)s; + WebSocketData *webSocketData = (WebSocketData *)(us_socket_ext(SSL, s)); + + /* We store old backpressure since it is unclear whether write drained + * anything, however, in case of coming here with 0 backpressure we still + * need to emit drain event */ + unsigned int backpressure = asyncSocket->getBufferedAmount(); + + /* Drain as much as possible */ + asyncSocket->write(nullptr, 0); + + /* Behavior: if we actively drain backpressure, always reset timeout (even + * if we are in shutdown) */ + /* Also reset timeout if we came here with 0 backpressure */ + if (!backpressure || backpressure > asyncSocket->getBufferedAmount()) { + auto *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, us_socket_context(SSL, (us_socket_t *)s)); + asyncSocket->timeout(webSocketContextData->idleTimeoutComponents.first); + webSocketData->hasTimedOut = false; + } + + /* Are we in (WebSocket) shutdown mode? */ + if (webSocketData->isShuttingDown) { + /* Check if we just now drained completely */ + if (asyncSocket->getBufferedAmount() == 0) { + /* Now perform the actual TCP/TLS shutdown which was postponed due to + * backpressure */ + asyncSocket->shutdown(); } - - /* Init socket context data */ - new ((WebSocketContextData *) us_socket_context_ext(SSL, (us_socket_context_t *)webSocketContext)) WebSocketContextData(topicTree); - return webSocketContext->init(); + } else if (!backpressure || + backpressure > asyncSocket->getBufferedAmount()) { + /* Only call drain if we actually drained backpressure or if we came + * here with 0 backpressure */ + auto *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, us_socket_context(SSL, (us_socket_t *)s)); + if (webSocketContextData->drainHandler) { + webSocketContextData->drainHandler( + (WebSocket *)s); + } + /* No need to check for closed here as we leave the handler + * immediately*/ + } + + return s; + }); + + /* Handle FIN, WebSocket does not support half-closed sockets, so simply + * close */ + us_socket_context_on_end(SSL, getSocketContext(), [](auto *s) { + /* If we get a fin, we just close I guess */ + us_socket_close(SSL, (us_socket_t *)s, (int)ERR_TCP_FIN.length(), + (void *)ERR_TCP_FIN.data()); + + return s; + }); + + us_socket_context_on_long_timeout(SSL, getSocketContext(), [](auto *s) { + ((WebSocket *)s)->end(1000, "please reconnect"); + + return s; + }); + + /* Handle socket timeouts, simply close them so to not confuse client with + * FIN */ + us_socket_context_on_timeout(SSL, getSocketContext(), [](auto *s) { + auto *webSocketData = (WebSocketData *)(us_socket_ext(SSL, s)); + auto *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, us_socket_context(SSL, (us_socket_t *)s)); + + if (webSocketContextData->sendPingsAutomatically && + !webSocketData->isShuttingDown && !webSocketData->hasTimedOut) { + webSocketData->hasTimedOut = true; + us_socket_timeout(SSL, s, + webSocketContextData->idleTimeoutComponents.second); + /* Send ping without being corked */ + ((AsyncSocket *)s)->write("\x89\x00", 2); + return s; + } + + /* Timeout is very simple; we just close it */ + /* Warning: we happen to know forceClose will not use first parameter so + * pass nullptr here */ + forceClose(nullptr, s, ERR_WEBSOCKET_TIMEOUT); + + return s; + }); + + return this; + } + + void free() { + WebSocketContextData *webSocketContextData = + (WebSocketContextData *)us_socket_context_ext( + SSL, (us_socket_context_t *)this); + webSocketContextData->~WebSocketContextData(); + + us_socket_context_free(SSL, (us_socket_context_t *)this); + } + + public: + /* WebSocket contexts are always child contexts to a HTTP context so no SSL + * options are needed as they are inherited */ + static WebSocketContext *create( + Loop * /*loop*/, us_socket_context_t *parentSocketContext, + TopicTree *topicTree) { + WebSocketContext *webSocketContext = + (WebSocketContext *)us_create_child_socket_context( + SSL, parentSocketContext, + sizeof(WebSocketContextData)); + if (!webSocketContext) { + return nullptr; } + + /* Init socket context data */ + new ((WebSocketContextData *)us_socket_context_ext( + SSL, (us_socket_context_t *)webSocketContext)) + WebSocketContextData(topicTree); + return webSocketContext->init(); + } }; -} +} // namespace uWS -#endif // UWS_WEBSOCKETCONTEXT_H +#endif // UWS_WEBSOCKETCONTEXT_H diff --git a/vendor/hydra/vendor/uwebsockets/src/WebSocketContextData.h b/vendor/hydra/vendor/uwebsockets/src/WebSocketContextData.h index 7f04aa6f..a5928639 100644 --- a/vendor/hydra/vendor/uwebsockets/src/WebSocketContextData.h +++ b/vendor/hydra/vendor/uwebsockets/src/WebSocketContextData.h @@ -18,92 +18,105 @@ #ifndef UWS_WEBSOCKETCONTEXTDATA_H #define UWS_WEBSOCKETCONTEXTDATA_H -#include "Loop.h" -#include "AsyncSocket.h" - -#include "MoveOnlyFunction.h" #include #include -#include "WebSocketProtocol.h" +#include "AsyncSocket.h" +#include "Loop.h" +#include "MoveOnlyFunction.h" #include "TopicTree.h" #include "WebSocketData.h" +#include "WebSocketProtocol.h" namespace uWS { /* Type queued up when publishing */ struct TopicTreeMessage { - std::string message; - /*OpCode*/ int opCode; - bool compress; + std::string message; + /*OpCode*/ int opCode; + bool compress; }; struct TopicTreeBigMessage { - std::string_view message; - /*OpCode*/ int opCode; - bool compress; + std::string_view message; + /*OpCode*/ int opCode; + bool compress; }; -template struct WebSocket; +template +struct WebSocket; -/* todo: this looks identical to WebSocketBehavior, why not just std::move that entire thing in? */ +/* todo: this looks identical to WebSocketBehavior, why not just std::move that + * entire thing in? */ template struct WebSocketContextData { -private: - -public: - - /* This one points to the App's shared topicTree */ - TopicTree *topicTree; - - /* The callbacks for this context */ - MoveOnlyFunction *)> openHandler = nullptr; - MoveOnlyFunction *, std::string_view, OpCode)> messageHandler = nullptr; - MoveOnlyFunction *, std::string_view, OpCode)> droppedHandler = nullptr; - MoveOnlyFunction *)> drainHandler = nullptr; - MoveOnlyFunction *, std::string_view, int, int)> subscriptionHandler = nullptr; - MoveOnlyFunction *, int, std::string_view)> closeHandler = nullptr; - MoveOnlyFunction *, std::string_view)> pingHandler = nullptr; - MoveOnlyFunction *, std::string_view)> pongHandler = nullptr; - - /* Settings for this context */ - size_t maxPayloadLength = 0; - - /* We do need these for async upgrade */ - CompressOptions compression; - - /* There needs to be a maxBackpressure which will force close everything over that limit */ - size_t maxBackpressure = 0; - bool closeOnBackpressureLimit; - bool resetIdleTimeoutOnSend; - bool sendPingsAutomatically; - unsigned short maxLifetime; - - /* These are calculated on creation */ - std::pair idleTimeoutComponents; - - /* This is run once on start-up */ - void calculateIdleTimeoutCompnents(unsigned short idleTimeout) { - unsigned short margin = 4; - /* 4, 8 or 16 seconds margin based on idleTimeout */ - while ((int) idleTimeout - margin * 2 >= margin * 2 && margin < 16) { - margin = (unsigned short) (margin << 1); - } - idleTimeoutComponents = { - idleTimeout - (sendPingsAutomatically ? margin : 0), /* reduce normal idleTimeout if it is extended by ping-timeout */ - margin /* ping-timeout - also used for end() timeout */ - }; - } - - ~WebSocketContextData() { - - } - - WebSocketContextData(TopicTree *topicTree) : topicTree(topicTree) { - + private: + public: + /* This one points to the App's shared topicTree */ + TopicTree *topicTree; + + /* The callbacks for this context */ + MoveOnlyFunction *)> openHandler = + nullptr; + MoveOnlyFunction *, std::string_view, + OpCode)> + messageHandler = nullptr; + MoveOnlyFunction *, std::string_view, + OpCode)> + droppedHandler = nullptr; + MoveOnlyFunction *)> drainHandler = + nullptr; + MoveOnlyFunction *, std::string_view, int, + int)> + subscriptionHandler = nullptr; + MoveOnlyFunction *, int, + std::string_view)> + closeHandler = nullptr; + MoveOnlyFunction *, std::string_view)> + pingHandler = nullptr; + MoveOnlyFunction *, std::string_view)> + pongHandler = nullptr; + + /* Settings for this context */ + size_t maxPayloadLength = 0; + + /* We do need these for async upgrade */ + CompressOptions compression; + + /* There needs to be a maxBackpressure which will force close everything over + * that limit */ + size_t maxBackpressure = 0; + bool closeOnBackpressureLimit; + bool resetIdleTimeoutOnSend; + bool sendPingsAutomatically; + unsigned short maxLifetime; + + /* These are calculated on creation */ + std::pair idleTimeoutComponents; + + /* This is run once on start-up */ + void calculateIdleTimeoutCompnents(unsigned short idleTimeout) { + unsigned short margin = 4; + /* 4, 8 or 16 seconds margin based on idleTimeout */ + while ((int)idleTimeout - margin * 2 >= margin * 2 && margin < 16) { + margin = (unsigned short)(margin << 1); } + idleTimeoutComponents = { + idleTimeout - (sendPingsAutomatically + ? margin + : 0), /* reduce normal idleTimeout if it is extended + by ping-timeout */ + margin /* ping-timeout - also used for end() timeout */ + }; + } + + ~WebSocketContextData() {} + + WebSocketContextData( + TopicTree *topicTree) + : topicTree(topicTree) {} }; -} +} // namespace uWS -#endif // UWS_WEBSOCKETCONTEXTDATA_H +#endif // UWS_WEBSOCKETCONTEXTDATA_H diff --git a/vendor/hydra/vendor/uwebsockets/src/WebSocketData.h b/vendor/hydra/vendor/uwebsockets/src/WebSocketData.h index 21e96a72..ef53b0aa 100644 --- a/vendor/hydra/vendor/uwebsockets/src/WebSocketData.h +++ b/vendor/hydra/vendor/uwebsockets/src/WebSocketData.h @@ -18,69 +18,80 @@ #ifndef UWS_WEBSOCKETDATA_H #define UWS_WEBSOCKETDATA_H -#include "WebSocketProtocol.h" +#include + #include "AsyncSocketData.h" #include "PerMessageDeflate.h" #include "TopicTree.h" - -#include +#include "WebSocketProtocol.h" namespace uWS { struct WebSocketData : AsyncSocketData, WebSocketState { - /* This guy has a lot of friends - why? */ - template friend struct WebSocketContext; - template friend struct WebSocketContextData; - template friend struct WebSocket; - template friend struct HttpContext; -private: - std::string fragmentBuffer; - unsigned int controlTipLength = 0; - bool isShuttingDown = 0; - bool hasTimedOut = false; - enum CompressionStatus : char { - DISABLED, - ENABLED, - COMPRESSED_FRAME - } compressionStatus; - - /* We might have a dedicated compressor */ - DeflationStream *deflationStream = nullptr; - /* And / or a dedicated decompressor */ - InflationStream *inflationStream = nullptr; - - /* We could be a subscriber */ - Subscriber *subscriber = nullptr; -public: - WebSocketData(bool perMessageDeflate, CompressOptions compressOptions, BackPressure &&backpressure) : AsyncSocketData(std::move(backpressure)), WebSocketState() { - compressionStatus = perMessageDeflate ? ENABLED : DISABLED; - - /* Initialize the dedicated sliding window(s) */ - if (perMessageDeflate) { - if ((compressOptions & CompressOptions::_COMPRESSOR_MASK) != CompressOptions::SHARED_COMPRESSOR) { - deflationStream = new DeflationStream(compressOptions); - } - if ((compressOptions & CompressOptions::_DECOMPRESSOR_MASK) != CompressOptions::SHARED_DECOMPRESSOR) { - inflationStream = new InflationStream(compressOptions); - } - } + /* This guy has a lot of friends - why? */ + template + friend struct WebSocketContext; + template + friend struct WebSocketContextData; + template + friend struct WebSocket; + template + friend struct HttpContext; + + private: + std::string fragmentBuffer; + unsigned int controlTipLength = 0; + bool isShuttingDown = 0; + bool hasTimedOut = false; + enum CompressionStatus : char { + DISABLED, + ENABLED, + COMPRESSED_FRAME + } compressionStatus; + + /* We might have a dedicated compressor */ + DeflationStream *deflationStream = nullptr; + /* And / or a dedicated decompressor */ + InflationStream *inflationStream = nullptr; + + /* We could be a subscriber */ + Subscriber *subscriber = nullptr; + + public: + WebSocketData(bool perMessageDeflate, CompressOptions compressOptions, + BackPressure &&backpressure) + : AsyncSocketData(std::move(backpressure)), + WebSocketState() { + compressionStatus = perMessageDeflate ? ENABLED : DISABLED; + + /* Initialize the dedicated sliding window(s) */ + if (perMessageDeflate) { + if ((compressOptions & CompressOptions::_COMPRESSOR_MASK) != + CompressOptions::SHARED_COMPRESSOR) { + deflationStream = new DeflationStream(compressOptions); + } + if ((compressOptions & CompressOptions::_DECOMPRESSOR_MASK) != + CompressOptions::SHARED_DECOMPRESSOR) { + inflationStream = new InflationStream(compressOptions); + } } + } - ~WebSocketData() { - if (deflationStream) { - delete deflationStream; - } + ~WebSocketData() { + if (deflationStream) { + delete deflationStream; + } - if (inflationStream) { - delete inflationStream; - } + if (inflationStream) { + delete inflationStream; + } - if (subscriber) { - delete subscriber; - } + if (subscriber) { + delete subscriber; } + } }; -} +} // namespace uWS -#endif // UWS_WEBSOCKETDATA_H +#endif // UWS_WEBSOCKETDATA_H diff --git a/vendor/hydra/vendor/uwebsockets/src/WebSocketExtensions.h b/vendor/hydra/vendor/uwebsockets/src/WebSocketExtensions.h index 93fd5df7..c8e28b31 100644 --- a/vendor/hydra/vendor/uwebsockets/src/WebSocketExtensions.h +++ b/vendor/hydra/vendor/uwebsockets/src/WebSocketExtensions.h @@ -21,14 +21,15 @@ /* There is a new, huge bug scenario that needs to be fixed: * pub/sub does not support being in DEDICATED_COMPRESSOR-mode while having * some clients downgraded to SHARED_COMPRESSOR - we cannot allow the client to - * demand a downgrade to SHARED_COMPRESSOR (yet) until we fix that scenario in pub/sub */ + * demand a downgrade to SHARED_COMPRESSOR (yet) until we fix that scenario in + * pub/sub */ // #define UWS_ALLOW_SHARED_AND_DEDICATED_COMPRESSOR_MIX /* We forbid negotiating 8 windowBits since Zlib has a bug with this */ // #define UWS_ALLOW_8_WINDOW_BITS -#include #include +#include #include #include #include @@ -36,221 +37,235 @@ namespace uWS { enum ExtensionTokens { - /* Standard permessage-deflate tokens */ - TOK_PERMESSAGE_DEFLATE = 1838, - TOK_SERVER_NO_CONTEXT_TAKEOVER = 2807, - TOK_CLIENT_NO_CONTEXT_TAKEOVER = 2783, - TOK_SERVER_MAX_WINDOW_BITS = 2372, - TOK_CLIENT_MAX_WINDOW_BITS = 2348, - /* Non-standard alias for Safari */ - TOK_X_WEBKIT_DEFLATE_FRAME = 2149, - TOK_NO_CONTEXT_TAKEOVER = 2049, - TOK_MAX_WINDOW_BITS = 1614 + /* Standard permessage-deflate tokens */ + TOK_PERMESSAGE_DEFLATE = 1838, + TOK_SERVER_NO_CONTEXT_TAKEOVER = 2807, + TOK_CLIENT_NO_CONTEXT_TAKEOVER = 2783, + TOK_SERVER_MAX_WINDOW_BITS = 2372, + TOK_CLIENT_MAX_WINDOW_BITS = 2348, + /* Non-standard alias for Safari */ + TOK_X_WEBKIT_DEFLATE_FRAME = 2149, + TOK_NO_CONTEXT_TAKEOVER = 2049, + TOK_MAX_WINDOW_BITS = 1614 }; struct ExtensionsParser { -private: - int *lastInteger = nullptr; - -public: - /* Standard */ - bool perMessageDeflate = false; - bool serverNoContextTakeover = false; - bool clientNoContextTakeover = false; - int serverMaxWindowBits = 0; - int clientMaxWindowBits = 0; - - /* Non-standard Safari */ - bool xWebKitDeflateFrame = false; - bool noContextTakeover = false; - int maxWindowBits = 0; - - int getToken(const char *&in, const char *stop) { - while (in != stop && !isalnum(*in)) { - in++; - } - - /* Don't care more than this for now */ - static_assert(SHRT_MIN > INT_MIN, "Integer overflow fix is invalid for this platform, report this as a bug!"); - - int hashedToken = 0; - while (in != stop && (isalnum(*in) || *in == '-' || *in == '_')) { - if (isdigit(*in)) { - /* This check is a quick and incorrect fix for integer overflow - * in oss-fuzz but we don't care as it doesn't matter either way */ - if (hashedToken > SHRT_MIN && hashedToken < SHRT_MAX) { - hashedToken = hashedToken * 10 - (*in - '0'); - } - } else { - hashedToken += *in; - } - in++; - } - return hashedToken; + private: + int *lastInteger = nullptr; + + public: + /* Standard */ + bool perMessageDeflate = false; + bool serverNoContextTakeover = false; + bool clientNoContextTakeover = false; + int serverMaxWindowBits = 0; + int clientMaxWindowBits = 0; + + /* Non-standard Safari */ + bool xWebKitDeflateFrame = false; + bool noContextTakeover = false; + int maxWindowBits = 0; + + int getToken(const char *&in, const char *stop) { + while (in != stop && !isalnum(*in)) { + in++; } - ExtensionsParser(const char *data, size_t length) { - const char *stop = data + length; - int token = 1; - - /* Ignore anything before permessage-deflate or x-webkit-deflate-frame */ - for (; token && token != TOK_PERMESSAGE_DEFLATE && token != TOK_X_WEBKIT_DEFLATE_FRAME; token = getToken(data, stop)); - - /* What protocol are we going to use? */ - perMessageDeflate = (token == TOK_PERMESSAGE_DEFLATE); - xWebKitDeflateFrame = (token == TOK_X_WEBKIT_DEFLATE_FRAME); - - while ((token = getToken(data, stop))) { - switch (token) { - case TOK_X_WEBKIT_DEFLATE_FRAME: - /* Duplicates not allowed/supported */ - return; - case TOK_NO_CONTEXT_TAKEOVER: - noContextTakeover = true; - break; - case TOK_MAX_WINDOW_BITS: - maxWindowBits = 1; - lastInteger = &maxWindowBits; - break; - case TOK_PERMESSAGE_DEFLATE: - /* Duplicates not allowed/supported */ - return; - case TOK_SERVER_NO_CONTEXT_TAKEOVER: - serverNoContextTakeover = true; - break; - case TOK_CLIENT_NO_CONTEXT_TAKEOVER: - clientNoContextTakeover = true; - break; - case TOK_SERVER_MAX_WINDOW_BITS: - serverMaxWindowBits = 1; - lastInteger = &serverMaxWindowBits; - break; - case TOK_CLIENT_MAX_WINDOW_BITS: - clientMaxWindowBits = 1; - lastInteger = &clientMaxWindowBits; - break; - default: - if (token < 0 && lastInteger) { - *lastInteger = -token; - } - break; - } + /* Don't care more than this for now */ + static_assert(SHRT_MIN > INT_MIN, + "Integer overflow fix is invalid for this platform, report " + "this as a bug!"); + + int hashedToken = 0; + while (in != stop && (isalnum(*in) || *in == '-' || *in == '_')) { + if (isdigit(*in)) { + /* This check is a quick and incorrect fix for integer overflow + * in oss-fuzz but we don't care as it doesn't matter either way */ + if (hashedToken > SHRT_MIN && hashedToken < SHRT_MAX) { + hashedToken = hashedToken * 10 - (*in - '0'); } + } else { + hashedToken += *in; + } + in++; + } + return hashedToken; + } + + ExtensionsParser(const char *data, size_t length) { + const char *stop = data + length; + int token = 1; + + /* Ignore anything before permessage-deflate or x-webkit-deflate-frame */ + for (; token && token != TOK_PERMESSAGE_DEFLATE && + token != TOK_X_WEBKIT_DEFLATE_FRAME; + token = getToken(data, stop)); + + /* What protocol are we going to use? */ + perMessageDeflate = (token == TOK_PERMESSAGE_DEFLATE); + xWebKitDeflateFrame = (token == TOK_X_WEBKIT_DEFLATE_FRAME); + + while ((token = getToken(data, stop))) { + switch (token) { + case TOK_X_WEBKIT_DEFLATE_FRAME: + /* Duplicates not allowed/supported */ + return; + case TOK_NO_CONTEXT_TAKEOVER: + noContextTakeover = true; + break; + case TOK_MAX_WINDOW_BITS: + maxWindowBits = 1; + lastInteger = &maxWindowBits; + break; + case TOK_PERMESSAGE_DEFLATE: + /* Duplicates not allowed/supported */ + return; + case TOK_SERVER_NO_CONTEXT_TAKEOVER: + serverNoContextTakeover = true; + break; + case TOK_CLIENT_NO_CONTEXT_TAKEOVER: + clientNoContextTakeover = true; + break; + case TOK_SERVER_MAX_WINDOW_BITS: + serverMaxWindowBits = 1; + lastInteger = &serverMaxWindowBits; + break; + case TOK_CLIENT_MAX_WINDOW_BITS: + clientMaxWindowBits = 1; + lastInteger = &clientMaxWindowBits; + break; + default: + if (token < 0 && lastInteger) { + *lastInteger = -token; + } + break; + } } + } }; /* Takes what we (the server) wants, returns what we got */ -static inline std::tuple negotiateCompression(bool wantCompression, int wantedCompressionWindow, int wantedInflationWindow, std::string_view offer) { - - /* If we don't want compression then we are done here */ - if (!wantCompression) { - return {false, 0, 0, ""}; - } - - ExtensionsParser ep(offer.data(), offer.length()); - - static thread_local std::string response; - response = ""; - - int compressionWindow = wantedCompressionWindow; - int inflationWindow = wantedInflationWindow; - bool compression = false; - - if (ep.xWebKitDeflateFrame) { - /* We now have compression */ - compression = true; - response = "x-webkit-deflate-frame"; - - /* If the other peer has DEMANDED us no sliding window, - * we cannot compress with anything other than shared compressor */ - if (ep.noContextTakeover) { - /* We must fail here right now (fix pub/sub) */ +static inline std::tuple negotiateCompression( + bool wantCompression, int wantedCompressionWindow, + int wantedInflationWindow, std::string_view offer) { + /* If we don't want compression then we are done here */ + if (!wantCompression) { + return {false, 0, 0, ""}; + } + + ExtensionsParser ep(offer.data(), offer.length()); + + static thread_local std::string response; + response = ""; + + int compressionWindow = wantedCompressionWindow; + int inflationWindow = wantedInflationWindow; + bool compression = false; + + if (ep.xWebKitDeflateFrame) { + /* We now have compression */ + compression = true; + response = "x-webkit-deflate-frame"; + + /* If the other peer has DEMANDED us no sliding window, + * we cannot compress with anything other than shared compressor */ + if (ep.noContextTakeover) { + /* We must fail here right now (fix pub/sub) */ #ifndef UWS_ALLOW_SHARED_AND_DEDICATED_COMPRESSOR_MIX - if (wantedCompressionWindow != 0) { - return {false, 0, 0, ""}; - } + if (wantedCompressionWindow != 0) { + return {false, 0, 0, ""}; + } #endif - compressionWindow = 0; - } + compressionWindow = 0; + } - /* If the other peer has DEMANDED us to use a limited sliding window, - * we have to limit out compression sliding window */ - if (ep.maxWindowBits && ep.maxWindowBits < compressionWindow) { - compressionWindow = ep.maxWindowBits; + /* If the other peer has DEMANDED us to use a limited sliding window, + * we have to limit out compression sliding window */ + if (ep.maxWindowBits && ep.maxWindowBits < compressionWindow) { + compressionWindow = ep.maxWindowBits; #ifndef UWS_ALLOW_8_WINDOW_BITS - /* We cannot really deny this, so we have to disable compression in this case */ - if (compressionWindow == 8) { - return {false, 0, 0, ""}; - } + /* We cannot really deny this, so we have to disable compression in this + * case */ + if (compressionWindow == 8) { + return {false, 0, 0, ""}; + } #endif - } + } - /* We decide our own inflation sliding window (and their compression sliding window) */ - if (wantedInflationWindow < 15) { - if (!wantedInflationWindow) { - response += "; no_context_takeover"; - } else { - response += "; max_window_bits=" + std::to_string(wantedInflationWindow); - } - } - } else if (ep.perMessageDeflate) { - /* We now have compression */ - compression = true; - response = "permessage-deflate"; - - if (ep.clientNoContextTakeover) { - inflationWindow = 0; - } else if (ep.clientMaxWindowBits && ep.clientMaxWindowBits != 1) { - inflationWindow = std::min(ep.clientMaxWindowBits, inflationWindow); - } + /* We decide our own inflation sliding window (and their compression sliding + * window) */ + if (wantedInflationWindow < 15) { + if (!wantedInflationWindow) { + response += "; no_context_takeover"; + } else { + response += + "; max_window_bits=" + std::to_string(wantedInflationWindow); + } + } + } else if (ep.perMessageDeflate) { + /* We now have compression */ + compression = true; + response = "permessage-deflate"; + + if (ep.clientNoContextTakeover) { + inflationWindow = 0; + } else if (ep.clientMaxWindowBits && ep.clientMaxWindowBits != 1) { + inflationWindow = std::min(ep.clientMaxWindowBits, inflationWindow); + } - /* Whatever we have now, write */ - if (inflationWindow < 15) { - if (!inflationWindow || !ep.clientMaxWindowBits) { - response += "; client_no_context_takeover"; - inflationWindow = 0; - } else { - response += "; client_max_window_bits=" + std::to_string(inflationWindow); - } - } + /* Whatever we have now, write */ + if (inflationWindow < 15) { + if (!inflationWindow || !ep.clientMaxWindowBits) { + response += "; client_no_context_takeover"; + inflationWindow = 0; + } else { + response += + "; client_max_window_bits=" + std::to_string(inflationWindow); + } + } - /* This block basically lets the client lower it */ - if (ep.serverNoContextTakeover) { - /* This is an important (temporary) fix since we haven't allowed - * these two modes to mix, and pub/sub will not handle this case (yet) */ + /* This block basically lets the client lower it */ + if (ep.serverNoContextTakeover) { + /* This is an important (temporary) fix since we haven't allowed + * these two modes to mix, and pub/sub will not handle this case (yet) */ #ifdef UWS_ALLOW_SHARED_AND_DEDICATED_COMPRESSOR_MIX - compressionWindow = 0; + compressionWindow = 0; #endif - } else if (ep.serverMaxWindowBits) { - compressionWindow = std::min(ep.serverMaxWindowBits, compressionWindow); + } else if (ep.serverMaxWindowBits) { + compressionWindow = + std::min(ep.serverMaxWindowBits, compressionWindow); #ifndef UWS_ALLOW_8_WINDOW_BITS - /* Zlib cannot do windowBits=8, memLevel=1 so we raise it up to 9 minimum */ - if (compressionWindow == 8) { - compressionWindow = 9; - } + /* Zlib cannot do windowBits=8, memLevel=1 so we raise it up to 9 minimum + */ + if (compressionWindow == 8) { + compressionWindow = 9; + } #endif - } - - /* Whatever we have now, write */ - if (compressionWindow < 15) { - if (!compressionWindow) { - response += "; server_no_context_takeover"; - } else { - response += "; server_max_window_bits=" + std::to_string(compressionWindow); - } - } } - /* A final sanity check (this check does not actually catch too high values!) */ - if ((compressionWindow && compressionWindow < 8) || compressionWindow > 15 || (inflationWindow && inflationWindow < 8) || inflationWindow > 15) { - return {false, 0, 0, ""}; + /* Whatever we have now, write */ + if (compressionWindow < 15) { + if (!compressionWindow) { + response += "; server_no_context_takeover"; + } else { + response += + "; server_max_window_bits=" + std::to_string(compressionWindow); + } } + } - return {compression, compressionWindow, inflationWindow, response}; -} + /* A final sanity check (this check does not actually catch too high values!) + */ + if ((compressionWindow && compressionWindow < 8) || compressionWindow > 15 || + (inflationWindow && inflationWindow < 8) || inflationWindow > 15) { + return {false, 0, 0, ""}; + } + return {compression, compressionWindow, inflationWindow, response}; } -#endif // UWS_WEBSOCKETEXTENSIONS_H +} // namespace uWS + +#endif // UWS_WEBSOCKETEXTENSIONS_H diff --git a/vendor/hydra/vendor/uwebsockets/src/WebSocketHandshake.h b/vendor/hydra/vendor/uwebsockets/src/WebSocketHandshake.h index 808415e4..930e6db8 100644 --- a/vendor/hydra/vendor/uwebsockets/src/WebSocketHandshake.h +++ b/vendor/hydra/vendor/uwebsockets/src/WebSocketHandshake.h @@ -18,128 +18,141 @@ #ifndef UWS_WEBSOCKETHANDSHAKE_H #define UWS_WEBSOCKETHANDSHAKE_H -#include #include +#include namespace uWS { struct WebSocketHandshake { - template - struct static_for { - void operator()(uint32_t *a, uint32_t *b) { - static_for()(a, b); - T::template f(a, b); - } - }; - - template - struct static_for<0, T> { - void operator()(uint32_t */*a*/, uint32_t */*hash*/) {} - }; - - static inline uint32_t rol(uint32_t value, size_t bits) {return (value << bits) | (value >> (32 - bits));} - static inline uint32_t blk(uint32_t b[16], size_t i) { - return rol(b[(i + 13) & 15] ^ b[(i + 8) & 15] ^ b[(i + 2) & 15] ^ b[i], 1); + template + struct static_for { + void operator()(uint32_t *a, uint32_t *b) { + static_for()(a, b); + T::template f(a, b); } - - struct Sha1Loop1 { - template - static inline void f(uint32_t *a, uint32_t *b) { - a[i % 5] += ((a[(3 + i) % 5] & (a[(2 + i) % 5] ^ a[(1 + i) % 5])) ^ a[(1 + i) % 5]) + b[i] + 0x5a827999 + rol(a[(4 + i) % 5], 5); - a[(3 + i) % 5] = rol(a[(3 + i) % 5], 30); - } - }; - struct Sha1Loop2 { - template - static inline void f(uint32_t *a, uint32_t *b) { - b[i] = blk(b, i); - a[(1 + i) % 5] += ((a[(4 + i) % 5] & (a[(3 + i) % 5] ^ a[(2 + i) % 5])) ^ a[(2 + i) % 5]) + b[i] + 0x5a827999 + rol(a[(5 + i) % 5], 5); - a[(4 + i) % 5] = rol(a[(4 + i) % 5], 30); - } - }; - struct Sha1Loop3 { - template - static inline void f(uint32_t *a, uint32_t *b) { - b[(i + 4) % 16] = blk(b, (i + 4) % 16); - a[i % 5] += (a[(3 + i) % 5] ^ a[(2 + i) % 5] ^ a[(1 + i) % 5]) + b[(i + 4) % 16] + 0x6ed9eba1 + rol(a[(4 + i) % 5], 5); - a[(3 + i) % 5] = rol(a[(3 + i) % 5], 30); - } - }; - struct Sha1Loop4 { - template - static inline void f(uint32_t *a, uint32_t *b) { - b[(i + 8) % 16] = blk(b, (i + 8) % 16); - a[i % 5] += (((a[(3 + i) % 5] | a[(2 + i) % 5]) & a[(1 + i) % 5]) | (a[(3 + i) % 5] & a[(2 + i) % 5])) + b[(i + 8) % 16] + 0x8f1bbcdc + rol(a[(4 + i) % 5], 5); - a[(3 + i) % 5] = rol(a[(3 + i) % 5], 30); - } - }; - struct Sha1Loop5 { - template - static inline void f(uint32_t *a, uint32_t *b) { - b[(i + 12) % 16] = blk(b, (i + 12) % 16); - a[i % 5] += (a[(3 + i) % 5] ^ a[(2 + i) % 5] ^ a[(1 + i) % 5]) + b[(i + 12) % 16] + 0xca62c1d6 + rol(a[(4 + i) % 5], 5); - a[(3 + i) % 5] = rol(a[(3 + i) % 5], 30); - } - }; - struct Sha1Loop6 { - template - static inline void f(uint32_t *a, uint32_t *b) { - b[i] += a[4 - i]; - } - }; - - static inline void sha1(uint32_t hash[5], uint32_t b[16]) { - uint32_t a[5] = {hash[4], hash[3], hash[2], hash[1], hash[0]}; - static_for<16, Sha1Loop1>()(a, b); - static_for<4, Sha1Loop2>()(a, b); - static_for<20, Sha1Loop3>()(a, b); - static_for<20, Sha1Loop4>()(a, b); - static_for<20, Sha1Loop5>()(a, b); - static_for<5, Sha1Loop6>()(a, hash); + }; + + template + struct static_for<0, T> { + void operator()(uint32_t * /*a*/, uint32_t * /*hash*/) {} + }; + + static inline uint32_t rol(uint32_t value, size_t bits) { + return (value << bits) | (value >> (32 - bits)); + } + static inline uint32_t blk(uint32_t b[16], size_t i) { + return rol(b[(i + 13) & 15] ^ b[(i + 8) & 15] ^ b[(i + 2) & 15] ^ b[i], 1); + } + + struct Sha1Loop1 { + template + static inline void f(uint32_t *a, uint32_t *b) { + a[i % 5] += ((a[(3 + i) % 5] & (a[(2 + i) % 5] ^ a[(1 + i) % 5])) ^ + a[(1 + i) % 5]) + + b[i] + 0x5a827999 + rol(a[(4 + i) % 5], 5); + a[(3 + i) % 5] = rol(a[(3 + i) % 5], 30); } - - static inline void base64(unsigned char *src, char *dst) { - const char *b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - for (int i = 0; i < 18; i += 3) { - *dst++ = b64[(src[i] >> 2) & 63]; - *dst++ = b64[((src[i] & 3) << 4) | ((src[i + 1] & 240) >> 4)]; - *dst++ = b64[((src[i + 1] & 15) << 2) | ((src[i + 2] & 192) >> 6)]; - *dst++ = b64[src[i + 2] & 63]; - } - *dst++ = b64[(src[18] >> 2) & 63]; - *dst++ = b64[((src[18] & 3) << 4) | ((src[19] & 240) >> 4)]; - *dst++ = b64[((src[19] & 15) << 2)]; - *dst++ = '='; + }; + struct Sha1Loop2 { + template + static inline void f(uint32_t *a, uint32_t *b) { + b[i] = blk(b, i); + a[(1 + i) % 5] += ((a[(4 + i) % 5] & (a[(3 + i) % 5] ^ a[(2 + i) % 5])) ^ + a[(2 + i) % 5]) + + b[i] + 0x5a827999 + rol(a[(5 + i) % 5], 5); + a[(4 + i) % 5] = rol(a[(4 + i) % 5], 30); } - -public: - static inline void generate(const char input[24], char output[28]) { - uint32_t b_output[5] = { - 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 - }; - uint32_t b_input[16] = { - 0, 0, 0, 0, 0, 0, 0x32353845, 0x41464135, 0x2d453931, 0x342d3437, 0x44412d39, - 0x3543412d, 0x43354142, 0x30444338, 0x35423131, 0x80000000 - }; - - for (int i = 0; i < 6; i++) { - b_input[i] = (uint32_t) ((input[4 * i + 3] & 0xff) | (input[4 * i + 2] & 0xff) << 8 | (input[4 * i + 1] & 0xff) << 16 | (input[4 * i + 0] & 0xff) << 24); - } - sha1(b_output, b_input); - uint32_t last_b[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480}; - sha1(b_output, last_b); - for (int i = 0; i < 5; i++) { - uint32_t tmp = b_output[i]; - char *bytes = (char *) &b_output[i]; - bytes[3] = (char) (tmp & 0xff); - bytes[2] = (char) ((tmp >> 8) & 0xff); - bytes[1] = (char) ((tmp >> 16) & 0xff); - bytes[0] = (char) ((tmp >> 24) & 0xff); - } - base64((unsigned char *) b_output, output); + }; + struct Sha1Loop3 { + template + static inline void f(uint32_t *a, uint32_t *b) { + b[(i + 4) % 16] = blk(b, (i + 4) % 16); + a[i % 5] += (a[(3 + i) % 5] ^ a[(2 + i) % 5] ^ a[(1 + i) % 5]) + + b[(i + 4) % 16] + 0x6ed9eba1 + rol(a[(4 + i) % 5], 5); + a[(3 + i) % 5] = rol(a[(3 + i) % 5], 30); + } + }; + struct Sha1Loop4 { + template + static inline void f(uint32_t *a, uint32_t *b) { + b[(i + 8) % 16] = blk(b, (i + 8) % 16); + a[i % 5] += (((a[(3 + i) % 5] | a[(2 + i) % 5]) & a[(1 + i) % 5]) | + (a[(3 + i) % 5] & a[(2 + i) % 5])) + + b[(i + 8) % 16] + 0x8f1bbcdc + rol(a[(4 + i) % 5], 5); + a[(3 + i) % 5] = rol(a[(3 + i) % 5], 30); + } + }; + struct Sha1Loop5 { + template + static inline void f(uint32_t *a, uint32_t *b) { + b[(i + 12) % 16] = blk(b, (i + 12) % 16); + a[i % 5] += (a[(3 + i) % 5] ^ a[(2 + i) % 5] ^ a[(1 + i) % 5]) + + b[(i + 12) % 16] + 0xca62c1d6 + rol(a[(4 + i) % 5], 5); + a[(3 + i) % 5] = rol(a[(3 + i) % 5], 30); + } + }; + struct Sha1Loop6 { + template + static inline void f(uint32_t *a, uint32_t *b) { + b[i] += a[4 - i]; + } + }; + + static inline void sha1(uint32_t hash[5], uint32_t b[16]) { + uint32_t a[5] = {hash[4], hash[3], hash[2], hash[1], hash[0]}; + static_for<16, Sha1Loop1>()(a, b); + static_for<4, Sha1Loop2>()(a, b); + static_for<20, Sha1Loop3>()(a, b); + static_for<20, Sha1Loop4>()(a, b); + static_for<20, Sha1Loop5>()(a, b); + static_for<5, Sha1Loop6>()(a, hash); + } + + static inline void base64(unsigned char *src, char *dst) { + const char *b64 = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + for (int i = 0; i < 18; i += 3) { + *dst++ = b64[(src[i] >> 2) & 63]; + *dst++ = b64[((src[i] & 3) << 4) | ((src[i + 1] & 240) >> 4)]; + *dst++ = b64[((src[i + 1] & 15) << 2) | ((src[i + 2] & 192) >> 6)]; + *dst++ = b64[src[i + 2] & 63]; + } + *dst++ = b64[(src[18] >> 2) & 63]; + *dst++ = b64[((src[18] & 3) << 4) | ((src[19] & 240) >> 4)]; + *dst++ = b64[((src[19] & 15) << 2)]; + *dst++ = '='; + } + + public: + static inline void generate(const char input[24], char output[28]) { + uint32_t b_output[5] = {0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, + 0xc3d2e1f0}; + uint32_t b_input[16] = {0, 0, 0, 0, + 0, 0, 0x32353845, 0x41464135, + 0x2d453931, 0x342d3437, 0x44412d39, 0x3543412d, + 0x43354142, 0x30444338, 0x35423131, 0x80000000}; + + for (int i = 0; i < 6; i++) { + b_input[i] = (uint32_t)((input[4 * i + 3] & 0xff) | + (input[4 * i + 2] & 0xff) << 8 | + (input[4 * i + 1] & 0xff) << 16 | + (input[4 * i + 0] & 0xff) << 24); + } + sha1(b_output, b_input); + uint32_t last_b[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 480}; + sha1(b_output, last_b); + for (int i = 0; i < 5; i++) { + uint32_t tmp = b_output[i]; + char *bytes = (char *)&b_output[i]; + bytes[3] = (char)(tmp & 0xff); + bytes[2] = (char)((tmp >> 8) & 0xff); + bytes[1] = (char)((tmp >> 16) & 0xff); + bytes[0] = (char)((tmp >> 24) & 0xff); } + base64((unsigned char *)b_output, output); + } }; -} +} // namespace uWS -#endif // UWS_WEBSOCKETHANDSHAKE_H +#endif // UWS_WEBSOCKETHANDSHAKE_H diff --git a/vendor/hydra/vendor/uwebsockets/src/WebSocketProtocol.h b/vendor/hydra/vendor/uwebsockets/src/WebSocketProtocol.h index a37120d2..5599b807 100644 --- a/vendor/hydra/vendor/uwebsockets/src/WebSocketProtocol.h +++ b/vendor/hydra/vendor/uwebsockets/src/WebSocketProtocol.h @@ -21,94 +21,95 @@ #include #include -#include #include +#include #include namespace uWS { /* We should not overcomplicate these */ const std::string_view ERR_TOO_BIG_MESSAGE("Received too big message"); -const std::string_view ERR_WEBSOCKET_TIMEOUT("WebSocket timed out from inactivity"); +const std::string_view ERR_WEBSOCKET_TIMEOUT( + "WebSocket timed out from inactivity"); const std::string_view ERR_INVALID_TEXT("Received invalid UTF-8"); -const std::string_view ERR_TOO_BIG_MESSAGE_INFLATION("Received too big message, or other inflation error"); -const std::string_view ERR_INVALID_CLOSE_PAYLOAD("Received invalid close payload"); +const std::string_view ERR_TOO_BIG_MESSAGE_INFLATION( + "Received too big message, or other inflation error"); +const std::string_view ERR_INVALID_CLOSE_PAYLOAD( + "Received invalid close payload"); const std::string_view ERR_PROTOCOL("Received invalid WebSocket frame"); -const std::string_view ERR_TCP_FIN("Received TCP FIN before WebSocket close frame"); +const std::string_view ERR_TCP_FIN( + "Received TCP FIN before WebSocket close frame"); enum OpCode : unsigned char { - CONTINUATION = 0, - TEXT = 1, - BINARY = 2, - CLOSE = 8, - PING = 9, - PONG = 10 + CONTINUATION = 0, + TEXT = 1, + BINARY = 2, + CLOSE = 8, + PING = 9, + PONG = 10 }; -enum { - CLIENT, - SERVER -}; +enum { CLIENT, SERVER }; // 24 bytes perfectly template struct WebSocketState { -public: - static const unsigned int SHORT_MESSAGE_HEADER = isServer ? 6 : 2; - static const unsigned int MEDIUM_MESSAGE_HEADER = isServer ? 8 : 4; - static const unsigned int LONG_MESSAGE_HEADER = isServer ? 14 : 10; - - // 16 bytes - struct State { - unsigned int wantsHead : 1; - unsigned int spillLength : 4; - signed int opStack : 2; // -1, 0, 1 - unsigned int lastFin : 1; - - // 15 bytes - unsigned char spill[LONG_MESSAGE_HEADER - 1]; - OpCode opCode[2]; - - State() { - wantsHead = true; - spillLength = 0; - opStack = -1; - lastFin = true; - } + public: + static const unsigned int SHORT_MESSAGE_HEADER = isServer ? 6 : 2; + static const unsigned int MEDIUM_MESSAGE_HEADER = isServer ? 8 : 4; + static const unsigned int LONG_MESSAGE_HEADER = isServer ? 14 : 10; + + // 16 bytes + struct State { + unsigned int wantsHead : 1; + unsigned int spillLength : 4; + signed int opStack : 2; // -1, 0, 1 + unsigned int lastFin : 1; + + // 15 bytes + unsigned char spill[LONG_MESSAGE_HEADER - 1]; + OpCode opCode[2]; + + State() { + wantsHead = true; + spillLength = 0; + opStack = -1; + lastFin = true; + } - } state; + } state; - // 8 bytes - unsigned int remainingBytes = 0; - char mask[isServer ? 4 : 1]; + // 8 bytes + unsigned int remainingBytes = 0; + char mask[isServer ? 4 : 1]; }; namespace protocol { template T bit_cast(char *c) { - T val; - memcpy(&val, c, sizeof(T)); - return val; + T val; + memcpy(&val, c, sizeof(T)); + return val; } /* Byte swap for little-endian systems */ template T cond_byte_swap(T value) { - uint32_t endian_test = 1; - if (*((char *)&endian_test)) { - union { - T i; - uint8_t b[sizeof(T)]; - } src = { value }, dst; - - for (unsigned int i = 0; i < sizeof(value); i++) { - dst.b[i] = src.b[sizeof(value) - 1 - i]; - } - - return dst.i; + uint32_t endian_test = 1; + if (*((char *)&endian_test)) { + union { + T i; + uint8_t b[sizeof(T)]; + } src = {value}, dst; + + for (unsigned int i = 0; i < sizeof(value); i++) { + dst.b[i] = src.b[sizeof(value) - 1 - i]; } - return value; + + return dst.i; + } + return value; } // Based on utf8_check.c by Markus Kuhn, 2005 @@ -116,394 +117,442 @@ T cond_byte_swap(T value) { // Optimized for predominantly 7-bit content by Alex Hultman, 2016 // Licensed as Zlib, like the rest of this project // This runs about 40% faster than simdutf with g++ -mavx -static bool isValidUtf8(unsigned char *s, size_t length) -{ - for (unsigned char *e = s + length; s != e; ) { - if (s + 16 <= e) { - uint64_t tmp[2]; - memcpy(tmp, s, 16); - if (((tmp[0] & 0x8080808080808080) | (tmp[1] & 0x8080808080808080)) == 0) { - s += 16; - continue; - } - } +static bool isValidUtf8(unsigned char *s, size_t length) { + for (unsigned char *e = s + length; s != e;) { + if (s + 16 <= e) { + uint64_t tmp[2]; + memcpy(tmp, s, 16); + if (((tmp[0] & 0x8080808080808080) | (tmp[1] & 0x8080808080808080)) == + 0) { + s += 16; + continue; + } + } - while (!(*s & 0x80)) { - if (++s == e) { - return true; - } - } + while (!(*s & 0x80)) { + if (++s == e) { + return true; + } + } - if ((s[0] & 0x60) == 0x40) { - if (s + 1 >= e || (s[1] & 0xc0) != 0x80 || (s[0] & 0xfe) == 0xc0) { - return false; - } - s += 2; - } else if ((s[0] & 0xf0) == 0xe0) { - if (s + 2 >= e || (s[1] & 0xc0) != 0x80 || (s[2] & 0xc0) != 0x80 || - (s[0] == 0xe0 && (s[1] & 0xe0) == 0x80) || (s[0] == 0xed && (s[1] & 0xe0) == 0xa0)) { - return false; - } - s += 3; - } else if ((s[0] & 0xf8) == 0xf0) { - if (s + 3 >= e || (s[1] & 0xc0) != 0x80 || (s[2] & 0xc0) != 0x80 || (s[3] & 0xc0) != 0x80 || - (s[0] == 0xf0 && (s[1] & 0xf0) == 0x80) || (s[0] == 0xf4 && s[1] > 0x8f) || s[0] > 0xf4) { - return false; - } - s += 4; - } else { - return false; - } + if ((s[0] & 0x60) == 0x40) { + if (s + 1 >= e || (s[1] & 0xc0) != 0x80 || (s[0] & 0xfe) == 0xc0) { + return false; + } + s += 2; + } else if ((s[0] & 0xf0) == 0xe0) { + if (s + 2 >= e || (s[1] & 0xc0) != 0x80 || (s[2] & 0xc0) != 0x80 || + (s[0] == 0xe0 && (s[1] & 0xe0) == 0x80) || + (s[0] == 0xed && (s[1] & 0xe0) == 0xa0)) { + return false; + } + s += 3; + } else if ((s[0] & 0xf8) == 0xf0) { + if (s + 3 >= e || (s[1] & 0xc0) != 0x80 || (s[2] & 0xc0) != 0x80 || + (s[3] & 0xc0) != 0x80 || (s[0] == 0xf0 && (s[1] & 0xf0) == 0x80) || + (s[0] == 0xf4 && s[1] > 0x8f) || s[0] > 0xf4) { + return false; + } + s += 4; + } else { + return false; } - return true; + } + return true; } struct CloseFrame { - uint16_t code; - char *message; - size_t length; + uint16_t code; + char *message; + size_t length; }; static inline CloseFrame parseClosePayload(char *src, size_t length) { - /* If we get no code or message, default to reporting 1005 no status code present */ - CloseFrame cf = {1005, nullptr, 0}; - if (length >= 2) { - memcpy(&cf.code, src, 2); - cf = {cond_byte_swap(cf.code), src + 2, length - 2}; - if (cf.code < 1000 || cf.code > 4999 || (cf.code > 1011 && cf.code < 4000) || - (cf.code >= 1004 && cf.code <= 1006) || !isValidUtf8((unsigned char *) cf.message, cf.length)) { - /* Even though we got a WebSocket close frame, it in itself is abnormal */ - return {1006, (char *) ERR_INVALID_CLOSE_PAYLOAD.data(), ERR_INVALID_CLOSE_PAYLOAD.length()}; - } + /* If we get no code or message, default to reporting 1005 no status code + * present */ + CloseFrame cf = {1005, nullptr, 0}; + if (length >= 2) { + memcpy(&cf.code, src, 2); + cf = {cond_byte_swap(cf.code), src + 2, length - 2}; + if (cf.code < 1000 || cf.code > 4999 || + (cf.code > 1011 && cf.code < 4000) || + (cf.code >= 1004 && cf.code <= 1006) || + !isValidUtf8((unsigned char *)cf.message, cf.length)) { + /* Even though we got a WebSocket close frame, it in itself is abnormal */ + return {1006, (char *)ERR_INVALID_CLOSE_PAYLOAD.data(), + ERR_INVALID_CLOSE_PAYLOAD.length()}; } - return cf; + } + return cf; } -static inline size_t formatClosePayload(char *dst, uint16_t code, const char *message, size_t length) { - /* We could have more strict checks here, but never append code 0 or 1005 or 1006 */ - if (code && code != 1005 && code != 1006) { - code = cond_byte_swap(code); - memcpy(dst, &code, 2); - /* It is invalid to pass nullptr to memcpy, even though length is 0 */ - if (message) { - memcpy(dst + 2, message, length); - } - return length + 2; +static inline size_t formatClosePayload(char *dst, uint16_t code, + const char *message, size_t length) { + /* We could have more strict checks here, but never append code 0 or 1005 or + * 1006 */ + if (code && code != 1005 && code != 1006) { + code = cond_byte_swap(code); + memcpy(dst, &code, 2); + /* It is invalid to pass nullptr to memcpy, even though length is 0 */ + if (message) { + memcpy(dst + 2, message, length); } - return 0; + return length + 2; + } + return 0; } static inline size_t messageFrameSize(size_t messageSize) { - if (messageSize < 126) { - return 2 + messageSize; - } else if (messageSize <= UINT16_MAX) { - return 4 + messageSize; - } - return 10 + messageSize; + if (messageSize < 126) { + return 2 + messageSize; + } else if (messageSize <= UINT16_MAX) { + return 4 + messageSize; + } + return 10 + messageSize; } -enum { - SND_CONTINUATION = 1, - SND_NO_FIN = 2, - SND_COMPRESSED = 64 -}; +enum { SND_CONTINUATION = 1, SND_NO_FIN = 2, SND_COMPRESSED = 64 }; template -static inline size_t formatMessage(char *dst, const char *src, size_t length, OpCode opCode, size_t reportedLength, bool compressed, bool fin) { - size_t messageLength; - size_t headerLength; - if (reportedLength < 126) { - headerLength = 2; - dst[1] = (char) reportedLength; - } else if (reportedLength <= UINT16_MAX) { - headerLength = 4; - dst[1] = 126; - uint16_t tmp = cond_byte_swap((uint16_t) reportedLength); - memcpy(&dst[2], &tmp, sizeof(uint16_t)); - } else { - headerLength = 10; - dst[1] = 127; - uint64_t tmp = cond_byte_swap((uint64_t) reportedLength); - memcpy(&dst[2], &tmp, sizeof(uint64_t)); - } - - dst[0] = (char) ((fin ? 128 : 0) | ((compressed && opCode) ? SND_COMPRESSED : 0) | (char) opCode); - - //printf("%d\n", (int)dst[0]); - - char mask[4]; - if (!isServer) { - dst[1] |= 0x80; - uint32_t random = (uint32_t) rand(); - memcpy(mask, &random, 4); - memcpy(dst + headerLength, &random, 4); - headerLength += 4; - } - - messageLength = headerLength + length; - memcpy(dst + headerLength, src, length); - - if (!isServer) { - - // overwrites up to 3 bytes outside of the given buffer! - //WebSocketProtocol::unmaskInplace(dst + headerLength, dst + headerLength + length, mask); - - // this is not optimal - char *start = dst + headerLength; - char *stop = start + length; - int i = 0; - while (start != stop) { - (*start++) ^= mask[i++ % 4]; - } +static inline size_t formatMessage(char *dst, const char *src, size_t length, + OpCode opCode, size_t reportedLength, + bool compressed, bool fin) { + size_t messageLength; + size_t headerLength; + if (reportedLength < 126) { + headerLength = 2; + dst[1] = (char)reportedLength; + } else if (reportedLength <= UINT16_MAX) { + headerLength = 4; + dst[1] = 126; + uint16_t tmp = cond_byte_swap((uint16_t)reportedLength); + memcpy(&dst[2], &tmp, sizeof(uint16_t)); + } else { + headerLength = 10; + dst[1] = 127; + uint64_t tmp = cond_byte_swap((uint64_t)reportedLength); + memcpy(&dst[2], &tmp, sizeof(uint64_t)); + } + + dst[0] = (char)((fin ? 128 : 0) | + ((compressed && opCode) ? SND_COMPRESSED : 0) | (char)opCode); + + // printf("%d\n", (int)dst[0]); + + char mask[4]; + if (!isServer) { + dst[1] |= 0x80; + uint32_t random = (uint32_t)rand(); + memcpy(mask, &random, 4); + memcpy(dst + headerLength, &random, 4); + headerLength += 4; + } + + messageLength = headerLength + length; + memcpy(dst + headerLength, src, length); + + if (!isServer) { + // overwrites up to 3 bytes outside of the given buffer! + // WebSocketProtocol::unmaskInplace(dst + headerLength, dst + + // headerLength + length, mask); + + // this is not optimal + char *start = dst + headerLength; + char *stop = start + length; + int i = 0; + while (start != stop) { + (*start++) ^= mask[i++ % 4]; } - return messageLength; + } + return messageLength; } -} +} // namespace protocol // essentially this is only a parser template struct WebSocketProtocol { -public: - static const unsigned int SHORT_MESSAGE_HEADER = isServer ? 6 : 2; - static const unsigned int MEDIUM_MESSAGE_HEADER = isServer ? 8 : 4; - static const unsigned int LONG_MESSAGE_HEADER = isServer ? 14 : 10; - -protected: - static inline bool isFin(char *frame) {return *((unsigned char *) frame) & 128;} - static inline unsigned char getOpCode(char *frame) {return *((unsigned char *) frame) & 15;} - static inline unsigned char payloadLength(char *frame) {return ((unsigned char *) frame)[1] & 127;} - static inline bool rsv23(char *frame) {return *((unsigned char *) frame) & 48;} - static inline bool rsv1(char *frame) {return *((unsigned char *) frame) & 64;} - - template - static inline void UnrolledXor(char * __restrict data, char * __restrict mask) { - if constexpr (N != 1) { - UnrolledXor(data, mask); - } - data[N - 1] ^= mask[(N - 1) % 4]; + public: + static const unsigned int SHORT_MESSAGE_HEADER = isServer ? 6 : 2; + static const unsigned int MEDIUM_MESSAGE_HEADER = isServer ? 8 : 4; + static const unsigned int LONG_MESSAGE_HEADER = isServer ? 14 : 10; + + protected: + static inline bool isFin(char *frame) { + return *((unsigned char *)frame) & 128; + } + static inline unsigned char getOpCode(char *frame) { + return *((unsigned char *)frame) & 15; + } + static inline unsigned char payloadLength(char *frame) { + return ((unsigned char *)frame)[1] & 127; + } + static inline bool rsv23(char *frame) { + return *((unsigned char *)frame) & 48; + } + static inline bool rsv1(char *frame) { + return *((unsigned char *)frame) & 64; + } + + template + static inline void UnrolledXor(char *__restrict data, char *__restrict mask) { + if constexpr (N != 1) { + UnrolledXor(data, mask); } - - template - static inline void unmaskImprecise8(char *src, uint64_t mask, unsigned int length) { - for (unsigned int n = (length >> 3) + 1; n; n--) { - uint64_t loaded; - memcpy(&loaded, src, 8); - loaded ^= mask; - memcpy(src - DESTINATION, &loaded, 8); - src += 8; - } + data[N - 1] ^= mask[(N - 1) % 4]; + } + + template + static inline void unmaskImprecise8(char *src, uint64_t mask, + unsigned int length) { + for (unsigned int n = (length >> 3) + 1; n; n--) { + uint64_t loaded; + memcpy(&loaded, src, 8); + loaded ^= mask; + memcpy(src - DESTINATION, &loaded, 8); + src += 8; } - - /* DESTINATION = 6 makes this not SIMD, DESTINATION = 4 is with SIMD but we don't want that for short messages */ - template - static inline void unmaskImprecise4(char *src, uint32_t mask, unsigned int length) { - for (unsigned int n = (length >> 2) + 1; n; n--) { - uint32_t loaded; - memcpy(&loaded, src, 4); - loaded ^= mask; - memcpy(src - DESTINATION, &loaded, 4); - src += 4; - } + } + + /* DESTINATION = 6 makes this not SIMD, DESTINATION = 4 is with SIMD but we + * don't want that for short messages */ + template + static inline void unmaskImprecise4(char *src, uint32_t mask, + unsigned int length) { + for (unsigned int n = (length >> 2) + 1; n; n--) { + uint32_t loaded; + memcpy(&loaded, src, 4); + loaded ^= mask; + memcpy(src - DESTINATION, &loaded, 4); + src += 4; } - - template - static inline void unmaskImpreciseCopyMask(char *src, unsigned int length) { - if constexpr (HEADER_SIZE != 6) { - char mask[8] = {src[-4], src[-3], src[-2], src[-1], src[-4], src[-3], src[-2], src[-1]}; - uint64_t maskInt; - memcpy(&maskInt, mask, 8); - unmaskImprecise8(src, maskInt, length); - } else { - char mask[4] = {src[-4], src[-3], src[-2], src[-1]}; - uint32_t maskInt; - memcpy(&maskInt, mask, 4); - unmaskImprecise4(src, maskInt, length); - } + } + + template + static inline void unmaskImpreciseCopyMask(char *src, unsigned int length) { + if constexpr (HEADER_SIZE != 6) { + char mask[8] = {src[-4], src[-3], src[-2], src[-1], + src[-4], src[-3], src[-2], src[-1]}; + uint64_t maskInt; + memcpy(&maskInt, mask, 8); + unmaskImprecise8(src, maskInt, length); + } else { + char mask[4] = {src[-4], src[-3], src[-2], src[-1]}; + uint32_t maskInt; + memcpy(&maskInt, mask, 4); + unmaskImprecise4(src, maskInt, length); } - - static inline void rotateMask(unsigned int offset, char *mask) { - char originalMask[4] = {mask[0], mask[1], mask[2], mask[3]}; - mask[(0 + offset) % 4] = originalMask[0]; - mask[(1 + offset) % 4] = originalMask[1]; - mask[(2 + offset) % 4] = originalMask[2]; - mask[(3 + offset) % 4] = originalMask[3]; + } + + static inline void rotateMask(unsigned int offset, char *mask) { + char originalMask[4] = {mask[0], mask[1], mask[2], mask[3]}; + mask[(0 + offset) % 4] = originalMask[0]; + mask[(1 + offset) % 4] = originalMask[1]; + mask[(2 + offset) % 4] = originalMask[2]; + mask[(3 + offset) % 4] = originalMask[3]; + } + + static inline void unmaskInplace(char *data, char *stop, char *mask) { + while (data < stop) { + *(data++) ^= mask[0]; + *(data++) ^= mask[1]; + *(data++) ^= mask[2]; + *(data++) ^= mask[3]; } + } + + template + static inline bool consumeMessage(T payLength, char *&src, + unsigned int &length, + WebSocketState *wState, + void *user) { + if (getOpCode(src)) { + if (wState->state.opStack == 1 || + (!wState->state.lastFin && getOpCode(src) < 2)) { + Impl::forceClose(wState, user, ERR_PROTOCOL); + return true; + } + wState->state.opCode[++wState->state.opStack] = (OpCode)getOpCode(src); + } else if (wState->state.opStack == -1) { + Impl::forceClose(wState, user, ERR_PROTOCOL); + return true; + } + wState->state.lastFin = isFin(src); - static inline void unmaskInplace(char *data, char *stop, char *mask) { - while (data < stop) { - *(data++) ^= mask[0]; - *(data++) ^= mask[1]; - *(data++) ^= mask[2]; - *(data++) ^= mask[3]; - } + if (Impl::refusePayloadLength(payLength, wState, user)) { + Impl::forceClose(wState, user, ERR_TOO_BIG_MESSAGE); + return true; } - template - static inline bool consumeMessage(T payLength, char *&src, unsigned int &length, WebSocketState *wState, void *user) { - if (getOpCode(src)) { - if (wState->state.opStack == 1 || (!wState->state.lastFin && getOpCode(src) < 2)) { - Impl::forceClose(wState, user, ERR_PROTOCOL); - return true; - } - wState->state.opCode[++wState->state.opStack] = (OpCode) getOpCode(src); - } else if (wState->state.opStack == -1) { - Impl::forceClose(wState, user, ERR_PROTOCOL); - return true; + if (payLength + MESSAGE_HEADER <= length) { + bool fin = isFin(src); + if (isServer) { + /* This guy can never be assumed to be perfectly aligned since we can + * get multiple messages in one read */ + unmaskImpreciseCopyMask(src + MESSAGE_HEADER, + (unsigned int)payLength); + if (Impl::handleFragment(src, payLength, 0, + wState->state.opCode[wState->state.opStack], + fin, wState, user)) { + return true; } - wState->state.lastFin = isFin(src); - - if (Impl::refusePayloadLength(payLength, wState, user)) { - Impl::forceClose(wState, user, ERR_TOO_BIG_MESSAGE); - return true; + } else { + if (Impl::handleFragment(src + MESSAGE_HEADER, payLength, 0, + wState->state.opCode[wState->state.opStack], + isFin(src), wState, user)) { + return true; } + } - if (payLength + MESSAGE_HEADER <= length) { - bool fin = isFin(src); - if (isServer) { - /* This guy can never be assumed to be perfectly aligned since we can get multiple messages in one read */ - unmaskImpreciseCopyMask(src + MESSAGE_HEADER, (unsigned int) payLength); - if (Impl::handleFragment(src, payLength, 0, wState->state.opCode[wState->state.opStack], fin, wState, user)) { - return true; - } - } else { - if (Impl::handleFragment(src + MESSAGE_HEADER, payLength, 0, wState->state.opCode[wState->state.opStack], isFin(src), wState, user)) { - return true; - } - } - - if (fin) { - wState->state.opStack--; - } - - src += payLength + MESSAGE_HEADER; - length -= (unsigned int) (payLength + MESSAGE_HEADER); - wState->state.spillLength = 0; - return false; - } else { - wState->state.spillLength = 0; - wState->state.wantsHead = false; - wState->remainingBytes = (unsigned int) (payLength - length + MESSAGE_HEADER); - bool fin = isFin(src); - if constexpr (isServer) { - memcpy(wState->mask, src + MESSAGE_HEADER - 4, 4); - uint64_t mask; - memcpy(&mask, src + MESSAGE_HEADER - 4, 4); - memcpy(((char *)&mask) + 4, src + MESSAGE_HEADER - 4, 4); - unmaskImprecise8<0>(src + MESSAGE_HEADER, mask, length); - rotateMask(4 - (length - MESSAGE_HEADER) % 4, wState->mask); - } - Impl::handleFragment(src + MESSAGE_HEADER, length - MESSAGE_HEADER, wState->remainingBytes, wState->state.opCode[wState->state.opStack], fin, wState, user); - return true; - } - } + if (fin) { + wState->state.opStack--; + } - /* This one is nicely vectorized on both ARM64 and X64 - especially with -mavx */ - static inline void unmaskAll(char * __restrict data, char * __restrict mask) { - for (int i = 0; i < LIBUS_RECV_BUFFER_LENGTH; i += 16) { - UnrolledXor<16>(data + i, mask); - } + src += payLength + MESSAGE_HEADER; + length -= (unsigned int)(payLength + MESSAGE_HEADER); + wState->state.spillLength = 0; + return false; + } else { + wState->state.spillLength = 0; + wState->state.wantsHead = false; + wState->remainingBytes = + (unsigned int)(payLength - length + MESSAGE_HEADER); + bool fin = isFin(src); + if constexpr (isServer) { + memcpy(wState->mask, src + MESSAGE_HEADER - 4, 4); + uint64_t mask; + memcpy(&mask, src + MESSAGE_HEADER - 4, 4); + memcpy(((char *)&mask) + 4, src + MESSAGE_HEADER - 4, 4); + unmaskImprecise8<0>(src + MESSAGE_HEADER, mask, length); + rotateMask(4 - (length - MESSAGE_HEADER) % 4, wState->mask); + } + Impl::handleFragment( + src + MESSAGE_HEADER, length - MESSAGE_HEADER, wState->remainingBytes, + wState->state.opCode[wState->state.opStack], fin, wState, user); + return true; } + } - static inline bool consumeContinuation(char *&src, unsigned int &length, WebSocketState *wState, void *user) { - if (wState->remainingBytes <= length) { - if (isServer) { - unsigned int n = wState->remainingBytes >> 2; - unmaskInplace(src, src + n * 4, wState->mask); - for (unsigned int i = 0, s = wState->remainingBytes % 4; i < s; i++) { - src[n * 4 + i] ^= wState->mask[i]; - } - } - - if (Impl::handleFragment(src, wState->remainingBytes, 0, wState->state.opCode[wState->state.opStack], wState->state.lastFin, wState, user)) { - return false; - } - - if (wState->state.lastFin) { - wState->state.opStack--; - } - - src += wState->remainingBytes; - length -= wState->remainingBytes; - wState->state.wantsHead = true; - return true; - } else { - if (isServer) { - /* No need to unmask if mask is 0 */ - uint32_t nullmask = 0; - if (memcmp(wState->mask, &nullmask, sizeof(uint32_t))) { - if /*constexpr*/ (LIBUS_RECV_BUFFER_LENGTH == length) { - unmaskAll(src, wState->mask); - } else { - // Slow path - unmaskInplace(src, src + ((length >> 2) + 1) * 4, wState->mask); - } - } - } - - wState->remainingBytes -= length; - if (Impl::handleFragment(src, length, wState->remainingBytes, wState->state.opCode[wState->state.opStack], wState->state.lastFin, wState, user)) { - return false; - } - - if (isServer && length % 4) { - rotateMask(4 - (length % 4), wState->mask); - } - return false; + /* This one is nicely vectorized on both ARM64 and X64 - especially with -mavx + */ + static inline void unmaskAll(char *__restrict data, char *__restrict mask) { + for (int i = 0; i < LIBUS_RECV_BUFFER_LENGTH; i += 16) { + UnrolledXor<16>(data + i, mask); + } + } + + static inline bool consumeContinuation(char *&src, unsigned int &length, + WebSocketState *wState, + void *user) { + if (wState->remainingBytes <= length) { + if (isServer) { + unsigned int n = wState->remainingBytes >> 2; + unmaskInplace(src, src + n * 4, wState->mask); + for (unsigned int i = 0, s = wState->remainingBytes % 4; i < s; i++) { + src[n * 4 + i] ^= wState->mask[i]; + } + } + + if (Impl::handleFragment(src, wState->remainingBytes, 0, + wState->state.opCode[wState->state.opStack], + wState->state.lastFin, wState, user)) { + return false; + } + + if (wState->state.lastFin) { + wState->state.opStack--; + } + + src += wState->remainingBytes; + length -= wState->remainingBytes; + wState->state.wantsHead = true; + return true; + } else { + if (isServer) { + /* No need to unmask if mask is 0 */ + uint32_t nullmask = 0; + if (memcmp(wState->mask, &nullmask, sizeof(uint32_t))) { + if /*constexpr*/ (LIBUS_RECV_BUFFER_LENGTH == length) { + unmaskAll(src, wState->mask); + } else { + // Slow path + unmaskInplace(src, src + ((length >> 2) + 1) * 4, wState->mask); + } } + } + + wState->remainingBytes -= length; + if (Impl::handleFragment(src, length, wState->remainingBytes, + wState->state.opCode[wState->state.opStack], + wState->state.lastFin, wState, user)) { + return false; + } + + if (isServer && length % 4) { + rotateMask(4 - (length % 4), wState->mask); + } + return false; } + } -public: - WebSocketProtocol() { + public: + WebSocketProtocol() {} + static inline void consume(char *src, unsigned int length, + WebSocketState *wState, void *user) { + if (wState->state.spillLength) { + src -= wState->state.spillLength; + length += wState->state.spillLength; + memcpy(src, wState->state.spill, wState->state.spillLength); } - - static inline void consume(char *src, unsigned int length, WebSocketState *wState, void *user) { - if (wState->state.spillLength) { - src -= wState->state.spillLength; - length += wState->state.spillLength; - memcpy(src, wState->state.spill, wState->state.spillLength); + if (wState->state.wantsHead) { + parseNext: + while (length >= SHORT_MESSAGE_HEADER) { + // invalid reserved bits / invalid opcodes / invalid control frames / + // set compressed frame + if ((rsv1(src) && !Impl::setCompressed(wState, user)) || rsv23(src) || + (getOpCode(src) > 2 && getOpCode(src) < 8) || getOpCode(src) > 10 || + (getOpCode(src) > 2 && (!isFin(src) || payloadLength(src) > 125))) { + Impl::forceClose(wState, user, ERR_PROTOCOL); + return; } - if (wState->state.wantsHead) { - parseNext: - while (length >= SHORT_MESSAGE_HEADER) { - - // invalid reserved bits / invalid opcodes / invalid control frames / set compressed frame - if ((rsv1(src) && !Impl::setCompressed(wState, user)) || rsv23(src) || (getOpCode(src) > 2 && getOpCode(src) < 8) || - getOpCode(src) > 10 || (getOpCode(src) > 2 && (!isFin(src) || payloadLength(src) > 125))) { - Impl::forceClose(wState, user, ERR_PROTOCOL); - return; - } - - if (payloadLength(src) < 126) { - if (consumeMessage(payloadLength(src), src, length, wState, user)) { - return; - } - } else if (payloadLength(src) == 126) { - if (length < MEDIUM_MESSAGE_HEADER) { - break; - } else if(consumeMessage(protocol::cond_byte_swap(protocol::bit_cast(src + 2)), src, length, wState, user)) { - return; - } - } else if (length < LONG_MESSAGE_HEADER) { - break; - } else if (consumeMessage(protocol::cond_byte_swap(protocol::bit_cast(src + 2)), src, length, wState, user)) { - return; - } - } - if (length) { - memcpy(wState->state.spill, src, length); - wState->state.spillLength = length & 0xf; - } - } else if (consumeContinuation(src, length, wState, user)) { - goto parseNext; + + if (payloadLength(src) < 126) { + if (consumeMessage( + payloadLength(src), src, length, wState, user)) { + return; + } + } else if (payloadLength(src) == 126) { + if (length < MEDIUM_MESSAGE_HEADER) { + break; + } else if (consumeMessage( + protocol::cond_byte_swap( + protocol::bit_cast(src + 2)), + src, length, wState, user)) { + return; + } + } else if (length < LONG_MESSAGE_HEADER) { + break; + } else if (consumeMessage( + protocol::cond_byte_swap( + protocol::bit_cast(src + 2)), + src, length, wState, user)) { + return; } + } + if (length) { + memcpy(wState->state.spill, src, length); + wState->state.spillLength = length & 0xf; + } + } else if (consumeContinuation(src, length, wState, user)) { + goto parseNext; } + } - static const int CONSUME_POST_PADDING = 4; - static const int CONSUME_PRE_PADDING = LONG_MESSAGE_HEADER - 1; + static const int CONSUME_POST_PADDING = 4; + static const int CONSUME_PRE_PADDING = LONG_MESSAGE_HEADER - 1; }; -} +} // namespace uWS -#endif // UWS_WEBSOCKETPROTOCOL_H +#endif // UWS_WEBSOCKETPROTOCOL_H diff --git a/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/asio.h b/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/asio.h index d27df4c9..66b2a299 100644 --- a/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/asio.h +++ b/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/asio.h @@ -24,22 +24,23 @@ #define LIBUS_SOCKET_WRITABLE 2 struct us_loop_t { - alignas(LIBUS_EXT_ALIGNMENT) struct us_internal_loop_data_t data; + alignas(LIBUS_EXT_ALIGNMENT) struct us_internal_loop_data_t data; - // a loop is an io_context - void *io; + // a loop is an io_context + void *io; - // whether or not we got an io_context as hint or not - int is_default; + // whether or not we got an io_context as hint or not + int is_default; }; -// it is no longer valid to cast a pointer to us_poll_t to a pointer of uv_poll_t +// it is no longer valid to cast a pointer to us_poll_t to a pointer of +// uv_poll_t struct us_poll_t { - void *boost_block; + void *boost_block; - LIBUS_SOCKET_DESCRIPTOR fd; - unsigned char poll_type; - int events; + LIBUS_SOCKET_DESCRIPTOR fd; + unsigned char poll_type; + int events; }; -#endif // ASIO_H +#endif // ASIO_H diff --git a/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/epoll_kqueue.h b/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/epoll_kqueue.h index b0653542..005f8bba 100644 --- a/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/epoll_kqueue.h +++ b/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/epoll_kqueue.h @@ -22,8 +22,8 @@ #ifdef LIBUS_USE_EPOLL #include -#include #include +#include #define LIBUS_SOCKET_READABLE EPOLLIN #define LIBUS_SOCKET_WRITABLE EPOLLOUT #else @@ -35,33 +35,34 @@ #endif struct us_loop_t { - alignas(LIBUS_EXT_ALIGNMENT) struct us_internal_loop_data_t data; + alignas(LIBUS_EXT_ALIGNMENT) struct us_internal_loop_data_t data; - /* Number of non-fallthrough polls in the loop */ - int num_polls; + /* Number of non-fallthrough polls in the loop */ + int num_polls; - /* Number of ready polls this iteration */ - int num_ready_polls; + /* Number of ready polls this iteration */ + int num_ready_polls; - /* Current index in list of ready polls */ - int current_ready_poll; + /* Current index in list of ready polls */ + int current_ready_poll; - /* Loop's own file descriptor */ - int fd; + /* Loop's own file descriptor */ + int fd; - /* The list of ready polls */ + /* The list of ready polls */ #ifdef LIBUS_USE_EPOLL - struct epoll_event ready_polls[1024]; + struct epoll_event ready_polls[1024]; #else - struct kevent ready_polls[1024]; + struct kevent ready_polls[1024]; #endif }; struct us_poll_t { - alignas(LIBUS_EXT_ALIGNMENT) struct { - signed int fd : 28; // we could have this unsigned if we wanted to, -1 should never be used - unsigned int poll_type : 4; - } state; + alignas(LIBUS_EXT_ALIGNMENT) struct { + signed int fd : 28; // we could have this unsigned if we wanted to, -1 + // should never be used + unsigned int poll_type : 4; + } state; }; -#endif // EPOLL_KQUEUE_H +#endif // EPOLL_KQUEUE_H diff --git a/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/gcd.h b/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/gcd.h index 22b7f9cd..326845bf 100644 --- a/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/gcd.h +++ b/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/gcd.h @@ -18,23 +18,23 @@ #ifndef GCD_H #define GCD_H -#include "internal/loop_data.h" - #include + +#include "internal/loop_data.h" #define LIBUS_SOCKET_READABLE 1 #define LIBUS_SOCKET_WRITABLE 2 struct us_loop_t { - alignas(LIBUS_EXT_ALIGNMENT) struct us_internal_loop_data_t data; + alignas(LIBUS_EXT_ALIGNMENT) struct us_internal_loop_data_t data; - dispatch_queue_t gcd_queue; + dispatch_queue_t gcd_queue; }; struct us_poll_t { - int events; - dispatch_source_t gcd_read, gcd_write; - LIBUS_SOCKET_DESCRIPTOR fd; - unsigned char poll_type; + int events; + dispatch_source_t gcd_read, gcd_write; + LIBUS_SOCKET_DESCRIPTOR fd; + unsigned char poll_type; }; -#endif // GCD_H +#endif // GCD_H diff --git a/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/libuv.h b/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/libuv.h index 590878b5..8c1e38a5 100644 --- a/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/libuv.h +++ b/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/eventing/libuv.h @@ -18,28 +18,30 @@ #ifndef LIBUV_H #define LIBUV_H -#include "internal/loop_data.h" - #include + +#include "internal/loop_data.h" #define LIBUS_SOCKET_READABLE UV_READABLE #define LIBUS_SOCKET_WRITABLE UV_WRITABLE struct us_loop_t { - alignas(LIBUS_EXT_ALIGNMENT) struct us_internal_loop_data_t data; + alignas(LIBUS_EXT_ALIGNMENT) struct us_internal_loop_data_t data; - uv_loop_t *uv_loop; - int is_default; + uv_loop_t *uv_loop; + int is_default; - uv_prepare_t *uv_pre; - uv_check_t *uv_check; + uv_prepare_t *uv_pre; + uv_check_t *uv_check; }; -// it is no longer valid to cast a pointer to us_poll_t to a pointer of uv_poll_t +// it is no longer valid to cast a pointer to us_poll_t to a pointer of +// uv_poll_t struct us_poll_t { - /* We need to hold a pointer to this uv_poll_t since we need to be able to resize our block */ - uv_poll_t *uv_p; - LIBUS_SOCKET_DESCRIPTOR fd; - unsigned char poll_type; + /* We need to hold a pointer to this uv_poll_t since we need to be able to + * resize our block */ + uv_poll_t *uv_p; + LIBUS_SOCKET_DESCRIPTOR fd; + unsigned char poll_type; }; -#endif // LIBUV_H +#endif // LIBUV_H diff --git a/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/internal.h b/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/internal.h index ce7a24c2..3b82629c 100644 --- a/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/internal.h +++ b/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/internal.h @@ -49,33 +49,41 @@ /* Poll type and what it polls for */ enum { - /* Two first bits */ - POLL_TYPE_SOCKET = 0, - POLL_TYPE_SOCKET_SHUT_DOWN = 1, - POLL_TYPE_SEMI_SOCKET = 2, - POLL_TYPE_CALLBACK = 3, - - /* Two last bits */ - POLL_TYPE_POLLING_OUT = 4, - POLL_TYPE_POLLING_IN = 8 + /* Two first bits */ + POLL_TYPE_SOCKET = 0, + POLL_TYPE_SOCKET_SHUT_DOWN = 1, + POLL_TYPE_SEMI_SOCKET = 2, + POLL_TYPE_CALLBACK = 3, + + /* Two last bits */ + POLL_TYPE_POLLING_OUT = 4, + POLL_TYPE_POLLING_IN = 8 }; /* Loop related */ -void us_internal_dispatch_ready_poll(struct us_poll_t *p, int error, int events); +void us_internal_dispatch_ready_poll(struct us_poll_t *p, int error, + int events); void us_internal_timer_sweep(struct us_loop_t *loop); void us_internal_free_closed_sockets(struct us_loop_t *loop); -void us_internal_loop_link(struct us_loop_t *loop, struct us_socket_context_t *context); -void us_internal_loop_unlink(struct us_loop_t *loop, struct us_socket_context_t *context); -void us_internal_loop_data_init(struct us_loop_t *loop, void (*wakeup_cb)(struct us_loop_t *loop), - void (*pre_cb)(struct us_loop_t *loop), void (*post_cb)(struct us_loop_t *loop)); +void us_internal_loop_link(struct us_loop_t *loop, + struct us_socket_context_t *context); +void us_internal_loop_unlink(struct us_loop_t *loop, + struct us_socket_context_t *context); +void us_internal_loop_data_init(struct us_loop_t *loop, + void (*wakeup_cb)(struct us_loop_t *loop), + void (*pre_cb)(struct us_loop_t *loop), + void (*post_cb)(struct us_loop_t *loop)); void us_internal_loop_data_free(struct us_loop_t *loop); void us_internal_loop_pre(struct us_loop_t *loop); void us_internal_loop_post(struct us_loop_t *loop); /* Asyncs (old) */ -struct us_internal_async *us_internal_create_async(struct us_loop_t *loop, int fallthrough, unsigned int ext_size); +struct us_internal_async *us_internal_create_async(struct us_loop_t *loop, + int fallthrough, + unsigned int ext_size); void us_internal_async_close(struct us_internal_async *a); -void us_internal_async_set(struct us_internal_async *a, void (*cb)(struct us_internal_async *)); +void us_internal_async_set(struct us_internal_async *a, + void (*cb)(struct us_internal_async *)); void us_internal_async_wakeup(struct us_internal_async *a); /* Eventing related */ @@ -88,59 +96,67 @@ void us_internal_init_loop_ssl_data(struct us_loop_t *loop); void us_internal_free_loop_ssl_data(struct us_loop_t *loop); /* Socket context related */ -void us_internal_socket_context_link_socket(struct us_socket_context_t *context, struct us_socket_t *s); -void us_internal_socket_context_unlink_socket(struct us_socket_context_t *context, struct us_socket_t *s); +void us_internal_socket_context_link_socket(struct us_socket_context_t *context, + struct us_socket_t *s); +void us_internal_socket_context_unlink_socket( + struct us_socket_context_t *context, struct us_socket_t *s); /* Sockets are polls */ struct us_socket_t { - alignas(LIBUS_EXT_ALIGNMENT) struct us_poll_t p; // 4 bytes - unsigned char timeout; // 1 byte - unsigned char long_timeout; // 1 byte - unsigned short low_prio_state; /* 0 = not in low-prio queue, 1 = is in low-prio queue, 2 = was in low-prio queue in this iteration */ - struct us_socket_context_t *context; - struct us_socket_t *prev, *next; + alignas(LIBUS_EXT_ALIGNMENT) struct us_poll_t p; // 4 bytes + unsigned char timeout; // 1 byte + unsigned char long_timeout; // 1 byte + unsigned short + low_prio_state; /* 0 = not in low-prio queue, 1 = is in low-prio queue, 2 + = was in low-prio queue in this iteration */ + struct us_socket_context_t *context; + struct us_socket_t *prev, *next; }; /* Internal callback types are polls just like sockets */ struct us_internal_callback_t { - alignas(LIBUS_EXT_ALIGNMENT) struct us_poll_t p; - struct us_loop_t *loop; - int cb_expects_the_loop; - int leave_poll_ready; - void (*cb)(struct us_internal_callback_t *cb); + alignas(LIBUS_EXT_ALIGNMENT) struct us_poll_t p; + struct us_loop_t *loop; + int cb_expects_the_loop; + int leave_poll_ready; + void (*cb)(struct us_internal_callback_t *cb); }; /* Listen sockets are sockets */ struct us_listen_socket_t { - alignas(LIBUS_EXT_ALIGNMENT) struct us_socket_t s; - unsigned int socket_ext_size; + alignas(LIBUS_EXT_ALIGNMENT) struct us_socket_t s; + unsigned int socket_ext_size; }; /* Listen sockets are keps in their own list */ -void us_internal_socket_context_link_listen_socket(struct us_socket_context_t *context, struct us_listen_socket_t *s); -void us_internal_socket_context_unlink_listen_socket(struct us_socket_context_t *context, struct us_listen_socket_t *s); +void us_internal_socket_context_link_listen_socket( + struct us_socket_context_t *context, struct us_listen_socket_t *s); +void us_internal_socket_context_unlink_listen_socket( + struct us_socket_context_t *context, struct us_listen_socket_t *s); struct us_socket_context_t { - alignas(LIBUS_EXT_ALIGNMENT) struct us_loop_t *loop; - uint32_t global_tick; - unsigned char timestamp; - unsigned char long_timestamp; - struct us_socket_t *head_sockets; - struct us_listen_socket_t *head_listen_sockets; - struct us_socket_t *iterator; - struct us_socket_context_t *prev, *next; - - LIBUS_SOCKET_DESCRIPTOR (*on_pre_open)(struct us_socket_context_t *context, LIBUS_SOCKET_DESCRIPTOR fd); - struct us_socket_t *(*on_open)(struct us_socket_t *, int is_client, char *ip, int ip_length); - struct us_socket_t *(*on_data)(struct us_socket_t *, char *data, int length); - struct us_socket_t *(*on_writable)(struct us_socket_t *); - struct us_socket_t *(*on_close)(struct us_socket_t *, int code, void *reason); - //void (*on_timeout)(struct us_socket_context *); - struct us_socket_t *(*on_socket_timeout)(struct us_socket_t *); - struct us_socket_t *(*on_socket_long_timeout)(struct us_socket_t *); - struct us_socket_t *(*on_end)(struct us_socket_t *); - struct us_socket_t *(*on_connect_error)(struct us_socket_t *, int code); - int (*is_low_prio)(struct us_socket_t *); + alignas(LIBUS_EXT_ALIGNMENT) struct us_loop_t *loop; + uint32_t global_tick; + unsigned char timestamp; + unsigned char long_timestamp; + struct us_socket_t *head_sockets; + struct us_listen_socket_t *head_listen_sockets; + struct us_socket_t *iterator; + struct us_socket_context_t *prev, *next; + + LIBUS_SOCKET_DESCRIPTOR (*on_pre_open) + (struct us_socket_context_t *context, LIBUS_SOCKET_DESCRIPTOR fd); + struct us_socket_t *(*on_open)(struct us_socket_t *, int is_client, char *ip, + int ip_length); + struct us_socket_t *(*on_data)(struct us_socket_t *, char *data, int length); + struct us_socket_t *(*on_writable)(struct us_socket_t *); + struct us_socket_t *(*on_close)(struct us_socket_t *, int code, void *reason); + // void (*on_timeout)(struct us_socket_context *); + struct us_socket_t *(*on_socket_timeout)(struct us_socket_t *); + struct us_socket_t *(*on_socket_long_timeout)(struct us_socket_t *); + struct us_socket_t *(*on_end)(struct us_socket_t *); + struct us_socket_t *(*on_connect_error)(struct us_socket_t *, int code); + int (*is_low_prio)(struct us_socket_t *); }; #endif @@ -152,73 +168,117 @@ struct us_internal_ssl_socket_context_t; struct us_internal_ssl_socket_t; /* SNI functions */ -void us_internal_ssl_socket_context_add_server_name(struct us_internal_ssl_socket_context_t *context, const char *hostname_pattern, struct us_socket_context_options_t options, void *user); -void us_internal_ssl_socket_context_remove_server_name(struct us_internal_ssl_socket_context_t *context, const char *hostname_pattern); -void us_internal_ssl_socket_context_on_server_name(struct us_internal_ssl_socket_context_t *context, void (*cb)(struct us_internal_ssl_socket_context_t *, const char *)); -void *us_internal_ssl_socket_get_sni_userdata(struct us_internal_ssl_socket_t *s); -void *us_internal_ssl_socket_context_find_server_name_userdata(struct us_internal_ssl_socket_context_t *context, const char *hostname_pattern); - -void *us_internal_ssl_socket_get_native_handle(struct us_internal_ssl_socket_t *s); -void *us_internal_ssl_socket_context_get_native_handle(struct us_internal_ssl_socket_context_t *context); - -struct us_internal_ssl_socket_context_t *us_internal_create_ssl_socket_context(struct us_loop_t *loop, - int context_ext_size, struct us_socket_context_options_t options); - -void us_internal_ssl_socket_context_free(struct us_internal_ssl_socket_context_t *context); -void us_internal_ssl_socket_context_on_open(struct us_internal_ssl_socket_context_t *context, - struct us_internal_ssl_socket_t *(*on_open)(struct us_internal_ssl_socket_t *s, int is_client, char *ip, int ip_length)); - -void us_internal_ssl_socket_context_on_close(struct us_internal_ssl_socket_context_t *context, - struct us_internal_ssl_socket_t *(*on_close)(struct us_internal_ssl_socket_t *s, int code, void *reason)); - -void us_internal_ssl_socket_context_on_data(struct us_internal_ssl_socket_context_t *context, - struct us_internal_ssl_socket_t *(*on_data)(struct us_internal_ssl_socket_t *s, char *data, int length)); - -void us_internal_ssl_socket_context_on_writable(struct us_internal_ssl_socket_context_t *context, - struct us_internal_ssl_socket_t *(*on_writable)(struct us_internal_ssl_socket_t *s)); - -void us_internal_ssl_socket_context_on_timeout(struct us_internal_ssl_socket_context_t *context, - struct us_internal_ssl_socket_t *(*on_timeout)(struct us_internal_ssl_socket_t *s)); - -void us_internal_ssl_socket_context_on_long_timeout(struct us_internal_ssl_socket_context_t *context, - struct us_internal_ssl_socket_t *(*on_timeout)(struct us_internal_ssl_socket_t *s)); - -void us_internal_ssl_socket_context_on_end(struct us_internal_ssl_socket_context_t *context, - struct us_internal_ssl_socket_t *(*on_end)(struct us_internal_ssl_socket_t *s)); - -void us_internal_ssl_socket_context_on_connect_error(struct us_internal_ssl_socket_context_t *context, - struct us_internal_ssl_socket_t *(*on_connect_error)(struct us_internal_ssl_socket_t *s, int code)); - -struct us_listen_socket_t *us_internal_ssl_socket_context_listen(struct us_internal_ssl_socket_context_t *context, - const char *host, int port, int options, int socket_ext_size); - -struct us_listen_socket_t *us_internal_ssl_socket_context_listen_unix(struct us_internal_ssl_socket_context_t *context, - const char *path, int options, int socket_ext_size); - -struct us_internal_ssl_socket_t *us_internal_ssl_adopt_accepted_socket(struct us_internal_ssl_socket_context_t *context, LIBUS_SOCKET_DESCRIPTOR accepted_fd, - unsigned int socket_ext_size, char *addr_ip, int addr_ip_length); - -struct us_internal_ssl_socket_t *us_internal_ssl_socket_context_connect(struct us_internal_ssl_socket_context_t *context, - const char *host, int port, const char *source_host, int options, int socket_ext_size); - - -struct us_internal_ssl_socket_t *us_internal_ssl_socket_context_connect_unix(struct us_internal_ssl_socket_context_t *context, - const char *server_path, int options, int socket_ext_size); - -int us_internal_ssl_socket_write(struct us_internal_ssl_socket_t *s, const char *data, int length, int msg_more); -void us_internal_ssl_socket_timeout(struct us_internal_ssl_socket_t *s, unsigned int seconds); -void *us_internal_ssl_socket_context_ext(struct us_internal_ssl_socket_context_t *s); -struct us_internal_ssl_socket_context_t *us_internal_ssl_socket_get_context(struct us_internal_ssl_socket_t *s); +void us_internal_ssl_socket_context_add_server_name( + struct us_internal_ssl_socket_context_t *context, + const char *hostname_pattern, struct us_socket_context_options_t options, + void *user); +void us_internal_ssl_socket_context_remove_server_name( + struct us_internal_ssl_socket_context_t *context, + const char *hostname_pattern); +void us_internal_ssl_socket_context_on_server_name( + struct us_internal_ssl_socket_context_t *context, + void (*cb)(struct us_internal_ssl_socket_context_t *, const char *)); +void *us_internal_ssl_socket_get_sni_userdata( + struct us_internal_ssl_socket_t *s); +void *us_internal_ssl_socket_context_find_server_name_userdata( + struct us_internal_ssl_socket_context_t *context, + const char *hostname_pattern); + +void *us_internal_ssl_socket_get_native_handle( + struct us_internal_ssl_socket_t *s); +void *us_internal_ssl_socket_context_get_native_handle( + struct us_internal_ssl_socket_context_t *context); + +struct us_internal_ssl_socket_context_t *us_internal_create_ssl_socket_context( + struct us_loop_t *loop, int context_ext_size, + struct us_socket_context_options_t options); + +void us_internal_ssl_socket_context_free( + struct us_internal_ssl_socket_context_t *context); +void us_internal_ssl_socket_context_on_open( + struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *(*on_open)( + struct us_internal_ssl_socket_t *s, int is_client, char *ip, + int ip_length)); + +void us_internal_ssl_socket_context_on_close( + struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *(*on_close)( + struct us_internal_ssl_socket_t *s, int code, void *reason)); + +void us_internal_ssl_socket_context_on_data( + struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *(*on_data)( + struct us_internal_ssl_socket_t *s, char *data, int length)); + +void us_internal_ssl_socket_context_on_writable( + struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *(*on_writable)( + struct us_internal_ssl_socket_t *s)); + +void us_internal_ssl_socket_context_on_timeout( + struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *(*on_timeout)( + struct us_internal_ssl_socket_t *s)); + +void us_internal_ssl_socket_context_on_long_timeout( + struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *(*on_timeout)( + struct us_internal_ssl_socket_t *s)); + +void us_internal_ssl_socket_context_on_end( + struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *(*on_end)( + struct us_internal_ssl_socket_t *s)); + +void us_internal_ssl_socket_context_on_connect_error( + struct us_internal_ssl_socket_context_t *context, + struct us_internal_ssl_socket_t *(*on_connect_error)( + struct us_internal_ssl_socket_t *s, int code)); + +struct us_listen_socket_t *us_internal_ssl_socket_context_listen( + struct us_internal_ssl_socket_context_t *context, const char *host, + int port, int options, int socket_ext_size); + +struct us_listen_socket_t *us_internal_ssl_socket_context_listen_unix( + struct us_internal_ssl_socket_context_t *context, const char *path, + int options, int socket_ext_size); + +struct us_internal_ssl_socket_t *us_internal_ssl_adopt_accepted_socket( + struct us_internal_ssl_socket_context_t *context, + LIBUS_SOCKET_DESCRIPTOR accepted_fd, unsigned int socket_ext_size, + char *addr_ip, int addr_ip_length); + +struct us_internal_ssl_socket_t *us_internal_ssl_socket_context_connect( + struct us_internal_ssl_socket_context_t *context, const char *host, + int port, const char *source_host, int options, int socket_ext_size); + +struct us_internal_ssl_socket_t *us_internal_ssl_socket_context_connect_unix( + struct us_internal_ssl_socket_context_t *context, const char *server_path, + int options, int socket_ext_size); + +int us_internal_ssl_socket_write(struct us_internal_ssl_socket_t *s, + const char *data, int length, int msg_more); +void us_internal_ssl_socket_timeout(struct us_internal_ssl_socket_t *s, + unsigned int seconds); +void *us_internal_ssl_socket_context_ext( + struct us_internal_ssl_socket_context_t *s); +struct us_internal_ssl_socket_context_t *us_internal_ssl_socket_get_context( + struct us_internal_ssl_socket_t *s); void *us_internal_ssl_socket_ext(struct us_internal_ssl_socket_t *s); int us_internal_ssl_socket_is_shut_down(struct us_internal_ssl_socket_t *s); void us_internal_ssl_socket_shutdown(struct us_internal_ssl_socket_t *s); -struct us_internal_ssl_socket_t *us_internal_ssl_socket_context_adopt_socket(struct us_internal_ssl_socket_context_t *context, +struct us_internal_ssl_socket_t *us_internal_ssl_socket_context_adopt_socket( + struct us_internal_ssl_socket_context_t *context, struct us_internal_ssl_socket_t *s, int ext_size); -struct us_internal_ssl_socket_context_t *us_internal_create_child_ssl_socket_context(struct us_internal_ssl_socket_context_t *context, int context_ext_size); -struct us_loop_t *us_internal_ssl_socket_context_loop(struct us_internal_ssl_socket_context_t *context); +struct us_internal_ssl_socket_context_t * +us_internal_create_child_ssl_socket_context( + struct us_internal_ssl_socket_context_t *context, int context_ext_size); +struct us_loop_t *us_internal_ssl_socket_context_loop( + struct us_internal_ssl_socket_context_t *context); #endif -#endif // INTERNAL_H +#endif // INTERNAL_H diff --git a/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/loop_data.h b/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/loop_data.h index 468c5235..deb59493 100644 --- a/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/loop_data.h +++ b/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/loop_data.h @@ -19,20 +19,20 @@ #define LOOP_DATA_H struct us_internal_loop_data_t { - struct us_timer_t *sweep_timer; - struct us_internal_async *wakeup_async; - int last_write_failed; - struct us_socket_context_t *head; - struct us_socket_context_t *iterator; - char *recv_buf; - void *ssl_data; - void (*pre_cb)(struct us_loop_t *); - void (*post_cb)(struct us_loop_t *); - struct us_socket_t *closed_head; - struct us_socket_t *low_prio_head; - int low_prio_budget; - /* We do not care if this flips or not, it doesn't matter */ - long long iteration_nr; + struct us_timer_t *sweep_timer; + struct us_internal_async *wakeup_async; + int last_write_failed; + struct us_socket_context_t *head; + struct us_socket_context_t *iterator; + char *recv_buf; + void *ssl_data; + void (*pre_cb)(struct us_loop_t *); + void (*post_cb)(struct us_loop_t *); + struct us_socket_t *closed_head; + struct us_socket_t *low_prio_head; + int low_prio_budget; + /* We do not care if this flips or not, it doesn't matter */ + long long iteration_nr; }; -#endif // LOOP_DATA_H +#endif // LOOP_DATA_H diff --git a/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/networking/bsd.h b/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/networking/bsd.h index 485784a7..79fed84f 100644 --- a/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/networking/bsd.h +++ b/vendor/hydra/vendor/uwebsockets/uSockets/src/internal/networking/bsd.h @@ -20,8 +20,9 @@ // top-most wrapper of bsd-like syscalls -// holds everything you need from the bsd/winsock interfaces, only included by internal libusockets.h -// here everything about the syscalls are inline-wrapped and included +// holds everything you need from the bsd/winsock interfaces, only included by +// internal libusockets.h here everything about the syscalls are inline-wrapped +// and included #include "libusockets.h" @@ -48,22 +49,26 @@ #define LIBUS_UDP_MAX_NUM 1024 struct bsd_addr_t { - struct sockaddr_storage mem; - socklen_t len; - char *ip; - int ip_length; - int port; + struct sockaddr_storage mem; + socklen_t len; + char *ip; + int ip_length; + int port; }; -int bsd_sendmmsg(LIBUS_SOCKET_DESCRIPTOR fd, void *msgvec, unsigned int vlen, int flags); -int bsd_recvmmsg(LIBUS_SOCKET_DESCRIPTOR fd, void *msgvec, unsigned int vlen, int flags, void *timeout); +int bsd_sendmmsg(LIBUS_SOCKET_DESCRIPTOR fd, void *msgvec, unsigned int vlen, + int flags); +int bsd_recvmmsg(LIBUS_SOCKET_DESCRIPTOR fd, void *msgvec, unsigned int vlen, + int flags, void *timeout); int bsd_udp_packet_buffer_payload_length(void *msgvec, int index); char *bsd_udp_packet_buffer_payload(void *msgvec, int index); char *bsd_udp_packet_buffer_peer(void *msgvec, int index); int bsd_udp_packet_buffer_local_ip(void *msgvec, int index, char *ip); int bsd_udp_packet_buffer_ecn(void *msgvec, int index); void *bsd_create_udp_packet_buffer(); -void bsd_udp_buffer_set_packet_payload(struct us_udp_packet_buffer_t *send_buf, int index, int offset, void *payload, int length, void *peer_addr); +void bsd_udp_buffer_set_packet_payload(struct us_udp_packet_buffer_t *send_buf, + int index, int offset, void *payload, + int length, void *peer_addr); LIBUS_SOCKET_DESCRIPTOR apple_no_sigpipe(LIBUS_SOCKET_DESCRIPTOR fd); LIBUS_SOCKET_DESCRIPTOR bsd_set_nonblocking(LIBUS_SOCKET_DESCRIPTOR fd); @@ -86,24 +91,32 @@ int bsd_addr_get_ip_length(struct bsd_addr_t *addr); int bsd_addr_get_port(struct bsd_addr_t *addr); // called by dispatch_ready_poll -LIBUS_SOCKET_DESCRIPTOR bsd_accept_socket(LIBUS_SOCKET_DESCRIPTOR fd, struct bsd_addr_t *addr); +LIBUS_SOCKET_DESCRIPTOR bsd_accept_socket(LIBUS_SOCKET_DESCRIPTOR fd, + struct bsd_addr_t *addr); int bsd_recv(LIBUS_SOCKET_DESCRIPTOR fd, void *buf, int length, int flags); -int bsd_send(LIBUS_SOCKET_DESCRIPTOR fd, const char *buf, int length, int msg_more); -int bsd_write2(LIBUS_SOCKET_DESCRIPTOR fd, const char *header, int header_length, const char *payload, int payload_length); +int bsd_send(LIBUS_SOCKET_DESCRIPTOR fd, const char *buf, int length, + int msg_more); +int bsd_write2(LIBUS_SOCKET_DESCRIPTOR fd, const char *header, + int header_length, const char *payload, int payload_length); int bsd_would_block(); // return LIBUS_SOCKET_ERROR or the fd that represents listen socket // listen both on ipv6 and ipv4 -LIBUS_SOCKET_DESCRIPTOR bsd_create_listen_socket(const char *host, int port, int options); +LIBUS_SOCKET_DESCRIPTOR bsd_create_listen_socket(const char *host, int port, + int options); -LIBUS_SOCKET_DESCRIPTOR bsd_create_listen_socket_unix(const char *path, int options); +LIBUS_SOCKET_DESCRIPTOR bsd_create_listen_socket_unix(const char *path, + int options); /* Creates an UDP socket bound to the hostname and port */ LIBUS_SOCKET_DESCRIPTOR bsd_create_udp_socket(const char *host, int port); -LIBUS_SOCKET_DESCRIPTOR bsd_create_connect_socket(const char *host, int port, const char *source_host, int options); +LIBUS_SOCKET_DESCRIPTOR bsd_create_connect_socket(const char *host, int port, + const char *source_host, + int options); -LIBUS_SOCKET_DESCRIPTOR bsd_create_connect_socket_unix(const char *server_path, int options); +LIBUS_SOCKET_DESCRIPTOR bsd_create_connect_socket_unix(const char *server_path, + int options); -#endif // BSD_H +#endif // BSD_H diff --git a/vendor/hydra/vendor/uwebsockets/uSockets/src/io_uring/internal.h b/vendor/hydra/vendor/uwebsockets/uSockets/src/io_uring/internal.h index 878d6e5e..eb596aab 100644 --- a/vendor/hydra/vendor/uwebsockets/uSockets/src/io_uring/internal.h +++ b/vendor/hydra/vendor/uwebsockets/uSockets/src/io_uring/internal.h @@ -11,88 +11,94 @@ #include "liburing.h" -#define MAX_CONNECTIONS 4096 -#define BACKLOG 512 -#define MAX_MESSAGE_LEN 2048 -#define BUFFERS_COUNT MAX_CONNECTIONS - -void add_accept(struct io_uring *ring, int fd, struct sockaddr *client_addr, socklen_t *client_len, unsigned flags); -void add_socket_read(struct io_uring *ring, int fd, unsigned gid, size_t size, unsigned flags); -void add_socket_write(struct io_uring *ring, int fd, __u16 bid, size_t size, unsigned flags); +#define MAX_CONNECTIONS 4096 +#define BACKLOG 512 +#define MAX_MESSAGE_LEN 2048 +#define BUFFERS_COUNT MAX_CONNECTIONS + +void add_accept(struct io_uring *ring, int fd, struct sockaddr *client_addr, + socklen_t *client_len, unsigned flags); +void add_socket_read(struct io_uring *ring, int fd, unsigned gid, size_t size, + unsigned flags); +void add_socket_write(struct io_uring *ring, int fd, __u16 bid, size_t size, + unsigned flags); void add_provide_buf(struct io_uring *ring, __u16 bid, unsigned gid); // 8 byte aligned pointer offset enum pointer_tags { - SOCKET_READ, - SOCKET_WRITE, - LISTEN_SOCKET_ACCEPT, - SOCKET_CONNECT, - LOOP_TIMER = 7, + SOCKET_READ, + SOCKET_WRITE, + LISTEN_SOCKET_ACCEPT, + SOCKET_CONNECT, + LOOP_TIMER = 7, }; #include /*void bsd_socket_nodelay(int fd, int enabled) { - setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (void *) &enabled, sizeof(enabled)); + setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (void *) &enabled, +sizeof(enabled)); }*/ -void us_internal_loop_link(struct us_loop_t *loop, struct us_socket_context_t *context); -void us_internal_socket_context_link_socket(struct us_socket_context_t *context, struct us_socket_t *s); +void us_internal_loop_link(struct us_loop_t *loop, + struct us_socket_context_t *context); +void us_internal_socket_context_link_socket(struct us_socket_context_t *context, + struct us_socket_t *s); struct us_timer_t { - struct us_loop_t *loop; - int fd; - uint64_t buf; + struct us_loop_t *loop; + int fd; + uint64_t buf; }; struct us_loop_t { - struct io_uring ring; - struct io_uring_buf_ring *buf_ring; - - struct us_timer_t *timer; - + struct io_uring ring; + struct io_uring_buf_ring *buf_ring; - struct us_socket_context_t *head; - struct us_socket_context_t *iterator; + struct us_timer_t *timer; - uint64_t next_timeout; + struct us_socket_context_t *head; + struct us_socket_context_t *iterator; - // let's say there is only one context for now - //struct us_socket_context_t *context_head; + uint64_t next_timeout; + + // let's say there is only one context for now + // struct us_socket_context_t *context_head; }; struct us_socket_context_t { - struct us_loop_t *loop; - uint32_t global_tick; - unsigned char timestamp; - unsigned char long_timestamp; - struct us_socket_t *head_sockets; - struct us_listen_socket_t *head_listen_sockets; - struct us_socket_t *iterator; - struct us_socket_context_t *prev, *next; - - struct us_socket_t *(*on_open)(struct us_socket_t *, int is_client, char *ip, int ip_length); - struct us_socket_t *(*on_data)(struct us_socket_t *, char *data, int length); - struct us_socket_t *(*on_writable)(struct us_socket_t *); - struct us_socket_t *(*on_close)(struct us_socket_t *, int code, void *reason); - //void (*on_timeout)(struct us_socket_context *); - struct us_socket_t *(*on_socket_timeout)(struct us_socket_t *); - struct us_socket_t *(*on_socket_long_timeout)(struct us_socket_t *); - struct us_socket_t *(*on_end)(struct us_socket_t *); - struct us_socket_t *(*on_connect_error)(struct us_socket_t *, int code); + struct us_loop_t *loop; + uint32_t global_tick; + unsigned char timestamp; + unsigned char long_timestamp; + struct us_socket_t *head_sockets; + struct us_listen_socket_t *head_listen_sockets; + struct us_socket_t *iterator; + struct us_socket_context_t *prev, *next; + + struct us_socket_t *(*on_open)(struct us_socket_t *, int is_client, char *ip, + int ip_length); + struct us_socket_t *(*on_data)(struct us_socket_t *, char *data, int length); + struct us_socket_t *(*on_writable)(struct us_socket_t *); + struct us_socket_t *(*on_close)(struct us_socket_t *, int code, void *reason); + // void (*on_timeout)(struct us_socket_context *); + struct us_socket_t *(*on_socket_timeout)(struct us_socket_t *); + struct us_socket_t *(*on_socket_long_timeout)(struct us_socket_t *); + struct us_socket_t *(*on_end)(struct us_socket_t *); + struct us_socket_t *(*on_connect_error)(struct us_socket_t *, int code); }; struct us_listen_socket_t { - struct us_socket_context_t *context; - int socket_ext_size; + struct us_socket_context_t *context; + int socket_ext_size; }; struct us_socket_t { - struct us_socket_context_t *context; - struct us_socket_t *prev, *next; - unsigned char timeout; // 1 byte - unsigned char long_timeout; // 1 byte - int dd; + struct us_socket_context_t *context; + struct us_socket_t *prev, *next; + unsigned char timeout; // 1 byte + unsigned char long_timeout; // 1 byte + int dd; - char sendBuf[16 * 1024]; + char sendBuf[16 * 1024]; }; \ No newline at end of file diff --git a/vendor/hydra/vendor/uwebsockets/uSockets/src/libusockets.h b/vendor/hydra/vendor/uwebsockets/uSockets/src/libusockets.h index dde4bb67..8535b62c 100644 --- a/vendor/hydra/vendor/uwebsockets/uSockets/src/libusockets.h +++ b/vendor/hydra/vendor/uwebsockets/uSockets/src/libusockets.h @@ -20,7 +20,8 @@ /* 512kb shared receive buffer */ #define LIBUS_RECV_BUFFER_LENGTH 524288 -/* A timeout granularity of 4 seconds means give or take 4 seconds from set timeout */ +/* A timeout granularity of 4 seconds means give or take 4 seconds from set + * timeout */ #define LIBUS_TIMEOUT_GRANULARITY 4 /* 32 byte padding of receive buffer ends */ #define LIBUS_RECV_BUFFER_PADDING 32 @@ -43,10 +44,10 @@ extern "C" { #endif enum { - /* No meaning, default listen option */ - LIBUS_LISTEN_DEFAULT, - /* We exclusively own this port, do not share it */ - LIBUS_LISTEN_EXCLUSIVE_PORT + /* No meaning, default listen option */ + LIBUS_LISTEN_DEFAULT, + /* We exclusively own this port, do not share it */ + LIBUS_LISTEN_EXCLUSIVE_PORT }; /* Library types publicly available */ @@ -64,11 +65,15 @@ char *us_socket_send_buffer(int ssl, struct us_socket_t *s); /* Public interface for UDP sockets */ /* Peeks data and length of UDP payload */ -char *us_udp_packet_buffer_payload(struct us_udp_packet_buffer_t *buf, int index); -int us_udp_packet_buffer_payload_length(struct us_udp_packet_buffer_t *buf, int index); +char *us_udp_packet_buffer_payload(struct us_udp_packet_buffer_t *buf, + int index); +int us_udp_packet_buffer_payload_length(struct us_udp_packet_buffer_t *buf, + int index); -/* Copies out local (received destination) ip (4 or 16 bytes) of received packet */ -int us_udp_packet_buffer_local_ip(struct us_udp_packet_buffer_t *buf, int index, char *ip); +/* Copies out local (received destination) ip (4 or 16 bytes) of received packet + */ +int us_udp_packet_buffer_local_ip(struct us_udp_packet_buffer_t *buf, int index, + char *ip); /* Get the bound port in host byte order */ int us_udp_socket_bound_port(struct us_udp_socket_t *s); @@ -80,34 +85,51 @@ char *us_udp_packet_buffer_peer(struct us_udp_packet_buffer_t *buf, int index); int us_udp_packet_buffer_ecn(struct us_udp_packet_buffer_t *buf, int index); /* Receives a set of packets into specified packet buffer */ -int us_udp_socket_receive(struct us_udp_socket_t *s, struct us_udp_packet_buffer_t *buf); +int us_udp_socket_receive(struct us_udp_socket_t *s, + struct us_udp_packet_buffer_t *buf); -void us_udp_buffer_set_packet_payload(struct us_udp_packet_buffer_t *send_buf, int index, int offset, void *payload, int length, void *peer_addr); +void us_udp_buffer_set_packet_payload(struct us_udp_packet_buffer_t *send_buf, + int index, int offset, void *payload, + int length, void *peer_addr); -int us_udp_socket_send(struct us_udp_socket_t *s, struct us_udp_packet_buffer_t *buf, int num); +int us_udp_socket_send(struct us_udp_socket_t *s, + struct us_udp_packet_buffer_t *buf, int num); -/* Allocates a packet buffer that is reuable per thread. Mutated by us_udp_socket_receive. */ +/* Allocates a packet buffer that is reuable per thread. Mutated by + * us_udp_socket_receive. */ struct us_udp_packet_buffer_t *us_create_udp_packet_buffer(); -/* Creates a (heavy-weight) UDP socket with a user space ring buffer. Again, this one is heavy weight and - * shoud be reused. One entire QUIC server can be implemented using only one single UDP socket so weight - * is not a concern as is the case for TCP sockets which are 1-to-1 with TCP connections. */ -//struct us_udp_socket_t *us_create_udp_socket(struct us_loop_t *loop, void (*read_cb)(struct us_udp_socket_t *), unsigned short port); +/* Creates a (heavy-weight) UDP socket with a user space ring buffer. Again, + * this one is heavy weight and shoud be reused. One entire QUIC server can be + * implemented using only one single UDP socket so weight is not a concern as is + * the case for TCP sockets which are 1-to-1 with TCP connections. */ +// struct us_udp_socket_t *us_create_udp_socket(struct us_loop_t *loop, void +// (*read_cb)(struct us_udp_socket_t *), unsigned short port); -//struct us_udp_socket_t *us_create_udp_socket(struct us_loop_t *loop, void (*data_cb)(struct us_udp_socket_t *, struct us_udp_packet_buffer_t *, int), void (*drain_cb)(struct us_udp_socket_t *), char *host, unsigned short port); +// struct us_udp_socket_t *us_create_udp_socket(struct us_loop_t *loop, void +// (*data_cb)(struct us_udp_socket_t *, struct us_udp_packet_buffer_t *, int), +// void (*drain_cb)(struct us_udp_socket_t *), char *host, unsigned short port); -struct us_udp_socket_t *us_create_udp_socket(struct us_loop_t *loop, struct us_udp_packet_buffer_t *buf, void (*data_cb)(struct us_udp_socket_t *, struct us_udp_packet_buffer_t *, int), void (*drain_cb)(struct us_udp_socket_t *), const char *host, unsigned short port, void *user); +struct us_udp_socket_t *us_create_udp_socket( + struct us_loop_t *loop, struct us_udp_packet_buffer_t *buf, + void (*data_cb)(struct us_udp_socket_t *, struct us_udp_packet_buffer_t *, + int), + void (*drain_cb)(struct us_udp_socket_t *), const char *host, + unsigned short port, void *user); /* This one is ugly, should be ext! not user */ void *us_udp_socket_user(struct us_udp_socket_t *s); /* Binds the UDP socket to an interface and port */ -int us_udp_socket_bind(struct us_udp_socket_t *s, const char *hostname, unsigned int port); +int us_udp_socket_bind(struct us_udp_socket_t *s, const char *hostname, + unsigned int port); /* Public interfaces for timers */ -/* Create a new high precision, low performance timer. May fail and return null */ -struct us_timer_t *us_create_timer(struct us_loop_t *loop, int fallthrough, unsigned int ext_size); +/* Create a new high precision, low performance timer. May fail and return null + */ +struct us_timer_t *us_create_timer(struct us_loop_t *loop, int fallthrough, + unsigned int ext_size); /* Returns user data extension for this timer */ void *us_timer_ext(struct us_timer_t *timer); @@ -117,7 +139,8 @@ void us_timer_close(struct us_timer_t *timer); /* Arm a timer with a delay from now and eventually a repeat delay. * Specify 0 as repeat delay to disable repeating. Specify both 0 to disarm. */ -void us_timer_set(struct us_timer_t *timer, void (*cb)(struct us_timer_t *t), int ms, int repeat_ms); +void us_timer_set(struct us_timer_t *timer, void (*cb)(struct us_timer_t *t), + int ms, int repeat_ms); /* Returns the loop for this timer */ struct us_loop_t *us_timer_loop(struct us_timer_t *t); @@ -125,109 +148,157 @@ struct us_loop_t *us_timer_loop(struct us_timer_t *t); /* Public interfaces for contexts */ struct us_socket_context_options_t { - const char *key_file_name; - const char *cert_file_name; - const char *passphrase; - const char *dh_params_file_name; - const char *ca_file_name; - const char *ssl_ciphers; - int ssl_prefer_low_memory_usage; /* Todo: rename to prefer_low_memory_usage and apply for TCP as well */ + const char *key_file_name; + const char *cert_file_name; + const char *passphrase; + const char *dh_params_file_name; + const char *ca_file_name; + const char *ssl_ciphers; + int ssl_prefer_low_memory_usage; /* Todo: rename to prefer_low_memory_usage + and apply for TCP as well */ }; /* Return 15-bit timestamp for this context */ -unsigned short us_socket_context_timestamp(int ssl, struct us_socket_context_t *context); +unsigned short us_socket_context_timestamp(int ssl, + struct us_socket_context_t *context); /* Adds SNI domain and cert in asn1 format */ -void us_socket_context_add_server_name(int ssl, struct us_socket_context_t *context, const char *hostname_pattern, struct us_socket_context_options_t options, void *user); -void us_socket_context_remove_server_name(int ssl, struct us_socket_context_t *context, const char *hostname_pattern); -void us_socket_context_on_server_name(int ssl, struct us_socket_context_t *context, void (*cb)(struct us_socket_context_t *, const char *hostname)); +void us_socket_context_add_server_name( + int ssl, struct us_socket_context_t *context, const char *hostname_pattern, + struct us_socket_context_options_t options, void *user); +void us_socket_context_remove_server_name(int ssl, + struct us_socket_context_t *context, + const char *hostname_pattern); +void us_socket_context_on_server_name(int ssl, + struct us_socket_context_t *context, + void (*cb)(struct us_socket_context_t *, + const char *hostname)); void *us_socket_server_name_userdata(int ssl, struct us_socket_t *s); -void *us_socket_context_find_server_name_userdata(int ssl, struct us_socket_context_t *context, const char *hostname_pattern); +void *us_socket_context_find_server_name_userdata( + int ssl, struct us_socket_context_t *context, const char *hostname_pattern); /* Returns the underlying SSL native handle, such as SSL_CTX or nullptr */ -void *us_socket_context_get_native_handle(int ssl, struct us_socket_context_t *context); +void *us_socket_context_get_native_handle(int ssl, + struct us_socket_context_t *context); -/* A socket context holds shared callbacks and user data extension for associated sockets */ -struct us_socket_context_t *us_create_socket_context(int ssl, struct us_loop_t *loop, - int ext_size, struct us_socket_context_options_t options); +/* A socket context holds shared callbacks and user data extension for + * associated sockets */ +struct us_socket_context_t *us_create_socket_context( + int ssl, struct us_loop_t *loop, int ext_size, + struct us_socket_context_options_t options); /* Delete resources allocated at creation time. */ void us_socket_context_free(int ssl, struct us_socket_context_t *context); /* Setters of various async callbacks */ -void us_socket_context_on_pre_open(int ssl, struct us_socket_context_t *context, - LIBUS_SOCKET_DESCRIPTOR (*on_pre_open)(struct us_socket_context_t *context, LIBUS_SOCKET_DESCRIPTOR fd)); -void us_socket_context_on_open(int ssl, struct us_socket_context_t *context, - struct us_socket_t *(*on_open)(struct us_socket_t *s, int is_client, char *ip, int ip_length)); -void us_socket_context_on_close(int ssl, struct us_socket_context_t *context, - struct us_socket_t *(*on_close)(struct us_socket_t *s, int code, void *reason)); -void us_socket_context_on_data(int ssl, struct us_socket_context_t *context, - struct us_socket_t *(*on_data)(struct us_socket_t *s, char *data, int length)); -void us_socket_context_on_writable(int ssl, struct us_socket_context_t *context, +void us_socket_context_on_pre_open( + int ssl, struct us_socket_context_t *context, + LIBUS_SOCKET_DESCRIPTOR (*on_pre_open)(struct us_socket_context_t *context, + LIBUS_SOCKET_DESCRIPTOR fd)); +void us_socket_context_on_open( + int ssl, struct us_socket_context_t *context, + struct us_socket_t *(*on_open)(struct us_socket_t *s, int is_client, + char *ip, int ip_length)); +void us_socket_context_on_close( + int ssl, struct us_socket_context_t *context, + struct us_socket_t *(*on_close)(struct us_socket_t *s, int code, + void *reason)); +void us_socket_context_on_data( + int ssl, struct us_socket_context_t *context, + struct us_socket_t *(*on_data)(struct us_socket_t *s, char *data, + int length)); +void us_socket_context_on_writable( + int ssl, struct us_socket_context_t *context, struct us_socket_t *(*on_writable)(struct us_socket_t *s)); -void us_socket_context_on_timeout(int ssl, struct us_socket_context_t *context, +void us_socket_context_on_timeout( + int ssl, struct us_socket_context_t *context, struct us_socket_t *(*on_timeout)(struct us_socket_t *s)); -void us_socket_context_on_long_timeout(int ssl, struct us_socket_context_t *context, +void us_socket_context_on_long_timeout( + int ssl, struct us_socket_context_t *context, struct us_socket_t *(*on_timeout)(struct us_socket_t *s)); /* This one is only used for when a connecting socket fails in a late stage. */ -void us_socket_context_on_connect_error(int ssl, struct us_socket_context_t *context, +void us_socket_context_on_connect_error( + int ssl, struct us_socket_context_t *context, struct us_socket_t *(*on_connect_error)(struct us_socket_t *s, int code)); /* Emitted when a socket has been half-closed */ -void us_socket_context_on_end(int ssl, struct us_socket_context_t *context, struct us_socket_t *(*on_end)(struct us_socket_t *s)); +void us_socket_context_on_end( + int ssl, struct us_socket_context_t *context, + struct us_socket_t *(*on_end)(struct us_socket_t *s)); /* Returns user data extension for this socket context */ void *us_socket_context_ext(int ssl, struct us_socket_context_t *context); -/* Closes all open sockets, including listen sockets. Does not invalidate the socket context. */ +/* Closes all open sockets, including listen sockets. Does not invalidate the + * socket context. */ void us_socket_context_close(int ssl, struct us_socket_context_t *context); -/* Listen for connections. Acts as the main driving cog in a server. Will call set async callbacks. */ -struct us_listen_socket_t *us_socket_context_listen(int ssl, struct us_socket_context_t *context, - const char *host, int port, int options, int socket_ext_size); +/* Listen for connections. Acts as the main driving cog in a server. Will call + * set async callbacks. */ +struct us_listen_socket_t *us_socket_context_listen( + int ssl, struct us_socket_context_t *context, const char *host, int port, + int options, int socket_ext_size); -struct us_listen_socket_t *us_socket_context_listen_unix(int ssl, struct us_socket_context_t *context, - const char *path, int options, int socket_ext_size); +struct us_listen_socket_t *us_socket_context_listen_unix( + int ssl, struct us_socket_context_t *context, const char *path, int options, + int socket_ext_size); /* listen_socket.c/.h */ void us_listen_socket_close(int ssl, struct us_listen_socket_t *ls); -/* Adopt a socket which was accepted either internally, or from another accept() outside libusockets */ -struct us_socket_t *us_adopt_accepted_socket(int ssl, struct us_socket_context_t *context, LIBUS_SOCKET_DESCRIPTOR client_fd, - unsigned int socket_ext_size, char *addr_ip, int addr_ip_length); +/* Adopt a socket which was accepted either internally, or from another accept() + * outside libusockets */ +struct us_socket_t *us_adopt_accepted_socket( + int ssl, struct us_socket_context_t *context, + LIBUS_SOCKET_DESCRIPTOR client_fd, unsigned int socket_ext_size, + char *addr_ip, int addr_ip_length); /* Land in on_open or on_connection_error or return null or return socket */ -struct us_socket_t *us_socket_context_connect(int ssl, struct us_socket_context_t *context, - const char *host, int port, const char *source_host, int options, int socket_ext_size); +struct us_socket_t *us_socket_context_connect( + int ssl, struct us_socket_context_t *context, const char *host, int port, + const char *source_host, int options, int socket_ext_size); -struct us_socket_t *us_socket_context_connect_unix(int ssl, struct us_socket_context_t *context, - const char *server_path, int options, int socket_ext_size); +struct us_socket_t *us_socket_context_connect_unix( + int ssl, struct us_socket_context_t *context, const char *server_path, + int options, int socket_ext_size); -/* Is this socket established? Can be used to check if a connecting socket has fired the on_open event yet. - * Can also be used to determine if a socket is a listen_socket or not, but you probably know that already. */ +/* Is this socket established? Can be used to check if a connecting socket has + * fired the on_open event yet. Can also be used to determine if a socket is a + * listen_socket or not, but you probably know that already. */ int us_socket_is_established(int ssl, struct us_socket_t *s); -/* Cancel a connecting socket. Can be used together with us_socket_timeout to limit connection times. - * Entirely destroys the socket - this function works like us_socket_close but does not trigger on_close event since - * you never got the on_open event first. */ +/* Cancel a connecting socket. Can be used together with us_socket_timeout to + * limit connection times. Entirely destroys the socket - this function works + * like us_socket_close but does not trigger on_close event since you never got + * the on_open event first. */ struct us_socket_t *us_socket_close_connecting(int ssl, struct us_socket_t *s); /* Returns the loop for this socket context. */ -struct us_loop_t *us_socket_context_loop(int ssl, struct us_socket_context_t *context); - -/* Invalidates passed socket, returning a new resized socket which belongs to a different socket context. - * Used mainly for "socket upgrades" such as when transitioning from HTTP to WebSocket. */ -struct us_socket_t *us_socket_context_adopt_socket(int ssl, struct us_socket_context_t *context, struct us_socket_t *s, int ext_size); - -/* Create a child socket context which acts much like its own socket context with its own callbacks yet still relies on the - * parent socket context for some shared resources. Child socket contexts should be used together with socket adoptions and nothing else. */ -struct us_socket_context_t *us_create_child_socket_context(int ssl, struct us_socket_context_t *context, int context_ext_size); +struct us_loop_t *us_socket_context_loop(int ssl, + struct us_socket_context_t *context); + +/* Invalidates passed socket, returning a new resized socket which belongs to a + * different socket context. Used mainly for "socket upgrades" such as when + * transitioning from HTTP to WebSocket. */ +struct us_socket_t *us_socket_context_adopt_socket( + int ssl, struct us_socket_context_t *context, struct us_socket_t *s, + int ext_size); + +/* Create a child socket context which acts much like its own socket context + * with its own callbacks yet still relies on the parent socket context for some + * shared resources. Child socket contexts should be used together with socket + * adoptions and nothing else. */ +struct us_socket_context_t *us_create_child_socket_context( + int ssl, struct us_socket_context_t *context, int context_ext_size); /* Public interfaces for loops */ /* Returns a new event loop with user data extension */ -struct us_loop_t *us_create_loop(void *hint, void (*wakeup_cb)(struct us_loop_t *loop), - void (*pre_cb)(struct us_loop_t *loop), void (*post_cb)(struct us_loop_t *loop), unsigned int ext_size); +struct us_loop_t *us_create_loop(void *hint, + void (*wakeup_cb)(struct us_loop_t *loop), + void (*pre_cb)(struct us_loop_t *loop), + void (*post_cb)(struct us_loop_t *loop), + unsigned int ext_size); /* Frees the loop immediately */ void us_loop_free(struct us_loop_t *loop); @@ -235,11 +306,13 @@ void us_loop_free(struct us_loop_t *loop); /* Returns the loop user data extension */ void *us_loop_ext(struct us_loop_t *loop); -/* Blocks the calling thread and drives the event loop until no more non-fallthrough polls are scheduled */ +/* Blocks the calling thread and drives the event loop until no more + * non-fallthrough polls are scheduled */ void us_loop_run(struct us_loop_t *loop); -/* Signals the loop from any thread to wake up and execute its wakeup handler from the loop's own running thread. - * This is the only fully thread-safe function and serves as the basis for thread safety */ +/* Signals the loop from any thread to wake up and execute its wakeup handler + * from the loop's own running thread. This is the only fully thread-safe + * function and serves as the basis for thread safety */ void us_wakeup_loop(struct us_loop_t *loop); /* Hook up timers in existing loop */ @@ -251,13 +324,15 @@ long long us_loop_iteration_number(struct us_loop_t *loop); /* Public interfaces for polls */ /* A fallthrough poll does not keep the loop running, it falls through */ -struct us_poll_t *us_create_poll(struct us_loop_t *loop, int fallthrough, unsigned int ext_size); +struct us_poll_t *us_create_poll(struct us_loop_t *loop, int fallthrough, + unsigned int ext_size); /* After stopping a poll you must manually free the memory */ void us_poll_free(struct us_poll_t *p, struct us_loop_t *loop); /* Associate this poll with a socket descriptor and poll type */ -void us_poll_init(struct us_poll_t *p, LIBUS_SOCKET_DESCRIPTOR fd, int poll_type); +void us_poll_init(struct us_poll_t *p, LIBUS_SOCKET_DESCRIPTOR fd, + int poll_type); /* Start, change and stop polling for events */ void us_poll_start(struct us_poll_t *p, struct us_loop_t *loop, int events); @@ -274,28 +349,37 @@ void *us_poll_ext(struct us_poll_t *p); LIBUS_SOCKET_DESCRIPTOR us_poll_fd(struct us_poll_t *p); /* Resize an active poll */ -struct us_poll_t *us_poll_resize(struct us_poll_t *p, struct us_loop_t *loop, unsigned int ext_size); +struct us_poll_t *us_poll_resize(struct us_poll_t *p, struct us_loop_t *loop, + unsigned int ext_size); /* Public interfaces for sockets */ -/* Returns the underlying native handle for a socket, such as SSL or file descriptor. - * In the case of file descriptor, the value of pointer is fd. */ +/* Returns the underlying native handle for a socket, such as SSL or file + * descriptor. In the case of file descriptor, the value of pointer is fd. */ void *us_socket_get_native_handle(int ssl, struct us_socket_t *s); /* Write up to length bytes of data. Returns actual bytes written. - * Will call the on_writable callback of active socket context on failure to write everything off in one go. - * Set hint msg_more if you have more immediate data to write. */ -int us_socket_write(int ssl, struct us_socket_t *s, const char *data, int length, int msg_more); - -/* Special path for non-SSL sockets. Used to send header and payload in one go. Works like us_socket_write. */ -int us_socket_write2(int ssl, struct us_socket_t *s, const char *header, int header_length, const char *payload, int payload_length); - -/* Set a low precision, high performance timer on a socket. A socket can only have one single active timer - * at any given point in time. Will remove any such pre set timer */ + * Will call the on_writable callback of active socket context on failure to + * write everything off in one go. Set hint msg_more if you have more immediate + * data to write. */ +int us_socket_write(int ssl, struct us_socket_t *s, const char *data, + int length, int msg_more); + +/* Special path for non-SSL sockets. Used to send header and payload in one go. + * Works like us_socket_write. */ +int us_socket_write2(int ssl, struct us_socket_t *s, const char *header, + int header_length, const char *payload, + int payload_length); + +/* Set a low precision, high performance timer on a socket. A socket can only + * have one single active timer at any given point in time. Will remove any such + * pre set timer */ void us_socket_timeout(int ssl, struct us_socket_t *s, unsigned int seconds); -/* Set a low precision, high performance timer on a socket. Suitable for per-minute precision. */ -void us_socket_long_timeout(int ssl, struct us_socket_t *s, unsigned int minutes); +/* Set a low precision, high performance timer on a socket. Suitable for + * per-minute precision. */ +void us_socket_long_timeout(int ssl, struct us_socket_t *s, + unsigned int minutes); /* Return the user data extension of this socket */ void *us_socket_ext(int ssl, struct us_socket_t *s); @@ -317,11 +401,13 @@ void us_socket_shutdown_read(int ssl, struct us_socket_t *s); /* Returns whether the socket has been shut down or not */ int us_socket_is_shut_down(int ssl, struct us_socket_t *s); -/* Returns whether this socket has been closed. Only valid if memory has not yet been released. */ +/* Returns whether this socket has been closed. Only valid if memory has not yet + * been released. */ int us_socket_is_closed(int ssl, struct us_socket_t *s); /* Immediately closes the socket */ -struct us_socket_t *us_socket_close(int ssl, struct us_socket_t *s, int code, void *reason); +struct us_socket_t *us_socket_close(int ssl, struct us_socket_t *s, int code, + void *reason); /* Returns local port or -1 on failure. */ int us_socket_local_port(int ssl, struct us_socket_t *s); @@ -330,14 +416,17 @@ int us_socket_local_port(int ssl, struct us_socket_t *s); int us_socket_remote_port(int ssl, struct us_socket_t *s); /* Copy remote (IP) address of socket, or fail with zero length. */ -void us_socket_remote_address(int ssl, struct us_socket_t *s, char *buf, int *length); +void us_socket_remote_address(int ssl, struct us_socket_t *s, char *buf, + int *length); #ifdef __cplusplus } #endif /* Decide what eventing system to use by default */ -#if !defined(LIBUS_USE_IO_URING) && !defined(LIBUS_USE_EPOLL) && !defined(LIBUS_USE_LIBUV) && !defined(LIBUS_USE_GCD) && !defined(LIBUS_USE_KQUEUE) && !defined(LIBUS_USE_ASIO) +#if !defined(LIBUS_USE_IO_URING) && !defined(LIBUS_USE_EPOLL) && \ + !defined(LIBUS_USE_LIBUV) && !defined(LIBUS_USE_GCD) && \ + !defined(LIBUS_USE_KQUEUE) && !defined(LIBUS_USE_ASIO) #if defined(_WIN32) #define LIBUS_USE_LIBUV #elif defined(__APPLE__) || defined(__FreeBSD__) @@ -347,4 +436,4 @@ void us_socket_remote_address(int ssl, struct us_socket_t *s, char *buf, int *le #endif #endif -#endif // LIBUSOCKETS_H +#endif // LIBUSOCKETS_H diff --git a/vendor/hydra/vendor/uwebsockets/uSockets/src/quic.h b/vendor/hydra/vendor/uwebsockets/uSockets/src/quic.h index 6d33d27b..ada45b88 100644 --- a/vendor/hydra/vendor/uwebsockets/uSockets/src/quic.h +++ b/vendor/hydra/vendor/uwebsockets/uSockets/src/quic.h @@ -8,15 +8,14 @@ #include "libusockets.h" typedef struct { - const char *cert_file_name; - const char *key_file_name; - const char *passphrase; + const char *cert_file_name; + const char *key_file_name; + const char *passphrase; } us_quic_socket_context_options_t; - typedef struct { - /* Refers to either the shared listen socket or the client UDP socket */ - void *udp_socket; + /* Refers to either the shared listen socket or the client UDP socket */ + void *udp_socket; } us_quic_socket_t; struct us_quic_socket_context_s; @@ -27,22 +26,33 @@ typedef struct us_quic_socket_context_s us_quic_socket_context_t; typedef struct us_quic_listen_socket_s us_quic_listen_socket_t; typedef struct us_quic_stream_s us_quic_stream_t; - void *us_quic_stream_ext(us_quic_stream_t *s); int us_quic_stream_write(us_quic_stream_t *s, char *data, int length); int us_quic_stream_shutdown(us_quic_stream_t *s); int us_quic_stream_shutdown_read(us_quic_stream_t *s); void us_quic_stream_close(us_quic_stream_t *s); -int us_quic_socket_context_get_header(us_quic_socket_context_t *context, int index, char **name, int *name_length, char **value, int *value_length); - - -void us_quic_socket_context_set_header(us_quic_socket_context_t *context, int index, const char *key, int key_length, const char *value, int value_length); -void us_quic_socket_context_send_headers(us_quic_socket_context_t *context, us_quic_stream_t *s, int num, int has_body); - -us_quic_socket_context_t *us_create_quic_socket_context(struct us_loop_t *loop, us_quic_socket_context_options_t options, int ext_size); -us_quic_listen_socket_t *us_quic_socket_context_listen(us_quic_socket_context_t *context, const char *host, int port, int ext_size); -us_quic_socket_t *us_quic_socket_context_connect(us_quic_socket_context_t *context, const char *host, int port, int ext_size); +int us_quic_socket_context_get_header(us_quic_socket_context_t *context, + int index, char **name, int *name_length, + char **value, int *value_length); + +void us_quic_socket_context_set_header(us_quic_socket_context_t *context, + int index, const char *key, + int key_length, const char *value, + int value_length); +void us_quic_socket_context_send_headers(us_quic_socket_context_t *context, + us_quic_stream_t *s, int num, + int has_body); + +us_quic_socket_context_t *us_create_quic_socket_context( + struct us_loop_t *loop, us_quic_socket_context_options_t options, + int ext_size); +us_quic_listen_socket_t *us_quic_socket_context_listen( + us_quic_socket_context_t *context, const char *host, int port, + int ext_size); +us_quic_socket_t *us_quic_socket_context_connect( + us_quic_socket_context_t *context, const char *host, int port, + int ext_size); void us_quic_socket_create_stream(us_quic_socket_t *s, int ext_size); us_quic_socket_t *us_quic_stream_socket(us_quic_stream_t *s); @@ -50,16 +60,29 @@ us_quic_socket_t *us_quic_stream_socket(us_quic_stream_t *s); /* This one is ugly and is only used to make clean examples */ int us_quic_stream_is_client(us_quic_stream_t *s); -void us_quic_socket_context_on_stream_data(us_quic_socket_context_t *context, void(*on_stream_data)(us_quic_stream_t *s, char *data, int length)); -void us_quic_socket_context_on_stream_end(us_quic_socket_context_t *context, void(*on_stream_data)(us_quic_stream_t *s)); -void us_quic_socket_context_on_stream_headers(us_quic_socket_context_t *context, void(*on_stream_headers)(us_quic_stream_t *s)); -void us_quic_socket_context_on_stream_open(us_quic_socket_context_t *context, void(*on_stream_open)(us_quic_stream_t *s, int is_client)); -void us_quic_socket_context_on_stream_close(us_quic_socket_context_t *context, void(*on_stream_close)(us_quic_stream_t *s)); -void us_quic_socket_context_on_open(us_quic_socket_context_t *context, void(*on_open)(us_quic_socket_t *s, int is_client)); -void us_quic_socket_context_on_close(us_quic_socket_context_t *context, void(*on_close)(us_quic_socket_t *s)); -void us_quic_socket_context_on_stream_writable(us_quic_socket_context_t *context, void(*on_stream_writable)(us_quic_stream_t *s)); - - +void us_quic_socket_context_on_stream_data( + us_quic_socket_context_t *context, + void (*on_stream_data)(us_quic_stream_t *s, char *data, int length)); +void us_quic_socket_context_on_stream_end( + us_quic_socket_context_t *context, + void (*on_stream_data)(us_quic_stream_t *s)); +void us_quic_socket_context_on_stream_headers( + us_quic_socket_context_t *context, + void (*on_stream_headers)(us_quic_stream_t *s)); +void us_quic_socket_context_on_stream_open( + us_quic_socket_context_t *context, + void (*on_stream_open)(us_quic_stream_t *s, int is_client)); +void us_quic_socket_context_on_stream_close( + us_quic_socket_context_t *context, + void (*on_stream_close)(us_quic_stream_t *s)); +void us_quic_socket_context_on_open(us_quic_socket_context_t *context, + void (*on_open)(us_quic_socket_t *s, + int is_client)); +void us_quic_socket_context_on_close(us_quic_socket_context_t *context, + void (*on_close)(us_quic_socket_t *s)); +void us_quic_socket_context_on_stream_writable( + us_quic_socket_context_t *context, + void (*on_stream_writable)(us_quic_stream_t *s)); void *us_quic_socket_context_ext(us_quic_socket_context_t *context); us_quic_socket_context_t *us_quic_socket_context(us_quic_socket_t *s); diff --git a/vendor/hydra/vendor/zlib/crc32.h b/vendor/hydra/vendor/zlib/crc32.h index 137df68d..b18b0074 100644 --- a/vendor/hydra/vendor/zlib/crc32.h +++ b/vendor/hydra/vendor/zlib/crc32.h @@ -3,58 +3,49 @@ */ local const z_crc_t FAR crc_table[] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, - 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, - 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, - 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, - 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, - 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, - 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, - 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, - 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, - 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, - 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, - 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, - 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, - 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, - 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, - 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, - 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, - 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, - 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, - 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, - 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, - 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, - 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, - 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, - 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, - 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, - 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, - 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, - 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, - 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, - 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, - 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, - 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, - 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, - 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, - 0x2d02ef8d}; + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, + 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, + 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, + 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, + 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, + 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, + 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d}; #ifdef W @@ -151,58 +142,49 @@ local const z_word_t FAR crc_big_table[] = { #else /* W == 4 */ local const z_word_t FAR crc_big_table[] = { - 0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07, - 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79, - 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7, - 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84, - 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13, - 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663, - 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5, - 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5, - 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832, - 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51, - 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf, - 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1, - 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76, - 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606, - 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996, - 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6, - 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c, - 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712, - 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c, - 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4, - 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943, - 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333, - 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe, - 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce, - 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359, - 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a, - 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04, - 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a, - 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0, - 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580, - 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10, - 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060, - 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1, - 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf, - 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31, - 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852, - 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5, - 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5, - 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75, - 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005, - 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292, - 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1, - 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f, - 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111, - 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0, - 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0, - 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40, - 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530, - 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba, - 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4, - 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a, - 0x8def022d}; + 0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07, 0x8ff46a70, + 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79, 0x1ee9d5e0, 0x88d9d297, + 0x2b4cb609, 0xbd7cb17e, 0x072db8e7, 0x911dbf90, 0x6410b71d, 0xf220b06a, + 0x4871b9f3, 0xde41be84, 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, + 0x56986c13, 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663, + 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5, 0x727167a2, + 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5, 0xfaa8b535, 0x6c98b242, + 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832, 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, + 0xac30d926, 0x3a00de51, 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, + 0x9995bacf, 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1, + 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76, 0x0671db01, + 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606, 0xa5e4bf9f, 0x33d4b8e8, + 0xa2c90778, 0x34f9000f, 0x8ea80996, 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, + 0x976c6491, 0x015c63e6, 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, + 0xed95066c, 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712, + 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c, 0x654cd4fb, + 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4, 0x41a5df4a, 0xd795d83d, + 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943, 0xfcd96e34, 0x468867ad, 0xd0b860da, + 0x732d0444, 0xe51d0333, 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, + 0x10100bbe, 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce, + 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359, 0x810db42e, + 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a, 0x0ce2b603, 0x9ad2b174, + 0x3947d5ea, 0xaf77d29d, 0x1526db04, 0x8316dc73, 0x120b63e3, 0x843b6494, + 0x3e6a6d0d, 0xa85a6a7a, 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, + 0x44930ff0, 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580, + 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10, 0xcc4add67, + 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060, 0xe8a3d6d6, 0x7e93d1a1, + 0xc4c2d838, 0x52f2df4f, 0xf167bbd1, 0x6757bca6, 0xdd06b53f, 0x4b36b248, + 0xda2b0dd8, 0x4c1b0aaf, 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, + 0xef8e6e31, 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852, + 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5, 0x280bbdb2, + 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5, 0x8b9ed92c, 0x1daede5b, + 0xb0c2649b, 0x26f263ec, 0x9ca36a75, 0x0a936d02, 0xa906099c, 0x3f360eeb, + 0x85670772, 0x13570005, 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, + 0x9b8ed292, 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1, + 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f, 0x7747b718, + 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111, 0xff9e658f, 0x69ae62f8, + 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0, 0xeed20dd7, 0x5483044e, 0xc2b30339, + 0x612667a7, 0xf71660d0, 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, + 0x660bdf40, 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530, + 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba, 0x9306d7cd, + 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4, 0x021b685d, 0x942b6f2a, + 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a, 0x8def022d}; #endif @@ -211,1534 +193,1390 @@ local const z_word_t FAR crc_big_table[] = { #if W == 8 local const z_crc_t FAR crc_braid_table[][256] = { - {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, - 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, - 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232, - 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, - 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, - 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, - 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b, - 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, - 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719, - 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3, - 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, - 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, - 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed, - 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, - 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, - 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041, - 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c, - 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, - 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, - 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, - 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, - 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, - 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed, - 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, - 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, - 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, - 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, - 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c, - 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1, - 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, - 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, - 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, - 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, - 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7, - 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be, - 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, - 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, - 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, - 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a, - 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, - 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278, - 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682, - 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, - 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, - 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561, - 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, - 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, - 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd, - 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, - 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, - 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678, - 0x264b06e6}, - {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, - 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, - 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d, - 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, - 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, - 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, - 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5, - 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, - 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, - 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6, - 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, - 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, - 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579, - 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, - 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, - 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590, - 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4, - 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, - 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, - 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, - 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282, - 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, - 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, - 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, - 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, - 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, - 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, - 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08, - 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c, - 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, - 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, - 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, - 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, - 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd, - 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833, - 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, - 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, - 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, - 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, - 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, - 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff, - 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1, - 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, - 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, - 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617, - 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, - 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, - 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe, - 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, - 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, - 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184, - 0x92364a30}, - {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, - 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, - 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, - 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, - 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, - 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, - 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d, - 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, - 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d, - 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408, - 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, - 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, - 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c, - 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, - 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, - 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9, - 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1, - 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, - 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, - 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, - 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37, - 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, - 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca, - 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, - 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, - 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, - 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, - 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b, - 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643, - 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, - 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, - 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, - 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, - 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026, - 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e, - 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, - 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, - 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, - 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, - 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, - 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf, - 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a, - 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, - 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, - 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82, - 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, - 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, - 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957, - 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, - 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, - 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869, - 0xe4c4abcc}, - {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, - 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, - 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, - 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, - 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, - 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, - 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64, - 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, - 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205, - 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136, - 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, - 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, - 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849, - 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, - 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, - 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98, - 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b, - 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, - 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, - 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, - 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c, - 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, - 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, - 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, - 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, - 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, - 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532, - 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183, - 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710, - 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, - 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, - 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, - 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, - 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7, - 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7, - 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, - 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, - 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, - 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb, - 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, - 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da, - 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9, - 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, - 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, - 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df, - 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, - 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, - 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e, - 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, - 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, - 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, - 0xca64c78c}, - {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, - 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, - 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, - 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, - 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, - 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, - 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5, - 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, - 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086, - 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4, - 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, - 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, - 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d, - 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, - 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, - 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b, - 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5, - 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, - 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, - 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, - 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, - 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, - 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817, - 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, - 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, - 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, - 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7, - 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a, - 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4, - 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, - 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, - 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, - 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, - 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f, - 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36, - 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, - 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, - 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, - 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d, - 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, - 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be, - 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc, - 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, - 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, - 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138, - 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, - 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, - 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e, - 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, - 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, - 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194, - 0xde0506f1}, - {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, - 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, - 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a, - 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, - 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, - 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, - 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e, - 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, - 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84, - 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7, - 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, - 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, - 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0, - 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, - 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, - 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd, - 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c, - 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, - 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, - 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, - 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98, - 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, - 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e, - 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, - 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, - 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, - 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732, - 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461, - 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0, - 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, - 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, - 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, - 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, - 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef, - 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a, - 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, - 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, - 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, - 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e, - 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, - 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24, - 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07, - 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, - 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, - 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0, - 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, - 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, - 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d, - 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, - 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, - 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, - 0xbe9834ed}, - {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, - 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, - 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, - 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, - 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, - 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, - 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620, - 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, - 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae, - 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2, - 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, - 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, - 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05, - 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, - 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, - 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca, - 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850, - 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, - 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, - 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, - 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af, - 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, - 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74, - 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, - 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, - 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, - 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, - 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180, - 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a, - 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, - 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, - 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, - 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, - 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0, - 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167, - 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, - 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, - 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, - 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, - 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, - 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842, - 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e, - 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, - 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, - 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec, - 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, - 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, - 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23, - 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, - 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, - 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, - 0x9324fd72}, - {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, - 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, - 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, - 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, - 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, - 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, - 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, - 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, - 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, - 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, - 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, - 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, - 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, - 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, - 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, - 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, - 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, - 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, - 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, - 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, - 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, - 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, - 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, - 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, - 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, - 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, - 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, - 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, - 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, - 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, - 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, - 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, - 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, - 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, - 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, - 0x2d02ef8d}}; + {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, 0x48e00e64, + 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, 0x91c01cc8, 0x5d6a1c56, + 0x57af154f, 0x9b0515d1, 0x158a1232, 0xd92012ac, 0x7cbb312b, 0xb01131b5, + 0x3e9e3656, 0xf23436c8, 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, + 0xaf5e2a9e, 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, + 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b, 0x77f965b5, + 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, 0x2a9379e3, 0xe639797d, + 0x68b67e9e, 0xa41c7e00, 0xaed97719, 0x62737787, 0xecfc7064, 0x205670fa, + 0x85cd537d, 0x496753e3, 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, + 0x43a25afa, 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, + 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed, 0xe537c273, + 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, 0xeff2cb6a, 0x2358cbf4, + 0xfa78d958, 0x36d2d9c6, 0xb85dde25, 0x74f7debb, 0x7e32d7a2, 0xb298d73c, + 0x3c17d0df, 0xf0bdd041, 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, + 0xd16cfd3c, 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, + 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, 0x8c06e16a, + 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, 0x54a1ae41, 0x980baedf, + 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, 0xcfa4bb90, 0x412bbc73, 0x8d81bced, + 0x8744b5f4, 0x4beeb56a, 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, + 0xee7596ed, 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, + 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, 0x37558441, + 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, 0x111e82a7, 0xddb48239, + 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, + 0xc2fb9912, 0x0e51998c, 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, + 0x2f80b4f1, 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, + 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, 0x72eaa8a7, + 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, 0xaa4de78c, 0x66e7e712, + 0xe868e0f1, 0x24c2e06f, 0x2e07e976, 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, + 0x79a8fc39, 0xb502fca7, 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, + 0xbfc7f5be, 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, + 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, 0xc9b9cd8c, + 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, 0xc37cc495, 0x0fd6c40b, + 0x7aa64737, 0xb60c47a9, 0x3883404a, 0xf42940d4, 0xfeec49cd, 0x32464953, + 0xbcc94eb0, 0x70634e2e, 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, + 0x2d095278, 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682, + 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, 0x0cd87f05, + 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, 0x51b26353, 0x9d1863cd, + 0x1397642e, 0xdf3d64b0, 0x83d02561, 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, + 0x079a2b9b, 0xcb302b05, 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, + 0x121039a9, 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd, + 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, 0xb78b1a2e, + 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, 0x6eab0882, 0xa201081c, + 0xa8c40105, 0x646e019b, 0xeae10678, 0x264b06e6}, + {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, 0x52382fa7, + 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, 0xa4705f4e, 0x020754fa, + 0xc7a06a74, 0x61d761c0, 0x503f7b5d, 0xf64870e9, 0x67de9cce, 0xc1a9977a, + 0xf0418de7, 0x56368653, 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, + 0x5431d2a9, 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, + 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5, 0xfe552301, + 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, 0xfc5277fb, 0x5a257c4f, + 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, 0xae6a585c, 0x9f8242c1, 0x39f54975, + 0xa863a552, 0x0e14aee6, 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, + 0xcbb39068, 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, + 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579, 0xe27c7ecd, + 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, 0x27db4043, 0x81ac4bf7, + 0x77e43b1e, 0xd19330aa, 0xe07b2a37, 0x460c2183, 0x83ab1f0d, 0x25dc14b9, + 0x14340e24, 0xb2430590, 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, + 0xd79acda4, 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, + 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, 0xd59d995e, + 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, 0x7ff968f6, 0xd98e6342, + 0xe86679df, 0x4e11726b, 0xb8590282, 0x1e2e0936, 0x2fc613ab, 0x89b1181f, + 0x4c162691, 0xea612d25, 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, + 0x7bf7c102, 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, + 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, 0x8dbfb1eb, + 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, 0x1f89fbdb, 0xb9fef06f, + 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, + 0x2c66b5bc, 0x8a11be08, 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, + 0xefc8763c, 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, + 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, 0xedcf22c6, + 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, 0x47abd36e, 0xe1dcd8da, + 0xd034c247, 0x7643c9f3, 0xb3e4f77d, 0x1593fcc9, 0x247be654, 0x820cede0, + 0x74449d09, 0xd23396bd, 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, + 0x1794a833, 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, + 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, 0xb5ed0a73, + 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, 0x704a34fd, 0xd63d3f49, + 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, 0xfdf58516, 0x3852bb98, 0x9e25b02c, + 0xafcdaab1, 0x09baa105, 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, + 0x0bbdf5ff, 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1, + 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, 0x6e643dcb, + 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, 0x6c636931, 0xca146285, + 0xfbfc7818, 0x5d8b73ac, 0x03a0a617, 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, + 0xf7ef8204, 0x519889b0, 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, + 0xa7d0f959, 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe, + 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, 0x3646157e, + 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, 0xc00e6597, 0x66796e23, + 0xa3de50ad, 0x05a95b19, 0x34414184, 0x92364a30}, + {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, 0x50cd91b3, + 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, 0xa19b2366, 0x6ac7f0c3, + 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, 0xf156b2d5, 0x03d6029b, 0xc88ad13e, + 0x4e1ea390, 0x85427035, 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, + 0xef8580f6, 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, + 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d, 0x81387798, + 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, 0xebff875b, 0x20a354fe, + 0xa6372650, 0x6d6bf5f5, 0x706ec54d, 0xbb3216e8, 0x3da66446, 0xf6fab7e3, + 0x047a07ad, 0xcf26d408, 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, + 0xd223e4b0, 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, + 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c, 0xc404d9c9, + 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, 0xd901e971, 0x125d3ad4, + 0xe30b8801, 0x28575ba4, 0xaec3290a, 0x659ffaaf, 0x789aca17, 0xb3c619b2, + 0x35526b1c, 0xfe0eb8b9, 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, + 0x971f4ae1, 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, + 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, 0xfdd8ba22, + 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, 0x93654d4c, 0x58399ee9, + 0xdeadec47, 0x15f13fe2, 0xe4a78d37, 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, + 0x7f36cf21, 0xb46a1c84, 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, + 0x46eaacca, 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, + 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, 0xb7bc1e1f, + 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, 0x5378b5d3, 0x98246676, + 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, 0x03b52460, 0xf2e396b5, 0x39bf4510, + 0xbf2b37be, 0x7477e41b, 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, + 0x1d661643, 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, + 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, 0x77a1e680, + 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, 0x191c11ee, 0xd240c24b, + 0x54d4b0e5, 0x9f886340, 0x828d53f8, 0x49d1805d, 0xcf45f2f3, 0x04192156, + 0xf54f9383, 0x3e134026, 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, + 0x2316709e, 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, + 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, 0x3dc542bd, + 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, 0x20c07205, 0xeb9ca1a0, + 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, 0x977c6c1a, 0x8a795ca2, 0x41258f07, + 0xc7b1fda9, 0x0ced2e0c, 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, + 0x662adecf, 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a, + 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, 0x0f3b2c97, + 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, 0x65fcdc54, 0xaea00ff1, + 0x28347d5f, 0xe368aefa, 0x16441b82, 0xdd18c827, 0x5b8cba89, 0x90d0692c, + 0x8dd55994, 0x46898a31, 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, + 0xb7df38e4, 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957, + 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, 0x455f88aa, + 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, 0xb4093a7f, 0x7f55e9da, + 0x6250d962, 0xa90c0ac7, 0x2f987869, 0xe4c4abcc}, + {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, 0xc8e08f70, + 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, 0x4ab018a1, 0x77d03111, + 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, 0x825097d1, 0x60e09782, 0x5d80be32, + 0x1a20c4e2, 0x2740ed52, 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, + 0x5090dc43, 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, + 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64, 0x866155d4, + 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, 0xf1b164c5, 0xccd14d75, + 0x8b7137a5, 0xb6111e15, 0x0431c205, 0x3951ebb5, 0x7ef19165, 0x4391b8d5, + 0xa121b886, 0x9c419136, 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, + 0x2e614d26, 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, + 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849, 0x659371f9, + 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, 0xd7b3ade9, 0xead38459, + 0x68831388, 0x55e33a38, 0x124340e8, 0x2f236958, 0x9d03b548, 0xa0639cf8, + 0xe7c3e628, 0xdaa3cf98, 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, + 0xcd93690b, 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, + 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, 0xba43581a, + 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, 0x6cb2d18d, 0x51d2f83d, + 0x167282ed, 0x2b12ab5d, 0xa9423c8c, 0x9422153c, 0xd3826fec, 0xeee2465c, + 0x5cc29a4c, 0x61a2b3fc, 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, + 0x8312b3af, 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, + 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, 0x0142247e, + 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, 0xcb26e3f2, 0xf646ca42, + 0x44661652, 0x79063fe2, 0x3ea64532, 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, + 0xfb56a833, 0xc6368183, 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, + 0xd1062710, 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, + 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, 0xa6d61601, + 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, 0x70279f96, 0x4d47b626, + 0x0ae7ccf6, 0x3787e546, 0x85a73956, 0xb8c710e6, 0xff676a36, 0xc2074386, + 0x4057d457, 0x7d37fde7, 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, + 0xcf1721f7, 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, + 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, 0x1dd76a65, + 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, 0xaff7b675, 0x92979fc5, + 0xe915e8db, 0xd475c16b, 0x93d5bbbb, 0xaeb5920b, 0x1c954e1b, 0x21f567ab, + 0x66551d7b, 0x5b3534cb, 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, + 0x2ce505da, 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9, + 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, 0x3bd5a349, + 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, 0x4c059258, 0x7165bbe8, + 0x36c5c138, 0x0ba5e888, 0x28d4c7df, 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, + 0xdd54611f, 0xe03448af, 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, + 0x6264df7e, 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e, + 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, 0x80d4df2d, + 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, 0x028448fc, 0x3fe4614c, + 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, 0xca64c78c}, + {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, 0x37def032, + 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, 0x6fbde064, 0xd7018701, + 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, 0x58631056, 0x5019579f, 0xe8a530fa, + 0xfa109f14, 0x42acf871, 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, + 0x95ad7f70, 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, + 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5, 0xb28700d0, + 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, 0x658687d1, 0xdd3ae0b4, + 0xcf8f4f5a, 0x7733283f, 0xeae41086, 0x525877e3, 0x40edd80d, 0xf851bf68, + 0xf02bf8a1, 0x48979fc4, 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, + 0xd540a77d, 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, + 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d, 0x23a83f58, + 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, 0xbe7f07e1, 0x06c36084, + 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, 0x4c15df3c, 0xd1c2e785, 0x697e80e0, + 0x7bcb2f0e, 0xc377486b, 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, + 0x446f98f5, 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, + 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, 0x936e1ff4, + 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, 0xb4446054, 0x0cf80731, + 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, 0x462eb889, 0x549b1767, 0xec277002, + 0x71f048bb, 0xc94c2fde, 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, + 0xc1366817, 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, + 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, 0x99557841, + 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, 0x47507eb0, 0xffec19d5, + 0x623b216c, 0xda874609, 0xc832e9e7, 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, + 0x82e4565f, 0x3a58313a, 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, + 0xbd40e1a4, 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, + 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, 0x6a4166a5, + 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, 0x4d6b1905, 0xf5d77e60, + 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, 0x7ab5e937, 0x680046d9, 0xd0bc21bc, + 0x88df31ea, 0x3063568f, 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, + 0xadb46e36, 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, + 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, 0x607a0110, + 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, 0xfdad39a9, 0x45115ecc, + 0x764dee06, 0xcef18963, 0xdc44268d, 0x64f841e8, 0xf92f7951, 0x41931e34, + 0x5326b1da, 0xeb9ad6bf, 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, + 0x3c9b51be, 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc, + 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, 0xbb838120, + 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, 0x6c820621, 0xd43e6144, + 0xc68bceaa, 0x7e37a9cf, 0xd67f4138, 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, + 0x591dd66f, 0xe1a1b10a, 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, + 0xb9c2a15c, 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e, + 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, 0xb1b8e695, + 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, 0xe9dbf6c3, 0x516791a6, + 0xccb0a91f, 0x740cce7a, 0x66b96194, 0xde0506f1}, + {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, 0x06cbc2eb, + 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, 0x0d9785d6, 0x0c55efe1, + 0x091af964, 0x08d89353, 0x0a9e2d0a, 0x0b5c473d, 0x1c26a370, 0x1de4c947, + 0x1fa2771e, 0x1e601d29, 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, + 0x1235f2c8, 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, + 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e, 0x3a0bf8b9, + 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, 0x365e1758, 0x379c7d6f, + 0x35dac336, 0x3418a901, 0x3157bf84, 0x3095d5b3, 0x32d36bea, 0x331101dd, + 0x246be590, 0x25a98fa7, 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, + 0x20e69922, 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, + 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0, 0x7158e7f7, + 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, 0x7417f172, 0x75d59b45, + 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, 0x7ccf6221, 0x798074a4, 0x78421e93, + 0x7a04a0ca, 0x7bc6cafd, 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, + 0x6bb5866c, 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, + 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, 0x67e0698d, + 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, 0x4fde63fc, 0x4e1c09cb, + 0x4c5ab792, 0x4d98dda5, 0x46c49a98, 0x4706f0af, 0x45404ef6, 0x448224c1, + 0x41cd3244, 0x400f5873, 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, + 0x5775bc3e, 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, + 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, 0x5c29fb03, + 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, 0xe2b1cfee, 0xe373a5d9, + 0xe63cb35c, 0xe7fed96b, 0xe5b86732, 0xe47a0d05, 0xef264a38, 0xeee4200f, + 0xeca29e56, 0xed60f461, 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, + 0xfd13b8f0, 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, + 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, 0xf1465711, + 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, 0xd9785d60, 0xd8ba3757, + 0xdafc890e, 0xdb3ee339, 0xde71f5bc, 0xdfb39f8b, 0xddf521d2, 0xdc374be5, + 0xd76b0cd8, 0xd6a966ef, 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, + 0xd3e6706a, 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, + 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, 0xca8fc59f, + 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, 0xcfc0d31a, 0xce02b92d, + 0x91af9640, 0x906dfc77, 0x922b422e, 0x93e92819, 0x96a63e9c, 0x976454ab, + 0x9522eaf2, 0x94e080c5, 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, + 0x98b56f24, 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07, + 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, 0x88c623b5, + 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, 0x8493cc54, 0x8551a663, + 0x8717183a, 0x86d5720d, 0xa9e2d0a0, 0xa820ba97, 0xaa6604ce, 0xaba46ef9, + 0xaeeb787c, 0xaf29124b, 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, + 0xa4755576, 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d, + 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, 0xb30fb13b, + 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, 0xb853f606, 0xb9919c31, + 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, 0xbe9834ed}, + {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, 0x7d77f445, + 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, 0xfaefe88a, 0xe3f4d9cb, + 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, 0x87981ccf, 0x4ac21251, 0x53d92310, + 0x78f470d3, 0x61ef4192, 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, + 0x821b9859, 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, + 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620, 0xbea97761, + 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, 0x5d5daeaa, 0x44469feb, + 0x6f6bcc28, 0x7670fd69, 0x39316bae, 0x202a5aef, 0x0b07092c, 0x121c386d, + 0xdf4636f3, 0xc65d07b2, 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, + 0x891c9175, 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, + 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05, 0xe9627e44, + 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, 0xa623e883, 0xbf38d9c2, + 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, 0x138d96ce, 0x5ccc0009, 0x45d73148, + 0x6efa628b, 0x77e153ca, 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, + 0xded79850, 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, + 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, 0x3d23419b, + 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, 0x0191aea3, 0x188a9fe2, + 0x33a7cc21, 0x2abcfd60, 0xad24e1af, 0xb43fd0ee, 0x9f12832d, 0x8609b26c, + 0xc94824ab, 0xd05315ea, 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, + 0x1d091b74, 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, + 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, 0x9a9107bb, + 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, 0x09b5fac9, 0x10aecb88, + 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, 0x74c20e8c, 0xf35a1243, 0xea412302, + 0xc16c70c1, 0xd8774180, 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, + 0x71418a1a, 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, + 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, 0x92b553d1, + 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, 0xae07bce9, 0xb71c8da8, + 0x9c31de6b, 0x852aef2a, 0xca6b79ed, 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, + 0x66de36e1, 0x7fc507a0, 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, + 0x30849167, 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, + 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, 0x350715f1, + 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, 0x7a468336, 0x635db277, + 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, 0xe0d7848d, 0xaf96124a, 0xb68d230b, + 0x9da070c8, 0x84bb4189, 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, + 0x674f9842, 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e, + 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, 0xce7953d8, + 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, 0x2d8d8a13, 0x3496bb52, + 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec, 0x4765c2ad, 0x6c48916e, 0x7553a02f, + 0x3a1236e8, 0x230907a9, 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, + 0xa4911b66, 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23, + 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, 0x69cb15f8, + 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, 0xee530937, 0xf7483876, + 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, 0x9324fd72}, + {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, + 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, + 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, + 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, + 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, + 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, + 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d}}; local const z_word_t FAR crc_braid_big_table[][256] = { - {0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000, - 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000, - 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000, - 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000, - 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000, - 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000, - 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000, - 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000, - 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000, - 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000, - 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000, - 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000, - 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000, - 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000, - 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000, - 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000, - 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000, - 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000, - 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000, - 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000, - 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000, - 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000, - 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000, - 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000, - 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000, - 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000, - 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000, - 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000, - 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000, - 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000, - 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000, - 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000, - 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000, - 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000, - 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000, - 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000, - 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000, - 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000, - 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000, - 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000, - 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000, - 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000, - 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000, - 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000, - 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000, - 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000, - 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000, - 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000, - 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000, - 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000, - 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000, - 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000, - 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000, - 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000, - 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000, - 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000, - 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000, - 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000, - 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000, - 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000, - 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000, - 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000, - 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000, - 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000, - 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000, - 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000, - 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000, - 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000, - 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000, - 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000, - 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000, - 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000, - 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000, - 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000, - 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000, - 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000, - 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000, - 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000, - 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000, - 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000, - 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000, - 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000, - 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000, - 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000, - 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000, - 0x8def022d00000000}, - {0x0000000000000000, 0x41311b1900000000, 0x8262363200000000, - 0xc3532d2b00000000, 0x04c56c6400000000, 0x45f4777d00000000, - 0x86a75a5600000000, 0xc796414f00000000, 0x088ad9c800000000, - 0x49bbc2d100000000, 0x8ae8effa00000000, 0xcbd9f4e300000000, - 0x0c4fb5ac00000000, 0x4d7eaeb500000000, 0x8e2d839e00000000, - 0xcf1c988700000000, 0x5112c24a00000000, 0x1023d95300000000, - 0xd370f47800000000, 0x9241ef6100000000, 0x55d7ae2e00000000, - 0x14e6b53700000000, 0xd7b5981c00000000, 0x9684830500000000, - 0x59981b8200000000, 0x18a9009b00000000, 0xdbfa2db000000000, - 0x9acb36a900000000, 0x5d5d77e600000000, 0x1c6c6cff00000000, - 0xdf3f41d400000000, 0x9e0e5acd00000000, 0xa224849500000000, - 0xe3159f8c00000000, 0x2046b2a700000000, 0x6177a9be00000000, - 0xa6e1e8f100000000, 0xe7d0f3e800000000, 0x2483dec300000000, - 0x65b2c5da00000000, 0xaaae5d5d00000000, 0xeb9f464400000000, - 0x28cc6b6f00000000, 0x69fd707600000000, 0xae6b313900000000, - 0xef5a2a2000000000, 0x2c09070b00000000, 0x6d381c1200000000, - 0xf33646df00000000, 0xb2075dc600000000, 0x715470ed00000000, - 0x30656bf400000000, 0xf7f32abb00000000, 0xb6c231a200000000, - 0x75911c8900000000, 0x34a0079000000000, 0xfbbc9f1700000000, - 0xba8d840e00000000, 0x79dea92500000000, 0x38efb23c00000000, - 0xff79f37300000000, 0xbe48e86a00000000, 0x7d1bc54100000000, - 0x3c2ade5800000000, 0x054f79f000000000, 0x447e62e900000000, - 0x872d4fc200000000, 0xc61c54db00000000, 0x018a159400000000, - 0x40bb0e8d00000000, 0x83e823a600000000, 0xc2d938bf00000000, - 0x0dc5a03800000000, 0x4cf4bb2100000000, 0x8fa7960a00000000, - 0xce968d1300000000, 0x0900cc5c00000000, 0x4831d74500000000, - 0x8b62fa6e00000000, 0xca53e17700000000, 0x545dbbba00000000, - 0x156ca0a300000000, 0xd63f8d8800000000, 0x970e969100000000, - 0x5098d7de00000000, 0x11a9ccc700000000, 0xd2fae1ec00000000, - 0x93cbfaf500000000, 0x5cd7627200000000, 0x1de6796b00000000, - 0xdeb5544000000000, 0x9f844f5900000000, 0x58120e1600000000, - 0x1923150f00000000, 0xda70382400000000, 0x9b41233d00000000, - 0xa76bfd6500000000, 0xe65ae67c00000000, 0x2509cb5700000000, - 0x6438d04e00000000, 0xa3ae910100000000, 0xe29f8a1800000000, - 0x21cca73300000000, 0x60fdbc2a00000000, 0xafe124ad00000000, - 0xeed03fb400000000, 0x2d83129f00000000, 0x6cb2098600000000, - 0xab2448c900000000, 0xea1553d000000000, 0x29467efb00000000, - 0x687765e200000000, 0xf6793f2f00000000, 0xb748243600000000, - 0x741b091d00000000, 0x352a120400000000, 0xf2bc534b00000000, - 0xb38d485200000000, 0x70de657900000000, 0x31ef7e6000000000, - 0xfef3e6e700000000, 0xbfc2fdfe00000000, 0x7c91d0d500000000, - 0x3da0cbcc00000000, 0xfa368a8300000000, 0xbb07919a00000000, - 0x7854bcb100000000, 0x3965a7a800000000, 0x4b98833b00000000, - 0x0aa9982200000000, 0xc9fab50900000000, 0x88cbae1000000000, - 0x4f5def5f00000000, 0x0e6cf44600000000, 0xcd3fd96d00000000, - 0x8c0ec27400000000, 0x43125af300000000, 0x022341ea00000000, - 0xc1706cc100000000, 0x804177d800000000, 0x47d7369700000000, - 0x06e62d8e00000000, 0xc5b500a500000000, 0x84841bbc00000000, - 0x1a8a417100000000, 0x5bbb5a6800000000, 0x98e8774300000000, - 0xd9d96c5a00000000, 0x1e4f2d1500000000, 0x5f7e360c00000000, - 0x9c2d1b2700000000, 0xdd1c003e00000000, 0x120098b900000000, - 0x533183a000000000, 0x9062ae8b00000000, 0xd153b59200000000, - 0x16c5f4dd00000000, 0x57f4efc400000000, 0x94a7c2ef00000000, - 0xd596d9f600000000, 0xe9bc07ae00000000, 0xa88d1cb700000000, - 0x6bde319c00000000, 0x2aef2a8500000000, 0xed796bca00000000, - 0xac4870d300000000, 0x6f1b5df800000000, 0x2e2a46e100000000, - 0xe136de6600000000, 0xa007c57f00000000, 0x6354e85400000000, - 0x2265f34d00000000, 0xe5f3b20200000000, 0xa4c2a91b00000000, - 0x6791843000000000, 0x26a09f2900000000, 0xb8aec5e400000000, - 0xf99fdefd00000000, 0x3accf3d600000000, 0x7bfde8cf00000000, - 0xbc6ba98000000000, 0xfd5ab29900000000, 0x3e099fb200000000, - 0x7f3884ab00000000, 0xb0241c2c00000000, 0xf115073500000000, - 0x32462a1e00000000, 0x7377310700000000, 0xb4e1704800000000, - 0xf5d06b5100000000, 0x3683467a00000000, 0x77b25d6300000000, - 0x4ed7facb00000000, 0x0fe6e1d200000000, 0xccb5ccf900000000, - 0x8d84d7e000000000, 0x4a1296af00000000, 0x0b238db600000000, - 0xc870a09d00000000, 0x8941bb8400000000, 0x465d230300000000, - 0x076c381a00000000, 0xc43f153100000000, 0x850e0e2800000000, - 0x42984f6700000000, 0x03a9547e00000000, 0xc0fa795500000000, - 0x81cb624c00000000, 0x1fc5388100000000, 0x5ef4239800000000, - 0x9da70eb300000000, 0xdc9615aa00000000, 0x1b0054e500000000, - 0x5a314ffc00000000, 0x996262d700000000, 0xd85379ce00000000, - 0x174fe14900000000, 0x567efa5000000000, 0x952dd77b00000000, - 0xd41ccc6200000000, 0x138a8d2d00000000, 0x52bb963400000000, - 0x91e8bb1f00000000, 0xd0d9a00600000000, 0xecf37e5e00000000, - 0xadc2654700000000, 0x6e91486c00000000, 0x2fa0537500000000, - 0xe836123a00000000, 0xa907092300000000, 0x6a54240800000000, - 0x2b653f1100000000, 0xe479a79600000000, 0xa548bc8f00000000, - 0x661b91a400000000, 0x272a8abd00000000, 0xe0bccbf200000000, - 0xa18dd0eb00000000, 0x62defdc000000000, 0x23efe6d900000000, - 0xbde1bc1400000000, 0xfcd0a70d00000000, 0x3f838a2600000000, - 0x7eb2913f00000000, 0xb924d07000000000, 0xf815cb6900000000, - 0x3b46e64200000000, 0x7a77fd5b00000000, 0xb56b65dc00000000, - 0xf45a7ec500000000, 0x370953ee00000000, 0x763848f700000000, - 0xb1ae09b800000000, 0xf09f12a100000000, 0x33cc3f8a00000000, - 0x72fd249300000000}, - {0x0000000000000000, 0x376ac20100000000, 0x6ed4840300000000, - 0x59be460200000000, 0xdca8090700000000, 0xebc2cb0600000000, - 0xb27c8d0400000000, 0x85164f0500000000, 0xb851130e00000000, - 0x8f3bd10f00000000, 0xd685970d00000000, 0xe1ef550c00000000, - 0x64f91a0900000000, 0x5393d80800000000, 0x0a2d9e0a00000000, - 0x3d475c0b00000000, 0x70a3261c00000000, 0x47c9e41d00000000, - 0x1e77a21f00000000, 0x291d601e00000000, 0xac0b2f1b00000000, - 0x9b61ed1a00000000, 0xc2dfab1800000000, 0xf5b5691900000000, - 0xc8f2351200000000, 0xff98f71300000000, 0xa626b11100000000, - 0x914c731000000000, 0x145a3c1500000000, 0x2330fe1400000000, - 0x7a8eb81600000000, 0x4de47a1700000000, 0xe0464d3800000000, - 0xd72c8f3900000000, 0x8e92c93b00000000, 0xb9f80b3a00000000, - 0x3cee443f00000000, 0x0b84863e00000000, 0x523ac03c00000000, - 0x6550023d00000000, 0x58175e3600000000, 0x6f7d9c3700000000, - 0x36c3da3500000000, 0x01a9183400000000, 0x84bf573100000000, - 0xb3d5953000000000, 0xea6bd33200000000, 0xdd01113300000000, - 0x90e56b2400000000, 0xa78fa92500000000, 0xfe31ef2700000000, - 0xc95b2d2600000000, 0x4c4d622300000000, 0x7b27a02200000000, - 0x2299e62000000000, 0x15f3242100000000, 0x28b4782a00000000, - 0x1fdeba2b00000000, 0x4660fc2900000000, 0x710a3e2800000000, - 0xf41c712d00000000, 0xc376b32c00000000, 0x9ac8f52e00000000, - 0xada2372f00000000, 0xc08d9a7000000000, 0xf7e7587100000000, - 0xae591e7300000000, 0x9933dc7200000000, 0x1c25937700000000, - 0x2b4f517600000000, 0x72f1177400000000, 0x459bd57500000000, - 0x78dc897e00000000, 0x4fb64b7f00000000, 0x16080d7d00000000, - 0x2162cf7c00000000, 0xa474807900000000, 0x931e427800000000, - 0xcaa0047a00000000, 0xfdcac67b00000000, 0xb02ebc6c00000000, - 0x87447e6d00000000, 0xdefa386f00000000, 0xe990fa6e00000000, - 0x6c86b56b00000000, 0x5bec776a00000000, 0x0252316800000000, - 0x3538f36900000000, 0x087faf6200000000, 0x3f156d6300000000, - 0x66ab2b6100000000, 0x51c1e96000000000, 0xd4d7a66500000000, - 0xe3bd646400000000, 0xba03226600000000, 0x8d69e06700000000, - 0x20cbd74800000000, 0x17a1154900000000, 0x4e1f534b00000000, - 0x7975914a00000000, 0xfc63de4f00000000, 0xcb091c4e00000000, - 0x92b75a4c00000000, 0xa5dd984d00000000, 0x989ac44600000000, - 0xaff0064700000000, 0xf64e404500000000, 0xc124824400000000, - 0x4432cd4100000000, 0x73580f4000000000, 0x2ae6494200000000, - 0x1d8c8b4300000000, 0x5068f15400000000, 0x6702335500000000, - 0x3ebc755700000000, 0x09d6b75600000000, 0x8cc0f85300000000, - 0xbbaa3a5200000000, 0xe2147c5000000000, 0xd57ebe5100000000, - 0xe839e25a00000000, 0xdf53205b00000000, 0x86ed665900000000, - 0xb187a45800000000, 0x3491eb5d00000000, 0x03fb295c00000000, - 0x5a456f5e00000000, 0x6d2fad5f00000000, 0x801b35e100000000, - 0xb771f7e000000000, 0xeecfb1e200000000, 0xd9a573e300000000, - 0x5cb33ce600000000, 0x6bd9fee700000000, 0x3267b8e500000000, - 0x050d7ae400000000, 0x384a26ef00000000, 0x0f20e4ee00000000, - 0x569ea2ec00000000, 0x61f460ed00000000, 0xe4e22fe800000000, - 0xd388ede900000000, 0x8a36abeb00000000, 0xbd5c69ea00000000, - 0xf0b813fd00000000, 0xc7d2d1fc00000000, 0x9e6c97fe00000000, - 0xa90655ff00000000, 0x2c101afa00000000, 0x1b7ad8fb00000000, - 0x42c49ef900000000, 0x75ae5cf800000000, 0x48e900f300000000, - 0x7f83c2f200000000, 0x263d84f000000000, 0x115746f100000000, - 0x944109f400000000, 0xa32bcbf500000000, 0xfa958df700000000, - 0xcdff4ff600000000, 0x605d78d900000000, 0x5737bad800000000, - 0x0e89fcda00000000, 0x39e33edb00000000, 0xbcf571de00000000, - 0x8b9fb3df00000000, 0xd221f5dd00000000, 0xe54b37dc00000000, - 0xd80c6bd700000000, 0xef66a9d600000000, 0xb6d8efd400000000, - 0x81b22dd500000000, 0x04a462d000000000, 0x33cea0d100000000, - 0x6a70e6d300000000, 0x5d1a24d200000000, 0x10fe5ec500000000, - 0x27949cc400000000, 0x7e2adac600000000, 0x494018c700000000, - 0xcc5657c200000000, 0xfb3c95c300000000, 0xa282d3c100000000, - 0x95e811c000000000, 0xa8af4dcb00000000, 0x9fc58fca00000000, - 0xc67bc9c800000000, 0xf1110bc900000000, 0x740744cc00000000, - 0x436d86cd00000000, 0x1ad3c0cf00000000, 0x2db902ce00000000, - 0x4096af9100000000, 0x77fc6d9000000000, 0x2e422b9200000000, - 0x1928e99300000000, 0x9c3ea69600000000, 0xab54649700000000, - 0xf2ea229500000000, 0xc580e09400000000, 0xf8c7bc9f00000000, - 0xcfad7e9e00000000, 0x9613389c00000000, 0xa179fa9d00000000, - 0x246fb59800000000, 0x1305779900000000, 0x4abb319b00000000, - 0x7dd1f39a00000000, 0x3035898d00000000, 0x075f4b8c00000000, - 0x5ee10d8e00000000, 0x698bcf8f00000000, 0xec9d808a00000000, - 0xdbf7428b00000000, 0x8249048900000000, 0xb523c68800000000, - 0x88649a8300000000, 0xbf0e588200000000, 0xe6b01e8000000000, - 0xd1dadc8100000000, 0x54cc938400000000, 0x63a6518500000000, - 0x3a18178700000000, 0x0d72d58600000000, 0xa0d0e2a900000000, - 0x97ba20a800000000, 0xce0466aa00000000, 0xf96ea4ab00000000, - 0x7c78ebae00000000, 0x4b1229af00000000, 0x12ac6fad00000000, - 0x25c6adac00000000, 0x1881f1a700000000, 0x2feb33a600000000, - 0x765575a400000000, 0x413fb7a500000000, 0xc429f8a000000000, - 0xf3433aa100000000, 0xaafd7ca300000000, 0x9d97bea200000000, - 0xd073c4b500000000, 0xe71906b400000000, 0xbea740b600000000, - 0x89cd82b700000000, 0x0cdbcdb200000000, 0x3bb10fb300000000, - 0x620f49b100000000, 0x55658bb000000000, 0x6822d7bb00000000, - 0x5f4815ba00000000, 0x06f653b800000000, 0x319c91b900000000, - 0xb48adebc00000000, 0x83e01cbd00000000, 0xda5e5abf00000000, - 0xed3498be00000000}, - {0x0000000000000000, 0x6567bcb800000000, 0x8bc809aa00000000, - 0xeeafb51200000000, 0x5797628f00000000, 0x32f0de3700000000, - 0xdc5f6b2500000000, 0xb938d79d00000000, 0xef28b4c500000000, - 0x8a4f087d00000000, 0x64e0bd6f00000000, 0x018701d700000000, - 0xb8bfd64a00000000, 0xddd86af200000000, 0x3377dfe000000000, - 0x5610635800000000, 0x9f57195000000000, 0xfa30a5e800000000, - 0x149f10fa00000000, 0x71f8ac4200000000, 0xc8c07bdf00000000, - 0xada7c76700000000, 0x4308727500000000, 0x266fcecd00000000, - 0x707fad9500000000, 0x1518112d00000000, 0xfbb7a43f00000000, - 0x9ed0188700000000, 0x27e8cf1a00000000, 0x428f73a200000000, - 0xac20c6b000000000, 0xc9477a0800000000, 0x3eaf32a000000000, - 0x5bc88e1800000000, 0xb5673b0a00000000, 0xd00087b200000000, - 0x6938502f00000000, 0x0c5fec9700000000, 0xe2f0598500000000, - 0x8797e53d00000000, 0xd187866500000000, 0xb4e03add00000000, - 0x5a4f8fcf00000000, 0x3f28337700000000, 0x8610e4ea00000000, - 0xe377585200000000, 0x0dd8ed4000000000, 0x68bf51f800000000, - 0xa1f82bf000000000, 0xc49f974800000000, 0x2a30225a00000000, - 0x4f579ee200000000, 0xf66f497f00000000, 0x9308f5c700000000, - 0x7da740d500000000, 0x18c0fc6d00000000, 0x4ed09f3500000000, - 0x2bb7238d00000000, 0xc518969f00000000, 0xa07f2a2700000000, - 0x1947fdba00000000, 0x7c20410200000000, 0x928ff41000000000, - 0xf7e848a800000000, 0x3d58149b00000000, 0x583fa82300000000, - 0xb6901d3100000000, 0xd3f7a18900000000, 0x6acf761400000000, - 0x0fa8caac00000000, 0xe1077fbe00000000, 0x8460c30600000000, - 0xd270a05e00000000, 0xb7171ce600000000, 0x59b8a9f400000000, - 0x3cdf154c00000000, 0x85e7c2d100000000, 0xe0807e6900000000, - 0x0e2fcb7b00000000, 0x6b4877c300000000, 0xa20f0dcb00000000, - 0xc768b17300000000, 0x29c7046100000000, 0x4ca0b8d900000000, - 0xf5986f4400000000, 0x90ffd3fc00000000, 0x7e5066ee00000000, - 0x1b37da5600000000, 0x4d27b90e00000000, 0x284005b600000000, - 0xc6efb0a400000000, 0xa3880c1c00000000, 0x1ab0db8100000000, - 0x7fd7673900000000, 0x9178d22b00000000, 0xf41f6e9300000000, - 0x03f7263b00000000, 0x66909a8300000000, 0x883f2f9100000000, - 0xed58932900000000, 0x546044b400000000, 0x3107f80c00000000, - 0xdfa84d1e00000000, 0xbacff1a600000000, 0xecdf92fe00000000, - 0x89b82e4600000000, 0x67179b5400000000, 0x027027ec00000000, - 0xbb48f07100000000, 0xde2f4cc900000000, 0x3080f9db00000000, - 0x55e7456300000000, 0x9ca03f6b00000000, 0xf9c783d300000000, - 0x176836c100000000, 0x720f8a7900000000, 0xcb375de400000000, - 0xae50e15c00000000, 0x40ff544e00000000, 0x2598e8f600000000, - 0x73888bae00000000, 0x16ef371600000000, 0xf840820400000000, - 0x9d273ebc00000000, 0x241fe92100000000, 0x4178559900000000, - 0xafd7e08b00000000, 0xcab05c3300000000, 0x3bb659ed00000000, - 0x5ed1e55500000000, 0xb07e504700000000, 0xd519ecff00000000, - 0x6c213b6200000000, 0x094687da00000000, 0xe7e932c800000000, - 0x828e8e7000000000, 0xd49eed2800000000, 0xb1f9519000000000, - 0x5f56e48200000000, 0x3a31583a00000000, 0x83098fa700000000, - 0xe66e331f00000000, 0x08c1860d00000000, 0x6da63ab500000000, - 0xa4e140bd00000000, 0xc186fc0500000000, 0x2f29491700000000, - 0x4a4ef5af00000000, 0xf376223200000000, 0x96119e8a00000000, - 0x78be2b9800000000, 0x1dd9972000000000, 0x4bc9f47800000000, - 0x2eae48c000000000, 0xc001fdd200000000, 0xa566416a00000000, - 0x1c5e96f700000000, 0x79392a4f00000000, 0x97969f5d00000000, - 0xf2f123e500000000, 0x05196b4d00000000, 0x607ed7f500000000, - 0x8ed162e700000000, 0xebb6de5f00000000, 0x528e09c200000000, - 0x37e9b57a00000000, 0xd946006800000000, 0xbc21bcd000000000, - 0xea31df8800000000, 0x8f56633000000000, 0x61f9d62200000000, - 0x049e6a9a00000000, 0xbda6bd0700000000, 0xd8c101bf00000000, - 0x366eb4ad00000000, 0x5309081500000000, 0x9a4e721d00000000, - 0xff29cea500000000, 0x11867bb700000000, 0x74e1c70f00000000, - 0xcdd9109200000000, 0xa8beac2a00000000, 0x4611193800000000, - 0x2376a58000000000, 0x7566c6d800000000, 0x10017a6000000000, - 0xfeaecf7200000000, 0x9bc973ca00000000, 0x22f1a45700000000, - 0x479618ef00000000, 0xa939adfd00000000, 0xcc5e114500000000, - 0x06ee4d7600000000, 0x6389f1ce00000000, 0x8d2644dc00000000, - 0xe841f86400000000, 0x51792ff900000000, 0x341e934100000000, - 0xdab1265300000000, 0xbfd69aeb00000000, 0xe9c6f9b300000000, - 0x8ca1450b00000000, 0x620ef01900000000, 0x07694ca100000000, - 0xbe519b3c00000000, 0xdb36278400000000, 0x3599929600000000, - 0x50fe2e2e00000000, 0x99b9542600000000, 0xfcdee89e00000000, - 0x12715d8c00000000, 0x7716e13400000000, 0xce2e36a900000000, - 0xab498a1100000000, 0x45e63f0300000000, 0x208183bb00000000, - 0x7691e0e300000000, 0x13f65c5b00000000, 0xfd59e94900000000, - 0x983e55f100000000, 0x2106826c00000000, 0x44613ed400000000, - 0xaace8bc600000000, 0xcfa9377e00000000, 0x38417fd600000000, - 0x5d26c36e00000000, 0xb389767c00000000, 0xd6eecac400000000, - 0x6fd61d5900000000, 0x0ab1a1e100000000, 0xe41e14f300000000, - 0x8179a84b00000000, 0xd769cb1300000000, 0xb20e77ab00000000, - 0x5ca1c2b900000000, 0x39c67e0100000000, 0x80fea99c00000000, - 0xe599152400000000, 0x0b36a03600000000, 0x6e511c8e00000000, - 0xa716668600000000, 0xc271da3e00000000, 0x2cde6f2c00000000, - 0x49b9d39400000000, 0xf081040900000000, 0x95e6b8b100000000, - 0x7b490da300000000, 0x1e2eb11b00000000, 0x483ed24300000000, - 0x2d596efb00000000, 0xc3f6dbe900000000, 0xa691675100000000, - 0x1fa9b0cc00000000, 0x7ace0c7400000000, 0x9461b96600000000, - 0xf10605de00000000}, - {0x0000000000000000, 0xb029603d00000000, 0x6053c07a00000000, - 0xd07aa04700000000, 0xc0a680f500000000, 0x708fe0c800000000, - 0xa0f5408f00000000, 0x10dc20b200000000, 0xc14b703000000000, - 0x7162100d00000000, 0xa118b04a00000000, 0x1131d07700000000, - 0x01edf0c500000000, 0xb1c490f800000000, 0x61be30bf00000000, - 0xd197508200000000, 0x8297e06000000000, 0x32be805d00000000, - 0xe2c4201a00000000, 0x52ed402700000000, 0x4231609500000000, - 0xf21800a800000000, 0x2262a0ef00000000, 0x924bc0d200000000, - 0x43dc905000000000, 0xf3f5f06d00000000, 0x238f502a00000000, - 0x93a6301700000000, 0x837a10a500000000, 0x3353709800000000, - 0xe329d0df00000000, 0x5300b0e200000000, 0x042fc1c100000000, - 0xb406a1fc00000000, 0x647c01bb00000000, 0xd455618600000000, - 0xc489413400000000, 0x74a0210900000000, 0xa4da814e00000000, - 0x14f3e17300000000, 0xc564b1f100000000, 0x754dd1cc00000000, - 0xa537718b00000000, 0x151e11b600000000, 0x05c2310400000000, - 0xb5eb513900000000, 0x6591f17e00000000, 0xd5b8914300000000, - 0x86b821a100000000, 0x3691419c00000000, 0xe6ebe1db00000000, - 0x56c281e600000000, 0x461ea15400000000, 0xf637c16900000000, - 0x264d612e00000000, 0x9664011300000000, 0x47f3519100000000, - 0xf7da31ac00000000, 0x27a091eb00000000, 0x9789f1d600000000, - 0x8755d16400000000, 0x377cb15900000000, 0xe706111e00000000, - 0x572f712300000000, 0x4958f35800000000, 0xf971936500000000, - 0x290b332200000000, 0x9922531f00000000, 0x89fe73ad00000000, - 0x39d7139000000000, 0xe9adb3d700000000, 0x5984d3ea00000000, - 0x8813836800000000, 0x383ae35500000000, 0xe840431200000000, - 0x5869232f00000000, 0x48b5039d00000000, 0xf89c63a000000000, - 0x28e6c3e700000000, 0x98cfa3da00000000, 0xcbcf133800000000, - 0x7be6730500000000, 0xab9cd34200000000, 0x1bb5b37f00000000, - 0x0b6993cd00000000, 0xbb40f3f000000000, 0x6b3a53b700000000, - 0xdb13338a00000000, 0x0a84630800000000, 0xbaad033500000000, - 0x6ad7a37200000000, 0xdafec34f00000000, 0xca22e3fd00000000, - 0x7a0b83c000000000, 0xaa71238700000000, 0x1a5843ba00000000, - 0x4d77329900000000, 0xfd5e52a400000000, 0x2d24f2e300000000, - 0x9d0d92de00000000, 0x8dd1b26c00000000, 0x3df8d25100000000, - 0xed82721600000000, 0x5dab122b00000000, 0x8c3c42a900000000, - 0x3c15229400000000, 0xec6f82d300000000, 0x5c46e2ee00000000, - 0x4c9ac25c00000000, 0xfcb3a26100000000, 0x2cc9022600000000, - 0x9ce0621b00000000, 0xcfe0d2f900000000, 0x7fc9b2c400000000, - 0xafb3128300000000, 0x1f9a72be00000000, 0x0f46520c00000000, - 0xbf6f323100000000, 0x6f15927600000000, 0xdf3cf24b00000000, - 0x0eaba2c900000000, 0xbe82c2f400000000, 0x6ef862b300000000, - 0xded1028e00000000, 0xce0d223c00000000, 0x7e24420100000000, - 0xae5ee24600000000, 0x1e77827b00000000, 0x92b0e6b100000000, - 0x2299868c00000000, 0xf2e326cb00000000, 0x42ca46f600000000, - 0x5216664400000000, 0xe23f067900000000, 0x3245a63e00000000, - 0x826cc60300000000, 0x53fb968100000000, 0xe3d2f6bc00000000, - 0x33a856fb00000000, 0x838136c600000000, 0x935d167400000000, - 0x2374764900000000, 0xf30ed60e00000000, 0x4327b63300000000, - 0x102706d100000000, 0xa00e66ec00000000, 0x7074c6ab00000000, - 0xc05da69600000000, 0xd081862400000000, 0x60a8e61900000000, - 0xb0d2465e00000000, 0x00fb266300000000, 0xd16c76e100000000, - 0x614516dc00000000, 0xb13fb69b00000000, 0x0116d6a600000000, - 0x11caf61400000000, 0xa1e3962900000000, 0x7199366e00000000, - 0xc1b0565300000000, 0x969f277000000000, 0x26b6474d00000000, - 0xf6cce70a00000000, 0x46e5873700000000, 0x5639a78500000000, - 0xe610c7b800000000, 0x366a67ff00000000, 0x864307c200000000, - 0x57d4574000000000, 0xe7fd377d00000000, 0x3787973a00000000, - 0x87aef70700000000, 0x9772d7b500000000, 0x275bb78800000000, - 0xf72117cf00000000, 0x470877f200000000, 0x1408c71000000000, - 0xa421a72d00000000, 0x745b076a00000000, 0xc472675700000000, - 0xd4ae47e500000000, 0x648727d800000000, 0xb4fd879f00000000, - 0x04d4e7a200000000, 0xd543b72000000000, 0x656ad71d00000000, - 0xb510775a00000000, 0x0539176700000000, 0x15e537d500000000, - 0xa5cc57e800000000, 0x75b6f7af00000000, 0xc59f979200000000, - 0xdbe815e900000000, 0x6bc175d400000000, 0xbbbbd59300000000, - 0x0b92b5ae00000000, 0x1b4e951c00000000, 0xab67f52100000000, - 0x7b1d556600000000, 0xcb34355b00000000, 0x1aa365d900000000, - 0xaa8a05e400000000, 0x7af0a5a300000000, 0xcad9c59e00000000, - 0xda05e52c00000000, 0x6a2c851100000000, 0xba56255600000000, - 0x0a7f456b00000000, 0x597ff58900000000, 0xe95695b400000000, - 0x392c35f300000000, 0x890555ce00000000, 0x99d9757c00000000, - 0x29f0154100000000, 0xf98ab50600000000, 0x49a3d53b00000000, - 0x983485b900000000, 0x281de58400000000, 0xf86745c300000000, - 0x484e25fe00000000, 0x5892054c00000000, 0xe8bb657100000000, - 0x38c1c53600000000, 0x88e8a50b00000000, 0xdfc7d42800000000, - 0x6feeb41500000000, 0xbf94145200000000, 0x0fbd746f00000000, - 0x1f6154dd00000000, 0xaf4834e000000000, 0x7f3294a700000000, - 0xcf1bf49a00000000, 0x1e8ca41800000000, 0xaea5c42500000000, - 0x7edf646200000000, 0xcef6045f00000000, 0xde2a24ed00000000, - 0x6e0344d000000000, 0xbe79e49700000000, 0x0e5084aa00000000, - 0x5d50344800000000, 0xed79547500000000, 0x3d03f43200000000, - 0x8d2a940f00000000, 0x9df6b4bd00000000, 0x2ddfd48000000000, - 0xfda574c700000000, 0x4d8c14fa00000000, 0x9c1b447800000000, - 0x2c32244500000000, 0xfc48840200000000, 0x4c61e43f00000000, - 0x5cbdc48d00000000, 0xec94a4b000000000, 0x3cee04f700000000, - 0x8cc764ca00000000}, - {0x0000000000000000, 0xa5d35ccb00000000, 0x0ba1c84d00000000, - 0xae72948600000000, 0x1642919b00000000, 0xb391cd5000000000, - 0x1de359d600000000, 0xb830051d00000000, 0x6d8253ec00000000, - 0xc8510f2700000000, 0x66239ba100000000, 0xc3f0c76a00000000, - 0x7bc0c27700000000, 0xde139ebc00000000, 0x70610a3a00000000, - 0xd5b256f100000000, 0x9b02d60300000000, 0x3ed18ac800000000, - 0x90a31e4e00000000, 0x3570428500000000, 0x8d40479800000000, - 0x28931b5300000000, 0x86e18fd500000000, 0x2332d31e00000000, - 0xf68085ef00000000, 0x5353d92400000000, 0xfd214da200000000, - 0x58f2116900000000, 0xe0c2147400000000, 0x451148bf00000000, - 0xeb63dc3900000000, 0x4eb080f200000000, 0x3605ac0700000000, - 0x93d6f0cc00000000, 0x3da4644a00000000, 0x9877388100000000, - 0x20473d9c00000000, 0x8594615700000000, 0x2be6f5d100000000, - 0x8e35a91a00000000, 0x5b87ffeb00000000, 0xfe54a32000000000, - 0x502637a600000000, 0xf5f56b6d00000000, 0x4dc56e7000000000, - 0xe81632bb00000000, 0x4664a63d00000000, 0xe3b7faf600000000, - 0xad077a0400000000, 0x08d426cf00000000, 0xa6a6b24900000000, - 0x0375ee8200000000, 0xbb45eb9f00000000, 0x1e96b75400000000, - 0xb0e423d200000000, 0x15377f1900000000, 0xc08529e800000000, - 0x6556752300000000, 0xcb24e1a500000000, 0x6ef7bd6e00000000, - 0xd6c7b87300000000, 0x7314e4b800000000, 0xdd66703e00000000, - 0x78b52cf500000000, 0x6c0a580f00000000, 0xc9d904c400000000, - 0x67ab904200000000, 0xc278cc8900000000, 0x7a48c99400000000, - 0xdf9b955f00000000, 0x71e901d900000000, 0xd43a5d1200000000, - 0x01880be300000000, 0xa45b572800000000, 0x0a29c3ae00000000, - 0xaffa9f6500000000, 0x17ca9a7800000000, 0xb219c6b300000000, - 0x1c6b523500000000, 0xb9b80efe00000000, 0xf7088e0c00000000, - 0x52dbd2c700000000, 0xfca9464100000000, 0x597a1a8a00000000, - 0xe14a1f9700000000, 0x4499435c00000000, 0xeaebd7da00000000, - 0x4f388b1100000000, 0x9a8adde000000000, 0x3f59812b00000000, - 0x912b15ad00000000, 0x34f8496600000000, 0x8cc84c7b00000000, - 0x291b10b000000000, 0x8769843600000000, 0x22bad8fd00000000, - 0x5a0ff40800000000, 0xffdca8c300000000, 0x51ae3c4500000000, - 0xf47d608e00000000, 0x4c4d659300000000, 0xe99e395800000000, - 0x47ecadde00000000, 0xe23ff11500000000, 0x378da7e400000000, - 0x925efb2f00000000, 0x3c2c6fa900000000, 0x99ff336200000000, - 0x21cf367f00000000, 0x841c6ab400000000, 0x2a6efe3200000000, - 0x8fbda2f900000000, 0xc10d220b00000000, 0x64de7ec000000000, - 0xcaacea4600000000, 0x6f7fb68d00000000, 0xd74fb39000000000, - 0x729cef5b00000000, 0xdcee7bdd00000000, 0x793d271600000000, - 0xac8f71e700000000, 0x095c2d2c00000000, 0xa72eb9aa00000000, - 0x02fde56100000000, 0xbacde07c00000000, 0x1f1ebcb700000000, - 0xb16c283100000000, 0x14bf74fa00000000, 0xd814b01e00000000, - 0x7dc7ecd500000000, 0xd3b5785300000000, 0x7666249800000000, - 0xce56218500000000, 0x6b857d4e00000000, 0xc5f7e9c800000000, - 0x6024b50300000000, 0xb596e3f200000000, 0x1045bf3900000000, - 0xbe372bbf00000000, 0x1be4777400000000, 0xa3d4726900000000, - 0x06072ea200000000, 0xa875ba2400000000, 0x0da6e6ef00000000, - 0x4316661d00000000, 0xe6c53ad600000000, 0x48b7ae5000000000, - 0xed64f29b00000000, 0x5554f78600000000, 0xf087ab4d00000000, - 0x5ef53fcb00000000, 0xfb26630000000000, 0x2e9435f100000000, - 0x8b47693a00000000, 0x2535fdbc00000000, 0x80e6a17700000000, - 0x38d6a46a00000000, 0x9d05f8a100000000, 0x33776c2700000000, - 0x96a430ec00000000, 0xee111c1900000000, 0x4bc240d200000000, - 0xe5b0d45400000000, 0x4063889f00000000, 0xf8538d8200000000, - 0x5d80d14900000000, 0xf3f245cf00000000, 0x5621190400000000, - 0x83934ff500000000, 0x2640133e00000000, 0x883287b800000000, - 0x2de1db7300000000, 0x95d1de6e00000000, 0x300282a500000000, - 0x9e70162300000000, 0x3ba34ae800000000, 0x7513ca1a00000000, - 0xd0c096d100000000, 0x7eb2025700000000, 0xdb615e9c00000000, - 0x63515b8100000000, 0xc682074a00000000, 0x68f093cc00000000, - 0xcd23cf0700000000, 0x189199f600000000, 0xbd42c53d00000000, - 0x133051bb00000000, 0xb6e30d7000000000, 0x0ed3086d00000000, - 0xab0054a600000000, 0x0572c02000000000, 0xa0a19ceb00000000, - 0xb41ee81100000000, 0x11cdb4da00000000, 0xbfbf205c00000000, - 0x1a6c7c9700000000, 0xa25c798a00000000, 0x078f254100000000, - 0xa9fdb1c700000000, 0x0c2eed0c00000000, 0xd99cbbfd00000000, - 0x7c4fe73600000000, 0xd23d73b000000000, 0x77ee2f7b00000000, - 0xcfde2a6600000000, 0x6a0d76ad00000000, 0xc47fe22b00000000, - 0x61acbee000000000, 0x2f1c3e1200000000, 0x8acf62d900000000, - 0x24bdf65f00000000, 0x816eaa9400000000, 0x395eaf8900000000, - 0x9c8df34200000000, 0x32ff67c400000000, 0x972c3b0f00000000, - 0x429e6dfe00000000, 0xe74d313500000000, 0x493fa5b300000000, - 0xececf97800000000, 0x54dcfc6500000000, 0xf10fa0ae00000000, - 0x5f7d342800000000, 0xfaae68e300000000, 0x821b441600000000, - 0x27c818dd00000000, 0x89ba8c5b00000000, 0x2c69d09000000000, - 0x9459d58d00000000, 0x318a894600000000, 0x9ff81dc000000000, - 0x3a2b410b00000000, 0xef9917fa00000000, 0x4a4a4b3100000000, - 0xe438dfb700000000, 0x41eb837c00000000, 0xf9db866100000000, - 0x5c08daaa00000000, 0xf27a4e2c00000000, 0x57a912e700000000, - 0x1919921500000000, 0xbccacede00000000, 0x12b85a5800000000, - 0xb76b069300000000, 0x0f5b038e00000000, 0xaa885f4500000000, - 0x04facbc300000000, 0xa129970800000000, 0x749bc1f900000000, - 0xd1489d3200000000, 0x7f3a09b400000000, 0xdae9557f00000000, - 0x62d9506200000000, 0xc70a0ca900000000, 0x6978982f00000000, - 0xccabc4e400000000}, - {0x0000000000000000, 0xb40b77a600000000, 0x29119f9700000000, - 0x9d1ae83100000000, 0x13244ff400000000, 0xa72f385200000000, - 0x3a35d06300000000, 0x8e3ea7c500000000, 0x674eef3300000000, - 0xd345989500000000, 0x4e5f70a400000000, 0xfa54070200000000, - 0x746aa0c700000000, 0xc061d76100000000, 0x5d7b3f5000000000, - 0xe97048f600000000, 0xce9cde6700000000, 0x7a97a9c100000000, - 0xe78d41f000000000, 0x5386365600000000, 0xddb8919300000000, - 0x69b3e63500000000, 0xf4a90e0400000000, 0x40a279a200000000, - 0xa9d2315400000000, 0x1dd946f200000000, 0x80c3aec300000000, - 0x34c8d96500000000, 0xbaf67ea000000000, 0x0efd090600000000, - 0x93e7e13700000000, 0x27ec969100000000, 0x9c39bdcf00000000, - 0x2832ca6900000000, 0xb528225800000000, 0x012355fe00000000, - 0x8f1df23b00000000, 0x3b16859d00000000, 0xa60c6dac00000000, - 0x12071a0a00000000, 0xfb7752fc00000000, 0x4f7c255a00000000, - 0xd266cd6b00000000, 0x666dbacd00000000, 0xe8531d0800000000, - 0x5c586aae00000000, 0xc142829f00000000, 0x7549f53900000000, - 0x52a563a800000000, 0xe6ae140e00000000, 0x7bb4fc3f00000000, - 0xcfbf8b9900000000, 0x41812c5c00000000, 0xf58a5bfa00000000, - 0x6890b3cb00000000, 0xdc9bc46d00000000, 0x35eb8c9b00000000, - 0x81e0fb3d00000000, 0x1cfa130c00000000, 0xa8f164aa00000000, - 0x26cfc36f00000000, 0x92c4b4c900000000, 0x0fde5cf800000000, - 0xbbd52b5e00000000, 0x79750b4400000000, 0xcd7e7ce200000000, - 0x506494d300000000, 0xe46fe37500000000, 0x6a5144b000000000, - 0xde5a331600000000, 0x4340db2700000000, 0xf74bac8100000000, - 0x1e3be47700000000, 0xaa3093d100000000, 0x372a7be000000000, - 0x83210c4600000000, 0x0d1fab8300000000, 0xb914dc2500000000, - 0x240e341400000000, 0x900543b200000000, 0xb7e9d52300000000, - 0x03e2a28500000000, 0x9ef84ab400000000, 0x2af33d1200000000, - 0xa4cd9ad700000000, 0x10c6ed7100000000, 0x8ddc054000000000, - 0x39d772e600000000, 0xd0a73a1000000000, 0x64ac4db600000000, - 0xf9b6a58700000000, 0x4dbdd22100000000, 0xc38375e400000000, - 0x7788024200000000, 0xea92ea7300000000, 0x5e999dd500000000, - 0xe54cb68b00000000, 0x5147c12d00000000, 0xcc5d291c00000000, - 0x78565eba00000000, 0xf668f97f00000000, 0x42638ed900000000, - 0xdf7966e800000000, 0x6b72114e00000000, 0x820259b800000000, - 0x36092e1e00000000, 0xab13c62f00000000, 0x1f18b18900000000, - 0x9126164c00000000, 0x252d61ea00000000, 0xb83789db00000000, - 0x0c3cfe7d00000000, 0x2bd068ec00000000, 0x9fdb1f4a00000000, - 0x02c1f77b00000000, 0xb6ca80dd00000000, 0x38f4271800000000, - 0x8cff50be00000000, 0x11e5b88f00000000, 0xa5eecf2900000000, - 0x4c9e87df00000000, 0xf895f07900000000, 0x658f184800000000, - 0xd1846fee00000000, 0x5fbac82b00000000, 0xebb1bf8d00000000, - 0x76ab57bc00000000, 0xc2a0201a00000000, 0xf2ea168800000000, - 0x46e1612e00000000, 0xdbfb891f00000000, 0x6ff0feb900000000, - 0xe1ce597c00000000, 0x55c52eda00000000, 0xc8dfc6eb00000000, - 0x7cd4b14d00000000, 0x95a4f9bb00000000, 0x21af8e1d00000000, - 0xbcb5662c00000000, 0x08be118a00000000, 0x8680b64f00000000, - 0x328bc1e900000000, 0xaf9129d800000000, 0x1b9a5e7e00000000, - 0x3c76c8ef00000000, 0x887dbf4900000000, 0x1567577800000000, - 0xa16c20de00000000, 0x2f52871b00000000, 0x9b59f0bd00000000, - 0x0643188c00000000, 0xb2486f2a00000000, 0x5b3827dc00000000, - 0xef33507a00000000, 0x7229b84b00000000, 0xc622cfed00000000, - 0x481c682800000000, 0xfc171f8e00000000, 0x610df7bf00000000, - 0xd506801900000000, 0x6ed3ab4700000000, 0xdad8dce100000000, - 0x47c234d000000000, 0xf3c9437600000000, 0x7df7e4b300000000, - 0xc9fc931500000000, 0x54e67b2400000000, 0xe0ed0c8200000000, - 0x099d447400000000, 0xbd9633d200000000, 0x208cdbe300000000, - 0x9487ac4500000000, 0x1ab90b8000000000, 0xaeb27c2600000000, - 0x33a8941700000000, 0x87a3e3b100000000, 0xa04f752000000000, - 0x1444028600000000, 0x895eeab700000000, 0x3d559d1100000000, - 0xb36b3ad400000000, 0x07604d7200000000, 0x9a7aa54300000000, - 0x2e71d2e500000000, 0xc7019a1300000000, 0x730aedb500000000, - 0xee10058400000000, 0x5a1b722200000000, 0xd425d5e700000000, - 0x602ea24100000000, 0xfd344a7000000000, 0x493f3dd600000000, - 0x8b9f1dcc00000000, 0x3f946a6a00000000, 0xa28e825b00000000, - 0x1685f5fd00000000, 0x98bb523800000000, 0x2cb0259e00000000, - 0xb1aacdaf00000000, 0x05a1ba0900000000, 0xecd1f2ff00000000, - 0x58da855900000000, 0xc5c06d6800000000, 0x71cb1ace00000000, - 0xfff5bd0b00000000, 0x4bfecaad00000000, 0xd6e4229c00000000, - 0x62ef553a00000000, 0x4503c3ab00000000, 0xf108b40d00000000, - 0x6c125c3c00000000, 0xd8192b9a00000000, 0x56278c5f00000000, - 0xe22cfbf900000000, 0x7f3613c800000000, 0xcb3d646e00000000, - 0x224d2c9800000000, 0x96465b3e00000000, 0x0b5cb30f00000000, - 0xbf57c4a900000000, 0x3169636c00000000, 0x856214ca00000000, - 0x1878fcfb00000000, 0xac738b5d00000000, 0x17a6a00300000000, - 0xa3add7a500000000, 0x3eb73f9400000000, 0x8abc483200000000, - 0x0482eff700000000, 0xb089985100000000, 0x2d93706000000000, - 0x999807c600000000, 0x70e84f3000000000, 0xc4e3389600000000, - 0x59f9d0a700000000, 0xedf2a70100000000, 0x63cc00c400000000, - 0xd7c7776200000000, 0x4add9f5300000000, 0xfed6e8f500000000, - 0xd93a7e6400000000, 0x6d3109c200000000, 0xf02be1f300000000, - 0x4420965500000000, 0xca1e319000000000, 0x7e15463600000000, - 0xe30fae0700000000, 0x5704d9a100000000, 0xbe74915700000000, - 0x0a7fe6f100000000, 0x97650ec000000000, 0x236e796600000000, - 0xad50dea300000000, 0x195ba90500000000, 0x8441413400000000, - 0x304a369200000000}, - {0x0000000000000000, 0x9e00aacc00000000, 0x7d07254200000000, - 0xe3078f8e00000000, 0xfa0e4a8400000000, 0x640ee04800000000, - 0x87096fc600000000, 0x1909c50a00000000, 0xb51be5d300000000, - 0x2b1b4f1f00000000, 0xc81cc09100000000, 0x561c6a5d00000000, - 0x4f15af5700000000, 0xd115059b00000000, 0x32128a1500000000, - 0xac1220d900000000, 0x2b31bb7c00000000, 0xb53111b000000000, - 0x56369e3e00000000, 0xc83634f200000000, 0xd13ff1f800000000, - 0x4f3f5b3400000000, 0xac38d4ba00000000, 0x32387e7600000000, - 0x9e2a5eaf00000000, 0x002af46300000000, 0xe32d7bed00000000, - 0x7d2dd12100000000, 0x6424142b00000000, 0xfa24bee700000000, - 0x1923316900000000, 0x87239ba500000000, 0x566276f900000000, - 0xc862dc3500000000, 0x2b6553bb00000000, 0xb565f97700000000, - 0xac6c3c7d00000000, 0x326c96b100000000, 0xd16b193f00000000, - 0x4f6bb3f300000000, 0xe379932a00000000, 0x7d7939e600000000, - 0x9e7eb66800000000, 0x007e1ca400000000, 0x1977d9ae00000000, - 0x8777736200000000, 0x6470fcec00000000, 0xfa70562000000000, - 0x7d53cd8500000000, 0xe353674900000000, 0x0054e8c700000000, - 0x9e54420b00000000, 0x875d870100000000, 0x195d2dcd00000000, - 0xfa5aa24300000000, 0x645a088f00000000, 0xc848285600000000, - 0x5648829a00000000, 0xb54f0d1400000000, 0x2b4fa7d800000000, - 0x324662d200000000, 0xac46c81e00000000, 0x4f41479000000000, - 0xd141ed5c00000000, 0xedc29d2900000000, 0x73c237e500000000, - 0x90c5b86b00000000, 0x0ec512a700000000, 0x17ccd7ad00000000, - 0x89cc7d6100000000, 0x6acbf2ef00000000, 0xf4cb582300000000, - 0x58d978fa00000000, 0xc6d9d23600000000, 0x25de5db800000000, - 0xbbdef77400000000, 0xa2d7327e00000000, 0x3cd798b200000000, - 0xdfd0173c00000000, 0x41d0bdf000000000, 0xc6f3265500000000, - 0x58f38c9900000000, 0xbbf4031700000000, 0x25f4a9db00000000, - 0x3cfd6cd100000000, 0xa2fdc61d00000000, 0x41fa499300000000, - 0xdffae35f00000000, 0x73e8c38600000000, 0xede8694a00000000, - 0x0eefe6c400000000, 0x90ef4c0800000000, 0x89e6890200000000, - 0x17e623ce00000000, 0xf4e1ac4000000000, 0x6ae1068c00000000, - 0xbba0ebd000000000, 0x25a0411c00000000, 0xc6a7ce9200000000, - 0x58a7645e00000000, 0x41aea15400000000, 0xdfae0b9800000000, - 0x3ca9841600000000, 0xa2a92eda00000000, 0x0ebb0e0300000000, - 0x90bba4cf00000000, 0x73bc2b4100000000, 0xedbc818d00000000, - 0xf4b5448700000000, 0x6ab5ee4b00000000, 0x89b261c500000000, - 0x17b2cb0900000000, 0x909150ac00000000, 0x0e91fa6000000000, - 0xed9675ee00000000, 0x7396df2200000000, 0x6a9f1a2800000000, - 0xf49fb0e400000000, 0x17983f6a00000000, 0x899895a600000000, - 0x258ab57f00000000, 0xbb8a1fb300000000, 0x588d903d00000000, - 0xc68d3af100000000, 0xdf84fffb00000000, 0x4184553700000000, - 0xa283dab900000000, 0x3c83707500000000, 0xda853b5300000000, - 0x4485919f00000000, 0xa7821e1100000000, 0x3982b4dd00000000, - 0x208b71d700000000, 0xbe8bdb1b00000000, 0x5d8c549500000000, - 0xc38cfe5900000000, 0x6f9ede8000000000, 0xf19e744c00000000, - 0x1299fbc200000000, 0x8c99510e00000000, 0x9590940400000000, - 0x0b903ec800000000, 0xe897b14600000000, 0x76971b8a00000000, - 0xf1b4802f00000000, 0x6fb42ae300000000, 0x8cb3a56d00000000, - 0x12b30fa100000000, 0x0bbacaab00000000, 0x95ba606700000000, - 0x76bdefe900000000, 0xe8bd452500000000, 0x44af65fc00000000, - 0xdaafcf3000000000, 0x39a840be00000000, 0xa7a8ea7200000000, - 0xbea12f7800000000, 0x20a185b400000000, 0xc3a60a3a00000000, - 0x5da6a0f600000000, 0x8ce74daa00000000, 0x12e7e76600000000, - 0xf1e068e800000000, 0x6fe0c22400000000, 0x76e9072e00000000, - 0xe8e9ade200000000, 0x0bee226c00000000, 0x95ee88a000000000, - 0x39fca87900000000, 0xa7fc02b500000000, 0x44fb8d3b00000000, - 0xdafb27f700000000, 0xc3f2e2fd00000000, 0x5df2483100000000, - 0xbef5c7bf00000000, 0x20f56d7300000000, 0xa7d6f6d600000000, - 0x39d65c1a00000000, 0xdad1d39400000000, 0x44d1795800000000, - 0x5dd8bc5200000000, 0xc3d8169e00000000, 0x20df991000000000, - 0xbedf33dc00000000, 0x12cd130500000000, 0x8ccdb9c900000000, - 0x6fca364700000000, 0xf1ca9c8b00000000, 0xe8c3598100000000, - 0x76c3f34d00000000, 0x95c47cc300000000, 0x0bc4d60f00000000, - 0x3747a67a00000000, 0xa9470cb600000000, 0x4a40833800000000, - 0xd44029f400000000, 0xcd49ecfe00000000, 0x5349463200000000, - 0xb04ec9bc00000000, 0x2e4e637000000000, 0x825c43a900000000, - 0x1c5ce96500000000, 0xff5b66eb00000000, 0x615bcc2700000000, - 0x7852092d00000000, 0xe652a3e100000000, 0x05552c6f00000000, - 0x9b5586a300000000, 0x1c761d0600000000, 0x8276b7ca00000000, - 0x6171384400000000, 0xff71928800000000, 0xe678578200000000, - 0x7878fd4e00000000, 0x9b7f72c000000000, 0x057fd80c00000000, - 0xa96df8d500000000, 0x376d521900000000, 0xd46add9700000000, - 0x4a6a775b00000000, 0x5363b25100000000, 0xcd63189d00000000, - 0x2e64971300000000, 0xb0643ddf00000000, 0x6125d08300000000, - 0xff257a4f00000000, 0x1c22f5c100000000, 0x82225f0d00000000, - 0x9b2b9a0700000000, 0x052b30cb00000000, 0xe62cbf4500000000, - 0x782c158900000000, 0xd43e355000000000, 0x4a3e9f9c00000000, - 0xa939101200000000, 0x3739bade00000000, 0x2e307fd400000000, - 0xb030d51800000000, 0x53375a9600000000, 0xcd37f05a00000000, - 0x4a146bff00000000, 0xd414c13300000000, 0x37134ebd00000000, - 0xa913e47100000000, 0xb01a217b00000000, 0x2e1a8bb700000000, - 0xcd1d043900000000, 0x531daef500000000, 0xff0f8e2c00000000, - 0x610f24e000000000, 0x8208ab6e00000000, 0x1c0801a200000000, - 0x0501c4a800000000, 0x9b016e6400000000, 0x7806e1ea00000000, - 0xe6064b2600000000}}; + {0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000, + 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000, + 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000, + 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000, + 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000, + 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000, + 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000, + 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000, + 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000, + 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000, + 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000, + 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000, + 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000, + 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000, + 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000, + 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000, + 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000, + 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000, + 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000, + 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000, + 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000, + 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000, + 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000, + 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000, + 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000, + 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000, + 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000, + 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000, + 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000, + 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000, + 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000, + 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000, + 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000, + 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000, + 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000, + 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000, + 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000, + 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000, + 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000, + 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000, + 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000, + 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000, + 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000, + 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000, + 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000, + 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000, + 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000, + 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000, + 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000, + 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000, + 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000, + 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000, + 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000, + 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000, + 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000, + 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000, + 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000, + 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000, + 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000, + 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000, + 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000, + 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000, + 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000, + 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000, + 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000, + 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000, + 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000, + 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000, + 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000, + 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000, + 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000, + 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000, + 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000, + 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000, + 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000, + 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000, + 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000, + 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000, + 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000, + 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000, + 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000, + 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000, + 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000, + 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000, + 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000, + 0x8def022d00000000}, + {0x0000000000000000, 0x41311b1900000000, 0x8262363200000000, + 0xc3532d2b00000000, 0x04c56c6400000000, 0x45f4777d00000000, + 0x86a75a5600000000, 0xc796414f00000000, 0x088ad9c800000000, + 0x49bbc2d100000000, 0x8ae8effa00000000, 0xcbd9f4e300000000, + 0x0c4fb5ac00000000, 0x4d7eaeb500000000, 0x8e2d839e00000000, + 0xcf1c988700000000, 0x5112c24a00000000, 0x1023d95300000000, + 0xd370f47800000000, 0x9241ef6100000000, 0x55d7ae2e00000000, + 0x14e6b53700000000, 0xd7b5981c00000000, 0x9684830500000000, + 0x59981b8200000000, 0x18a9009b00000000, 0xdbfa2db000000000, + 0x9acb36a900000000, 0x5d5d77e600000000, 0x1c6c6cff00000000, + 0xdf3f41d400000000, 0x9e0e5acd00000000, 0xa224849500000000, + 0xe3159f8c00000000, 0x2046b2a700000000, 0x6177a9be00000000, + 0xa6e1e8f100000000, 0xe7d0f3e800000000, 0x2483dec300000000, + 0x65b2c5da00000000, 0xaaae5d5d00000000, 0xeb9f464400000000, + 0x28cc6b6f00000000, 0x69fd707600000000, 0xae6b313900000000, + 0xef5a2a2000000000, 0x2c09070b00000000, 0x6d381c1200000000, + 0xf33646df00000000, 0xb2075dc600000000, 0x715470ed00000000, + 0x30656bf400000000, 0xf7f32abb00000000, 0xb6c231a200000000, + 0x75911c8900000000, 0x34a0079000000000, 0xfbbc9f1700000000, + 0xba8d840e00000000, 0x79dea92500000000, 0x38efb23c00000000, + 0xff79f37300000000, 0xbe48e86a00000000, 0x7d1bc54100000000, + 0x3c2ade5800000000, 0x054f79f000000000, 0x447e62e900000000, + 0x872d4fc200000000, 0xc61c54db00000000, 0x018a159400000000, + 0x40bb0e8d00000000, 0x83e823a600000000, 0xc2d938bf00000000, + 0x0dc5a03800000000, 0x4cf4bb2100000000, 0x8fa7960a00000000, + 0xce968d1300000000, 0x0900cc5c00000000, 0x4831d74500000000, + 0x8b62fa6e00000000, 0xca53e17700000000, 0x545dbbba00000000, + 0x156ca0a300000000, 0xd63f8d8800000000, 0x970e969100000000, + 0x5098d7de00000000, 0x11a9ccc700000000, 0xd2fae1ec00000000, + 0x93cbfaf500000000, 0x5cd7627200000000, 0x1de6796b00000000, + 0xdeb5544000000000, 0x9f844f5900000000, 0x58120e1600000000, + 0x1923150f00000000, 0xda70382400000000, 0x9b41233d00000000, + 0xa76bfd6500000000, 0xe65ae67c00000000, 0x2509cb5700000000, + 0x6438d04e00000000, 0xa3ae910100000000, 0xe29f8a1800000000, + 0x21cca73300000000, 0x60fdbc2a00000000, 0xafe124ad00000000, + 0xeed03fb400000000, 0x2d83129f00000000, 0x6cb2098600000000, + 0xab2448c900000000, 0xea1553d000000000, 0x29467efb00000000, + 0x687765e200000000, 0xf6793f2f00000000, 0xb748243600000000, + 0x741b091d00000000, 0x352a120400000000, 0xf2bc534b00000000, + 0xb38d485200000000, 0x70de657900000000, 0x31ef7e6000000000, + 0xfef3e6e700000000, 0xbfc2fdfe00000000, 0x7c91d0d500000000, + 0x3da0cbcc00000000, 0xfa368a8300000000, 0xbb07919a00000000, + 0x7854bcb100000000, 0x3965a7a800000000, 0x4b98833b00000000, + 0x0aa9982200000000, 0xc9fab50900000000, 0x88cbae1000000000, + 0x4f5def5f00000000, 0x0e6cf44600000000, 0xcd3fd96d00000000, + 0x8c0ec27400000000, 0x43125af300000000, 0x022341ea00000000, + 0xc1706cc100000000, 0x804177d800000000, 0x47d7369700000000, + 0x06e62d8e00000000, 0xc5b500a500000000, 0x84841bbc00000000, + 0x1a8a417100000000, 0x5bbb5a6800000000, 0x98e8774300000000, + 0xd9d96c5a00000000, 0x1e4f2d1500000000, 0x5f7e360c00000000, + 0x9c2d1b2700000000, 0xdd1c003e00000000, 0x120098b900000000, + 0x533183a000000000, 0x9062ae8b00000000, 0xd153b59200000000, + 0x16c5f4dd00000000, 0x57f4efc400000000, 0x94a7c2ef00000000, + 0xd596d9f600000000, 0xe9bc07ae00000000, 0xa88d1cb700000000, + 0x6bde319c00000000, 0x2aef2a8500000000, 0xed796bca00000000, + 0xac4870d300000000, 0x6f1b5df800000000, 0x2e2a46e100000000, + 0xe136de6600000000, 0xa007c57f00000000, 0x6354e85400000000, + 0x2265f34d00000000, 0xe5f3b20200000000, 0xa4c2a91b00000000, + 0x6791843000000000, 0x26a09f2900000000, 0xb8aec5e400000000, + 0xf99fdefd00000000, 0x3accf3d600000000, 0x7bfde8cf00000000, + 0xbc6ba98000000000, 0xfd5ab29900000000, 0x3e099fb200000000, + 0x7f3884ab00000000, 0xb0241c2c00000000, 0xf115073500000000, + 0x32462a1e00000000, 0x7377310700000000, 0xb4e1704800000000, + 0xf5d06b5100000000, 0x3683467a00000000, 0x77b25d6300000000, + 0x4ed7facb00000000, 0x0fe6e1d200000000, 0xccb5ccf900000000, + 0x8d84d7e000000000, 0x4a1296af00000000, 0x0b238db600000000, + 0xc870a09d00000000, 0x8941bb8400000000, 0x465d230300000000, + 0x076c381a00000000, 0xc43f153100000000, 0x850e0e2800000000, + 0x42984f6700000000, 0x03a9547e00000000, 0xc0fa795500000000, + 0x81cb624c00000000, 0x1fc5388100000000, 0x5ef4239800000000, + 0x9da70eb300000000, 0xdc9615aa00000000, 0x1b0054e500000000, + 0x5a314ffc00000000, 0x996262d700000000, 0xd85379ce00000000, + 0x174fe14900000000, 0x567efa5000000000, 0x952dd77b00000000, + 0xd41ccc6200000000, 0x138a8d2d00000000, 0x52bb963400000000, + 0x91e8bb1f00000000, 0xd0d9a00600000000, 0xecf37e5e00000000, + 0xadc2654700000000, 0x6e91486c00000000, 0x2fa0537500000000, + 0xe836123a00000000, 0xa907092300000000, 0x6a54240800000000, + 0x2b653f1100000000, 0xe479a79600000000, 0xa548bc8f00000000, + 0x661b91a400000000, 0x272a8abd00000000, 0xe0bccbf200000000, + 0xa18dd0eb00000000, 0x62defdc000000000, 0x23efe6d900000000, + 0xbde1bc1400000000, 0xfcd0a70d00000000, 0x3f838a2600000000, + 0x7eb2913f00000000, 0xb924d07000000000, 0xf815cb6900000000, + 0x3b46e64200000000, 0x7a77fd5b00000000, 0xb56b65dc00000000, + 0xf45a7ec500000000, 0x370953ee00000000, 0x763848f700000000, + 0xb1ae09b800000000, 0xf09f12a100000000, 0x33cc3f8a00000000, + 0x72fd249300000000}, + {0x0000000000000000, 0x376ac20100000000, 0x6ed4840300000000, + 0x59be460200000000, 0xdca8090700000000, 0xebc2cb0600000000, + 0xb27c8d0400000000, 0x85164f0500000000, 0xb851130e00000000, + 0x8f3bd10f00000000, 0xd685970d00000000, 0xe1ef550c00000000, + 0x64f91a0900000000, 0x5393d80800000000, 0x0a2d9e0a00000000, + 0x3d475c0b00000000, 0x70a3261c00000000, 0x47c9e41d00000000, + 0x1e77a21f00000000, 0x291d601e00000000, 0xac0b2f1b00000000, + 0x9b61ed1a00000000, 0xc2dfab1800000000, 0xf5b5691900000000, + 0xc8f2351200000000, 0xff98f71300000000, 0xa626b11100000000, + 0x914c731000000000, 0x145a3c1500000000, 0x2330fe1400000000, + 0x7a8eb81600000000, 0x4de47a1700000000, 0xe0464d3800000000, + 0xd72c8f3900000000, 0x8e92c93b00000000, 0xb9f80b3a00000000, + 0x3cee443f00000000, 0x0b84863e00000000, 0x523ac03c00000000, + 0x6550023d00000000, 0x58175e3600000000, 0x6f7d9c3700000000, + 0x36c3da3500000000, 0x01a9183400000000, 0x84bf573100000000, + 0xb3d5953000000000, 0xea6bd33200000000, 0xdd01113300000000, + 0x90e56b2400000000, 0xa78fa92500000000, 0xfe31ef2700000000, + 0xc95b2d2600000000, 0x4c4d622300000000, 0x7b27a02200000000, + 0x2299e62000000000, 0x15f3242100000000, 0x28b4782a00000000, + 0x1fdeba2b00000000, 0x4660fc2900000000, 0x710a3e2800000000, + 0xf41c712d00000000, 0xc376b32c00000000, 0x9ac8f52e00000000, + 0xada2372f00000000, 0xc08d9a7000000000, 0xf7e7587100000000, + 0xae591e7300000000, 0x9933dc7200000000, 0x1c25937700000000, + 0x2b4f517600000000, 0x72f1177400000000, 0x459bd57500000000, + 0x78dc897e00000000, 0x4fb64b7f00000000, 0x16080d7d00000000, + 0x2162cf7c00000000, 0xa474807900000000, 0x931e427800000000, + 0xcaa0047a00000000, 0xfdcac67b00000000, 0xb02ebc6c00000000, + 0x87447e6d00000000, 0xdefa386f00000000, 0xe990fa6e00000000, + 0x6c86b56b00000000, 0x5bec776a00000000, 0x0252316800000000, + 0x3538f36900000000, 0x087faf6200000000, 0x3f156d6300000000, + 0x66ab2b6100000000, 0x51c1e96000000000, 0xd4d7a66500000000, + 0xe3bd646400000000, 0xba03226600000000, 0x8d69e06700000000, + 0x20cbd74800000000, 0x17a1154900000000, 0x4e1f534b00000000, + 0x7975914a00000000, 0xfc63de4f00000000, 0xcb091c4e00000000, + 0x92b75a4c00000000, 0xa5dd984d00000000, 0x989ac44600000000, + 0xaff0064700000000, 0xf64e404500000000, 0xc124824400000000, + 0x4432cd4100000000, 0x73580f4000000000, 0x2ae6494200000000, + 0x1d8c8b4300000000, 0x5068f15400000000, 0x6702335500000000, + 0x3ebc755700000000, 0x09d6b75600000000, 0x8cc0f85300000000, + 0xbbaa3a5200000000, 0xe2147c5000000000, 0xd57ebe5100000000, + 0xe839e25a00000000, 0xdf53205b00000000, 0x86ed665900000000, + 0xb187a45800000000, 0x3491eb5d00000000, 0x03fb295c00000000, + 0x5a456f5e00000000, 0x6d2fad5f00000000, 0x801b35e100000000, + 0xb771f7e000000000, 0xeecfb1e200000000, 0xd9a573e300000000, + 0x5cb33ce600000000, 0x6bd9fee700000000, 0x3267b8e500000000, + 0x050d7ae400000000, 0x384a26ef00000000, 0x0f20e4ee00000000, + 0x569ea2ec00000000, 0x61f460ed00000000, 0xe4e22fe800000000, + 0xd388ede900000000, 0x8a36abeb00000000, 0xbd5c69ea00000000, + 0xf0b813fd00000000, 0xc7d2d1fc00000000, 0x9e6c97fe00000000, + 0xa90655ff00000000, 0x2c101afa00000000, 0x1b7ad8fb00000000, + 0x42c49ef900000000, 0x75ae5cf800000000, 0x48e900f300000000, + 0x7f83c2f200000000, 0x263d84f000000000, 0x115746f100000000, + 0x944109f400000000, 0xa32bcbf500000000, 0xfa958df700000000, + 0xcdff4ff600000000, 0x605d78d900000000, 0x5737bad800000000, + 0x0e89fcda00000000, 0x39e33edb00000000, 0xbcf571de00000000, + 0x8b9fb3df00000000, 0xd221f5dd00000000, 0xe54b37dc00000000, + 0xd80c6bd700000000, 0xef66a9d600000000, 0xb6d8efd400000000, + 0x81b22dd500000000, 0x04a462d000000000, 0x33cea0d100000000, + 0x6a70e6d300000000, 0x5d1a24d200000000, 0x10fe5ec500000000, + 0x27949cc400000000, 0x7e2adac600000000, 0x494018c700000000, + 0xcc5657c200000000, 0xfb3c95c300000000, 0xa282d3c100000000, + 0x95e811c000000000, 0xa8af4dcb00000000, 0x9fc58fca00000000, + 0xc67bc9c800000000, 0xf1110bc900000000, 0x740744cc00000000, + 0x436d86cd00000000, 0x1ad3c0cf00000000, 0x2db902ce00000000, + 0x4096af9100000000, 0x77fc6d9000000000, 0x2e422b9200000000, + 0x1928e99300000000, 0x9c3ea69600000000, 0xab54649700000000, + 0xf2ea229500000000, 0xc580e09400000000, 0xf8c7bc9f00000000, + 0xcfad7e9e00000000, 0x9613389c00000000, 0xa179fa9d00000000, + 0x246fb59800000000, 0x1305779900000000, 0x4abb319b00000000, + 0x7dd1f39a00000000, 0x3035898d00000000, 0x075f4b8c00000000, + 0x5ee10d8e00000000, 0x698bcf8f00000000, 0xec9d808a00000000, + 0xdbf7428b00000000, 0x8249048900000000, 0xb523c68800000000, + 0x88649a8300000000, 0xbf0e588200000000, 0xe6b01e8000000000, + 0xd1dadc8100000000, 0x54cc938400000000, 0x63a6518500000000, + 0x3a18178700000000, 0x0d72d58600000000, 0xa0d0e2a900000000, + 0x97ba20a800000000, 0xce0466aa00000000, 0xf96ea4ab00000000, + 0x7c78ebae00000000, 0x4b1229af00000000, 0x12ac6fad00000000, + 0x25c6adac00000000, 0x1881f1a700000000, 0x2feb33a600000000, + 0x765575a400000000, 0x413fb7a500000000, 0xc429f8a000000000, + 0xf3433aa100000000, 0xaafd7ca300000000, 0x9d97bea200000000, + 0xd073c4b500000000, 0xe71906b400000000, 0xbea740b600000000, + 0x89cd82b700000000, 0x0cdbcdb200000000, 0x3bb10fb300000000, + 0x620f49b100000000, 0x55658bb000000000, 0x6822d7bb00000000, + 0x5f4815ba00000000, 0x06f653b800000000, 0x319c91b900000000, + 0xb48adebc00000000, 0x83e01cbd00000000, 0xda5e5abf00000000, + 0xed3498be00000000}, + {0x0000000000000000, 0x6567bcb800000000, 0x8bc809aa00000000, + 0xeeafb51200000000, 0x5797628f00000000, 0x32f0de3700000000, + 0xdc5f6b2500000000, 0xb938d79d00000000, 0xef28b4c500000000, + 0x8a4f087d00000000, 0x64e0bd6f00000000, 0x018701d700000000, + 0xb8bfd64a00000000, 0xddd86af200000000, 0x3377dfe000000000, + 0x5610635800000000, 0x9f57195000000000, 0xfa30a5e800000000, + 0x149f10fa00000000, 0x71f8ac4200000000, 0xc8c07bdf00000000, + 0xada7c76700000000, 0x4308727500000000, 0x266fcecd00000000, + 0x707fad9500000000, 0x1518112d00000000, 0xfbb7a43f00000000, + 0x9ed0188700000000, 0x27e8cf1a00000000, 0x428f73a200000000, + 0xac20c6b000000000, 0xc9477a0800000000, 0x3eaf32a000000000, + 0x5bc88e1800000000, 0xb5673b0a00000000, 0xd00087b200000000, + 0x6938502f00000000, 0x0c5fec9700000000, 0xe2f0598500000000, + 0x8797e53d00000000, 0xd187866500000000, 0xb4e03add00000000, + 0x5a4f8fcf00000000, 0x3f28337700000000, 0x8610e4ea00000000, + 0xe377585200000000, 0x0dd8ed4000000000, 0x68bf51f800000000, + 0xa1f82bf000000000, 0xc49f974800000000, 0x2a30225a00000000, + 0x4f579ee200000000, 0xf66f497f00000000, 0x9308f5c700000000, + 0x7da740d500000000, 0x18c0fc6d00000000, 0x4ed09f3500000000, + 0x2bb7238d00000000, 0xc518969f00000000, 0xa07f2a2700000000, + 0x1947fdba00000000, 0x7c20410200000000, 0x928ff41000000000, + 0xf7e848a800000000, 0x3d58149b00000000, 0x583fa82300000000, + 0xb6901d3100000000, 0xd3f7a18900000000, 0x6acf761400000000, + 0x0fa8caac00000000, 0xe1077fbe00000000, 0x8460c30600000000, + 0xd270a05e00000000, 0xb7171ce600000000, 0x59b8a9f400000000, + 0x3cdf154c00000000, 0x85e7c2d100000000, 0xe0807e6900000000, + 0x0e2fcb7b00000000, 0x6b4877c300000000, 0xa20f0dcb00000000, + 0xc768b17300000000, 0x29c7046100000000, 0x4ca0b8d900000000, + 0xf5986f4400000000, 0x90ffd3fc00000000, 0x7e5066ee00000000, + 0x1b37da5600000000, 0x4d27b90e00000000, 0x284005b600000000, + 0xc6efb0a400000000, 0xa3880c1c00000000, 0x1ab0db8100000000, + 0x7fd7673900000000, 0x9178d22b00000000, 0xf41f6e9300000000, + 0x03f7263b00000000, 0x66909a8300000000, 0x883f2f9100000000, + 0xed58932900000000, 0x546044b400000000, 0x3107f80c00000000, + 0xdfa84d1e00000000, 0xbacff1a600000000, 0xecdf92fe00000000, + 0x89b82e4600000000, 0x67179b5400000000, 0x027027ec00000000, + 0xbb48f07100000000, 0xde2f4cc900000000, 0x3080f9db00000000, + 0x55e7456300000000, 0x9ca03f6b00000000, 0xf9c783d300000000, + 0x176836c100000000, 0x720f8a7900000000, 0xcb375de400000000, + 0xae50e15c00000000, 0x40ff544e00000000, 0x2598e8f600000000, + 0x73888bae00000000, 0x16ef371600000000, 0xf840820400000000, + 0x9d273ebc00000000, 0x241fe92100000000, 0x4178559900000000, + 0xafd7e08b00000000, 0xcab05c3300000000, 0x3bb659ed00000000, + 0x5ed1e55500000000, 0xb07e504700000000, 0xd519ecff00000000, + 0x6c213b6200000000, 0x094687da00000000, 0xe7e932c800000000, + 0x828e8e7000000000, 0xd49eed2800000000, 0xb1f9519000000000, + 0x5f56e48200000000, 0x3a31583a00000000, 0x83098fa700000000, + 0xe66e331f00000000, 0x08c1860d00000000, 0x6da63ab500000000, + 0xa4e140bd00000000, 0xc186fc0500000000, 0x2f29491700000000, + 0x4a4ef5af00000000, 0xf376223200000000, 0x96119e8a00000000, + 0x78be2b9800000000, 0x1dd9972000000000, 0x4bc9f47800000000, + 0x2eae48c000000000, 0xc001fdd200000000, 0xa566416a00000000, + 0x1c5e96f700000000, 0x79392a4f00000000, 0x97969f5d00000000, + 0xf2f123e500000000, 0x05196b4d00000000, 0x607ed7f500000000, + 0x8ed162e700000000, 0xebb6de5f00000000, 0x528e09c200000000, + 0x37e9b57a00000000, 0xd946006800000000, 0xbc21bcd000000000, + 0xea31df8800000000, 0x8f56633000000000, 0x61f9d62200000000, + 0x049e6a9a00000000, 0xbda6bd0700000000, 0xd8c101bf00000000, + 0x366eb4ad00000000, 0x5309081500000000, 0x9a4e721d00000000, + 0xff29cea500000000, 0x11867bb700000000, 0x74e1c70f00000000, + 0xcdd9109200000000, 0xa8beac2a00000000, 0x4611193800000000, + 0x2376a58000000000, 0x7566c6d800000000, 0x10017a6000000000, + 0xfeaecf7200000000, 0x9bc973ca00000000, 0x22f1a45700000000, + 0x479618ef00000000, 0xa939adfd00000000, 0xcc5e114500000000, + 0x06ee4d7600000000, 0x6389f1ce00000000, 0x8d2644dc00000000, + 0xe841f86400000000, 0x51792ff900000000, 0x341e934100000000, + 0xdab1265300000000, 0xbfd69aeb00000000, 0xe9c6f9b300000000, + 0x8ca1450b00000000, 0x620ef01900000000, 0x07694ca100000000, + 0xbe519b3c00000000, 0xdb36278400000000, 0x3599929600000000, + 0x50fe2e2e00000000, 0x99b9542600000000, 0xfcdee89e00000000, + 0x12715d8c00000000, 0x7716e13400000000, 0xce2e36a900000000, + 0xab498a1100000000, 0x45e63f0300000000, 0x208183bb00000000, + 0x7691e0e300000000, 0x13f65c5b00000000, 0xfd59e94900000000, + 0x983e55f100000000, 0x2106826c00000000, 0x44613ed400000000, + 0xaace8bc600000000, 0xcfa9377e00000000, 0x38417fd600000000, + 0x5d26c36e00000000, 0xb389767c00000000, 0xd6eecac400000000, + 0x6fd61d5900000000, 0x0ab1a1e100000000, 0xe41e14f300000000, + 0x8179a84b00000000, 0xd769cb1300000000, 0xb20e77ab00000000, + 0x5ca1c2b900000000, 0x39c67e0100000000, 0x80fea99c00000000, + 0xe599152400000000, 0x0b36a03600000000, 0x6e511c8e00000000, + 0xa716668600000000, 0xc271da3e00000000, 0x2cde6f2c00000000, + 0x49b9d39400000000, 0xf081040900000000, 0x95e6b8b100000000, + 0x7b490da300000000, 0x1e2eb11b00000000, 0x483ed24300000000, + 0x2d596efb00000000, 0xc3f6dbe900000000, 0xa691675100000000, + 0x1fa9b0cc00000000, 0x7ace0c7400000000, 0x9461b96600000000, + 0xf10605de00000000}, + {0x0000000000000000, 0xb029603d00000000, 0x6053c07a00000000, + 0xd07aa04700000000, 0xc0a680f500000000, 0x708fe0c800000000, + 0xa0f5408f00000000, 0x10dc20b200000000, 0xc14b703000000000, + 0x7162100d00000000, 0xa118b04a00000000, 0x1131d07700000000, + 0x01edf0c500000000, 0xb1c490f800000000, 0x61be30bf00000000, + 0xd197508200000000, 0x8297e06000000000, 0x32be805d00000000, + 0xe2c4201a00000000, 0x52ed402700000000, 0x4231609500000000, + 0xf21800a800000000, 0x2262a0ef00000000, 0x924bc0d200000000, + 0x43dc905000000000, 0xf3f5f06d00000000, 0x238f502a00000000, + 0x93a6301700000000, 0x837a10a500000000, 0x3353709800000000, + 0xe329d0df00000000, 0x5300b0e200000000, 0x042fc1c100000000, + 0xb406a1fc00000000, 0x647c01bb00000000, 0xd455618600000000, + 0xc489413400000000, 0x74a0210900000000, 0xa4da814e00000000, + 0x14f3e17300000000, 0xc564b1f100000000, 0x754dd1cc00000000, + 0xa537718b00000000, 0x151e11b600000000, 0x05c2310400000000, + 0xb5eb513900000000, 0x6591f17e00000000, 0xd5b8914300000000, + 0x86b821a100000000, 0x3691419c00000000, 0xe6ebe1db00000000, + 0x56c281e600000000, 0x461ea15400000000, 0xf637c16900000000, + 0x264d612e00000000, 0x9664011300000000, 0x47f3519100000000, + 0xf7da31ac00000000, 0x27a091eb00000000, 0x9789f1d600000000, + 0x8755d16400000000, 0x377cb15900000000, 0xe706111e00000000, + 0x572f712300000000, 0x4958f35800000000, 0xf971936500000000, + 0x290b332200000000, 0x9922531f00000000, 0x89fe73ad00000000, + 0x39d7139000000000, 0xe9adb3d700000000, 0x5984d3ea00000000, + 0x8813836800000000, 0x383ae35500000000, 0xe840431200000000, + 0x5869232f00000000, 0x48b5039d00000000, 0xf89c63a000000000, + 0x28e6c3e700000000, 0x98cfa3da00000000, 0xcbcf133800000000, + 0x7be6730500000000, 0xab9cd34200000000, 0x1bb5b37f00000000, + 0x0b6993cd00000000, 0xbb40f3f000000000, 0x6b3a53b700000000, + 0xdb13338a00000000, 0x0a84630800000000, 0xbaad033500000000, + 0x6ad7a37200000000, 0xdafec34f00000000, 0xca22e3fd00000000, + 0x7a0b83c000000000, 0xaa71238700000000, 0x1a5843ba00000000, + 0x4d77329900000000, 0xfd5e52a400000000, 0x2d24f2e300000000, + 0x9d0d92de00000000, 0x8dd1b26c00000000, 0x3df8d25100000000, + 0xed82721600000000, 0x5dab122b00000000, 0x8c3c42a900000000, + 0x3c15229400000000, 0xec6f82d300000000, 0x5c46e2ee00000000, + 0x4c9ac25c00000000, 0xfcb3a26100000000, 0x2cc9022600000000, + 0x9ce0621b00000000, 0xcfe0d2f900000000, 0x7fc9b2c400000000, + 0xafb3128300000000, 0x1f9a72be00000000, 0x0f46520c00000000, + 0xbf6f323100000000, 0x6f15927600000000, 0xdf3cf24b00000000, + 0x0eaba2c900000000, 0xbe82c2f400000000, 0x6ef862b300000000, + 0xded1028e00000000, 0xce0d223c00000000, 0x7e24420100000000, + 0xae5ee24600000000, 0x1e77827b00000000, 0x92b0e6b100000000, + 0x2299868c00000000, 0xf2e326cb00000000, 0x42ca46f600000000, + 0x5216664400000000, 0xe23f067900000000, 0x3245a63e00000000, + 0x826cc60300000000, 0x53fb968100000000, 0xe3d2f6bc00000000, + 0x33a856fb00000000, 0x838136c600000000, 0x935d167400000000, + 0x2374764900000000, 0xf30ed60e00000000, 0x4327b63300000000, + 0x102706d100000000, 0xa00e66ec00000000, 0x7074c6ab00000000, + 0xc05da69600000000, 0xd081862400000000, 0x60a8e61900000000, + 0xb0d2465e00000000, 0x00fb266300000000, 0xd16c76e100000000, + 0x614516dc00000000, 0xb13fb69b00000000, 0x0116d6a600000000, + 0x11caf61400000000, 0xa1e3962900000000, 0x7199366e00000000, + 0xc1b0565300000000, 0x969f277000000000, 0x26b6474d00000000, + 0xf6cce70a00000000, 0x46e5873700000000, 0x5639a78500000000, + 0xe610c7b800000000, 0x366a67ff00000000, 0x864307c200000000, + 0x57d4574000000000, 0xe7fd377d00000000, 0x3787973a00000000, + 0x87aef70700000000, 0x9772d7b500000000, 0x275bb78800000000, + 0xf72117cf00000000, 0x470877f200000000, 0x1408c71000000000, + 0xa421a72d00000000, 0x745b076a00000000, 0xc472675700000000, + 0xd4ae47e500000000, 0x648727d800000000, 0xb4fd879f00000000, + 0x04d4e7a200000000, 0xd543b72000000000, 0x656ad71d00000000, + 0xb510775a00000000, 0x0539176700000000, 0x15e537d500000000, + 0xa5cc57e800000000, 0x75b6f7af00000000, 0xc59f979200000000, + 0xdbe815e900000000, 0x6bc175d400000000, 0xbbbbd59300000000, + 0x0b92b5ae00000000, 0x1b4e951c00000000, 0xab67f52100000000, + 0x7b1d556600000000, 0xcb34355b00000000, 0x1aa365d900000000, + 0xaa8a05e400000000, 0x7af0a5a300000000, 0xcad9c59e00000000, + 0xda05e52c00000000, 0x6a2c851100000000, 0xba56255600000000, + 0x0a7f456b00000000, 0x597ff58900000000, 0xe95695b400000000, + 0x392c35f300000000, 0x890555ce00000000, 0x99d9757c00000000, + 0x29f0154100000000, 0xf98ab50600000000, 0x49a3d53b00000000, + 0x983485b900000000, 0x281de58400000000, 0xf86745c300000000, + 0x484e25fe00000000, 0x5892054c00000000, 0xe8bb657100000000, + 0x38c1c53600000000, 0x88e8a50b00000000, 0xdfc7d42800000000, + 0x6feeb41500000000, 0xbf94145200000000, 0x0fbd746f00000000, + 0x1f6154dd00000000, 0xaf4834e000000000, 0x7f3294a700000000, + 0xcf1bf49a00000000, 0x1e8ca41800000000, 0xaea5c42500000000, + 0x7edf646200000000, 0xcef6045f00000000, 0xde2a24ed00000000, + 0x6e0344d000000000, 0xbe79e49700000000, 0x0e5084aa00000000, + 0x5d50344800000000, 0xed79547500000000, 0x3d03f43200000000, + 0x8d2a940f00000000, 0x9df6b4bd00000000, 0x2ddfd48000000000, + 0xfda574c700000000, 0x4d8c14fa00000000, 0x9c1b447800000000, + 0x2c32244500000000, 0xfc48840200000000, 0x4c61e43f00000000, + 0x5cbdc48d00000000, 0xec94a4b000000000, 0x3cee04f700000000, + 0x8cc764ca00000000}, + {0x0000000000000000, 0xa5d35ccb00000000, 0x0ba1c84d00000000, + 0xae72948600000000, 0x1642919b00000000, 0xb391cd5000000000, + 0x1de359d600000000, 0xb830051d00000000, 0x6d8253ec00000000, + 0xc8510f2700000000, 0x66239ba100000000, 0xc3f0c76a00000000, + 0x7bc0c27700000000, 0xde139ebc00000000, 0x70610a3a00000000, + 0xd5b256f100000000, 0x9b02d60300000000, 0x3ed18ac800000000, + 0x90a31e4e00000000, 0x3570428500000000, 0x8d40479800000000, + 0x28931b5300000000, 0x86e18fd500000000, 0x2332d31e00000000, + 0xf68085ef00000000, 0x5353d92400000000, 0xfd214da200000000, + 0x58f2116900000000, 0xe0c2147400000000, 0x451148bf00000000, + 0xeb63dc3900000000, 0x4eb080f200000000, 0x3605ac0700000000, + 0x93d6f0cc00000000, 0x3da4644a00000000, 0x9877388100000000, + 0x20473d9c00000000, 0x8594615700000000, 0x2be6f5d100000000, + 0x8e35a91a00000000, 0x5b87ffeb00000000, 0xfe54a32000000000, + 0x502637a600000000, 0xf5f56b6d00000000, 0x4dc56e7000000000, + 0xe81632bb00000000, 0x4664a63d00000000, 0xe3b7faf600000000, + 0xad077a0400000000, 0x08d426cf00000000, 0xa6a6b24900000000, + 0x0375ee8200000000, 0xbb45eb9f00000000, 0x1e96b75400000000, + 0xb0e423d200000000, 0x15377f1900000000, 0xc08529e800000000, + 0x6556752300000000, 0xcb24e1a500000000, 0x6ef7bd6e00000000, + 0xd6c7b87300000000, 0x7314e4b800000000, 0xdd66703e00000000, + 0x78b52cf500000000, 0x6c0a580f00000000, 0xc9d904c400000000, + 0x67ab904200000000, 0xc278cc8900000000, 0x7a48c99400000000, + 0xdf9b955f00000000, 0x71e901d900000000, 0xd43a5d1200000000, + 0x01880be300000000, 0xa45b572800000000, 0x0a29c3ae00000000, + 0xaffa9f6500000000, 0x17ca9a7800000000, 0xb219c6b300000000, + 0x1c6b523500000000, 0xb9b80efe00000000, 0xf7088e0c00000000, + 0x52dbd2c700000000, 0xfca9464100000000, 0x597a1a8a00000000, + 0xe14a1f9700000000, 0x4499435c00000000, 0xeaebd7da00000000, + 0x4f388b1100000000, 0x9a8adde000000000, 0x3f59812b00000000, + 0x912b15ad00000000, 0x34f8496600000000, 0x8cc84c7b00000000, + 0x291b10b000000000, 0x8769843600000000, 0x22bad8fd00000000, + 0x5a0ff40800000000, 0xffdca8c300000000, 0x51ae3c4500000000, + 0xf47d608e00000000, 0x4c4d659300000000, 0xe99e395800000000, + 0x47ecadde00000000, 0xe23ff11500000000, 0x378da7e400000000, + 0x925efb2f00000000, 0x3c2c6fa900000000, 0x99ff336200000000, + 0x21cf367f00000000, 0x841c6ab400000000, 0x2a6efe3200000000, + 0x8fbda2f900000000, 0xc10d220b00000000, 0x64de7ec000000000, + 0xcaacea4600000000, 0x6f7fb68d00000000, 0xd74fb39000000000, + 0x729cef5b00000000, 0xdcee7bdd00000000, 0x793d271600000000, + 0xac8f71e700000000, 0x095c2d2c00000000, 0xa72eb9aa00000000, + 0x02fde56100000000, 0xbacde07c00000000, 0x1f1ebcb700000000, + 0xb16c283100000000, 0x14bf74fa00000000, 0xd814b01e00000000, + 0x7dc7ecd500000000, 0xd3b5785300000000, 0x7666249800000000, + 0xce56218500000000, 0x6b857d4e00000000, 0xc5f7e9c800000000, + 0x6024b50300000000, 0xb596e3f200000000, 0x1045bf3900000000, + 0xbe372bbf00000000, 0x1be4777400000000, 0xa3d4726900000000, + 0x06072ea200000000, 0xa875ba2400000000, 0x0da6e6ef00000000, + 0x4316661d00000000, 0xe6c53ad600000000, 0x48b7ae5000000000, + 0xed64f29b00000000, 0x5554f78600000000, 0xf087ab4d00000000, + 0x5ef53fcb00000000, 0xfb26630000000000, 0x2e9435f100000000, + 0x8b47693a00000000, 0x2535fdbc00000000, 0x80e6a17700000000, + 0x38d6a46a00000000, 0x9d05f8a100000000, 0x33776c2700000000, + 0x96a430ec00000000, 0xee111c1900000000, 0x4bc240d200000000, + 0xe5b0d45400000000, 0x4063889f00000000, 0xf8538d8200000000, + 0x5d80d14900000000, 0xf3f245cf00000000, 0x5621190400000000, + 0x83934ff500000000, 0x2640133e00000000, 0x883287b800000000, + 0x2de1db7300000000, 0x95d1de6e00000000, 0x300282a500000000, + 0x9e70162300000000, 0x3ba34ae800000000, 0x7513ca1a00000000, + 0xd0c096d100000000, 0x7eb2025700000000, 0xdb615e9c00000000, + 0x63515b8100000000, 0xc682074a00000000, 0x68f093cc00000000, + 0xcd23cf0700000000, 0x189199f600000000, 0xbd42c53d00000000, + 0x133051bb00000000, 0xb6e30d7000000000, 0x0ed3086d00000000, + 0xab0054a600000000, 0x0572c02000000000, 0xa0a19ceb00000000, + 0xb41ee81100000000, 0x11cdb4da00000000, 0xbfbf205c00000000, + 0x1a6c7c9700000000, 0xa25c798a00000000, 0x078f254100000000, + 0xa9fdb1c700000000, 0x0c2eed0c00000000, 0xd99cbbfd00000000, + 0x7c4fe73600000000, 0xd23d73b000000000, 0x77ee2f7b00000000, + 0xcfde2a6600000000, 0x6a0d76ad00000000, 0xc47fe22b00000000, + 0x61acbee000000000, 0x2f1c3e1200000000, 0x8acf62d900000000, + 0x24bdf65f00000000, 0x816eaa9400000000, 0x395eaf8900000000, + 0x9c8df34200000000, 0x32ff67c400000000, 0x972c3b0f00000000, + 0x429e6dfe00000000, 0xe74d313500000000, 0x493fa5b300000000, + 0xececf97800000000, 0x54dcfc6500000000, 0xf10fa0ae00000000, + 0x5f7d342800000000, 0xfaae68e300000000, 0x821b441600000000, + 0x27c818dd00000000, 0x89ba8c5b00000000, 0x2c69d09000000000, + 0x9459d58d00000000, 0x318a894600000000, 0x9ff81dc000000000, + 0x3a2b410b00000000, 0xef9917fa00000000, 0x4a4a4b3100000000, + 0xe438dfb700000000, 0x41eb837c00000000, 0xf9db866100000000, + 0x5c08daaa00000000, 0xf27a4e2c00000000, 0x57a912e700000000, + 0x1919921500000000, 0xbccacede00000000, 0x12b85a5800000000, + 0xb76b069300000000, 0x0f5b038e00000000, 0xaa885f4500000000, + 0x04facbc300000000, 0xa129970800000000, 0x749bc1f900000000, + 0xd1489d3200000000, 0x7f3a09b400000000, 0xdae9557f00000000, + 0x62d9506200000000, 0xc70a0ca900000000, 0x6978982f00000000, + 0xccabc4e400000000}, + {0x0000000000000000, 0xb40b77a600000000, 0x29119f9700000000, + 0x9d1ae83100000000, 0x13244ff400000000, 0xa72f385200000000, + 0x3a35d06300000000, 0x8e3ea7c500000000, 0x674eef3300000000, + 0xd345989500000000, 0x4e5f70a400000000, 0xfa54070200000000, + 0x746aa0c700000000, 0xc061d76100000000, 0x5d7b3f5000000000, + 0xe97048f600000000, 0xce9cde6700000000, 0x7a97a9c100000000, + 0xe78d41f000000000, 0x5386365600000000, 0xddb8919300000000, + 0x69b3e63500000000, 0xf4a90e0400000000, 0x40a279a200000000, + 0xa9d2315400000000, 0x1dd946f200000000, 0x80c3aec300000000, + 0x34c8d96500000000, 0xbaf67ea000000000, 0x0efd090600000000, + 0x93e7e13700000000, 0x27ec969100000000, 0x9c39bdcf00000000, + 0x2832ca6900000000, 0xb528225800000000, 0x012355fe00000000, + 0x8f1df23b00000000, 0x3b16859d00000000, 0xa60c6dac00000000, + 0x12071a0a00000000, 0xfb7752fc00000000, 0x4f7c255a00000000, + 0xd266cd6b00000000, 0x666dbacd00000000, 0xe8531d0800000000, + 0x5c586aae00000000, 0xc142829f00000000, 0x7549f53900000000, + 0x52a563a800000000, 0xe6ae140e00000000, 0x7bb4fc3f00000000, + 0xcfbf8b9900000000, 0x41812c5c00000000, 0xf58a5bfa00000000, + 0x6890b3cb00000000, 0xdc9bc46d00000000, 0x35eb8c9b00000000, + 0x81e0fb3d00000000, 0x1cfa130c00000000, 0xa8f164aa00000000, + 0x26cfc36f00000000, 0x92c4b4c900000000, 0x0fde5cf800000000, + 0xbbd52b5e00000000, 0x79750b4400000000, 0xcd7e7ce200000000, + 0x506494d300000000, 0xe46fe37500000000, 0x6a5144b000000000, + 0xde5a331600000000, 0x4340db2700000000, 0xf74bac8100000000, + 0x1e3be47700000000, 0xaa3093d100000000, 0x372a7be000000000, + 0x83210c4600000000, 0x0d1fab8300000000, 0xb914dc2500000000, + 0x240e341400000000, 0x900543b200000000, 0xb7e9d52300000000, + 0x03e2a28500000000, 0x9ef84ab400000000, 0x2af33d1200000000, + 0xa4cd9ad700000000, 0x10c6ed7100000000, 0x8ddc054000000000, + 0x39d772e600000000, 0xd0a73a1000000000, 0x64ac4db600000000, + 0xf9b6a58700000000, 0x4dbdd22100000000, 0xc38375e400000000, + 0x7788024200000000, 0xea92ea7300000000, 0x5e999dd500000000, + 0xe54cb68b00000000, 0x5147c12d00000000, 0xcc5d291c00000000, + 0x78565eba00000000, 0xf668f97f00000000, 0x42638ed900000000, + 0xdf7966e800000000, 0x6b72114e00000000, 0x820259b800000000, + 0x36092e1e00000000, 0xab13c62f00000000, 0x1f18b18900000000, + 0x9126164c00000000, 0x252d61ea00000000, 0xb83789db00000000, + 0x0c3cfe7d00000000, 0x2bd068ec00000000, 0x9fdb1f4a00000000, + 0x02c1f77b00000000, 0xb6ca80dd00000000, 0x38f4271800000000, + 0x8cff50be00000000, 0x11e5b88f00000000, 0xa5eecf2900000000, + 0x4c9e87df00000000, 0xf895f07900000000, 0x658f184800000000, + 0xd1846fee00000000, 0x5fbac82b00000000, 0xebb1bf8d00000000, + 0x76ab57bc00000000, 0xc2a0201a00000000, 0xf2ea168800000000, + 0x46e1612e00000000, 0xdbfb891f00000000, 0x6ff0feb900000000, + 0xe1ce597c00000000, 0x55c52eda00000000, 0xc8dfc6eb00000000, + 0x7cd4b14d00000000, 0x95a4f9bb00000000, 0x21af8e1d00000000, + 0xbcb5662c00000000, 0x08be118a00000000, 0x8680b64f00000000, + 0x328bc1e900000000, 0xaf9129d800000000, 0x1b9a5e7e00000000, + 0x3c76c8ef00000000, 0x887dbf4900000000, 0x1567577800000000, + 0xa16c20de00000000, 0x2f52871b00000000, 0x9b59f0bd00000000, + 0x0643188c00000000, 0xb2486f2a00000000, 0x5b3827dc00000000, + 0xef33507a00000000, 0x7229b84b00000000, 0xc622cfed00000000, + 0x481c682800000000, 0xfc171f8e00000000, 0x610df7bf00000000, + 0xd506801900000000, 0x6ed3ab4700000000, 0xdad8dce100000000, + 0x47c234d000000000, 0xf3c9437600000000, 0x7df7e4b300000000, + 0xc9fc931500000000, 0x54e67b2400000000, 0xe0ed0c8200000000, + 0x099d447400000000, 0xbd9633d200000000, 0x208cdbe300000000, + 0x9487ac4500000000, 0x1ab90b8000000000, 0xaeb27c2600000000, + 0x33a8941700000000, 0x87a3e3b100000000, 0xa04f752000000000, + 0x1444028600000000, 0x895eeab700000000, 0x3d559d1100000000, + 0xb36b3ad400000000, 0x07604d7200000000, 0x9a7aa54300000000, + 0x2e71d2e500000000, 0xc7019a1300000000, 0x730aedb500000000, + 0xee10058400000000, 0x5a1b722200000000, 0xd425d5e700000000, + 0x602ea24100000000, 0xfd344a7000000000, 0x493f3dd600000000, + 0x8b9f1dcc00000000, 0x3f946a6a00000000, 0xa28e825b00000000, + 0x1685f5fd00000000, 0x98bb523800000000, 0x2cb0259e00000000, + 0xb1aacdaf00000000, 0x05a1ba0900000000, 0xecd1f2ff00000000, + 0x58da855900000000, 0xc5c06d6800000000, 0x71cb1ace00000000, + 0xfff5bd0b00000000, 0x4bfecaad00000000, 0xd6e4229c00000000, + 0x62ef553a00000000, 0x4503c3ab00000000, 0xf108b40d00000000, + 0x6c125c3c00000000, 0xd8192b9a00000000, 0x56278c5f00000000, + 0xe22cfbf900000000, 0x7f3613c800000000, 0xcb3d646e00000000, + 0x224d2c9800000000, 0x96465b3e00000000, 0x0b5cb30f00000000, + 0xbf57c4a900000000, 0x3169636c00000000, 0x856214ca00000000, + 0x1878fcfb00000000, 0xac738b5d00000000, 0x17a6a00300000000, + 0xa3add7a500000000, 0x3eb73f9400000000, 0x8abc483200000000, + 0x0482eff700000000, 0xb089985100000000, 0x2d93706000000000, + 0x999807c600000000, 0x70e84f3000000000, 0xc4e3389600000000, + 0x59f9d0a700000000, 0xedf2a70100000000, 0x63cc00c400000000, + 0xd7c7776200000000, 0x4add9f5300000000, 0xfed6e8f500000000, + 0xd93a7e6400000000, 0x6d3109c200000000, 0xf02be1f300000000, + 0x4420965500000000, 0xca1e319000000000, 0x7e15463600000000, + 0xe30fae0700000000, 0x5704d9a100000000, 0xbe74915700000000, + 0x0a7fe6f100000000, 0x97650ec000000000, 0x236e796600000000, + 0xad50dea300000000, 0x195ba90500000000, 0x8441413400000000, + 0x304a369200000000}, + {0x0000000000000000, 0x9e00aacc00000000, 0x7d07254200000000, + 0xe3078f8e00000000, 0xfa0e4a8400000000, 0x640ee04800000000, + 0x87096fc600000000, 0x1909c50a00000000, 0xb51be5d300000000, + 0x2b1b4f1f00000000, 0xc81cc09100000000, 0x561c6a5d00000000, + 0x4f15af5700000000, 0xd115059b00000000, 0x32128a1500000000, + 0xac1220d900000000, 0x2b31bb7c00000000, 0xb53111b000000000, + 0x56369e3e00000000, 0xc83634f200000000, 0xd13ff1f800000000, + 0x4f3f5b3400000000, 0xac38d4ba00000000, 0x32387e7600000000, + 0x9e2a5eaf00000000, 0x002af46300000000, 0xe32d7bed00000000, + 0x7d2dd12100000000, 0x6424142b00000000, 0xfa24bee700000000, + 0x1923316900000000, 0x87239ba500000000, 0x566276f900000000, + 0xc862dc3500000000, 0x2b6553bb00000000, 0xb565f97700000000, + 0xac6c3c7d00000000, 0x326c96b100000000, 0xd16b193f00000000, + 0x4f6bb3f300000000, 0xe379932a00000000, 0x7d7939e600000000, + 0x9e7eb66800000000, 0x007e1ca400000000, 0x1977d9ae00000000, + 0x8777736200000000, 0x6470fcec00000000, 0xfa70562000000000, + 0x7d53cd8500000000, 0xe353674900000000, 0x0054e8c700000000, + 0x9e54420b00000000, 0x875d870100000000, 0x195d2dcd00000000, + 0xfa5aa24300000000, 0x645a088f00000000, 0xc848285600000000, + 0x5648829a00000000, 0xb54f0d1400000000, 0x2b4fa7d800000000, + 0x324662d200000000, 0xac46c81e00000000, 0x4f41479000000000, + 0xd141ed5c00000000, 0xedc29d2900000000, 0x73c237e500000000, + 0x90c5b86b00000000, 0x0ec512a700000000, 0x17ccd7ad00000000, + 0x89cc7d6100000000, 0x6acbf2ef00000000, 0xf4cb582300000000, + 0x58d978fa00000000, 0xc6d9d23600000000, 0x25de5db800000000, + 0xbbdef77400000000, 0xa2d7327e00000000, 0x3cd798b200000000, + 0xdfd0173c00000000, 0x41d0bdf000000000, 0xc6f3265500000000, + 0x58f38c9900000000, 0xbbf4031700000000, 0x25f4a9db00000000, + 0x3cfd6cd100000000, 0xa2fdc61d00000000, 0x41fa499300000000, + 0xdffae35f00000000, 0x73e8c38600000000, 0xede8694a00000000, + 0x0eefe6c400000000, 0x90ef4c0800000000, 0x89e6890200000000, + 0x17e623ce00000000, 0xf4e1ac4000000000, 0x6ae1068c00000000, + 0xbba0ebd000000000, 0x25a0411c00000000, 0xc6a7ce9200000000, + 0x58a7645e00000000, 0x41aea15400000000, 0xdfae0b9800000000, + 0x3ca9841600000000, 0xa2a92eda00000000, 0x0ebb0e0300000000, + 0x90bba4cf00000000, 0x73bc2b4100000000, 0xedbc818d00000000, + 0xf4b5448700000000, 0x6ab5ee4b00000000, 0x89b261c500000000, + 0x17b2cb0900000000, 0x909150ac00000000, 0x0e91fa6000000000, + 0xed9675ee00000000, 0x7396df2200000000, 0x6a9f1a2800000000, + 0xf49fb0e400000000, 0x17983f6a00000000, 0x899895a600000000, + 0x258ab57f00000000, 0xbb8a1fb300000000, 0x588d903d00000000, + 0xc68d3af100000000, 0xdf84fffb00000000, 0x4184553700000000, + 0xa283dab900000000, 0x3c83707500000000, 0xda853b5300000000, + 0x4485919f00000000, 0xa7821e1100000000, 0x3982b4dd00000000, + 0x208b71d700000000, 0xbe8bdb1b00000000, 0x5d8c549500000000, + 0xc38cfe5900000000, 0x6f9ede8000000000, 0xf19e744c00000000, + 0x1299fbc200000000, 0x8c99510e00000000, 0x9590940400000000, + 0x0b903ec800000000, 0xe897b14600000000, 0x76971b8a00000000, + 0xf1b4802f00000000, 0x6fb42ae300000000, 0x8cb3a56d00000000, + 0x12b30fa100000000, 0x0bbacaab00000000, 0x95ba606700000000, + 0x76bdefe900000000, 0xe8bd452500000000, 0x44af65fc00000000, + 0xdaafcf3000000000, 0x39a840be00000000, 0xa7a8ea7200000000, + 0xbea12f7800000000, 0x20a185b400000000, 0xc3a60a3a00000000, + 0x5da6a0f600000000, 0x8ce74daa00000000, 0x12e7e76600000000, + 0xf1e068e800000000, 0x6fe0c22400000000, 0x76e9072e00000000, + 0xe8e9ade200000000, 0x0bee226c00000000, 0x95ee88a000000000, + 0x39fca87900000000, 0xa7fc02b500000000, 0x44fb8d3b00000000, + 0xdafb27f700000000, 0xc3f2e2fd00000000, 0x5df2483100000000, + 0xbef5c7bf00000000, 0x20f56d7300000000, 0xa7d6f6d600000000, + 0x39d65c1a00000000, 0xdad1d39400000000, 0x44d1795800000000, + 0x5dd8bc5200000000, 0xc3d8169e00000000, 0x20df991000000000, + 0xbedf33dc00000000, 0x12cd130500000000, 0x8ccdb9c900000000, + 0x6fca364700000000, 0xf1ca9c8b00000000, 0xe8c3598100000000, + 0x76c3f34d00000000, 0x95c47cc300000000, 0x0bc4d60f00000000, + 0x3747a67a00000000, 0xa9470cb600000000, 0x4a40833800000000, + 0xd44029f400000000, 0xcd49ecfe00000000, 0x5349463200000000, + 0xb04ec9bc00000000, 0x2e4e637000000000, 0x825c43a900000000, + 0x1c5ce96500000000, 0xff5b66eb00000000, 0x615bcc2700000000, + 0x7852092d00000000, 0xe652a3e100000000, 0x05552c6f00000000, + 0x9b5586a300000000, 0x1c761d0600000000, 0x8276b7ca00000000, + 0x6171384400000000, 0xff71928800000000, 0xe678578200000000, + 0x7878fd4e00000000, 0x9b7f72c000000000, 0x057fd80c00000000, + 0xa96df8d500000000, 0x376d521900000000, 0xd46add9700000000, + 0x4a6a775b00000000, 0x5363b25100000000, 0xcd63189d00000000, + 0x2e64971300000000, 0xb0643ddf00000000, 0x6125d08300000000, + 0xff257a4f00000000, 0x1c22f5c100000000, 0x82225f0d00000000, + 0x9b2b9a0700000000, 0x052b30cb00000000, 0xe62cbf4500000000, + 0x782c158900000000, 0xd43e355000000000, 0x4a3e9f9c00000000, + 0xa939101200000000, 0x3739bade00000000, 0x2e307fd400000000, + 0xb030d51800000000, 0x53375a9600000000, 0xcd37f05a00000000, + 0x4a146bff00000000, 0xd414c13300000000, 0x37134ebd00000000, + 0xa913e47100000000, 0xb01a217b00000000, 0x2e1a8bb700000000, + 0xcd1d043900000000, 0x531daef500000000, 0xff0f8e2c00000000, + 0x610f24e000000000, 0x8208ab6e00000000, 0x1c0801a200000000, + 0x0501c4a800000000, 0x9b016e6400000000, 0x7806e1ea00000000, + 0xe6064b2600000000}}; #else /* W == 4 */ local const z_crc_t FAR crc_braid_table[][256] = { - {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, - 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, - 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, - 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, - 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, - 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, - 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5, - 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, - 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086, - 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4, - 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, - 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, - 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d, - 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, - 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, - 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b, - 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5, - 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, - 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, - 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, - 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, - 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, - 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817, - 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, - 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, - 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, - 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7, - 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a, - 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4, - 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, - 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, - 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, - 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, - 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f, - 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36, - 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, - 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, - 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, - 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d, - 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, - 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be, - 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc, - 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, - 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, - 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138, - 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, - 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, - 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e, - 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, - 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, - 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194, - 0xde0506f1}, - {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, - 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, - 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a, - 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, - 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, - 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, - 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e, - 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, - 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84, - 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7, - 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, - 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, - 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0, - 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, - 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, - 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd, - 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c, - 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, - 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, - 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, - 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98, - 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, - 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e, - 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, - 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, - 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, - 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732, - 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461, - 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0, - 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, - 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, - 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, - 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, - 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef, - 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a, - 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, - 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, - 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, - 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e, - 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, - 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24, - 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07, - 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, - 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, - 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0, - 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, - 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, - 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d, - 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, - 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, - 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, - 0xbe9834ed}, - {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, - 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, - 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, - 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, - 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, - 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, - 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620, - 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, - 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae, - 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2, - 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, - 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, - 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05, - 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, - 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, - 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca, - 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850, - 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, - 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, - 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, - 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af, - 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, - 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74, - 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, - 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, - 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, - 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, - 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180, - 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a, - 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, - 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, - 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, - 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, - 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0, - 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167, - 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, - 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, - 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, - 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, - 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, - 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842, - 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e, - 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, - 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, - 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec, - 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, - 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, - 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23, - 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, - 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, - 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, - 0x9324fd72}, - {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, - 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, - 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, - 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, - 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, - 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, - 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, - 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, - 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, - 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, - 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, - 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, - 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, - 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, - 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, - 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, - 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, - 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, - 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, - 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, - 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, - 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, - 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, - 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, - 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, - 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, - 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, - 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, - 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, - 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, - 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, - 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, - 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, - 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, - 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, - 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, - 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, - 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, - 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, - 0x2d02ef8d}}; + {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, 0x37def032, + 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, 0x6fbde064, 0xd7018701, + 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, 0x58631056, 0x5019579f, 0xe8a530fa, + 0xfa109f14, 0x42acf871, 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, + 0x95ad7f70, 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, + 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5, 0xb28700d0, + 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, 0x658687d1, 0xdd3ae0b4, + 0xcf8f4f5a, 0x7733283f, 0xeae41086, 0x525877e3, 0x40edd80d, 0xf851bf68, + 0xf02bf8a1, 0x48979fc4, 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, + 0xd540a77d, 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, + 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d, 0x23a83f58, + 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, 0xbe7f07e1, 0x06c36084, + 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, 0x4c15df3c, 0xd1c2e785, 0x697e80e0, + 0x7bcb2f0e, 0xc377486b, 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, + 0x446f98f5, 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, + 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, 0x936e1ff4, + 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, 0xb4446054, 0x0cf80731, + 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, 0x462eb889, 0x549b1767, 0xec277002, + 0x71f048bb, 0xc94c2fde, 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, + 0xc1366817, 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, + 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, 0x99557841, + 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, 0x47507eb0, 0xffec19d5, + 0x623b216c, 0xda874609, 0xc832e9e7, 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, + 0x82e4565f, 0x3a58313a, 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, + 0xbd40e1a4, 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, + 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, 0x6a4166a5, + 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, 0x4d6b1905, 0xf5d77e60, + 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, 0x7ab5e937, 0x680046d9, 0xd0bc21bc, + 0x88df31ea, 0x3063568f, 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, + 0xadb46e36, 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, + 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, 0x607a0110, + 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, 0xfdad39a9, 0x45115ecc, + 0x764dee06, 0xcef18963, 0xdc44268d, 0x64f841e8, 0xf92f7951, 0x41931e34, + 0x5326b1da, 0xeb9ad6bf, 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, + 0x3c9b51be, 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc, + 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, 0xbb838120, + 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, 0x6c820621, 0xd43e6144, + 0xc68bceaa, 0x7e37a9cf, 0xd67f4138, 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, + 0x591dd66f, 0xe1a1b10a, 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, + 0xb9c2a15c, 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e, + 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, 0xb1b8e695, + 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, 0xe9dbf6c3, 0x516791a6, + 0xccb0a91f, 0x740cce7a, 0x66b96194, 0xde0506f1}, + {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, 0x06cbc2eb, + 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, 0x0d9785d6, 0x0c55efe1, + 0x091af964, 0x08d89353, 0x0a9e2d0a, 0x0b5c473d, 0x1c26a370, 0x1de4c947, + 0x1fa2771e, 0x1e601d29, 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, + 0x1235f2c8, 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, + 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e, 0x3a0bf8b9, + 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, 0x365e1758, 0x379c7d6f, + 0x35dac336, 0x3418a901, 0x3157bf84, 0x3095d5b3, 0x32d36bea, 0x331101dd, + 0x246be590, 0x25a98fa7, 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, + 0x20e69922, 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, + 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0, 0x7158e7f7, + 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, 0x7417f172, 0x75d59b45, + 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, 0x7ccf6221, 0x798074a4, 0x78421e93, + 0x7a04a0ca, 0x7bc6cafd, 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, + 0x6bb5866c, 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, + 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, 0x67e0698d, + 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, 0x4fde63fc, 0x4e1c09cb, + 0x4c5ab792, 0x4d98dda5, 0x46c49a98, 0x4706f0af, 0x45404ef6, 0x448224c1, + 0x41cd3244, 0x400f5873, 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, + 0x5775bc3e, 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, + 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, 0x5c29fb03, + 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, 0xe2b1cfee, 0xe373a5d9, + 0xe63cb35c, 0xe7fed96b, 0xe5b86732, 0xe47a0d05, 0xef264a38, 0xeee4200f, + 0xeca29e56, 0xed60f461, 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, + 0xfd13b8f0, 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, + 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, 0xf1465711, + 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, 0xd9785d60, 0xd8ba3757, + 0xdafc890e, 0xdb3ee339, 0xde71f5bc, 0xdfb39f8b, 0xddf521d2, 0xdc374be5, + 0xd76b0cd8, 0xd6a966ef, 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, + 0xd3e6706a, 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, + 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, 0xca8fc59f, + 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, 0xcfc0d31a, 0xce02b92d, + 0x91af9640, 0x906dfc77, 0x922b422e, 0x93e92819, 0x96a63e9c, 0x976454ab, + 0x9522eaf2, 0x94e080c5, 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, + 0x98b56f24, 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07, + 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, 0x88c623b5, + 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, 0x8493cc54, 0x8551a663, + 0x8717183a, 0x86d5720d, 0xa9e2d0a0, 0xa820ba97, 0xaa6604ce, 0xaba46ef9, + 0xaeeb787c, 0xaf29124b, 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, + 0xa4755576, 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d, + 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, 0xb30fb13b, + 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, 0xb853f606, 0xb9919c31, + 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, 0xbe9834ed}, + {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, 0x7d77f445, + 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, 0xfaefe88a, 0xe3f4d9cb, + 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, 0x87981ccf, 0x4ac21251, 0x53d92310, + 0x78f470d3, 0x61ef4192, 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, + 0x821b9859, 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, + 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620, 0xbea97761, + 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, 0x5d5daeaa, 0x44469feb, + 0x6f6bcc28, 0x7670fd69, 0x39316bae, 0x202a5aef, 0x0b07092c, 0x121c386d, + 0xdf4636f3, 0xc65d07b2, 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, + 0x891c9175, 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, + 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05, 0xe9627e44, + 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, 0xa623e883, 0xbf38d9c2, + 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, 0x138d96ce, 0x5ccc0009, 0x45d73148, + 0x6efa628b, 0x77e153ca, 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, + 0xded79850, 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, + 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, 0x3d23419b, + 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, 0x0191aea3, 0x188a9fe2, + 0x33a7cc21, 0x2abcfd60, 0xad24e1af, 0xb43fd0ee, 0x9f12832d, 0x8609b26c, + 0xc94824ab, 0xd05315ea, 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, + 0x1d091b74, 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, + 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, 0x9a9107bb, + 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, 0x09b5fac9, 0x10aecb88, + 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, 0x74c20e8c, 0xf35a1243, 0xea412302, + 0xc16c70c1, 0xd8774180, 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, + 0x71418a1a, 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, + 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, 0x92b553d1, + 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, 0xae07bce9, 0xb71c8da8, + 0x9c31de6b, 0x852aef2a, 0xca6b79ed, 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, + 0x66de36e1, 0x7fc507a0, 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, + 0x30849167, 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, + 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, 0x350715f1, + 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, 0x7a468336, 0x635db277, + 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, 0xe0d7848d, 0xaf96124a, 0xb68d230b, + 0x9da070c8, 0x84bb4189, 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, + 0x674f9842, 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e, + 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, 0xce7953d8, + 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, 0x2d8d8a13, 0x3496bb52, + 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec, 0x4765c2ad, 0x6c48916e, 0x7553a02f, + 0x3a1236e8, 0x230907a9, 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, + 0xa4911b66, 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23, + 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, 0x69cb15f8, + 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, 0xee530937, 0xf7483876, + 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, 0x9324fd72}, + {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, + 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, + 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, + 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, + 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, + 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, + 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, + 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, + 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, + 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, + 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, + 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, + 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, + 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, + 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, + 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, + 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, + 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, + 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, + 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, + 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, + 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, + 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, + 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, + 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, + 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, + 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, + 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, + 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, + 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, + 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, + 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, + 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, + 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, + 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d}}; local const z_word_t FAR crc_braid_big_table[][256] = { - {0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07, - 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79, - 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7, - 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84, - 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13, - 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663, - 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5, - 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5, - 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832, - 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51, - 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf, - 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1, - 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76, - 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606, - 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996, - 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6, - 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c, - 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712, - 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c, - 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4, - 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943, - 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333, - 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe, - 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce, - 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359, - 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a, - 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04, - 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a, - 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0, - 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580, - 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10, - 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060, - 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1, - 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf, - 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31, - 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852, - 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5, - 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5, - 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75, - 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005, - 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292, - 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1, - 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f, - 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111, - 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0, - 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0, - 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40, - 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530, - 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba, - 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4, - 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a, - 0x8def022d}, - {0x00000000, 0x41311b19, 0x82623632, 0xc3532d2b, 0x04c56c64, - 0x45f4777d, 0x86a75a56, 0xc796414f, 0x088ad9c8, 0x49bbc2d1, - 0x8ae8effa, 0xcbd9f4e3, 0x0c4fb5ac, 0x4d7eaeb5, 0x8e2d839e, - 0xcf1c9887, 0x5112c24a, 0x1023d953, 0xd370f478, 0x9241ef61, - 0x55d7ae2e, 0x14e6b537, 0xd7b5981c, 0x96848305, 0x59981b82, - 0x18a9009b, 0xdbfa2db0, 0x9acb36a9, 0x5d5d77e6, 0x1c6c6cff, - 0xdf3f41d4, 0x9e0e5acd, 0xa2248495, 0xe3159f8c, 0x2046b2a7, - 0x6177a9be, 0xa6e1e8f1, 0xe7d0f3e8, 0x2483dec3, 0x65b2c5da, - 0xaaae5d5d, 0xeb9f4644, 0x28cc6b6f, 0x69fd7076, 0xae6b3139, - 0xef5a2a20, 0x2c09070b, 0x6d381c12, 0xf33646df, 0xb2075dc6, - 0x715470ed, 0x30656bf4, 0xf7f32abb, 0xb6c231a2, 0x75911c89, - 0x34a00790, 0xfbbc9f17, 0xba8d840e, 0x79dea925, 0x38efb23c, - 0xff79f373, 0xbe48e86a, 0x7d1bc541, 0x3c2ade58, 0x054f79f0, - 0x447e62e9, 0x872d4fc2, 0xc61c54db, 0x018a1594, 0x40bb0e8d, - 0x83e823a6, 0xc2d938bf, 0x0dc5a038, 0x4cf4bb21, 0x8fa7960a, - 0xce968d13, 0x0900cc5c, 0x4831d745, 0x8b62fa6e, 0xca53e177, - 0x545dbbba, 0x156ca0a3, 0xd63f8d88, 0x970e9691, 0x5098d7de, - 0x11a9ccc7, 0xd2fae1ec, 0x93cbfaf5, 0x5cd76272, 0x1de6796b, - 0xdeb55440, 0x9f844f59, 0x58120e16, 0x1923150f, 0xda703824, - 0x9b41233d, 0xa76bfd65, 0xe65ae67c, 0x2509cb57, 0x6438d04e, - 0xa3ae9101, 0xe29f8a18, 0x21cca733, 0x60fdbc2a, 0xafe124ad, - 0xeed03fb4, 0x2d83129f, 0x6cb20986, 0xab2448c9, 0xea1553d0, - 0x29467efb, 0x687765e2, 0xf6793f2f, 0xb7482436, 0x741b091d, - 0x352a1204, 0xf2bc534b, 0xb38d4852, 0x70de6579, 0x31ef7e60, - 0xfef3e6e7, 0xbfc2fdfe, 0x7c91d0d5, 0x3da0cbcc, 0xfa368a83, - 0xbb07919a, 0x7854bcb1, 0x3965a7a8, 0x4b98833b, 0x0aa99822, - 0xc9fab509, 0x88cbae10, 0x4f5def5f, 0x0e6cf446, 0xcd3fd96d, - 0x8c0ec274, 0x43125af3, 0x022341ea, 0xc1706cc1, 0x804177d8, - 0x47d73697, 0x06e62d8e, 0xc5b500a5, 0x84841bbc, 0x1a8a4171, - 0x5bbb5a68, 0x98e87743, 0xd9d96c5a, 0x1e4f2d15, 0x5f7e360c, - 0x9c2d1b27, 0xdd1c003e, 0x120098b9, 0x533183a0, 0x9062ae8b, - 0xd153b592, 0x16c5f4dd, 0x57f4efc4, 0x94a7c2ef, 0xd596d9f6, - 0xe9bc07ae, 0xa88d1cb7, 0x6bde319c, 0x2aef2a85, 0xed796bca, - 0xac4870d3, 0x6f1b5df8, 0x2e2a46e1, 0xe136de66, 0xa007c57f, - 0x6354e854, 0x2265f34d, 0xe5f3b202, 0xa4c2a91b, 0x67918430, - 0x26a09f29, 0xb8aec5e4, 0xf99fdefd, 0x3accf3d6, 0x7bfde8cf, - 0xbc6ba980, 0xfd5ab299, 0x3e099fb2, 0x7f3884ab, 0xb0241c2c, - 0xf1150735, 0x32462a1e, 0x73773107, 0xb4e17048, 0xf5d06b51, - 0x3683467a, 0x77b25d63, 0x4ed7facb, 0x0fe6e1d2, 0xccb5ccf9, - 0x8d84d7e0, 0x4a1296af, 0x0b238db6, 0xc870a09d, 0x8941bb84, - 0x465d2303, 0x076c381a, 0xc43f1531, 0x850e0e28, 0x42984f67, - 0x03a9547e, 0xc0fa7955, 0x81cb624c, 0x1fc53881, 0x5ef42398, - 0x9da70eb3, 0xdc9615aa, 0x1b0054e5, 0x5a314ffc, 0x996262d7, - 0xd85379ce, 0x174fe149, 0x567efa50, 0x952dd77b, 0xd41ccc62, - 0x138a8d2d, 0x52bb9634, 0x91e8bb1f, 0xd0d9a006, 0xecf37e5e, - 0xadc26547, 0x6e91486c, 0x2fa05375, 0xe836123a, 0xa9070923, - 0x6a542408, 0x2b653f11, 0xe479a796, 0xa548bc8f, 0x661b91a4, - 0x272a8abd, 0xe0bccbf2, 0xa18dd0eb, 0x62defdc0, 0x23efe6d9, - 0xbde1bc14, 0xfcd0a70d, 0x3f838a26, 0x7eb2913f, 0xb924d070, - 0xf815cb69, 0x3b46e642, 0x7a77fd5b, 0xb56b65dc, 0xf45a7ec5, - 0x370953ee, 0x763848f7, 0xb1ae09b8, 0xf09f12a1, 0x33cc3f8a, - 0x72fd2493}, - {0x00000000, 0x376ac201, 0x6ed48403, 0x59be4602, 0xdca80907, - 0xebc2cb06, 0xb27c8d04, 0x85164f05, 0xb851130e, 0x8f3bd10f, - 0xd685970d, 0xe1ef550c, 0x64f91a09, 0x5393d808, 0x0a2d9e0a, - 0x3d475c0b, 0x70a3261c, 0x47c9e41d, 0x1e77a21f, 0x291d601e, - 0xac0b2f1b, 0x9b61ed1a, 0xc2dfab18, 0xf5b56919, 0xc8f23512, - 0xff98f713, 0xa626b111, 0x914c7310, 0x145a3c15, 0x2330fe14, - 0x7a8eb816, 0x4de47a17, 0xe0464d38, 0xd72c8f39, 0x8e92c93b, - 0xb9f80b3a, 0x3cee443f, 0x0b84863e, 0x523ac03c, 0x6550023d, - 0x58175e36, 0x6f7d9c37, 0x36c3da35, 0x01a91834, 0x84bf5731, - 0xb3d59530, 0xea6bd332, 0xdd011133, 0x90e56b24, 0xa78fa925, - 0xfe31ef27, 0xc95b2d26, 0x4c4d6223, 0x7b27a022, 0x2299e620, - 0x15f32421, 0x28b4782a, 0x1fdeba2b, 0x4660fc29, 0x710a3e28, - 0xf41c712d, 0xc376b32c, 0x9ac8f52e, 0xada2372f, 0xc08d9a70, - 0xf7e75871, 0xae591e73, 0x9933dc72, 0x1c259377, 0x2b4f5176, - 0x72f11774, 0x459bd575, 0x78dc897e, 0x4fb64b7f, 0x16080d7d, - 0x2162cf7c, 0xa4748079, 0x931e4278, 0xcaa0047a, 0xfdcac67b, - 0xb02ebc6c, 0x87447e6d, 0xdefa386f, 0xe990fa6e, 0x6c86b56b, - 0x5bec776a, 0x02523168, 0x3538f369, 0x087faf62, 0x3f156d63, - 0x66ab2b61, 0x51c1e960, 0xd4d7a665, 0xe3bd6464, 0xba032266, - 0x8d69e067, 0x20cbd748, 0x17a11549, 0x4e1f534b, 0x7975914a, - 0xfc63de4f, 0xcb091c4e, 0x92b75a4c, 0xa5dd984d, 0x989ac446, - 0xaff00647, 0xf64e4045, 0xc1248244, 0x4432cd41, 0x73580f40, - 0x2ae64942, 0x1d8c8b43, 0x5068f154, 0x67023355, 0x3ebc7557, - 0x09d6b756, 0x8cc0f853, 0xbbaa3a52, 0xe2147c50, 0xd57ebe51, - 0xe839e25a, 0xdf53205b, 0x86ed6659, 0xb187a458, 0x3491eb5d, - 0x03fb295c, 0x5a456f5e, 0x6d2fad5f, 0x801b35e1, 0xb771f7e0, - 0xeecfb1e2, 0xd9a573e3, 0x5cb33ce6, 0x6bd9fee7, 0x3267b8e5, - 0x050d7ae4, 0x384a26ef, 0x0f20e4ee, 0x569ea2ec, 0x61f460ed, - 0xe4e22fe8, 0xd388ede9, 0x8a36abeb, 0xbd5c69ea, 0xf0b813fd, - 0xc7d2d1fc, 0x9e6c97fe, 0xa90655ff, 0x2c101afa, 0x1b7ad8fb, - 0x42c49ef9, 0x75ae5cf8, 0x48e900f3, 0x7f83c2f2, 0x263d84f0, - 0x115746f1, 0x944109f4, 0xa32bcbf5, 0xfa958df7, 0xcdff4ff6, - 0x605d78d9, 0x5737bad8, 0x0e89fcda, 0x39e33edb, 0xbcf571de, - 0x8b9fb3df, 0xd221f5dd, 0xe54b37dc, 0xd80c6bd7, 0xef66a9d6, - 0xb6d8efd4, 0x81b22dd5, 0x04a462d0, 0x33cea0d1, 0x6a70e6d3, - 0x5d1a24d2, 0x10fe5ec5, 0x27949cc4, 0x7e2adac6, 0x494018c7, - 0xcc5657c2, 0xfb3c95c3, 0xa282d3c1, 0x95e811c0, 0xa8af4dcb, - 0x9fc58fca, 0xc67bc9c8, 0xf1110bc9, 0x740744cc, 0x436d86cd, - 0x1ad3c0cf, 0x2db902ce, 0x4096af91, 0x77fc6d90, 0x2e422b92, - 0x1928e993, 0x9c3ea696, 0xab546497, 0xf2ea2295, 0xc580e094, - 0xf8c7bc9f, 0xcfad7e9e, 0x9613389c, 0xa179fa9d, 0x246fb598, - 0x13057799, 0x4abb319b, 0x7dd1f39a, 0x3035898d, 0x075f4b8c, - 0x5ee10d8e, 0x698bcf8f, 0xec9d808a, 0xdbf7428b, 0x82490489, - 0xb523c688, 0x88649a83, 0xbf0e5882, 0xe6b01e80, 0xd1dadc81, - 0x54cc9384, 0x63a65185, 0x3a181787, 0x0d72d586, 0xa0d0e2a9, - 0x97ba20a8, 0xce0466aa, 0xf96ea4ab, 0x7c78ebae, 0x4b1229af, - 0x12ac6fad, 0x25c6adac, 0x1881f1a7, 0x2feb33a6, 0x765575a4, - 0x413fb7a5, 0xc429f8a0, 0xf3433aa1, 0xaafd7ca3, 0x9d97bea2, - 0xd073c4b5, 0xe71906b4, 0xbea740b6, 0x89cd82b7, 0x0cdbcdb2, - 0x3bb10fb3, 0x620f49b1, 0x55658bb0, 0x6822d7bb, 0x5f4815ba, - 0x06f653b8, 0x319c91b9, 0xb48adebc, 0x83e01cbd, 0xda5e5abf, - 0xed3498be}, - {0x00000000, 0x6567bcb8, 0x8bc809aa, 0xeeafb512, 0x5797628f, - 0x32f0de37, 0xdc5f6b25, 0xb938d79d, 0xef28b4c5, 0x8a4f087d, - 0x64e0bd6f, 0x018701d7, 0xb8bfd64a, 0xddd86af2, 0x3377dfe0, - 0x56106358, 0x9f571950, 0xfa30a5e8, 0x149f10fa, 0x71f8ac42, - 0xc8c07bdf, 0xada7c767, 0x43087275, 0x266fcecd, 0x707fad95, - 0x1518112d, 0xfbb7a43f, 0x9ed01887, 0x27e8cf1a, 0x428f73a2, - 0xac20c6b0, 0xc9477a08, 0x3eaf32a0, 0x5bc88e18, 0xb5673b0a, - 0xd00087b2, 0x6938502f, 0x0c5fec97, 0xe2f05985, 0x8797e53d, - 0xd1878665, 0xb4e03add, 0x5a4f8fcf, 0x3f283377, 0x8610e4ea, - 0xe3775852, 0x0dd8ed40, 0x68bf51f8, 0xa1f82bf0, 0xc49f9748, - 0x2a30225a, 0x4f579ee2, 0xf66f497f, 0x9308f5c7, 0x7da740d5, - 0x18c0fc6d, 0x4ed09f35, 0x2bb7238d, 0xc518969f, 0xa07f2a27, - 0x1947fdba, 0x7c204102, 0x928ff410, 0xf7e848a8, 0x3d58149b, - 0x583fa823, 0xb6901d31, 0xd3f7a189, 0x6acf7614, 0x0fa8caac, - 0xe1077fbe, 0x8460c306, 0xd270a05e, 0xb7171ce6, 0x59b8a9f4, - 0x3cdf154c, 0x85e7c2d1, 0xe0807e69, 0x0e2fcb7b, 0x6b4877c3, - 0xa20f0dcb, 0xc768b173, 0x29c70461, 0x4ca0b8d9, 0xf5986f44, - 0x90ffd3fc, 0x7e5066ee, 0x1b37da56, 0x4d27b90e, 0x284005b6, - 0xc6efb0a4, 0xa3880c1c, 0x1ab0db81, 0x7fd76739, 0x9178d22b, - 0xf41f6e93, 0x03f7263b, 0x66909a83, 0x883f2f91, 0xed589329, - 0x546044b4, 0x3107f80c, 0xdfa84d1e, 0xbacff1a6, 0xecdf92fe, - 0x89b82e46, 0x67179b54, 0x027027ec, 0xbb48f071, 0xde2f4cc9, - 0x3080f9db, 0x55e74563, 0x9ca03f6b, 0xf9c783d3, 0x176836c1, - 0x720f8a79, 0xcb375de4, 0xae50e15c, 0x40ff544e, 0x2598e8f6, - 0x73888bae, 0x16ef3716, 0xf8408204, 0x9d273ebc, 0x241fe921, - 0x41785599, 0xafd7e08b, 0xcab05c33, 0x3bb659ed, 0x5ed1e555, - 0xb07e5047, 0xd519ecff, 0x6c213b62, 0x094687da, 0xe7e932c8, - 0x828e8e70, 0xd49eed28, 0xb1f95190, 0x5f56e482, 0x3a31583a, - 0x83098fa7, 0xe66e331f, 0x08c1860d, 0x6da63ab5, 0xa4e140bd, - 0xc186fc05, 0x2f294917, 0x4a4ef5af, 0xf3762232, 0x96119e8a, - 0x78be2b98, 0x1dd99720, 0x4bc9f478, 0x2eae48c0, 0xc001fdd2, - 0xa566416a, 0x1c5e96f7, 0x79392a4f, 0x97969f5d, 0xf2f123e5, - 0x05196b4d, 0x607ed7f5, 0x8ed162e7, 0xebb6de5f, 0x528e09c2, - 0x37e9b57a, 0xd9460068, 0xbc21bcd0, 0xea31df88, 0x8f566330, - 0x61f9d622, 0x049e6a9a, 0xbda6bd07, 0xd8c101bf, 0x366eb4ad, - 0x53090815, 0x9a4e721d, 0xff29cea5, 0x11867bb7, 0x74e1c70f, - 0xcdd91092, 0xa8beac2a, 0x46111938, 0x2376a580, 0x7566c6d8, - 0x10017a60, 0xfeaecf72, 0x9bc973ca, 0x22f1a457, 0x479618ef, - 0xa939adfd, 0xcc5e1145, 0x06ee4d76, 0x6389f1ce, 0x8d2644dc, - 0xe841f864, 0x51792ff9, 0x341e9341, 0xdab12653, 0xbfd69aeb, - 0xe9c6f9b3, 0x8ca1450b, 0x620ef019, 0x07694ca1, 0xbe519b3c, - 0xdb362784, 0x35999296, 0x50fe2e2e, 0x99b95426, 0xfcdee89e, - 0x12715d8c, 0x7716e134, 0xce2e36a9, 0xab498a11, 0x45e63f03, - 0x208183bb, 0x7691e0e3, 0x13f65c5b, 0xfd59e949, 0x983e55f1, - 0x2106826c, 0x44613ed4, 0xaace8bc6, 0xcfa9377e, 0x38417fd6, - 0x5d26c36e, 0xb389767c, 0xd6eecac4, 0x6fd61d59, 0x0ab1a1e1, - 0xe41e14f3, 0x8179a84b, 0xd769cb13, 0xb20e77ab, 0x5ca1c2b9, - 0x39c67e01, 0x80fea99c, 0xe5991524, 0x0b36a036, 0x6e511c8e, - 0xa7166686, 0xc271da3e, 0x2cde6f2c, 0x49b9d394, 0xf0810409, - 0x95e6b8b1, 0x7b490da3, 0x1e2eb11b, 0x483ed243, 0x2d596efb, - 0xc3f6dbe9, 0xa6916751, 0x1fa9b0cc, 0x7ace0c74, 0x9461b966, - 0xf10605de}}; + {0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07, 0x8ff46a70, + 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79, 0x1ee9d5e0, 0x88d9d297, + 0x2b4cb609, 0xbd7cb17e, 0x072db8e7, 0x911dbf90, 0x6410b71d, 0xf220b06a, + 0x4871b9f3, 0xde41be84, 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, + 0x56986c13, 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663, + 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5, 0x727167a2, + 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5, 0xfaa8b535, 0x6c98b242, + 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832, 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, + 0xac30d926, 0x3a00de51, 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, + 0x9995bacf, 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1, + 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76, 0x0671db01, + 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606, 0xa5e4bf9f, 0x33d4b8e8, + 0xa2c90778, 0x34f9000f, 0x8ea80996, 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, + 0x976c6491, 0x015c63e6, 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, + 0xed95066c, 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712, + 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c, 0x654cd4fb, + 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4, 0x41a5df4a, 0xd795d83d, + 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943, 0xfcd96e34, 0x468867ad, 0xd0b860da, + 0x732d0444, 0xe51d0333, 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, + 0x10100bbe, 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce, + 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359, 0x810db42e, + 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a, 0x0ce2b603, 0x9ad2b174, + 0x3947d5ea, 0xaf77d29d, 0x1526db04, 0x8316dc73, 0x120b63e3, 0x843b6494, + 0x3e6a6d0d, 0xa85a6a7a, 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, + 0x44930ff0, 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580, + 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10, 0xcc4add67, + 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060, 0xe8a3d6d6, 0x7e93d1a1, + 0xc4c2d838, 0x52f2df4f, 0xf167bbd1, 0x6757bca6, 0xdd06b53f, 0x4b36b248, + 0xda2b0dd8, 0x4c1b0aaf, 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, + 0xef8e6e31, 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852, + 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5, 0x280bbdb2, + 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5, 0x8b9ed92c, 0x1daede5b, + 0xb0c2649b, 0x26f263ec, 0x9ca36a75, 0x0a936d02, 0xa906099c, 0x3f360eeb, + 0x85670772, 0x13570005, 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, + 0x9b8ed292, 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1, + 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f, 0x7747b718, + 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111, 0xff9e658f, 0x69ae62f8, + 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0, 0xeed20dd7, 0x5483044e, 0xc2b30339, + 0x612667a7, 0xf71660d0, 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, + 0x660bdf40, 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530, + 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba, 0x9306d7cd, + 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4, 0x021b685d, 0x942b6f2a, + 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a, 0x8def022d}, + {0x00000000, 0x41311b19, 0x82623632, 0xc3532d2b, 0x04c56c64, 0x45f4777d, + 0x86a75a56, 0xc796414f, 0x088ad9c8, 0x49bbc2d1, 0x8ae8effa, 0xcbd9f4e3, + 0x0c4fb5ac, 0x4d7eaeb5, 0x8e2d839e, 0xcf1c9887, 0x5112c24a, 0x1023d953, + 0xd370f478, 0x9241ef61, 0x55d7ae2e, 0x14e6b537, 0xd7b5981c, 0x96848305, + 0x59981b82, 0x18a9009b, 0xdbfa2db0, 0x9acb36a9, 0x5d5d77e6, 0x1c6c6cff, + 0xdf3f41d4, 0x9e0e5acd, 0xa2248495, 0xe3159f8c, 0x2046b2a7, 0x6177a9be, + 0xa6e1e8f1, 0xe7d0f3e8, 0x2483dec3, 0x65b2c5da, 0xaaae5d5d, 0xeb9f4644, + 0x28cc6b6f, 0x69fd7076, 0xae6b3139, 0xef5a2a20, 0x2c09070b, 0x6d381c12, + 0xf33646df, 0xb2075dc6, 0x715470ed, 0x30656bf4, 0xf7f32abb, 0xb6c231a2, + 0x75911c89, 0x34a00790, 0xfbbc9f17, 0xba8d840e, 0x79dea925, 0x38efb23c, + 0xff79f373, 0xbe48e86a, 0x7d1bc541, 0x3c2ade58, 0x054f79f0, 0x447e62e9, + 0x872d4fc2, 0xc61c54db, 0x018a1594, 0x40bb0e8d, 0x83e823a6, 0xc2d938bf, + 0x0dc5a038, 0x4cf4bb21, 0x8fa7960a, 0xce968d13, 0x0900cc5c, 0x4831d745, + 0x8b62fa6e, 0xca53e177, 0x545dbbba, 0x156ca0a3, 0xd63f8d88, 0x970e9691, + 0x5098d7de, 0x11a9ccc7, 0xd2fae1ec, 0x93cbfaf5, 0x5cd76272, 0x1de6796b, + 0xdeb55440, 0x9f844f59, 0x58120e16, 0x1923150f, 0xda703824, 0x9b41233d, + 0xa76bfd65, 0xe65ae67c, 0x2509cb57, 0x6438d04e, 0xa3ae9101, 0xe29f8a18, + 0x21cca733, 0x60fdbc2a, 0xafe124ad, 0xeed03fb4, 0x2d83129f, 0x6cb20986, + 0xab2448c9, 0xea1553d0, 0x29467efb, 0x687765e2, 0xf6793f2f, 0xb7482436, + 0x741b091d, 0x352a1204, 0xf2bc534b, 0xb38d4852, 0x70de6579, 0x31ef7e60, + 0xfef3e6e7, 0xbfc2fdfe, 0x7c91d0d5, 0x3da0cbcc, 0xfa368a83, 0xbb07919a, + 0x7854bcb1, 0x3965a7a8, 0x4b98833b, 0x0aa99822, 0xc9fab509, 0x88cbae10, + 0x4f5def5f, 0x0e6cf446, 0xcd3fd96d, 0x8c0ec274, 0x43125af3, 0x022341ea, + 0xc1706cc1, 0x804177d8, 0x47d73697, 0x06e62d8e, 0xc5b500a5, 0x84841bbc, + 0x1a8a4171, 0x5bbb5a68, 0x98e87743, 0xd9d96c5a, 0x1e4f2d15, 0x5f7e360c, + 0x9c2d1b27, 0xdd1c003e, 0x120098b9, 0x533183a0, 0x9062ae8b, 0xd153b592, + 0x16c5f4dd, 0x57f4efc4, 0x94a7c2ef, 0xd596d9f6, 0xe9bc07ae, 0xa88d1cb7, + 0x6bde319c, 0x2aef2a85, 0xed796bca, 0xac4870d3, 0x6f1b5df8, 0x2e2a46e1, + 0xe136de66, 0xa007c57f, 0x6354e854, 0x2265f34d, 0xe5f3b202, 0xa4c2a91b, + 0x67918430, 0x26a09f29, 0xb8aec5e4, 0xf99fdefd, 0x3accf3d6, 0x7bfde8cf, + 0xbc6ba980, 0xfd5ab299, 0x3e099fb2, 0x7f3884ab, 0xb0241c2c, 0xf1150735, + 0x32462a1e, 0x73773107, 0xb4e17048, 0xf5d06b51, 0x3683467a, 0x77b25d63, + 0x4ed7facb, 0x0fe6e1d2, 0xccb5ccf9, 0x8d84d7e0, 0x4a1296af, 0x0b238db6, + 0xc870a09d, 0x8941bb84, 0x465d2303, 0x076c381a, 0xc43f1531, 0x850e0e28, + 0x42984f67, 0x03a9547e, 0xc0fa7955, 0x81cb624c, 0x1fc53881, 0x5ef42398, + 0x9da70eb3, 0xdc9615aa, 0x1b0054e5, 0x5a314ffc, 0x996262d7, 0xd85379ce, + 0x174fe149, 0x567efa50, 0x952dd77b, 0xd41ccc62, 0x138a8d2d, 0x52bb9634, + 0x91e8bb1f, 0xd0d9a006, 0xecf37e5e, 0xadc26547, 0x6e91486c, 0x2fa05375, + 0xe836123a, 0xa9070923, 0x6a542408, 0x2b653f11, 0xe479a796, 0xa548bc8f, + 0x661b91a4, 0x272a8abd, 0xe0bccbf2, 0xa18dd0eb, 0x62defdc0, 0x23efe6d9, + 0xbde1bc14, 0xfcd0a70d, 0x3f838a26, 0x7eb2913f, 0xb924d070, 0xf815cb69, + 0x3b46e642, 0x7a77fd5b, 0xb56b65dc, 0xf45a7ec5, 0x370953ee, 0x763848f7, + 0xb1ae09b8, 0xf09f12a1, 0x33cc3f8a, 0x72fd2493}, + {0x00000000, 0x376ac201, 0x6ed48403, 0x59be4602, 0xdca80907, 0xebc2cb06, + 0xb27c8d04, 0x85164f05, 0xb851130e, 0x8f3bd10f, 0xd685970d, 0xe1ef550c, + 0x64f91a09, 0x5393d808, 0x0a2d9e0a, 0x3d475c0b, 0x70a3261c, 0x47c9e41d, + 0x1e77a21f, 0x291d601e, 0xac0b2f1b, 0x9b61ed1a, 0xc2dfab18, 0xf5b56919, + 0xc8f23512, 0xff98f713, 0xa626b111, 0x914c7310, 0x145a3c15, 0x2330fe14, + 0x7a8eb816, 0x4de47a17, 0xe0464d38, 0xd72c8f39, 0x8e92c93b, 0xb9f80b3a, + 0x3cee443f, 0x0b84863e, 0x523ac03c, 0x6550023d, 0x58175e36, 0x6f7d9c37, + 0x36c3da35, 0x01a91834, 0x84bf5731, 0xb3d59530, 0xea6bd332, 0xdd011133, + 0x90e56b24, 0xa78fa925, 0xfe31ef27, 0xc95b2d26, 0x4c4d6223, 0x7b27a022, + 0x2299e620, 0x15f32421, 0x28b4782a, 0x1fdeba2b, 0x4660fc29, 0x710a3e28, + 0xf41c712d, 0xc376b32c, 0x9ac8f52e, 0xada2372f, 0xc08d9a70, 0xf7e75871, + 0xae591e73, 0x9933dc72, 0x1c259377, 0x2b4f5176, 0x72f11774, 0x459bd575, + 0x78dc897e, 0x4fb64b7f, 0x16080d7d, 0x2162cf7c, 0xa4748079, 0x931e4278, + 0xcaa0047a, 0xfdcac67b, 0xb02ebc6c, 0x87447e6d, 0xdefa386f, 0xe990fa6e, + 0x6c86b56b, 0x5bec776a, 0x02523168, 0x3538f369, 0x087faf62, 0x3f156d63, + 0x66ab2b61, 0x51c1e960, 0xd4d7a665, 0xe3bd6464, 0xba032266, 0x8d69e067, + 0x20cbd748, 0x17a11549, 0x4e1f534b, 0x7975914a, 0xfc63de4f, 0xcb091c4e, + 0x92b75a4c, 0xa5dd984d, 0x989ac446, 0xaff00647, 0xf64e4045, 0xc1248244, + 0x4432cd41, 0x73580f40, 0x2ae64942, 0x1d8c8b43, 0x5068f154, 0x67023355, + 0x3ebc7557, 0x09d6b756, 0x8cc0f853, 0xbbaa3a52, 0xe2147c50, 0xd57ebe51, + 0xe839e25a, 0xdf53205b, 0x86ed6659, 0xb187a458, 0x3491eb5d, 0x03fb295c, + 0x5a456f5e, 0x6d2fad5f, 0x801b35e1, 0xb771f7e0, 0xeecfb1e2, 0xd9a573e3, + 0x5cb33ce6, 0x6bd9fee7, 0x3267b8e5, 0x050d7ae4, 0x384a26ef, 0x0f20e4ee, + 0x569ea2ec, 0x61f460ed, 0xe4e22fe8, 0xd388ede9, 0x8a36abeb, 0xbd5c69ea, + 0xf0b813fd, 0xc7d2d1fc, 0x9e6c97fe, 0xa90655ff, 0x2c101afa, 0x1b7ad8fb, + 0x42c49ef9, 0x75ae5cf8, 0x48e900f3, 0x7f83c2f2, 0x263d84f0, 0x115746f1, + 0x944109f4, 0xa32bcbf5, 0xfa958df7, 0xcdff4ff6, 0x605d78d9, 0x5737bad8, + 0x0e89fcda, 0x39e33edb, 0xbcf571de, 0x8b9fb3df, 0xd221f5dd, 0xe54b37dc, + 0xd80c6bd7, 0xef66a9d6, 0xb6d8efd4, 0x81b22dd5, 0x04a462d0, 0x33cea0d1, + 0x6a70e6d3, 0x5d1a24d2, 0x10fe5ec5, 0x27949cc4, 0x7e2adac6, 0x494018c7, + 0xcc5657c2, 0xfb3c95c3, 0xa282d3c1, 0x95e811c0, 0xa8af4dcb, 0x9fc58fca, + 0xc67bc9c8, 0xf1110bc9, 0x740744cc, 0x436d86cd, 0x1ad3c0cf, 0x2db902ce, + 0x4096af91, 0x77fc6d90, 0x2e422b92, 0x1928e993, 0x9c3ea696, 0xab546497, + 0xf2ea2295, 0xc580e094, 0xf8c7bc9f, 0xcfad7e9e, 0x9613389c, 0xa179fa9d, + 0x246fb598, 0x13057799, 0x4abb319b, 0x7dd1f39a, 0x3035898d, 0x075f4b8c, + 0x5ee10d8e, 0x698bcf8f, 0xec9d808a, 0xdbf7428b, 0x82490489, 0xb523c688, + 0x88649a83, 0xbf0e5882, 0xe6b01e80, 0xd1dadc81, 0x54cc9384, 0x63a65185, + 0x3a181787, 0x0d72d586, 0xa0d0e2a9, 0x97ba20a8, 0xce0466aa, 0xf96ea4ab, + 0x7c78ebae, 0x4b1229af, 0x12ac6fad, 0x25c6adac, 0x1881f1a7, 0x2feb33a6, + 0x765575a4, 0x413fb7a5, 0xc429f8a0, 0xf3433aa1, 0xaafd7ca3, 0x9d97bea2, + 0xd073c4b5, 0xe71906b4, 0xbea740b6, 0x89cd82b7, 0x0cdbcdb2, 0x3bb10fb3, + 0x620f49b1, 0x55658bb0, 0x6822d7bb, 0x5f4815ba, 0x06f653b8, 0x319c91b9, + 0xb48adebc, 0x83e01cbd, 0xda5e5abf, 0xed3498be}, + {0x00000000, 0x6567bcb8, 0x8bc809aa, 0xeeafb512, 0x5797628f, 0x32f0de37, + 0xdc5f6b25, 0xb938d79d, 0xef28b4c5, 0x8a4f087d, 0x64e0bd6f, 0x018701d7, + 0xb8bfd64a, 0xddd86af2, 0x3377dfe0, 0x56106358, 0x9f571950, 0xfa30a5e8, + 0x149f10fa, 0x71f8ac42, 0xc8c07bdf, 0xada7c767, 0x43087275, 0x266fcecd, + 0x707fad95, 0x1518112d, 0xfbb7a43f, 0x9ed01887, 0x27e8cf1a, 0x428f73a2, + 0xac20c6b0, 0xc9477a08, 0x3eaf32a0, 0x5bc88e18, 0xb5673b0a, 0xd00087b2, + 0x6938502f, 0x0c5fec97, 0xe2f05985, 0x8797e53d, 0xd1878665, 0xb4e03add, + 0x5a4f8fcf, 0x3f283377, 0x8610e4ea, 0xe3775852, 0x0dd8ed40, 0x68bf51f8, + 0xa1f82bf0, 0xc49f9748, 0x2a30225a, 0x4f579ee2, 0xf66f497f, 0x9308f5c7, + 0x7da740d5, 0x18c0fc6d, 0x4ed09f35, 0x2bb7238d, 0xc518969f, 0xa07f2a27, + 0x1947fdba, 0x7c204102, 0x928ff410, 0xf7e848a8, 0x3d58149b, 0x583fa823, + 0xb6901d31, 0xd3f7a189, 0x6acf7614, 0x0fa8caac, 0xe1077fbe, 0x8460c306, + 0xd270a05e, 0xb7171ce6, 0x59b8a9f4, 0x3cdf154c, 0x85e7c2d1, 0xe0807e69, + 0x0e2fcb7b, 0x6b4877c3, 0xa20f0dcb, 0xc768b173, 0x29c70461, 0x4ca0b8d9, + 0xf5986f44, 0x90ffd3fc, 0x7e5066ee, 0x1b37da56, 0x4d27b90e, 0x284005b6, + 0xc6efb0a4, 0xa3880c1c, 0x1ab0db81, 0x7fd76739, 0x9178d22b, 0xf41f6e93, + 0x03f7263b, 0x66909a83, 0x883f2f91, 0xed589329, 0x546044b4, 0x3107f80c, + 0xdfa84d1e, 0xbacff1a6, 0xecdf92fe, 0x89b82e46, 0x67179b54, 0x027027ec, + 0xbb48f071, 0xde2f4cc9, 0x3080f9db, 0x55e74563, 0x9ca03f6b, 0xf9c783d3, + 0x176836c1, 0x720f8a79, 0xcb375de4, 0xae50e15c, 0x40ff544e, 0x2598e8f6, + 0x73888bae, 0x16ef3716, 0xf8408204, 0x9d273ebc, 0x241fe921, 0x41785599, + 0xafd7e08b, 0xcab05c33, 0x3bb659ed, 0x5ed1e555, 0xb07e5047, 0xd519ecff, + 0x6c213b62, 0x094687da, 0xe7e932c8, 0x828e8e70, 0xd49eed28, 0xb1f95190, + 0x5f56e482, 0x3a31583a, 0x83098fa7, 0xe66e331f, 0x08c1860d, 0x6da63ab5, + 0xa4e140bd, 0xc186fc05, 0x2f294917, 0x4a4ef5af, 0xf3762232, 0x96119e8a, + 0x78be2b98, 0x1dd99720, 0x4bc9f478, 0x2eae48c0, 0xc001fdd2, 0xa566416a, + 0x1c5e96f7, 0x79392a4f, 0x97969f5d, 0xf2f123e5, 0x05196b4d, 0x607ed7f5, + 0x8ed162e7, 0xebb6de5f, 0x528e09c2, 0x37e9b57a, 0xd9460068, 0xbc21bcd0, + 0xea31df88, 0x8f566330, 0x61f9d622, 0x049e6a9a, 0xbda6bd07, 0xd8c101bf, + 0x366eb4ad, 0x53090815, 0x9a4e721d, 0xff29cea5, 0x11867bb7, 0x74e1c70f, + 0xcdd91092, 0xa8beac2a, 0x46111938, 0x2376a580, 0x7566c6d8, 0x10017a60, + 0xfeaecf72, 0x9bc973ca, 0x22f1a457, 0x479618ef, 0xa939adfd, 0xcc5e1145, + 0x06ee4d76, 0x6389f1ce, 0x8d2644dc, 0xe841f864, 0x51792ff9, 0x341e9341, + 0xdab12653, 0xbfd69aeb, 0xe9c6f9b3, 0x8ca1450b, 0x620ef019, 0x07694ca1, + 0xbe519b3c, 0xdb362784, 0x35999296, 0x50fe2e2e, 0x99b95426, 0xfcdee89e, + 0x12715d8c, 0x7716e134, 0xce2e36a9, 0xab498a11, 0x45e63f03, 0x208183bb, + 0x7691e0e3, 0x13f65c5b, 0xfd59e949, 0x983e55f1, 0x2106826c, 0x44613ed4, + 0xaace8bc6, 0xcfa9377e, 0x38417fd6, 0x5d26c36e, 0xb389767c, 0xd6eecac4, + 0x6fd61d59, 0x0ab1a1e1, 0xe41e14f3, 0x8179a84b, 0xd769cb13, 0xb20e77ab, + 0x5ca1c2b9, 0x39c67e01, 0x80fea99c, 0xe5991524, 0x0b36a036, 0x6e511c8e, + 0xa7166686, 0xc271da3e, 0x2cde6f2c, 0x49b9d394, 0xf0810409, 0x95e6b8b1, + 0x7b490da3, 0x1e2eb11b, 0x483ed243, 0x2d596efb, 0xc3f6dbe9, 0xa6916751, + 0x1fa9b0cc, 0x7ace0c74, 0x9461b966, 0xf10605de}}; #endif @@ -1749,1534 +1587,1390 @@ local const z_word_t FAR crc_braid_big_table[][256] = { #if W == 8 local const z_crc_t FAR crc_braid_table[][256] = { - {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, - 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede, - 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab, - 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c, - 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1, - 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7, - 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e, - 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, - 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5, - 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472, - 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07, - 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, - 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa, - 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec, - 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, - 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0, - 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3, - 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, - 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, - 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975, - 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8, - 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde, - 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a, - 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c, - 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, - 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, - 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410, - 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649, - 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a, - 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c, - 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946, - 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, - 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, - 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857, - 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022, - 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, - 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758, - 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e, - 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, - 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b, - 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6, - 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401, - 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, - 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d, - 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073, - 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65, - 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f, - 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749, - 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a, - 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, - 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846, - 0x0d7139d7}, - {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, - 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f, - 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875, - 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536, - 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8, - 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43, - 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f, - 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, - 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a, - 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39, - 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523, - 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, - 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d, - 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6, - 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b, - 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0, - 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151, - 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, - 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, - 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a, - 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964, - 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef, - 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d, - 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6, - 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, - 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, - 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449, - 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645, - 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4, - 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f, - 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2, - 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, - 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, - 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a, - 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650, - 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, - 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded, - 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366, - 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, - 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc, - 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222, - 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61, - 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, - 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277, - 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558, - 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3, - 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e, - 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5, - 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74, - 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, - 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262, - 0x1c53e98a}, - {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, - 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40, - 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580, - 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7, - 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a, - 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37, - 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75, - 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, - 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5, - 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2, - 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02, - 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, - 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1, - 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c, - 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, - 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307, - 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486, - 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, - 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, - 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2, - 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f, - 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72, - 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8, - 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985, - 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, - 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, - 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454, - 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f, - 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e, - 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3, - 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915, - 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, - 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821, - 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a, - 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba, - 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, - 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560, - 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d, - 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, - 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3, - 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e, - 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509, - 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, - 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92, - 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb, - 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6, - 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50, - 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d, - 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc, - 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, - 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927, - 0x3f88e851}, - {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, - 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8, - 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0, - 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14, - 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7, - 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4, - 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe, - 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, - 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e, - 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa, - 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2, - 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, - 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab, - 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8, - 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d, - 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e, - 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7, - 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, - 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, - 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690, - 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933, - 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20, - 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf, - 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc, - 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, - 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, - 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca, - 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4, - 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd, - 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de, - 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb, - 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, - 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474, - 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a, - 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252, - 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, - 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55, - 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846, - 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, - 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4, - 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47, - 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3, - 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, - 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5, - 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49, - 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a, - 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f, - 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c, - 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305, - 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, - 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523, - 0x3dee8ca6}, - {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, - 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91, - 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e, - 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c, - 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02, - 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12, - 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567, - 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, - 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679, - 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b, - 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4, - 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, - 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0, - 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0, - 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91, - 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881, - 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173, - 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, - 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, - 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8, - 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6, - 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6, - 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b, - 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b, - 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, - 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, - 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00, - 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee, - 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c, - 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c, - 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d, - 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, - 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, - 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89, - 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706, - 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, - 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a, - 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a, - 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f, - 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f, - 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591, - 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983, - 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, - 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, - 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8, - 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8, - 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89, - 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99, - 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b, - 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, - 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a, - 0x36197165}, - {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, - 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85, - 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06, - 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca, - 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e, - 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc, - 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616, - 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, - 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10, - 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc, - 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f, - 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, - 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef, - 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad, - 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b, - 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29, - 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6, - 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, - 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, - 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039, - 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d, - 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f, - 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32, - 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770, - 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, - 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, - 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc, - 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db, - 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154, - 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16, - 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0, - 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, - 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca, - 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd, - 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e, - 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, - 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6, - 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384, - 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, - 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3, - 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7, - 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b, - 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, - 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff, - 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7, - 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5, - 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23, - 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761, - 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee, - 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, - 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, - 0x1a3b93aa}, - {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, - 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca, - 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3, - 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb, - 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c, - 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58, - 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed, - 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, - 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e, - 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906, - 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f, - 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, - 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0, - 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4, - 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769, - 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d, - 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632, - 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, - 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, - 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73, - 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484, - 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0, - 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5, - 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1, - 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, - 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, - 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946, - 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6, - 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9, - 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad, - 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820, - 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, - 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, - 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b, - 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62, - 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, - 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, - 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089, - 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, - 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8, - 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f, - 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477, - 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, - 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be, - 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71, - 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635, - 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8, - 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc, - 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3, - 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, - 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a, - 0xe147d714}, - {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, - 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b, - 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92, - 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4, - 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069, - 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526, - 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25, - 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, - 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7, - 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491, - 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958, - 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, - 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307, - 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648, - 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999, - 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6, - 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a, - 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, - 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, - 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61, - 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc, - 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3, - 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53, - 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c, - 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, - 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, - 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5, - 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92, - 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e, - 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771, - 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0, - 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, - 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0, - 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7, - 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e, - 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, - 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285, - 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca, - 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce, - 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81, - 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c, - 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a, - 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, - 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4, - 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb, - 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4, - 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75, - 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a, - 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296, - 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, - 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808, - 0x494f0c4b}}; + {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, 0x7a59dd16, + 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede, 0xf4b3ba2c, 0x5adb2bbd, + 0xa722d3c8, 0x094a4259, 0x2082f6ab, 0x8eea673a, 0xe6273e9e, 0x484faf0f, + 0x61871bfd, 0xcfef8a6c, 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, + 0x9534a1d1, 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7, + 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e, 0x3ef7cf8f, + 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, 0x642ce432, 0xca4475a3, + 0xe38cc151, 0x4de450c0, 0xb01da8b5, 0x1e753924, 0x37bd8dd6, 0x99d51c47, + 0xf11845e3, 0x5f70d472, 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, + 0xa2892c07, 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, + 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa, 0x8016676b, + 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec, 0x7def9f1e, 0xd3870e8f, + 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, 0x74a5dd47, 0x895c2532, 0x2734b4a3, + 0x0efc0051, 0xa09491c0, 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, + 0x1c6884e3, 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, + 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, 0x46b3af5e, + 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975, 0xed70c100, 0x43185091, + 0x6ad0e463, 0xc4b875f2, 0x4a5212c8, 0xe43a8359, 0xcdf237ab, 0x639aa63a, + 0x9e635e4f, 0x300bcfde, 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, + 0x58c6967a, 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c, + 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, 0xd62cf140, + 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, 0xdb5dc897, 0x75355906, + 0x88cca173, 0x26a430e2, 0x0f6c8410, 0xa1041581, 0x2fee72bb, 0x8186e32a, + 0xa84e57d8, 0x0626c649, 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, + 0xbadad36a, 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c, + 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946, 0xe001f8d7, + 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, 0x4bc29689, 0xe5aa0718, + 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, + 0x38d109c6, 0x96b99857, 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, + 0x6b406022, 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, + 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758, 0x709ea6c9, + 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e, 0x8d675ebc, 0x230fcf2d, + 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, 0x5b4baffc, 0xa6b25789, 0x08dac618, + 0x211272ea, 0x8f7ae37b, 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, + 0xd5a1c8c6, 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401, + 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, 0x695ddde5, + 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d, 0x3386f658, 0x9dee67c9, + 0xb426d33b, 0x1a4e42aa, 0x65bc6073, 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, + 0xb18d2cf4, 0x1fe5bd65, 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, + 0x910fda5f, 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749, + 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a, 0xf9c283fb, + 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, 0x7728e4c1, 0xd9407550, + 0x24b98d25, 0x8ad11cb4, 0xa319a846, 0x0d7139d7}, + {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, 0x3387be8b, + 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f, 0x670f7d16, 0xdef4a6fe, + 0x45f5a9e4, 0xfc0e720c, 0xed731875, 0x5488c39d, 0x44629f4f, 0xfd9944a7, + 0xece42ede, 0x551ff536, 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, + 0x8beb53c8, 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43, + 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f, 0x99b854e7, + 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, 0x474cf219, 0xfeb729f1, + 0xefca4388, 0x56319860, 0xcd30977a, 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, + 0xcca7a1d1, 0x755c7a39, 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, + 0xee5d7523, 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, + 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d, 0x7300a095, + 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6, 0xe801af8f, 0x51fa7467, + 0x0572b7fa, 0xbc896c12, 0xadf4066b, 0x140fdd83, 0x8f0ed299, 0x36f50971, + 0x27886308, 0x9e73b8e0, 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, + 0x04e58151, 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, + 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, 0xda1127af, + 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a, 0xc8422080, 0x71b9fb68, + 0x60c49111, 0xd93f4af9, 0x8db78964, 0x344c528c, 0x253138f5, 0x9ccae31d, + 0x07cbec07, 0xbe3037ef, 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, + 0xaeda6b3d, 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6, + 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, 0xfa52a8a0, + 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, 0xe601412a, 0x5ffa9ac2, + 0xc4fb95d8, 0x7d004e30, 0x6c7d2449, 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, + 0x29888dad, 0x90735645, 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, + 0x0ae56ff4, 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f, + 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2, 0xd411c90a, + 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, 0xc642ce25, 0x7fb915cd, + 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, + 0x09cb02a2, 0xb030d94a, 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, + 0x2b31d650, 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, + 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded, 0xf4524605, + 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366, 0x6f53491f, 0xd6a892f7, + 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, + 0xa6865f34, 0x1f7d84dc, 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, + 0xc1892222, 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61, + 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, 0x5b1f1b93, + 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277, 0x85ebbd6d, 0x3c106685, + 0x2d6d0cfc, 0x9496d714, 0x0cb9b558, 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, + 0x86c5d03b, 0x3f3e0bd3, 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, + 0x6bb6c84e, 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5, + 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74, 0x7b5c949c, + 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, 0x2fd45701, 0x962f8ce9, + 0x0d2e83f3, 0xb4d5581b, 0xa5a83262, 0x1c53e98a}, + {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, 0x84a36e6d, + 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40, 0xd237da9b, 0x4f383bed, + 0x2af5912d, 0xb7fa705b, 0xcb9b5580, 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, + 0x87dcf8c1, 0x1ad319b7, 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, + 0x55eb225a, 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37, + 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75, 0xb1055d03, + 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, 0xfe3d66ee, 0x63328798, + 0x1f53a243, 0x825c4335, 0xe791e9f5, 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, + 0xabd644b4, 0x36d9a5c2, 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, + 0x53140f02, 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, + 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1, 0xdcb61687, + 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c, 0xb97bbc47, 0x24745d31, + 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, + 0x8a22a271, 0x172d4307, 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, + 0x3ea74486, 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, + 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, 0x719f7f6b, + 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2, 0x95710032, 0x087ee144, + 0x741fc49f, 0xe91025e9, 0xbf84911f, 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, + 0xa6281e04, 0x3b27ff72, 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, + 0x0b0177e8, 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985, + 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, 0x5d95c31e, + 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, 0x621d2b4f, 0xff12ca39, + 0x9adf60f9, 0x07d0818f, 0x7bb1a454, 0xe6be4522, 0xb02af1d4, 0x2d2510a2, + 0x51443579, 0xcc4bd40f, 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, + 0xe5c1d38e, 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3, + 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915, 0xaaf9e863, + 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, 0x4e17973a, 0xd318764c, + 0xaf795397, 0x3276b2e1, 0x57bb1821, 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, + 0x7d4e890c, 0xe041687a, 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, + 0x858cc2ba, 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, + 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560, 0x86f35416, + 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d, 0xe33efed6, 0x7e311fa0, + 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, 0xbeab3dc8, 0xdb669708, 0x4669767e, + 0x3a0853a5, 0xa707b2d3, 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, + 0xe83f893e, 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509, + 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, 0xc1b58ebf, + 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92, 0x8e8db552, 0x13825424, + 0x6fe371ff, 0xf2ec9089, 0x0fae60cb, 0x92a181bd, 0xeec0a466, 0x73cf4510, + 0x1602efd0, 0x8b0d0ea6, 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, + 0xdd99ba50, 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d, + 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc, 0xedbf32ca, + 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, 0xbb2b863c, 0x2624674a, + 0x43e9cd8a, 0xdee62cfc, 0xa2870927, 0x3f88e851}, + {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, 0x1d2fb313, + 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8, 0x3a5f6626, 0xe7c9bfa3, + 0x9abab9fb, 0x472c607e, 0xfae60cb0, 0x2770d535, 0xb407a6da, 0x69917f5f, + 0xd45b1391, 0x09cdca14, 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, + 0xee0475b7, 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4, + 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe, 0x0eb4273b, + 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, 0xe97d9898, 0x34eb411d, + 0x89212dd3, 0x54b7f456, 0x29c4f20e, 0xf4522b8b, 0x49984745, 0x940e9ec0, + 0x0779ed2f, 0xdaef34aa, 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, + 0xa79c32f2, 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, + 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab, 0x601b482e, + 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8, 0x1d684e76, 0xc0fe97f3, + 0xe78e42c6, 0x3a189b43, 0x87d2f78d, 0x5a442e08, 0x27372850, 0xfaa1f1d5, + 0x476b9d1b, 0x9afd449e, 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, + 0xc9335de7, 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, + 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, 0x2efae244, + 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690, 0xce4ab0c8, 0x13dc694d, + 0xae160583, 0x7380dc06, 0x54f00933, 0x8966d0b6, 0x34acbc78, 0xe93a65fd, + 0x944963a5, 0x49dfba20, 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, + 0xdaa8c9cf, 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc, + 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, 0xfdd81cfa, + 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, 0xc036905c, 0x1da049d9, + 0x60d34f81, 0xbd459604, 0x008ffaca, 0xdd19234f, 0xfa69f67a, 0x27ff2fff, + 0x9a354331, 0x47a39ab4, 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, + 0x146d83cd, 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de, + 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb, 0xf3a43c6e, + 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, 0x13146ee2, 0xce82b767, + 0x7348dba9, 0xaede022c, 0xd3ad0474, 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, + 0x4917bd8f, 0x9481640a, 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, + 0xe9f26252, 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, + 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55, 0x2086c2d0, + 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846, 0x5df5c488, 0x80631d0d, + 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, 0xa02dd872, 0xdd5ede2a, 0x00c807af, + 0xbd026b61, 0x6094b2e4, 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, + 0x875d0d47, 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3, + 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, 0xd493143e, + 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5, 0x335aab9d, 0xeecc7218, + 0x53061ed6, 0x8e90c753, 0xae99ff49, 0x730f26cc, 0xcec54a02, 0x13539387, + 0x6e2095df, 0xb3b64c5a, 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, + 0x94c6996f, 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c, + 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305, 0x07b1ea80, + 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, 0x20c13fb5, 0xfd57e630, + 0x8024e068, 0x5db239ed, 0xe0785523, 0x3dee8ca6}, + {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, 0x98a37710, + 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91, 0xea37e861, 0x7192a40e, + 0x050a4d81, 0x9eaf01ee, 0xe931d31e, 0x72949f71, 0x0c18edfc, 0x97bda193, + 0xe0237363, 0x7b863f0c, 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, + 0x0a149b02, 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12, + 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567, 0x6faf0908, + 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, 0x1e3dad06, 0x8598e169, + 0xf2063399, 0x69a37ff6, 0x1d3b9679, 0x869eda16, 0xf10008e6, 0x6aa54489, + 0x14293604, 0x8f8c7a6b, 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, + 0xfb1493e4, 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, + 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0, 0xabc6fb9f, + 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0, 0xdf5e1210, 0x44fb5e7f, + 0x366fc10e, 0xadca8d61, 0xda545f91, 0x41f113fe, 0x3569fa71, 0xaeccb61e, + 0xd95264ee, 0x42f72881, 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, + 0x3f7d6173, 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, + 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, 0x4eefc57d, + 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8, 0x2b545777, 0xb0f11b18, + 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6, 0xb5fb5699, 0xc2658469, 0x59c0c806, + 0x2d582189, 0xb6fd6de6, 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, + 0xc8711f6b, 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b, + 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, 0xbae5801a, + 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, 0x8cfcf17f, 0x1759bd10, + 0x63c1549f, 0xf86418f0, 0x8ffaca00, 0x145f866f, 0x66cb191e, 0xfd6e5571, + 0x8af08781, 0x1155cbee, 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, + 0x6cdf821c, 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c, + 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d, 0x1d4d2612, + 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, 0x78f6b418, 0xe353f877, + 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, 0xe055c308, 0x97cb11f8, 0x0c6e5d97, + 0x7efac2e6, 0xe55f8e89, 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, + 0x91c76706, 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, + 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a, 0xe9476375, + 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a, 0x9ddf8afa, 0x067ac695, + 0x50a4d810, 0xcb01947f, 0xbc9f468f, 0x273a0ae0, 0x53a2e36f, 0xc807af00, + 0xbf997df0, 0x243c319f, 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, + 0x55ae9591, 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983, + 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, 0x2824dc63, + 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, 0x59b6786d, 0xc2133402, + 0xb58de6f2, 0x2e28aa9d, 0x489503e8, 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, + 0x4b933897, 0xd03674f8, 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, + 0xa2a2eb89, 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99, + 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b, 0xdc2e9904, + 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, 0xaeba0675, 0x351f4a1a, + 0x4187a395, 0xda22effa, 0xadbc3d0a, 0x36197165}, + {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, 0x7157ac42, + 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85, 0xe2af5884, 0x23218744, + 0x0a1a92c7, 0xcb944d07, 0x52762b06, 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, + 0xf69a7d0a, 0x3714a2ca, 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, + 0x1435258e, 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc, + 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616, 0x1f7ee9d6, + 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, 0x3c5f6e92, 0xfdd1b152, + 0x6433d753, 0xa5bd0893, 0x8c861d10, 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, + 0x286a4b1c, 0xe9e494dc, 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, + 0xc0df815f, 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, + 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef, 0x17c6c62f, + 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad, 0x3efdd3ac, 0xff730c6c, + 0x6c8bf8aa, 0xad05276a, 0x34e7416b, 0xf5699eab, 0xdc528b28, 0x1ddc54e8, + 0x843e32e9, 0x45b0ed29, 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, + 0xc867aea6, 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, + 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, 0xeb4629e2, + 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039, 0xe00de5ba, 0x21833a7a, + 0xb8615c7b, 0x79ef83bb, 0xea17777d, 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, + 0x5ace04ff, 0x9b40db3f, 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, + 0xa64eeb32, 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770, + 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, 0x35b61ff4, + 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, 0x2f8d8c5e, 0xee03539e, + 0xc738461d, 0x06b699dd, 0x9f54ffdc, 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, + 0x954e6d1b, 0x54c0b2db, 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, + 0xd917f154, 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16, + 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0, 0xfa367610, + 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, 0xf17dba48, 0x30f36588, + 0xa9110389, 0x689fdc49, 0x41a4c9ca, 0x802a160a, 0x19c8700b, 0xd846afcb, + 0x4bbe5b0d, 0x8a3084cd, 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, + 0xa30b914e, 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, + 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6, 0x24c64006, + 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384, 0x0dfd5585, 0xcc738a45, + 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, 0x384b4a71, 0x11705ff2, 0xd0fe8032, + 0x491ce633, 0x889239f3, 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, + 0xabb3beb7, 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b, + 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, 0x2664fd38, + 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff, 0x05457a7c, 0xc4cba5bc, + 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7, 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, + 0x97ecd025, 0x56620fe5, 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, + 0xc59afb23, 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761, + 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee, 0xf894cb2e, + 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, 0x6b6c3fe8, 0xaae2e028, + 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, 0x1a3b93aa}, + {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, 0xe629cb44, + 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca, 0x172290c9, 0xf8e0fbf7, + 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3, 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, + 0x235b51d5, 0xcc993aeb, 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, + 0x3479c11c, 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58, + 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed, 0xa46ab8d3, + 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, 0x5c8a4324, 0xb348281a, + 0x587f9319, 0xb7bdf827, 0x5561e35e, 0xbaa38860, 0x51943363, 0xbe56585d, + 0x68f38238, 0x8731e906, 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, + 0x65edf27f, 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, + 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0, 0x71786c9e, + 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4, 0x93a477e7, 0x7c661cd9, + 0x8d6d4754, 0x62af2c6a, 0x89989769, 0x665afc57, 0x8486e72e, 0x6b448c10, + 0x80733713, 0x6fb15c2d, 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, + 0xb0ff2632, 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, + 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, 0x481fddc5, + 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73, 0xd80ca40a, 0x37cecf34, + 0xdcf97437, 0x333b1f09, 0xc2304484, 0x2df22fba, 0xc6c594b9, 0x2907ff87, + 0xcbdbe4fe, 0x24198fc0, 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, + 0xf2bc55a5, 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1, + 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, 0x03b70e28, + 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, 0xe2f0d93c, 0x0d32b202, + 0xefeea97b, 0x002cc245, 0xeb1b7946, 0x04d91278, 0xf5d249f5, 0x1a1022cb, + 0xf12799c8, 0x1ee5f2f6, 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, + 0xc1ab88e9, 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad, + 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820, 0x394b731e, + 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, 0xa9580ad1, 0x469a61ef, + 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, 0x4f71c195, 0xa4467a96, 0x4b8411a8, + 0xba8f4a25, 0x554d211b, 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, + 0xb7913a62, 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, + 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, 0x72e3a0f3, + 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089, 0x903fbb8a, 0x7ffdd0b4, + 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, + 0x75a17ee6, 0x9a6315d8, 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, + 0x6283ee2f, 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477, + 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, 0xbdcd9430, + 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be, 0x452d6fc7, 0xaaef04f9, + 0x41d8bffa, 0xae1ad4c4, 0x37e20d71, 0xd820664f, 0x3317dd4c, 0xdcd5b672, + 0x3e09ad0b, 0xd1cbc635, 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, + 0x20c09db8, 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc, + 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3, 0xf66547dd, + 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, 0x076e1c50, 0xe8ac776e, + 0x0a706c17, 0xe5b20729, 0x0e85bc2a, 0xe147d714}, + {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, 0x4a97454f, + 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b, 0x952e8a9e, 0x82559edd, + 0xe634f314, 0xf14fe757, 0xc8c2db92, 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, + 0x82366af7, 0x954d7eb4, 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, + 0x1718e069, 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526, + 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25, 0xbb7cbe66, + 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, 0x392920bb, 0x2e5234f8, + 0x17df083d, 0x00a41c7e, 0x64c571b7, 0x73be65f4, 0x4a335931, 0x5d484d72, + 0x2e31c0d2, 0x394ad491, 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, + 0x5d2bb958, 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, + 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307, 0xc9e91744, + 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648, 0xad887a8d, 0xbaf36ece, + 0x654aa11f, 0x7231b55c, 0x4bbc8999, 0x5cc79dda, 0x38a6f013, 0x2fdde450, + 0x1650d895, 0x012bccd6, 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, + 0x2fbe107a, 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, + 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, 0xadeb8ea7, + 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61, 0x018fd0a8, 0x16f4c4eb, + 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc, 0xf0c037ff, 0xc94d0b3a, 0xde361f79, + 0xba5772b0, 0xad2c66f3, 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, + 0xde55eb53, 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c, + 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, 0x01ec2482, + 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, 0x48a328c9, 0x5fd83c8a, + 0x3bb95143, 0x2cc24500, 0x154f79c5, 0x02346d86, 0xdd8da257, 0xcaf6b614, + 0xf37b8ad1, 0xe4009e92, 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, + 0xca95423e, 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771, + 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0, 0x48c0dce3, + 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, 0xe4a482ec, 0xf3df96af, + 0xca52aa6a, 0xdd29be29, 0xb948d3e0, 0xae33c7a3, 0x97befb66, 0x80c5ef25, + 0x5f7c20f4, 0x480734b7, 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, + 0x2c66597e, 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, + 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285, 0xe4c776c6, + 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca, 0x80a61b0f, 0x97dd0f4c, + 0xb8c70348, 0xafbc170b, 0x96312bce, 0x814a3f8d, 0xe52b5244, 0xf2504607, + 0xcbdd7ac2, 0xdca66e81, 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, + 0x5ef3f05c, 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a, + 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, 0x70662cf0, + 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4, 0xf233b22d, 0xe548a66e, + 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb, 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, + 0x67dad0e7, 0x70a1c4a4, 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, + 0xaf180b75, 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a, + 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296, 0xdc6186d5, + 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, 0x03d84904, 0x14a35d47, + 0x70c2308e, 0x67b924cd, 0x5e341808, 0x494f0c4b}}; local const z_word_t FAR crc_braid_big_table[][256] = { - {0x0000000000000000, 0x43147b1700000000, 0x8628f62e00000000, - 0xc53c8d3900000000, 0x0c51ec5d00000000, 0x4f45974a00000000, - 0x8a791a7300000000, 0xc96d616400000000, 0x18a2d8bb00000000, - 0x5bb6a3ac00000000, 0x9e8a2e9500000000, 0xdd9e558200000000, - 0x14f334e600000000, 0x57e74ff100000000, 0x92dbc2c800000000, - 0xd1cfb9df00000000, 0x7142c0ac00000000, 0x3256bbbb00000000, - 0xf76a368200000000, 0xb47e4d9500000000, 0x7d132cf100000000, - 0x3e0757e600000000, 0xfb3bdadf00000000, 0xb82fa1c800000000, - 0x69e0181700000000, 0x2af4630000000000, 0xefc8ee3900000000, - 0xacdc952e00000000, 0x65b1f44a00000000, 0x26a58f5d00000000, - 0xe399026400000000, 0xa08d797300000000, 0xa382f18200000000, - 0xe0968a9500000000, 0x25aa07ac00000000, 0x66be7cbb00000000, - 0xafd31ddf00000000, 0xecc766c800000000, 0x29fbebf100000000, - 0x6aef90e600000000, 0xbb20293900000000, 0xf834522e00000000, - 0x3d08df1700000000, 0x7e1ca40000000000, 0xb771c56400000000, - 0xf465be7300000000, 0x3159334a00000000, 0x724d485d00000000, - 0xd2c0312e00000000, 0x91d44a3900000000, 0x54e8c70000000000, - 0x17fcbc1700000000, 0xde91dd7300000000, 0x9d85a66400000000, - 0x58b92b5d00000000, 0x1bad504a00000000, 0xca62e99500000000, - 0x8976928200000000, 0x4c4a1fbb00000000, 0x0f5e64ac00000000, - 0xc63305c800000000, 0x85277edf00000000, 0x401bf3e600000000, - 0x030f88f100000000, 0x070392de00000000, 0x4417e9c900000000, - 0x812b64f000000000, 0xc23f1fe700000000, 0x0b527e8300000000, - 0x4846059400000000, 0x8d7a88ad00000000, 0xce6ef3ba00000000, - 0x1fa14a6500000000, 0x5cb5317200000000, 0x9989bc4b00000000, - 0xda9dc75c00000000, 0x13f0a63800000000, 0x50e4dd2f00000000, - 0x95d8501600000000, 0xd6cc2b0100000000, 0x7641527200000000, - 0x3555296500000000, 0xf069a45c00000000, 0xb37ddf4b00000000, - 0x7a10be2f00000000, 0x3904c53800000000, 0xfc38480100000000, - 0xbf2c331600000000, 0x6ee38ac900000000, 0x2df7f1de00000000, - 0xe8cb7ce700000000, 0xabdf07f000000000, 0x62b2669400000000, - 0x21a61d8300000000, 0xe49a90ba00000000, 0xa78eebad00000000, - 0xa481635c00000000, 0xe795184b00000000, 0x22a9957200000000, - 0x61bdee6500000000, 0xa8d08f0100000000, 0xebc4f41600000000, - 0x2ef8792f00000000, 0x6dec023800000000, 0xbc23bbe700000000, - 0xff37c0f000000000, 0x3a0b4dc900000000, 0x791f36de00000000, - 0xb07257ba00000000, 0xf3662cad00000000, 0x365aa19400000000, - 0x754eda8300000000, 0xd5c3a3f000000000, 0x96d7d8e700000000, - 0x53eb55de00000000, 0x10ff2ec900000000, 0xd9924fad00000000, - 0x9a8634ba00000000, 0x5fbab98300000000, 0x1caec29400000000, - 0xcd617b4b00000000, 0x8e75005c00000000, 0x4b498d6500000000, - 0x085df67200000000, 0xc130971600000000, 0x8224ec0100000000, - 0x4718613800000000, 0x040c1a2f00000000, 0x4f00556600000000, - 0x0c142e7100000000, 0xc928a34800000000, 0x8a3cd85f00000000, - 0x4351b93b00000000, 0x0045c22c00000000, 0xc5794f1500000000, - 0x866d340200000000, 0x57a28ddd00000000, 0x14b6f6ca00000000, - 0xd18a7bf300000000, 0x929e00e400000000, 0x5bf3618000000000, - 0x18e71a9700000000, 0xdddb97ae00000000, 0x9ecfecb900000000, - 0x3e4295ca00000000, 0x7d56eedd00000000, 0xb86a63e400000000, - 0xfb7e18f300000000, 0x3213799700000000, 0x7107028000000000, - 0xb43b8fb900000000, 0xf72ff4ae00000000, 0x26e04d7100000000, - 0x65f4366600000000, 0xa0c8bb5f00000000, 0xe3dcc04800000000, - 0x2ab1a12c00000000, 0x69a5da3b00000000, 0xac99570200000000, - 0xef8d2c1500000000, 0xec82a4e400000000, 0xaf96dff300000000, - 0x6aaa52ca00000000, 0x29be29dd00000000, 0xe0d348b900000000, - 0xa3c733ae00000000, 0x66fbbe9700000000, 0x25efc58000000000, - 0xf4207c5f00000000, 0xb734074800000000, 0x72088a7100000000, - 0x311cf16600000000, 0xf871900200000000, 0xbb65eb1500000000, - 0x7e59662c00000000, 0x3d4d1d3b00000000, 0x9dc0644800000000, - 0xded41f5f00000000, 0x1be8926600000000, 0x58fce97100000000, - 0x9191881500000000, 0xd285f30200000000, 0x17b97e3b00000000, - 0x54ad052c00000000, 0x8562bcf300000000, 0xc676c7e400000000, - 0x034a4add00000000, 0x405e31ca00000000, 0x893350ae00000000, - 0xca272bb900000000, 0x0f1ba68000000000, 0x4c0fdd9700000000, - 0x4803c7b800000000, 0x0b17bcaf00000000, 0xce2b319600000000, - 0x8d3f4a8100000000, 0x44522be500000000, 0x074650f200000000, - 0xc27addcb00000000, 0x816ea6dc00000000, 0x50a11f0300000000, - 0x13b5641400000000, 0xd689e92d00000000, 0x959d923a00000000, - 0x5cf0f35e00000000, 0x1fe4884900000000, 0xdad8057000000000, - 0x99cc7e6700000000, 0x3941071400000000, 0x7a557c0300000000, - 0xbf69f13a00000000, 0xfc7d8a2d00000000, 0x3510eb4900000000, - 0x7604905e00000000, 0xb3381d6700000000, 0xf02c667000000000, - 0x21e3dfaf00000000, 0x62f7a4b800000000, 0xa7cb298100000000, - 0xe4df529600000000, 0x2db233f200000000, 0x6ea648e500000000, - 0xab9ac5dc00000000, 0xe88ebecb00000000, 0xeb81363a00000000, - 0xa8954d2d00000000, 0x6da9c01400000000, 0x2ebdbb0300000000, - 0xe7d0da6700000000, 0xa4c4a17000000000, 0x61f82c4900000000, - 0x22ec575e00000000, 0xf323ee8100000000, 0xb037959600000000, - 0x750b18af00000000, 0x361f63b800000000, 0xff7202dc00000000, - 0xbc6679cb00000000, 0x795af4f200000000, 0x3a4e8fe500000000, - 0x9ac3f69600000000, 0xd9d78d8100000000, 0x1ceb00b800000000, - 0x5fff7baf00000000, 0x96921acb00000000, 0xd58661dc00000000, - 0x10baece500000000, 0x53ae97f200000000, 0x82612e2d00000000, - 0xc175553a00000000, 0x0449d80300000000, 0x475da31400000000, - 0x8e30c27000000000, 0xcd24b96700000000, 0x0818345e00000000, - 0x4b0c4f4900000000}, - {0x0000000000000000, 0x3e6bc2ef00000000, 0x3dd0f50400000000, - 0x03bb37eb00000000, 0x7aa0eb0900000000, 0x44cb29e600000000, - 0x47701e0d00000000, 0x791bdce200000000, 0xf440d71300000000, - 0xca2b15fc00000000, 0xc990221700000000, 0xf7fbe0f800000000, - 0x8ee03c1a00000000, 0xb08bfef500000000, 0xb330c91e00000000, - 0x8d5b0bf100000000, 0xe881ae2700000000, 0xd6ea6cc800000000, - 0xd5515b2300000000, 0xeb3a99cc00000000, 0x9221452e00000000, - 0xac4a87c100000000, 0xaff1b02a00000000, 0x919a72c500000000, - 0x1cc1793400000000, 0x22aabbdb00000000, 0x21118c3000000000, - 0x1f7a4edf00000000, 0x6661923d00000000, 0x580a50d200000000, - 0x5bb1673900000000, 0x65daa5d600000000, 0xd0035d4f00000000, - 0xee689fa000000000, 0xedd3a84b00000000, 0xd3b86aa400000000, - 0xaaa3b64600000000, 0x94c874a900000000, 0x9773434200000000, - 0xa91881ad00000000, 0x24438a5c00000000, 0x1a2848b300000000, - 0x19937f5800000000, 0x27f8bdb700000000, 0x5ee3615500000000, - 0x6088a3ba00000000, 0x6333945100000000, 0x5d5856be00000000, - 0x3882f36800000000, 0x06e9318700000000, 0x0552066c00000000, - 0x3b39c48300000000, 0x4222186100000000, 0x7c49da8e00000000, - 0x7ff2ed6500000000, 0x41992f8a00000000, 0xccc2247b00000000, - 0xf2a9e69400000000, 0xf112d17f00000000, 0xcf79139000000000, - 0xb662cf7200000000, 0x88090d9d00000000, 0x8bb23a7600000000, - 0xb5d9f89900000000, 0xa007ba9e00000000, 0x9e6c787100000000, - 0x9dd74f9a00000000, 0xa3bc8d7500000000, 0xdaa7519700000000, - 0xe4cc937800000000, 0xe777a49300000000, 0xd91c667c00000000, - 0x54476d8d00000000, 0x6a2caf6200000000, 0x6997988900000000, - 0x57fc5a6600000000, 0x2ee7868400000000, 0x108c446b00000000, - 0x1337738000000000, 0x2d5cb16f00000000, 0x488614b900000000, - 0x76edd65600000000, 0x7556e1bd00000000, 0x4b3d235200000000, - 0x3226ffb000000000, 0x0c4d3d5f00000000, 0x0ff60ab400000000, - 0x319dc85b00000000, 0xbcc6c3aa00000000, 0x82ad014500000000, - 0x811636ae00000000, 0xbf7df44100000000, 0xc66628a300000000, - 0xf80dea4c00000000, 0xfbb6dda700000000, 0xc5dd1f4800000000, - 0x7004e7d100000000, 0x4e6f253e00000000, 0x4dd412d500000000, - 0x73bfd03a00000000, 0x0aa40cd800000000, 0x34cfce3700000000, - 0x3774f9dc00000000, 0x091f3b3300000000, 0x844430c200000000, - 0xba2ff22d00000000, 0xb994c5c600000000, 0x87ff072900000000, - 0xfee4dbcb00000000, 0xc08f192400000000, 0xc3342ecf00000000, - 0xfd5fec2000000000, 0x988549f600000000, 0xa6ee8b1900000000, - 0xa555bcf200000000, 0x9b3e7e1d00000000, 0xe225a2ff00000000, - 0xdc4e601000000000, 0xdff557fb00000000, 0xe19e951400000000, - 0x6cc59ee500000000, 0x52ae5c0a00000000, 0x51156be100000000, - 0x6f7ea90e00000000, 0x166575ec00000000, 0x280eb70300000000, - 0x2bb580e800000000, 0x15de420700000000, 0x010905e600000000, - 0x3f62c70900000000, 0x3cd9f0e200000000, 0x02b2320d00000000, - 0x7ba9eeef00000000, 0x45c22c0000000000, 0x46791beb00000000, - 0x7812d90400000000, 0xf549d2f500000000, 0xcb22101a00000000, - 0xc89927f100000000, 0xf6f2e51e00000000, 0x8fe939fc00000000, - 0xb182fb1300000000, 0xb239ccf800000000, 0x8c520e1700000000, - 0xe988abc100000000, 0xd7e3692e00000000, 0xd4585ec500000000, - 0xea339c2a00000000, 0x932840c800000000, 0xad43822700000000, - 0xaef8b5cc00000000, 0x9093772300000000, 0x1dc87cd200000000, - 0x23a3be3d00000000, 0x201889d600000000, 0x1e734b3900000000, - 0x676897db00000000, 0x5903553400000000, 0x5ab862df00000000, - 0x64d3a03000000000, 0xd10a58a900000000, 0xef619a4600000000, - 0xecdaadad00000000, 0xd2b16f4200000000, 0xabaab3a000000000, - 0x95c1714f00000000, 0x967a46a400000000, 0xa811844b00000000, - 0x254a8fba00000000, 0x1b214d5500000000, 0x189a7abe00000000, - 0x26f1b85100000000, 0x5fea64b300000000, 0x6181a65c00000000, - 0x623a91b700000000, 0x5c51535800000000, 0x398bf68e00000000, - 0x07e0346100000000, 0x045b038a00000000, 0x3a30c16500000000, - 0x432b1d8700000000, 0x7d40df6800000000, 0x7efbe88300000000, - 0x40902a6c00000000, 0xcdcb219d00000000, 0xf3a0e37200000000, - 0xf01bd49900000000, 0xce70167600000000, 0xb76bca9400000000, - 0x8900087b00000000, 0x8abb3f9000000000, 0xb4d0fd7f00000000, - 0xa10ebf7800000000, 0x9f657d9700000000, 0x9cde4a7c00000000, - 0xa2b5889300000000, 0xdbae547100000000, 0xe5c5969e00000000, - 0xe67ea17500000000, 0xd815639a00000000, 0x554e686b00000000, - 0x6b25aa8400000000, 0x689e9d6f00000000, 0x56f55f8000000000, - 0x2fee836200000000, 0x1185418d00000000, 0x123e766600000000, - 0x2c55b48900000000, 0x498f115f00000000, 0x77e4d3b000000000, - 0x745fe45b00000000, 0x4a3426b400000000, 0x332ffa5600000000, - 0x0d4438b900000000, 0x0eff0f5200000000, 0x3094cdbd00000000, - 0xbdcfc64c00000000, 0x83a404a300000000, 0x801f334800000000, - 0xbe74f1a700000000, 0xc76f2d4500000000, 0xf904efaa00000000, - 0xfabfd84100000000, 0xc4d41aae00000000, 0x710de23700000000, - 0x4f6620d800000000, 0x4cdd173300000000, 0x72b6d5dc00000000, - 0x0bad093e00000000, 0x35c6cbd100000000, 0x367dfc3a00000000, - 0x08163ed500000000, 0x854d352400000000, 0xbb26f7cb00000000, - 0xb89dc02000000000, 0x86f602cf00000000, 0xffedde2d00000000, - 0xc1861cc200000000, 0xc23d2b2900000000, 0xfc56e9c600000000, - 0x998c4c1000000000, 0xa7e78eff00000000, 0xa45cb91400000000, - 0x9a377bfb00000000, 0xe32ca71900000000, 0xdd4765f600000000, - 0xdefc521d00000000, 0xe09790f200000000, 0x6dcc9b0300000000, - 0x53a759ec00000000, 0x501c6e0700000000, 0x6e77ace800000000, - 0x176c700a00000000, 0x2907b2e500000000, 0x2abc850e00000000, - 0x14d747e100000000}, - {0x0000000000000000, 0xc0df8ec100000000, 0xc1b96c5800000000, - 0x0166e29900000000, 0x8273d9b000000000, 0x42ac577100000000, - 0x43cab5e800000000, 0x83153b2900000000, 0x45e1c3ba00000000, - 0x853e4d7b00000000, 0x8458afe200000000, 0x4487212300000000, - 0xc7921a0a00000000, 0x074d94cb00000000, 0x062b765200000000, - 0xc6f4f89300000000, 0xcbc4f6ae00000000, 0x0b1b786f00000000, - 0x0a7d9af600000000, 0xcaa2143700000000, 0x49b72f1e00000000, - 0x8968a1df00000000, 0x880e434600000000, 0x48d1cd8700000000, - 0x8e25351400000000, 0x4efabbd500000000, 0x4f9c594c00000000, - 0x8f43d78d00000000, 0x0c56eca400000000, 0xcc89626500000000, - 0xcdef80fc00000000, 0x0d300e3d00000000, 0xd78f9c8600000000, - 0x1750124700000000, 0x1636f0de00000000, 0xd6e97e1f00000000, - 0x55fc453600000000, 0x9523cbf700000000, 0x9445296e00000000, - 0x549aa7af00000000, 0x926e5f3c00000000, 0x52b1d1fd00000000, - 0x53d7336400000000, 0x9308bda500000000, 0x101d868c00000000, - 0xd0c2084d00000000, 0xd1a4ead400000000, 0x117b641500000000, - 0x1c4b6a2800000000, 0xdc94e4e900000000, 0xddf2067000000000, - 0x1d2d88b100000000, 0x9e38b39800000000, 0x5ee73d5900000000, - 0x5f81dfc000000000, 0x9f5e510100000000, 0x59aaa99200000000, - 0x9975275300000000, 0x9813c5ca00000000, 0x58cc4b0b00000000, - 0xdbd9702200000000, 0x1b06fee300000000, 0x1a601c7a00000000, - 0xdabf92bb00000000, 0xef1948d600000000, 0x2fc6c61700000000, - 0x2ea0248e00000000, 0xee7faa4f00000000, 0x6d6a916600000000, - 0xadb51fa700000000, 0xacd3fd3e00000000, 0x6c0c73ff00000000, - 0xaaf88b6c00000000, 0x6a2705ad00000000, 0x6b41e73400000000, - 0xab9e69f500000000, 0x288b52dc00000000, 0xe854dc1d00000000, - 0xe9323e8400000000, 0x29edb04500000000, 0x24ddbe7800000000, - 0xe40230b900000000, 0xe564d22000000000, 0x25bb5ce100000000, - 0xa6ae67c800000000, 0x6671e90900000000, 0x67170b9000000000, - 0xa7c8855100000000, 0x613c7dc200000000, 0xa1e3f30300000000, - 0xa085119a00000000, 0x605a9f5b00000000, 0xe34fa47200000000, - 0x23902ab300000000, 0x22f6c82a00000000, 0xe22946eb00000000, - 0x3896d45000000000, 0xf8495a9100000000, 0xf92fb80800000000, - 0x39f036c900000000, 0xbae50de000000000, 0x7a3a832100000000, - 0x7b5c61b800000000, 0xbb83ef7900000000, 0x7d7717ea00000000, - 0xbda8992b00000000, 0xbcce7bb200000000, 0x7c11f57300000000, - 0xff04ce5a00000000, 0x3fdb409b00000000, 0x3ebda20200000000, - 0xfe622cc300000000, 0xf35222fe00000000, 0x338dac3f00000000, - 0x32eb4ea600000000, 0xf234c06700000000, 0x7121fb4e00000000, - 0xb1fe758f00000000, 0xb098971600000000, 0x704719d700000000, - 0xb6b3e14400000000, 0x766c6f8500000000, 0x770a8d1c00000000, - 0xb7d503dd00000000, 0x34c038f400000000, 0xf41fb63500000000, - 0xf57954ac00000000, 0x35a6da6d00000000, 0x9f35e17700000000, - 0x5fea6fb600000000, 0x5e8c8d2f00000000, 0x9e5303ee00000000, - 0x1d4638c700000000, 0xdd99b60600000000, 0xdcff549f00000000, - 0x1c20da5e00000000, 0xdad422cd00000000, 0x1a0bac0c00000000, - 0x1b6d4e9500000000, 0xdbb2c05400000000, 0x58a7fb7d00000000, - 0x987875bc00000000, 0x991e972500000000, 0x59c119e400000000, - 0x54f117d900000000, 0x942e991800000000, 0x95487b8100000000, - 0x5597f54000000000, 0xd682ce6900000000, 0x165d40a800000000, - 0x173ba23100000000, 0xd7e42cf000000000, 0x1110d46300000000, - 0xd1cf5aa200000000, 0xd0a9b83b00000000, 0x107636fa00000000, - 0x93630dd300000000, 0x53bc831200000000, 0x52da618b00000000, - 0x9205ef4a00000000, 0x48ba7df100000000, 0x8865f33000000000, - 0x890311a900000000, 0x49dc9f6800000000, 0xcac9a44100000000, - 0x0a162a8000000000, 0x0b70c81900000000, 0xcbaf46d800000000, - 0x0d5bbe4b00000000, 0xcd84308a00000000, 0xcce2d21300000000, - 0x0c3d5cd200000000, 0x8f2867fb00000000, 0x4ff7e93a00000000, - 0x4e910ba300000000, 0x8e4e856200000000, 0x837e8b5f00000000, - 0x43a1059e00000000, 0x42c7e70700000000, 0x821869c600000000, - 0x010d52ef00000000, 0xc1d2dc2e00000000, 0xc0b43eb700000000, - 0x006bb07600000000, 0xc69f48e500000000, 0x0640c62400000000, - 0x072624bd00000000, 0xc7f9aa7c00000000, 0x44ec915500000000, - 0x84331f9400000000, 0x8555fd0d00000000, 0x458a73cc00000000, - 0x702ca9a100000000, 0xb0f3276000000000, 0xb195c5f900000000, - 0x714a4b3800000000, 0xf25f701100000000, 0x3280fed000000000, - 0x33e61c4900000000, 0xf339928800000000, 0x35cd6a1b00000000, - 0xf512e4da00000000, 0xf474064300000000, 0x34ab888200000000, - 0xb7beb3ab00000000, 0x77613d6a00000000, 0x7607dff300000000, - 0xb6d8513200000000, 0xbbe85f0f00000000, 0x7b37d1ce00000000, - 0x7a51335700000000, 0xba8ebd9600000000, 0x399b86bf00000000, - 0xf944087e00000000, 0xf822eae700000000, 0x38fd642600000000, - 0xfe099cb500000000, 0x3ed6127400000000, 0x3fb0f0ed00000000, - 0xff6f7e2c00000000, 0x7c7a450500000000, 0xbca5cbc400000000, - 0xbdc3295d00000000, 0x7d1ca79c00000000, 0xa7a3352700000000, - 0x677cbbe600000000, 0x661a597f00000000, 0xa6c5d7be00000000, - 0x25d0ec9700000000, 0xe50f625600000000, 0xe46980cf00000000, - 0x24b60e0e00000000, 0xe242f69d00000000, 0x229d785c00000000, - 0x23fb9ac500000000, 0xe324140400000000, 0x60312f2d00000000, - 0xa0eea1ec00000000, 0xa188437500000000, 0x6157cdb400000000, - 0x6c67c38900000000, 0xacb84d4800000000, 0xaddeafd100000000, - 0x6d01211000000000, 0xee141a3900000000, 0x2ecb94f800000000, - 0x2fad766100000000, 0xef72f8a000000000, 0x2986003300000000, - 0xe9598ef200000000, 0xe83f6c6b00000000, 0x28e0e2aa00000000, - 0xabf5d98300000000, 0x6b2a574200000000, 0x6a4cb5db00000000, - 0xaa933b1a00000000}, - {0x0000000000000000, 0x6f4ca59b00000000, 0x9f9e3bec00000000, - 0xf0d29e7700000000, 0x7f3b060300000000, 0x1077a39800000000, - 0xe0a53def00000000, 0x8fe9987400000000, 0xfe760c0600000000, - 0x913aa99d00000000, 0x61e837ea00000000, 0x0ea4927100000000, - 0x814d0a0500000000, 0xee01af9e00000000, 0x1ed331e900000000, - 0x719f947200000000, 0xfced180c00000000, 0x93a1bd9700000000, - 0x637323e000000000, 0x0c3f867b00000000, 0x83d61e0f00000000, - 0xec9abb9400000000, 0x1c4825e300000000, 0x7304807800000000, - 0x029b140a00000000, 0x6dd7b19100000000, 0x9d052fe600000000, - 0xf2498a7d00000000, 0x7da0120900000000, 0x12ecb79200000000, - 0xe23e29e500000000, 0x8d728c7e00000000, 0xf8db311800000000, - 0x9797948300000000, 0x67450af400000000, 0x0809af6f00000000, - 0x87e0371b00000000, 0xe8ac928000000000, 0x187e0cf700000000, - 0x7732a96c00000000, 0x06ad3d1e00000000, 0x69e1988500000000, - 0x993306f200000000, 0xf67fa36900000000, 0x79963b1d00000000, - 0x16da9e8600000000, 0xe60800f100000000, 0x8944a56a00000000, - 0x0436291400000000, 0x6b7a8c8f00000000, 0x9ba812f800000000, - 0xf4e4b76300000000, 0x7b0d2f1700000000, 0x14418a8c00000000, - 0xe49314fb00000000, 0x8bdfb16000000000, 0xfa40251200000000, - 0x950c808900000000, 0x65de1efe00000000, 0x0a92bb6500000000, - 0x857b231100000000, 0xea37868a00000000, 0x1ae518fd00000000, - 0x75a9bd6600000000, 0xf0b7633000000000, 0x9ffbc6ab00000000, - 0x6f2958dc00000000, 0x0065fd4700000000, 0x8f8c653300000000, - 0xe0c0c0a800000000, 0x10125edf00000000, 0x7f5efb4400000000, - 0x0ec16f3600000000, 0x618dcaad00000000, 0x915f54da00000000, - 0xfe13f14100000000, 0x71fa693500000000, 0x1eb6ccae00000000, - 0xee6452d900000000, 0x8128f74200000000, 0x0c5a7b3c00000000, - 0x6316dea700000000, 0x93c440d000000000, 0xfc88e54b00000000, - 0x73617d3f00000000, 0x1c2dd8a400000000, 0xecff46d300000000, - 0x83b3e34800000000, 0xf22c773a00000000, 0x9d60d2a100000000, - 0x6db24cd600000000, 0x02fee94d00000000, 0x8d17713900000000, - 0xe25bd4a200000000, 0x12894ad500000000, 0x7dc5ef4e00000000, - 0x086c522800000000, 0x6720f7b300000000, 0x97f269c400000000, - 0xf8becc5f00000000, 0x7757542b00000000, 0x181bf1b000000000, - 0xe8c96fc700000000, 0x8785ca5c00000000, 0xf61a5e2e00000000, - 0x9956fbb500000000, 0x698465c200000000, 0x06c8c05900000000, - 0x8921582d00000000, 0xe66dfdb600000000, 0x16bf63c100000000, - 0x79f3c65a00000000, 0xf4814a2400000000, 0x9bcdefbf00000000, - 0x6b1f71c800000000, 0x0453d45300000000, 0x8bba4c2700000000, - 0xe4f6e9bc00000000, 0x142477cb00000000, 0x7b68d25000000000, - 0x0af7462200000000, 0x65bbe3b900000000, 0x95697dce00000000, - 0xfa25d85500000000, 0x75cc402100000000, 0x1a80e5ba00000000, - 0xea527bcd00000000, 0x851ede5600000000, 0xe06fc76000000000, - 0x8f2362fb00000000, 0x7ff1fc8c00000000, 0x10bd591700000000, - 0x9f54c16300000000, 0xf01864f800000000, 0x00cafa8f00000000, - 0x6f865f1400000000, 0x1e19cb6600000000, 0x71556efd00000000, - 0x8187f08a00000000, 0xeecb551100000000, 0x6122cd6500000000, - 0x0e6e68fe00000000, 0xfebcf68900000000, 0x91f0531200000000, - 0x1c82df6c00000000, 0x73ce7af700000000, 0x831ce48000000000, - 0xec50411b00000000, 0x63b9d96f00000000, 0x0cf57cf400000000, - 0xfc27e28300000000, 0x936b471800000000, 0xe2f4d36a00000000, - 0x8db876f100000000, 0x7d6ae88600000000, 0x12264d1d00000000, - 0x9dcfd56900000000, 0xf28370f200000000, 0x0251ee8500000000, - 0x6d1d4b1e00000000, 0x18b4f67800000000, 0x77f853e300000000, - 0x872acd9400000000, 0xe866680f00000000, 0x678ff07b00000000, - 0x08c355e000000000, 0xf811cb9700000000, 0x975d6e0c00000000, - 0xe6c2fa7e00000000, 0x898e5fe500000000, 0x795cc19200000000, - 0x1610640900000000, 0x99f9fc7d00000000, 0xf6b559e600000000, - 0x0667c79100000000, 0x692b620a00000000, 0xe459ee7400000000, - 0x8b154bef00000000, 0x7bc7d59800000000, 0x148b700300000000, - 0x9b62e87700000000, 0xf42e4dec00000000, 0x04fcd39b00000000, - 0x6bb0760000000000, 0x1a2fe27200000000, 0x756347e900000000, - 0x85b1d99e00000000, 0xeafd7c0500000000, 0x6514e47100000000, - 0x0a5841ea00000000, 0xfa8adf9d00000000, 0x95c67a0600000000, - 0x10d8a45000000000, 0x7f9401cb00000000, 0x8f469fbc00000000, - 0xe00a3a2700000000, 0x6fe3a25300000000, 0x00af07c800000000, - 0xf07d99bf00000000, 0x9f313c2400000000, 0xeeaea85600000000, - 0x81e20dcd00000000, 0x713093ba00000000, 0x1e7c362100000000, - 0x9195ae5500000000, 0xfed90bce00000000, 0x0e0b95b900000000, - 0x6147302200000000, 0xec35bc5c00000000, 0x837919c700000000, - 0x73ab87b000000000, 0x1ce7222b00000000, 0x930eba5f00000000, - 0xfc421fc400000000, 0x0c9081b300000000, 0x63dc242800000000, - 0x1243b05a00000000, 0x7d0f15c100000000, 0x8ddd8bb600000000, - 0xe2912e2d00000000, 0x6d78b65900000000, 0x023413c200000000, - 0xf2e68db500000000, 0x9daa282e00000000, 0xe803954800000000, - 0x874f30d300000000, 0x779daea400000000, 0x18d10b3f00000000, - 0x9738934b00000000, 0xf87436d000000000, 0x08a6a8a700000000, - 0x67ea0d3c00000000, 0x1675994e00000000, 0x79393cd500000000, - 0x89eba2a200000000, 0xe6a7073900000000, 0x694e9f4d00000000, - 0x06023ad600000000, 0xf6d0a4a100000000, 0x999c013a00000000, - 0x14ee8d4400000000, 0x7ba228df00000000, 0x8b70b6a800000000, - 0xe43c133300000000, 0x6bd58b4700000000, 0x04992edc00000000, - 0xf44bb0ab00000000, 0x9b07153000000000, 0xea98814200000000, - 0x85d424d900000000, 0x7506baae00000000, 0x1a4a1f3500000000, - 0x95a3874100000000, 0xfaef22da00000000, 0x0a3dbcad00000000, - 0x6571193600000000}, - {0x0000000000000000, 0x85d996dd00000000, 0x4bb55c6000000000, - 0xce6ccabd00000000, 0x966ab9c000000000, 0x13b32f1d00000000, - 0xdddfe5a000000000, 0x5806737d00000000, 0x6dd3035a00000000, - 0xe80a958700000000, 0x26665f3a00000000, 0xa3bfc9e700000000, - 0xfbb9ba9a00000000, 0x7e602c4700000000, 0xb00ce6fa00000000, - 0x35d5702700000000, 0xdaa607b400000000, 0x5f7f916900000000, - 0x91135bd400000000, 0x14cacd0900000000, 0x4cccbe7400000000, - 0xc91528a900000000, 0x0779e21400000000, 0x82a074c900000000, - 0xb77504ee00000000, 0x32ac923300000000, 0xfcc0588e00000000, - 0x7919ce5300000000, 0x211fbd2e00000000, 0xa4c62bf300000000, - 0x6aaae14e00000000, 0xef73779300000000, 0xf54b7eb300000000, - 0x7092e86e00000000, 0xbefe22d300000000, 0x3b27b40e00000000, - 0x6321c77300000000, 0xe6f851ae00000000, 0x28949b1300000000, - 0xad4d0dce00000000, 0x98987de900000000, 0x1d41eb3400000000, - 0xd32d218900000000, 0x56f4b75400000000, 0x0ef2c42900000000, - 0x8b2b52f400000000, 0x4547984900000000, 0xc09e0e9400000000, - 0x2fed790700000000, 0xaa34efda00000000, 0x6458256700000000, - 0xe181b3ba00000000, 0xb987c0c700000000, 0x3c5e561a00000000, - 0xf2329ca700000000, 0x77eb0a7a00000000, 0x423e7a5d00000000, - 0xc7e7ec8000000000, 0x098b263d00000000, 0x8c52b0e000000000, - 0xd454c39d00000000, 0x518d554000000000, 0x9fe19ffd00000000, - 0x1a38092000000000, 0xab918dbd00000000, 0x2e481b6000000000, - 0xe024d1dd00000000, 0x65fd470000000000, 0x3dfb347d00000000, - 0xb822a2a000000000, 0x764e681d00000000, 0xf397fec000000000, - 0xc6428ee700000000, 0x439b183a00000000, 0x8df7d28700000000, - 0x082e445a00000000, 0x5028372700000000, 0xd5f1a1fa00000000, - 0x1b9d6b4700000000, 0x9e44fd9a00000000, 0x71378a0900000000, - 0xf4ee1cd400000000, 0x3a82d66900000000, 0xbf5b40b400000000, - 0xe75d33c900000000, 0x6284a51400000000, 0xace86fa900000000, - 0x2931f97400000000, 0x1ce4895300000000, 0x993d1f8e00000000, - 0x5751d53300000000, 0xd28843ee00000000, 0x8a8e309300000000, - 0x0f57a64e00000000, 0xc13b6cf300000000, 0x44e2fa2e00000000, - 0x5edaf30e00000000, 0xdb0365d300000000, 0x156faf6e00000000, - 0x90b639b300000000, 0xc8b04ace00000000, 0x4d69dc1300000000, - 0x830516ae00000000, 0x06dc807300000000, 0x3309f05400000000, - 0xb6d0668900000000, 0x78bcac3400000000, 0xfd653ae900000000, - 0xa563499400000000, 0x20badf4900000000, 0xeed615f400000000, - 0x6b0f832900000000, 0x847cf4ba00000000, 0x01a5626700000000, - 0xcfc9a8da00000000, 0x4a103e0700000000, 0x12164d7a00000000, - 0x97cfdba700000000, 0x59a3111a00000000, 0xdc7a87c700000000, - 0xe9aff7e000000000, 0x6c76613d00000000, 0xa21aab8000000000, - 0x27c33d5d00000000, 0x7fc54e2000000000, 0xfa1cd8fd00000000, - 0x3470124000000000, 0xb1a9849d00000000, 0x17256aa000000000, - 0x92fcfc7d00000000, 0x5c9036c000000000, 0xd949a01d00000000, - 0x814fd36000000000, 0x049645bd00000000, 0xcafa8f0000000000, - 0x4f2319dd00000000, 0x7af669fa00000000, 0xff2fff2700000000, - 0x3143359a00000000, 0xb49aa34700000000, 0xec9cd03a00000000, - 0x694546e700000000, 0xa7298c5a00000000, 0x22f01a8700000000, - 0xcd836d1400000000, 0x485afbc900000000, 0x8636317400000000, - 0x03efa7a900000000, 0x5be9d4d400000000, 0xde30420900000000, - 0x105c88b400000000, 0x95851e6900000000, 0xa0506e4e00000000, - 0x2589f89300000000, 0xebe5322e00000000, 0x6e3ca4f300000000, - 0x363ad78e00000000, 0xb3e3415300000000, 0x7d8f8bee00000000, - 0xf8561d3300000000, 0xe26e141300000000, 0x67b782ce00000000, - 0xa9db487300000000, 0x2c02deae00000000, 0x7404add300000000, - 0xf1dd3b0e00000000, 0x3fb1f1b300000000, 0xba68676e00000000, - 0x8fbd174900000000, 0x0a64819400000000, 0xc4084b2900000000, - 0x41d1ddf400000000, 0x19d7ae8900000000, 0x9c0e385400000000, - 0x5262f2e900000000, 0xd7bb643400000000, 0x38c813a700000000, - 0xbd11857a00000000, 0x737d4fc700000000, 0xf6a4d91a00000000, - 0xaea2aa6700000000, 0x2b7b3cba00000000, 0xe517f60700000000, - 0x60ce60da00000000, 0x551b10fd00000000, 0xd0c2862000000000, - 0x1eae4c9d00000000, 0x9b77da4000000000, 0xc371a93d00000000, - 0x46a83fe000000000, 0x88c4f55d00000000, 0x0d1d638000000000, - 0xbcb4e71d00000000, 0x396d71c000000000, 0xf701bb7d00000000, - 0x72d82da000000000, 0x2ade5edd00000000, 0xaf07c80000000000, - 0x616b02bd00000000, 0xe4b2946000000000, 0xd167e44700000000, - 0x54be729a00000000, 0x9ad2b82700000000, 0x1f0b2efa00000000, - 0x470d5d8700000000, 0xc2d4cb5a00000000, 0x0cb801e700000000, - 0x8961973a00000000, 0x6612e0a900000000, 0xe3cb767400000000, - 0x2da7bcc900000000, 0xa87e2a1400000000, 0xf078596900000000, - 0x75a1cfb400000000, 0xbbcd050900000000, 0x3e1493d400000000, - 0x0bc1e3f300000000, 0x8e18752e00000000, 0x4074bf9300000000, - 0xc5ad294e00000000, 0x9dab5a3300000000, 0x1872ccee00000000, - 0xd61e065300000000, 0x53c7908e00000000, 0x49ff99ae00000000, - 0xcc260f7300000000, 0x024ac5ce00000000, 0x8793531300000000, - 0xdf95206e00000000, 0x5a4cb6b300000000, 0x94207c0e00000000, - 0x11f9ead300000000, 0x242c9af400000000, 0xa1f50c2900000000, - 0x6f99c69400000000, 0xea40504900000000, 0xb246233400000000, - 0x379fb5e900000000, 0xf9f37f5400000000, 0x7c2ae98900000000, - 0x93599e1a00000000, 0x168008c700000000, 0xd8ecc27a00000000, - 0x5d3554a700000000, 0x053327da00000000, 0x80eab10700000000, - 0x4e867bba00000000, 0xcb5fed6700000000, 0xfe8a9d4000000000, - 0x7b530b9d00000000, 0xb53fc12000000000, 0x30e657fd00000000, - 0x68e0248000000000, 0xed39b25d00000000, 0x235578e000000000, - 0xa68cee3d00000000}, - {0x0000000000000000, 0x76e10f9d00000000, 0xadc46ee100000000, - 0xdb25617c00000000, 0x1b8fac1900000000, 0x6d6ea38400000000, - 0xb64bc2f800000000, 0xc0aacd6500000000, 0x361e593300000000, - 0x40ff56ae00000000, 0x9bda37d200000000, 0xed3b384f00000000, - 0x2d91f52a00000000, 0x5b70fab700000000, 0x80559bcb00000000, - 0xf6b4945600000000, 0x6c3cb26600000000, 0x1addbdfb00000000, - 0xc1f8dc8700000000, 0xb719d31a00000000, 0x77b31e7f00000000, - 0x015211e200000000, 0xda77709e00000000, 0xac967f0300000000, - 0x5a22eb5500000000, 0x2cc3e4c800000000, 0xf7e685b400000000, - 0x81078a2900000000, 0x41ad474c00000000, 0x374c48d100000000, - 0xec6929ad00000000, 0x9a88263000000000, 0xd87864cd00000000, - 0xae996b5000000000, 0x75bc0a2c00000000, 0x035d05b100000000, - 0xc3f7c8d400000000, 0xb516c74900000000, 0x6e33a63500000000, - 0x18d2a9a800000000, 0xee663dfe00000000, 0x9887326300000000, - 0x43a2531f00000000, 0x35435c8200000000, 0xf5e991e700000000, - 0x83089e7a00000000, 0x582dff0600000000, 0x2eccf09b00000000, - 0xb444d6ab00000000, 0xc2a5d93600000000, 0x1980b84a00000000, - 0x6f61b7d700000000, 0xafcb7ab200000000, 0xd92a752f00000000, - 0x020f145300000000, 0x74ee1bce00000000, 0x825a8f9800000000, - 0xf4bb800500000000, 0x2f9ee17900000000, 0x597feee400000000, - 0x99d5238100000000, 0xef342c1c00000000, 0x34114d6000000000, - 0x42f042fd00000000, 0xf1f7b94100000000, 0x8716b6dc00000000, - 0x5c33d7a000000000, 0x2ad2d83d00000000, 0xea78155800000000, - 0x9c991ac500000000, 0x47bc7bb900000000, 0x315d742400000000, - 0xc7e9e07200000000, 0xb108efef00000000, 0x6a2d8e9300000000, - 0x1ccc810e00000000, 0xdc664c6b00000000, 0xaa8743f600000000, - 0x71a2228a00000000, 0x07432d1700000000, 0x9dcb0b2700000000, - 0xeb2a04ba00000000, 0x300f65c600000000, 0x46ee6a5b00000000, - 0x8644a73e00000000, 0xf0a5a8a300000000, 0x2b80c9df00000000, - 0x5d61c64200000000, 0xabd5521400000000, 0xdd345d8900000000, - 0x06113cf500000000, 0x70f0336800000000, 0xb05afe0d00000000, - 0xc6bbf19000000000, 0x1d9e90ec00000000, 0x6b7f9f7100000000, - 0x298fdd8c00000000, 0x5f6ed21100000000, 0x844bb36d00000000, - 0xf2aabcf000000000, 0x3200719500000000, 0x44e17e0800000000, - 0x9fc41f7400000000, 0xe92510e900000000, 0x1f9184bf00000000, - 0x69708b2200000000, 0xb255ea5e00000000, 0xc4b4e5c300000000, - 0x041e28a600000000, 0x72ff273b00000000, 0xa9da464700000000, - 0xdf3b49da00000000, 0x45b36fea00000000, 0x3352607700000000, - 0xe877010b00000000, 0x9e960e9600000000, 0x5e3cc3f300000000, - 0x28ddcc6e00000000, 0xf3f8ad1200000000, 0x8519a28f00000000, - 0x73ad36d900000000, 0x054c394400000000, 0xde69583800000000, - 0xa88857a500000000, 0x68229ac000000000, 0x1ec3955d00000000, - 0xc5e6f42100000000, 0xb307fbbc00000000, 0xe2ef738300000000, - 0x940e7c1e00000000, 0x4f2b1d6200000000, 0x39ca12ff00000000, - 0xf960df9a00000000, 0x8f81d00700000000, 0x54a4b17b00000000, - 0x2245bee600000000, 0xd4f12ab000000000, 0xa210252d00000000, - 0x7935445100000000, 0x0fd44bcc00000000, 0xcf7e86a900000000, - 0xb99f893400000000, 0x62bae84800000000, 0x145be7d500000000, - 0x8ed3c1e500000000, 0xf832ce7800000000, 0x2317af0400000000, - 0x55f6a09900000000, 0x955c6dfc00000000, 0xe3bd626100000000, - 0x3898031d00000000, 0x4e790c8000000000, 0xb8cd98d600000000, - 0xce2c974b00000000, 0x1509f63700000000, 0x63e8f9aa00000000, - 0xa34234cf00000000, 0xd5a33b5200000000, 0x0e865a2e00000000, - 0x786755b300000000, 0x3a97174e00000000, 0x4c7618d300000000, - 0x975379af00000000, 0xe1b2763200000000, 0x2118bb5700000000, - 0x57f9b4ca00000000, 0x8cdcd5b600000000, 0xfa3dda2b00000000, - 0x0c894e7d00000000, 0x7a6841e000000000, 0xa14d209c00000000, - 0xd7ac2f0100000000, 0x1706e26400000000, 0x61e7edf900000000, - 0xbac28c8500000000, 0xcc23831800000000, 0x56aba52800000000, - 0x204aaab500000000, 0xfb6fcbc900000000, 0x8d8ec45400000000, - 0x4d24093100000000, 0x3bc506ac00000000, 0xe0e067d000000000, - 0x9601684d00000000, 0x60b5fc1b00000000, 0x1654f38600000000, - 0xcd7192fa00000000, 0xbb909d6700000000, 0x7b3a500200000000, - 0x0ddb5f9f00000000, 0xd6fe3ee300000000, 0xa01f317e00000000, - 0x1318cac200000000, 0x65f9c55f00000000, 0xbedca42300000000, - 0xc83dabbe00000000, 0x089766db00000000, 0x7e76694600000000, - 0xa553083a00000000, 0xd3b207a700000000, 0x250693f100000000, - 0x53e79c6c00000000, 0x88c2fd1000000000, 0xfe23f28d00000000, - 0x3e893fe800000000, 0x4868307500000000, 0x934d510900000000, - 0xe5ac5e9400000000, 0x7f2478a400000000, 0x09c5773900000000, - 0xd2e0164500000000, 0xa40119d800000000, 0x64abd4bd00000000, - 0x124adb2000000000, 0xc96fba5c00000000, 0xbf8eb5c100000000, - 0x493a219700000000, 0x3fdb2e0a00000000, 0xe4fe4f7600000000, - 0x921f40eb00000000, 0x52b58d8e00000000, 0x2454821300000000, - 0xff71e36f00000000, 0x8990ecf200000000, 0xcb60ae0f00000000, - 0xbd81a19200000000, 0x66a4c0ee00000000, 0x1045cf7300000000, - 0xd0ef021600000000, 0xa60e0d8b00000000, 0x7d2b6cf700000000, - 0x0bca636a00000000, 0xfd7ef73c00000000, 0x8b9ff8a100000000, - 0x50ba99dd00000000, 0x265b964000000000, 0xe6f15b2500000000, - 0x901054b800000000, 0x4b3535c400000000, 0x3dd43a5900000000, - 0xa75c1c6900000000, 0xd1bd13f400000000, 0x0a98728800000000, - 0x7c797d1500000000, 0xbcd3b07000000000, 0xca32bfed00000000, - 0x1117de9100000000, 0x67f6d10c00000000, 0x9142455a00000000, - 0xe7a34ac700000000, 0x3c862bbb00000000, 0x4a67242600000000, - 0x8acde94300000000, 0xfc2ce6de00000000, 0x270987a200000000, - 0x51e8883f00000000}, - {0x0000000000000000, 0xe8dbfbb900000000, 0x91b186a800000000, - 0x796a7d1100000000, 0x63657c8a00000000, 0x8bbe873300000000, - 0xf2d4fa2200000000, 0x1a0f019b00000000, 0x87cc89cf00000000, - 0x6f17727600000000, 0x167d0f6700000000, 0xfea6f4de00000000, - 0xe4a9f54500000000, 0x0c720efc00000000, 0x751873ed00000000, - 0x9dc3885400000000, 0x4f9f624400000000, 0xa74499fd00000000, - 0xde2ee4ec00000000, 0x36f51f5500000000, 0x2cfa1ece00000000, - 0xc421e57700000000, 0xbd4b986600000000, 0x559063df00000000, - 0xc853eb8b00000000, 0x2088103200000000, 0x59e26d2300000000, - 0xb139969a00000000, 0xab36970100000000, 0x43ed6cb800000000, - 0x3a8711a900000000, 0xd25cea1000000000, 0x9e3ec58800000000, - 0x76e53e3100000000, 0x0f8f432000000000, 0xe754b89900000000, - 0xfd5bb90200000000, 0x158042bb00000000, 0x6cea3faa00000000, - 0x8431c41300000000, 0x19f24c4700000000, 0xf129b7fe00000000, - 0x8843caef00000000, 0x6098315600000000, 0x7a9730cd00000000, - 0x924ccb7400000000, 0xeb26b66500000000, 0x03fd4ddc00000000, - 0xd1a1a7cc00000000, 0x397a5c7500000000, 0x4010216400000000, - 0xa8cbdadd00000000, 0xb2c4db4600000000, 0x5a1f20ff00000000, - 0x23755dee00000000, 0xcbaea65700000000, 0x566d2e0300000000, - 0xbeb6d5ba00000000, 0xc7dca8ab00000000, 0x2f07531200000000, - 0x3508528900000000, 0xddd3a93000000000, 0xa4b9d42100000000, - 0x4c622f9800000000, 0x7d7bfbca00000000, 0x95a0007300000000, - 0xecca7d6200000000, 0x041186db00000000, 0x1e1e874000000000, - 0xf6c57cf900000000, 0x8faf01e800000000, 0x6774fa5100000000, - 0xfab7720500000000, 0x126c89bc00000000, 0x6b06f4ad00000000, - 0x83dd0f1400000000, 0x99d20e8f00000000, 0x7109f53600000000, - 0x0863882700000000, 0xe0b8739e00000000, 0x32e4998e00000000, - 0xda3f623700000000, 0xa3551f2600000000, 0x4b8ee49f00000000, - 0x5181e50400000000, 0xb95a1ebd00000000, 0xc03063ac00000000, - 0x28eb981500000000, 0xb528104100000000, 0x5df3ebf800000000, - 0x249996e900000000, 0xcc426d5000000000, 0xd64d6ccb00000000, - 0x3e96977200000000, 0x47fcea6300000000, 0xaf2711da00000000, - 0xe3453e4200000000, 0x0b9ec5fb00000000, 0x72f4b8ea00000000, - 0x9a2f435300000000, 0x802042c800000000, 0x68fbb97100000000, - 0x1191c46000000000, 0xf94a3fd900000000, 0x6489b78d00000000, - 0x8c524c3400000000, 0xf538312500000000, 0x1de3ca9c00000000, - 0x07eccb0700000000, 0xef3730be00000000, 0x965d4daf00000000, - 0x7e86b61600000000, 0xacda5c0600000000, 0x4401a7bf00000000, - 0x3d6bdaae00000000, 0xd5b0211700000000, 0xcfbf208c00000000, - 0x2764db3500000000, 0x5e0ea62400000000, 0xb6d55d9d00000000, - 0x2b16d5c900000000, 0xc3cd2e7000000000, 0xbaa7536100000000, - 0x527ca8d800000000, 0x4873a94300000000, 0xa0a852fa00000000, - 0xd9c22feb00000000, 0x3119d45200000000, 0xbbf0874e00000000, - 0x532b7cf700000000, 0x2a4101e600000000, 0xc29afa5f00000000, - 0xd895fbc400000000, 0x304e007d00000000, 0x49247d6c00000000, - 0xa1ff86d500000000, 0x3c3c0e8100000000, 0xd4e7f53800000000, - 0xad8d882900000000, 0x4556739000000000, 0x5f59720b00000000, - 0xb78289b200000000, 0xcee8f4a300000000, 0x26330f1a00000000, - 0xf46fe50a00000000, 0x1cb41eb300000000, 0x65de63a200000000, - 0x8d05981b00000000, 0x970a998000000000, 0x7fd1623900000000, - 0x06bb1f2800000000, 0xee60e49100000000, 0x73a36cc500000000, - 0x9b78977c00000000, 0xe212ea6d00000000, 0x0ac911d400000000, - 0x10c6104f00000000, 0xf81debf600000000, 0x817796e700000000, - 0x69ac6d5e00000000, 0x25ce42c600000000, 0xcd15b97f00000000, - 0xb47fc46e00000000, 0x5ca43fd700000000, 0x46ab3e4c00000000, - 0xae70c5f500000000, 0xd71ab8e400000000, 0x3fc1435d00000000, - 0xa202cb0900000000, 0x4ad930b000000000, 0x33b34da100000000, - 0xdb68b61800000000, 0xc167b78300000000, 0x29bc4c3a00000000, - 0x50d6312b00000000, 0xb80dca9200000000, 0x6a51208200000000, - 0x828adb3b00000000, 0xfbe0a62a00000000, 0x133b5d9300000000, - 0x09345c0800000000, 0xe1efa7b100000000, 0x9885daa000000000, - 0x705e211900000000, 0xed9da94d00000000, 0x054652f400000000, - 0x7c2c2fe500000000, 0x94f7d45c00000000, 0x8ef8d5c700000000, - 0x66232e7e00000000, 0x1f49536f00000000, 0xf792a8d600000000, - 0xc68b7c8400000000, 0x2e50873d00000000, 0x573afa2c00000000, - 0xbfe1019500000000, 0xa5ee000e00000000, 0x4d35fbb700000000, - 0x345f86a600000000, 0xdc847d1f00000000, 0x4147f54b00000000, - 0xa99c0ef200000000, 0xd0f673e300000000, 0x382d885a00000000, - 0x222289c100000000, 0xcaf9727800000000, 0xb3930f6900000000, - 0x5b48f4d000000000, 0x89141ec000000000, 0x61cfe57900000000, - 0x18a5986800000000, 0xf07e63d100000000, 0xea71624a00000000, - 0x02aa99f300000000, 0x7bc0e4e200000000, 0x931b1f5b00000000, - 0x0ed8970f00000000, 0xe6036cb600000000, 0x9f6911a700000000, - 0x77b2ea1e00000000, 0x6dbdeb8500000000, 0x8566103c00000000, - 0xfc0c6d2d00000000, 0x14d7969400000000, 0x58b5b90c00000000, - 0xb06e42b500000000, 0xc9043fa400000000, 0x21dfc41d00000000, - 0x3bd0c58600000000, 0xd30b3e3f00000000, 0xaa61432e00000000, - 0x42bab89700000000, 0xdf7930c300000000, 0x37a2cb7a00000000, - 0x4ec8b66b00000000, 0xa6134dd200000000, 0xbc1c4c4900000000, - 0x54c7b7f000000000, 0x2dadcae100000000, 0xc576315800000000, - 0x172adb4800000000, 0xfff120f100000000, 0x869b5de000000000, - 0x6e40a65900000000, 0x744fa7c200000000, 0x9c945c7b00000000, - 0xe5fe216a00000000, 0x0d25dad300000000, 0x90e6528700000000, - 0x783da93e00000000, 0x0157d42f00000000, 0xe98c2f9600000000, - 0xf3832e0d00000000, 0x1b58d5b400000000, 0x6232a8a500000000, - 0x8ae9531c00000000}, - {0x0000000000000000, 0x919168ae00000000, 0x6325a08700000000, - 0xf2b4c82900000000, 0x874c31d400000000, 0x16dd597a00000000, - 0xe469915300000000, 0x75f8f9fd00000000, 0x4f9f137300000000, - 0xde0e7bdd00000000, 0x2cbab3f400000000, 0xbd2bdb5a00000000, - 0xc8d322a700000000, 0x59424a0900000000, 0xabf6822000000000, - 0x3a67ea8e00000000, 0x9e3e27e600000000, 0x0faf4f4800000000, - 0xfd1b876100000000, 0x6c8aefcf00000000, 0x1972163200000000, - 0x88e37e9c00000000, 0x7a57b6b500000000, 0xebc6de1b00000000, - 0xd1a1349500000000, 0x40305c3b00000000, 0xb284941200000000, - 0x2315fcbc00000000, 0x56ed054100000000, 0xc77c6def00000000, - 0x35c8a5c600000000, 0xa459cd6800000000, 0x7d7b3f1700000000, - 0xecea57b900000000, 0x1e5e9f9000000000, 0x8fcff73e00000000, - 0xfa370ec300000000, 0x6ba6666d00000000, 0x9912ae4400000000, - 0x0883c6ea00000000, 0x32e42c6400000000, 0xa37544ca00000000, - 0x51c18ce300000000, 0xc050e44d00000000, 0xb5a81db000000000, - 0x2439751e00000000, 0xd68dbd3700000000, 0x471cd59900000000, - 0xe34518f100000000, 0x72d4705f00000000, 0x8060b87600000000, - 0x11f1d0d800000000, 0x6409292500000000, 0xf598418b00000000, - 0x072c89a200000000, 0x96bde10c00000000, 0xacda0b8200000000, - 0x3d4b632c00000000, 0xcfffab0500000000, 0x5e6ec3ab00000000, - 0x2b963a5600000000, 0xba0752f800000000, 0x48b39ad100000000, - 0xd922f27f00000000, 0xfaf67e2e00000000, 0x6b67168000000000, - 0x99d3dea900000000, 0x0842b60700000000, 0x7dba4ffa00000000, - 0xec2b275400000000, 0x1e9fef7d00000000, 0x8f0e87d300000000, - 0xb5696d5d00000000, 0x24f805f300000000, 0xd64ccdda00000000, - 0x47dda57400000000, 0x32255c8900000000, 0xa3b4342700000000, - 0x5100fc0e00000000, 0xc09194a000000000, 0x64c859c800000000, - 0xf559316600000000, 0x07edf94f00000000, 0x967c91e100000000, - 0xe384681c00000000, 0x721500b200000000, 0x80a1c89b00000000, - 0x1130a03500000000, 0x2b574abb00000000, 0xbac6221500000000, - 0x4872ea3c00000000, 0xd9e3829200000000, 0xac1b7b6f00000000, - 0x3d8a13c100000000, 0xcf3edbe800000000, 0x5eafb34600000000, - 0x878d413900000000, 0x161c299700000000, 0xe4a8e1be00000000, - 0x7539891000000000, 0x00c170ed00000000, 0x9150184300000000, - 0x63e4d06a00000000, 0xf275b8c400000000, 0xc812524a00000000, - 0x59833ae400000000, 0xab37f2cd00000000, 0x3aa69a6300000000, - 0x4f5e639e00000000, 0xdecf0b3000000000, 0x2c7bc31900000000, - 0xbdeaabb700000000, 0x19b366df00000000, 0x88220e7100000000, - 0x7a96c65800000000, 0xeb07aef600000000, 0x9eff570b00000000, - 0x0f6e3fa500000000, 0xfddaf78c00000000, 0x6c4b9f2200000000, - 0x562c75ac00000000, 0xc7bd1d0200000000, 0x3509d52b00000000, - 0xa498bd8500000000, 0xd160447800000000, 0x40f12cd600000000, - 0xb245e4ff00000000, 0x23d48c5100000000, 0xf4edfd5c00000000, - 0x657c95f200000000, 0x97c85ddb00000000, 0x0659357500000000, - 0x73a1cc8800000000, 0xe230a42600000000, 0x10846c0f00000000, - 0x811504a100000000, 0xbb72ee2f00000000, 0x2ae3868100000000, - 0xd8574ea800000000, 0x49c6260600000000, 0x3c3edffb00000000, - 0xadafb75500000000, 0x5f1b7f7c00000000, 0xce8a17d200000000, - 0x6ad3daba00000000, 0xfb42b21400000000, 0x09f67a3d00000000, - 0x9867129300000000, 0xed9feb6e00000000, 0x7c0e83c000000000, - 0x8eba4be900000000, 0x1f2b234700000000, 0x254cc9c900000000, - 0xb4dda16700000000, 0x4669694e00000000, 0xd7f801e000000000, - 0xa200f81d00000000, 0x339190b300000000, 0xc125589a00000000, - 0x50b4303400000000, 0x8996c24b00000000, 0x1807aae500000000, - 0xeab362cc00000000, 0x7b220a6200000000, 0x0edaf39f00000000, - 0x9f4b9b3100000000, 0x6dff531800000000, 0xfc6e3bb600000000, - 0xc609d13800000000, 0x5798b99600000000, 0xa52c71bf00000000, - 0x34bd191100000000, 0x4145e0ec00000000, 0xd0d4884200000000, - 0x2260406b00000000, 0xb3f128c500000000, 0x17a8e5ad00000000, - 0x86398d0300000000, 0x748d452a00000000, 0xe51c2d8400000000, - 0x90e4d47900000000, 0x0175bcd700000000, 0xf3c174fe00000000, - 0x62501c5000000000, 0x5837f6de00000000, 0xc9a69e7000000000, - 0x3b12565900000000, 0xaa833ef700000000, 0xdf7bc70a00000000, - 0x4eeaafa400000000, 0xbc5e678d00000000, 0x2dcf0f2300000000, - 0x0e1b837200000000, 0x9f8aebdc00000000, 0x6d3e23f500000000, - 0xfcaf4b5b00000000, 0x8957b2a600000000, 0x18c6da0800000000, - 0xea72122100000000, 0x7be37a8f00000000, 0x4184900100000000, - 0xd015f8af00000000, 0x22a1308600000000, 0xb330582800000000, - 0xc6c8a1d500000000, 0x5759c97b00000000, 0xa5ed015200000000, - 0x347c69fc00000000, 0x9025a49400000000, 0x01b4cc3a00000000, - 0xf300041300000000, 0x62916cbd00000000, 0x1769954000000000, - 0x86f8fdee00000000, 0x744c35c700000000, 0xe5dd5d6900000000, - 0xdfbab7e700000000, 0x4e2bdf4900000000, 0xbc9f176000000000, - 0x2d0e7fce00000000, 0x58f6863300000000, 0xc967ee9d00000000, - 0x3bd326b400000000, 0xaa424e1a00000000, 0x7360bc6500000000, - 0xe2f1d4cb00000000, 0x10451ce200000000, 0x81d4744c00000000, - 0xf42c8db100000000, 0x65bde51f00000000, 0x97092d3600000000, - 0x0698459800000000, 0x3cffaf1600000000, 0xad6ec7b800000000, - 0x5fda0f9100000000, 0xce4b673f00000000, 0xbbb39ec200000000, - 0x2a22f66c00000000, 0xd8963e4500000000, 0x490756eb00000000, - 0xed5e9b8300000000, 0x7ccff32d00000000, 0x8e7b3b0400000000, - 0x1fea53aa00000000, 0x6a12aa5700000000, 0xfb83c2f900000000, - 0x09370ad000000000, 0x98a6627e00000000, 0xa2c188f000000000, - 0x3350e05e00000000, 0xc1e4287700000000, 0x507540d900000000, - 0x258db92400000000, 0xb41cd18a00000000, 0x46a819a300000000, - 0xd739710d00000000}}; + {0x0000000000000000, 0x43147b1700000000, 0x8628f62e00000000, + 0xc53c8d3900000000, 0x0c51ec5d00000000, 0x4f45974a00000000, + 0x8a791a7300000000, 0xc96d616400000000, 0x18a2d8bb00000000, + 0x5bb6a3ac00000000, 0x9e8a2e9500000000, 0xdd9e558200000000, + 0x14f334e600000000, 0x57e74ff100000000, 0x92dbc2c800000000, + 0xd1cfb9df00000000, 0x7142c0ac00000000, 0x3256bbbb00000000, + 0xf76a368200000000, 0xb47e4d9500000000, 0x7d132cf100000000, + 0x3e0757e600000000, 0xfb3bdadf00000000, 0xb82fa1c800000000, + 0x69e0181700000000, 0x2af4630000000000, 0xefc8ee3900000000, + 0xacdc952e00000000, 0x65b1f44a00000000, 0x26a58f5d00000000, + 0xe399026400000000, 0xa08d797300000000, 0xa382f18200000000, + 0xe0968a9500000000, 0x25aa07ac00000000, 0x66be7cbb00000000, + 0xafd31ddf00000000, 0xecc766c800000000, 0x29fbebf100000000, + 0x6aef90e600000000, 0xbb20293900000000, 0xf834522e00000000, + 0x3d08df1700000000, 0x7e1ca40000000000, 0xb771c56400000000, + 0xf465be7300000000, 0x3159334a00000000, 0x724d485d00000000, + 0xd2c0312e00000000, 0x91d44a3900000000, 0x54e8c70000000000, + 0x17fcbc1700000000, 0xde91dd7300000000, 0x9d85a66400000000, + 0x58b92b5d00000000, 0x1bad504a00000000, 0xca62e99500000000, + 0x8976928200000000, 0x4c4a1fbb00000000, 0x0f5e64ac00000000, + 0xc63305c800000000, 0x85277edf00000000, 0x401bf3e600000000, + 0x030f88f100000000, 0x070392de00000000, 0x4417e9c900000000, + 0x812b64f000000000, 0xc23f1fe700000000, 0x0b527e8300000000, + 0x4846059400000000, 0x8d7a88ad00000000, 0xce6ef3ba00000000, + 0x1fa14a6500000000, 0x5cb5317200000000, 0x9989bc4b00000000, + 0xda9dc75c00000000, 0x13f0a63800000000, 0x50e4dd2f00000000, + 0x95d8501600000000, 0xd6cc2b0100000000, 0x7641527200000000, + 0x3555296500000000, 0xf069a45c00000000, 0xb37ddf4b00000000, + 0x7a10be2f00000000, 0x3904c53800000000, 0xfc38480100000000, + 0xbf2c331600000000, 0x6ee38ac900000000, 0x2df7f1de00000000, + 0xe8cb7ce700000000, 0xabdf07f000000000, 0x62b2669400000000, + 0x21a61d8300000000, 0xe49a90ba00000000, 0xa78eebad00000000, + 0xa481635c00000000, 0xe795184b00000000, 0x22a9957200000000, + 0x61bdee6500000000, 0xa8d08f0100000000, 0xebc4f41600000000, + 0x2ef8792f00000000, 0x6dec023800000000, 0xbc23bbe700000000, + 0xff37c0f000000000, 0x3a0b4dc900000000, 0x791f36de00000000, + 0xb07257ba00000000, 0xf3662cad00000000, 0x365aa19400000000, + 0x754eda8300000000, 0xd5c3a3f000000000, 0x96d7d8e700000000, + 0x53eb55de00000000, 0x10ff2ec900000000, 0xd9924fad00000000, + 0x9a8634ba00000000, 0x5fbab98300000000, 0x1caec29400000000, + 0xcd617b4b00000000, 0x8e75005c00000000, 0x4b498d6500000000, + 0x085df67200000000, 0xc130971600000000, 0x8224ec0100000000, + 0x4718613800000000, 0x040c1a2f00000000, 0x4f00556600000000, + 0x0c142e7100000000, 0xc928a34800000000, 0x8a3cd85f00000000, + 0x4351b93b00000000, 0x0045c22c00000000, 0xc5794f1500000000, + 0x866d340200000000, 0x57a28ddd00000000, 0x14b6f6ca00000000, + 0xd18a7bf300000000, 0x929e00e400000000, 0x5bf3618000000000, + 0x18e71a9700000000, 0xdddb97ae00000000, 0x9ecfecb900000000, + 0x3e4295ca00000000, 0x7d56eedd00000000, 0xb86a63e400000000, + 0xfb7e18f300000000, 0x3213799700000000, 0x7107028000000000, + 0xb43b8fb900000000, 0xf72ff4ae00000000, 0x26e04d7100000000, + 0x65f4366600000000, 0xa0c8bb5f00000000, 0xe3dcc04800000000, + 0x2ab1a12c00000000, 0x69a5da3b00000000, 0xac99570200000000, + 0xef8d2c1500000000, 0xec82a4e400000000, 0xaf96dff300000000, + 0x6aaa52ca00000000, 0x29be29dd00000000, 0xe0d348b900000000, + 0xa3c733ae00000000, 0x66fbbe9700000000, 0x25efc58000000000, + 0xf4207c5f00000000, 0xb734074800000000, 0x72088a7100000000, + 0x311cf16600000000, 0xf871900200000000, 0xbb65eb1500000000, + 0x7e59662c00000000, 0x3d4d1d3b00000000, 0x9dc0644800000000, + 0xded41f5f00000000, 0x1be8926600000000, 0x58fce97100000000, + 0x9191881500000000, 0xd285f30200000000, 0x17b97e3b00000000, + 0x54ad052c00000000, 0x8562bcf300000000, 0xc676c7e400000000, + 0x034a4add00000000, 0x405e31ca00000000, 0x893350ae00000000, + 0xca272bb900000000, 0x0f1ba68000000000, 0x4c0fdd9700000000, + 0x4803c7b800000000, 0x0b17bcaf00000000, 0xce2b319600000000, + 0x8d3f4a8100000000, 0x44522be500000000, 0x074650f200000000, + 0xc27addcb00000000, 0x816ea6dc00000000, 0x50a11f0300000000, + 0x13b5641400000000, 0xd689e92d00000000, 0x959d923a00000000, + 0x5cf0f35e00000000, 0x1fe4884900000000, 0xdad8057000000000, + 0x99cc7e6700000000, 0x3941071400000000, 0x7a557c0300000000, + 0xbf69f13a00000000, 0xfc7d8a2d00000000, 0x3510eb4900000000, + 0x7604905e00000000, 0xb3381d6700000000, 0xf02c667000000000, + 0x21e3dfaf00000000, 0x62f7a4b800000000, 0xa7cb298100000000, + 0xe4df529600000000, 0x2db233f200000000, 0x6ea648e500000000, + 0xab9ac5dc00000000, 0xe88ebecb00000000, 0xeb81363a00000000, + 0xa8954d2d00000000, 0x6da9c01400000000, 0x2ebdbb0300000000, + 0xe7d0da6700000000, 0xa4c4a17000000000, 0x61f82c4900000000, + 0x22ec575e00000000, 0xf323ee8100000000, 0xb037959600000000, + 0x750b18af00000000, 0x361f63b800000000, 0xff7202dc00000000, + 0xbc6679cb00000000, 0x795af4f200000000, 0x3a4e8fe500000000, + 0x9ac3f69600000000, 0xd9d78d8100000000, 0x1ceb00b800000000, + 0x5fff7baf00000000, 0x96921acb00000000, 0xd58661dc00000000, + 0x10baece500000000, 0x53ae97f200000000, 0x82612e2d00000000, + 0xc175553a00000000, 0x0449d80300000000, 0x475da31400000000, + 0x8e30c27000000000, 0xcd24b96700000000, 0x0818345e00000000, + 0x4b0c4f4900000000}, + {0x0000000000000000, 0x3e6bc2ef00000000, 0x3dd0f50400000000, + 0x03bb37eb00000000, 0x7aa0eb0900000000, 0x44cb29e600000000, + 0x47701e0d00000000, 0x791bdce200000000, 0xf440d71300000000, + 0xca2b15fc00000000, 0xc990221700000000, 0xf7fbe0f800000000, + 0x8ee03c1a00000000, 0xb08bfef500000000, 0xb330c91e00000000, + 0x8d5b0bf100000000, 0xe881ae2700000000, 0xd6ea6cc800000000, + 0xd5515b2300000000, 0xeb3a99cc00000000, 0x9221452e00000000, + 0xac4a87c100000000, 0xaff1b02a00000000, 0x919a72c500000000, + 0x1cc1793400000000, 0x22aabbdb00000000, 0x21118c3000000000, + 0x1f7a4edf00000000, 0x6661923d00000000, 0x580a50d200000000, + 0x5bb1673900000000, 0x65daa5d600000000, 0xd0035d4f00000000, + 0xee689fa000000000, 0xedd3a84b00000000, 0xd3b86aa400000000, + 0xaaa3b64600000000, 0x94c874a900000000, 0x9773434200000000, + 0xa91881ad00000000, 0x24438a5c00000000, 0x1a2848b300000000, + 0x19937f5800000000, 0x27f8bdb700000000, 0x5ee3615500000000, + 0x6088a3ba00000000, 0x6333945100000000, 0x5d5856be00000000, + 0x3882f36800000000, 0x06e9318700000000, 0x0552066c00000000, + 0x3b39c48300000000, 0x4222186100000000, 0x7c49da8e00000000, + 0x7ff2ed6500000000, 0x41992f8a00000000, 0xccc2247b00000000, + 0xf2a9e69400000000, 0xf112d17f00000000, 0xcf79139000000000, + 0xb662cf7200000000, 0x88090d9d00000000, 0x8bb23a7600000000, + 0xb5d9f89900000000, 0xa007ba9e00000000, 0x9e6c787100000000, + 0x9dd74f9a00000000, 0xa3bc8d7500000000, 0xdaa7519700000000, + 0xe4cc937800000000, 0xe777a49300000000, 0xd91c667c00000000, + 0x54476d8d00000000, 0x6a2caf6200000000, 0x6997988900000000, + 0x57fc5a6600000000, 0x2ee7868400000000, 0x108c446b00000000, + 0x1337738000000000, 0x2d5cb16f00000000, 0x488614b900000000, + 0x76edd65600000000, 0x7556e1bd00000000, 0x4b3d235200000000, + 0x3226ffb000000000, 0x0c4d3d5f00000000, 0x0ff60ab400000000, + 0x319dc85b00000000, 0xbcc6c3aa00000000, 0x82ad014500000000, + 0x811636ae00000000, 0xbf7df44100000000, 0xc66628a300000000, + 0xf80dea4c00000000, 0xfbb6dda700000000, 0xc5dd1f4800000000, + 0x7004e7d100000000, 0x4e6f253e00000000, 0x4dd412d500000000, + 0x73bfd03a00000000, 0x0aa40cd800000000, 0x34cfce3700000000, + 0x3774f9dc00000000, 0x091f3b3300000000, 0x844430c200000000, + 0xba2ff22d00000000, 0xb994c5c600000000, 0x87ff072900000000, + 0xfee4dbcb00000000, 0xc08f192400000000, 0xc3342ecf00000000, + 0xfd5fec2000000000, 0x988549f600000000, 0xa6ee8b1900000000, + 0xa555bcf200000000, 0x9b3e7e1d00000000, 0xe225a2ff00000000, + 0xdc4e601000000000, 0xdff557fb00000000, 0xe19e951400000000, + 0x6cc59ee500000000, 0x52ae5c0a00000000, 0x51156be100000000, + 0x6f7ea90e00000000, 0x166575ec00000000, 0x280eb70300000000, + 0x2bb580e800000000, 0x15de420700000000, 0x010905e600000000, + 0x3f62c70900000000, 0x3cd9f0e200000000, 0x02b2320d00000000, + 0x7ba9eeef00000000, 0x45c22c0000000000, 0x46791beb00000000, + 0x7812d90400000000, 0xf549d2f500000000, 0xcb22101a00000000, + 0xc89927f100000000, 0xf6f2e51e00000000, 0x8fe939fc00000000, + 0xb182fb1300000000, 0xb239ccf800000000, 0x8c520e1700000000, + 0xe988abc100000000, 0xd7e3692e00000000, 0xd4585ec500000000, + 0xea339c2a00000000, 0x932840c800000000, 0xad43822700000000, + 0xaef8b5cc00000000, 0x9093772300000000, 0x1dc87cd200000000, + 0x23a3be3d00000000, 0x201889d600000000, 0x1e734b3900000000, + 0x676897db00000000, 0x5903553400000000, 0x5ab862df00000000, + 0x64d3a03000000000, 0xd10a58a900000000, 0xef619a4600000000, + 0xecdaadad00000000, 0xd2b16f4200000000, 0xabaab3a000000000, + 0x95c1714f00000000, 0x967a46a400000000, 0xa811844b00000000, + 0x254a8fba00000000, 0x1b214d5500000000, 0x189a7abe00000000, + 0x26f1b85100000000, 0x5fea64b300000000, 0x6181a65c00000000, + 0x623a91b700000000, 0x5c51535800000000, 0x398bf68e00000000, + 0x07e0346100000000, 0x045b038a00000000, 0x3a30c16500000000, + 0x432b1d8700000000, 0x7d40df6800000000, 0x7efbe88300000000, + 0x40902a6c00000000, 0xcdcb219d00000000, 0xf3a0e37200000000, + 0xf01bd49900000000, 0xce70167600000000, 0xb76bca9400000000, + 0x8900087b00000000, 0x8abb3f9000000000, 0xb4d0fd7f00000000, + 0xa10ebf7800000000, 0x9f657d9700000000, 0x9cde4a7c00000000, + 0xa2b5889300000000, 0xdbae547100000000, 0xe5c5969e00000000, + 0xe67ea17500000000, 0xd815639a00000000, 0x554e686b00000000, + 0x6b25aa8400000000, 0x689e9d6f00000000, 0x56f55f8000000000, + 0x2fee836200000000, 0x1185418d00000000, 0x123e766600000000, + 0x2c55b48900000000, 0x498f115f00000000, 0x77e4d3b000000000, + 0x745fe45b00000000, 0x4a3426b400000000, 0x332ffa5600000000, + 0x0d4438b900000000, 0x0eff0f5200000000, 0x3094cdbd00000000, + 0xbdcfc64c00000000, 0x83a404a300000000, 0x801f334800000000, + 0xbe74f1a700000000, 0xc76f2d4500000000, 0xf904efaa00000000, + 0xfabfd84100000000, 0xc4d41aae00000000, 0x710de23700000000, + 0x4f6620d800000000, 0x4cdd173300000000, 0x72b6d5dc00000000, + 0x0bad093e00000000, 0x35c6cbd100000000, 0x367dfc3a00000000, + 0x08163ed500000000, 0x854d352400000000, 0xbb26f7cb00000000, + 0xb89dc02000000000, 0x86f602cf00000000, 0xffedde2d00000000, + 0xc1861cc200000000, 0xc23d2b2900000000, 0xfc56e9c600000000, + 0x998c4c1000000000, 0xa7e78eff00000000, 0xa45cb91400000000, + 0x9a377bfb00000000, 0xe32ca71900000000, 0xdd4765f600000000, + 0xdefc521d00000000, 0xe09790f200000000, 0x6dcc9b0300000000, + 0x53a759ec00000000, 0x501c6e0700000000, 0x6e77ace800000000, + 0x176c700a00000000, 0x2907b2e500000000, 0x2abc850e00000000, + 0x14d747e100000000}, + {0x0000000000000000, 0xc0df8ec100000000, 0xc1b96c5800000000, + 0x0166e29900000000, 0x8273d9b000000000, 0x42ac577100000000, + 0x43cab5e800000000, 0x83153b2900000000, 0x45e1c3ba00000000, + 0x853e4d7b00000000, 0x8458afe200000000, 0x4487212300000000, + 0xc7921a0a00000000, 0x074d94cb00000000, 0x062b765200000000, + 0xc6f4f89300000000, 0xcbc4f6ae00000000, 0x0b1b786f00000000, + 0x0a7d9af600000000, 0xcaa2143700000000, 0x49b72f1e00000000, + 0x8968a1df00000000, 0x880e434600000000, 0x48d1cd8700000000, + 0x8e25351400000000, 0x4efabbd500000000, 0x4f9c594c00000000, + 0x8f43d78d00000000, 0x0c56eca400000000, 0xcc89626500000000, + 0xcdef80fc00000000, 0x0d300e3d00000000, 0xd78f9c8600000000, + 0x1750124700000000, 0x1636f0de00000000, 0xd6e97e1f00000000, + 0x55fc453600000000, 0x9523cbf700000000, 0x9445296e00000000, + 0x549aa7af00000000, 0x926e5f3c00000000, 0x52b1d1fd00000000, + 0x53d7336400000000, 0x9308bda500000000, 0x101d868c00000000, + 0xd0c2084d00000000, 0xd1a4ead400000000, 0x117b641500000000, + 0x1c4b6a2800000000, 0xdc94e4e900000000, 0xddf2067000000000, + 0x1d2d88b100000000, 0x9e38b39800000000, 0x5ee73d5900000000, + 0x5f81dfc000000000, 0x9f5e510100000000, 0x59aaa99200000000, + 0x9975275300000000, 0x9813c5ca00000000, 0x58cc4b0b00000000, + 0xdbd9702200000000, 0x1b06fee300000000, 0x1a601c7a00000000, + 0xdabf92bb00000000, 0xef1948d600000000, 0x2fc6c61700000000, + 0x2ea0248e00000000, 0xee7faa4f00000000, 0x6d6a916600000000, + 0xadb51fa700000000, 0xacd3fd3e00000000, 0x6c0c73ff00000000, + 0xaaf88b6c00000000, 0x6a2705ad00000000, 0x6b41e73400000000, + 0xab9e69f500000000, 0x288b52dc00000000, 0xe854dc1d00000000, + 0xe9323e8400000000, 0x29edb04500000000, 0x24ddbe7800000000, + 0xe40230b900000000, 0xe564d22000000000, 0x25bb5ce100000000, + 0xa6ae67c800000000, 0x6671e90900000000, 0x67170b9000000000, + 0xa7c8855100000000, 0x613c7dc200000000, 0xa1e3f30300000000, + 0xa085119a00000000, 0x605a9f5b00000000, 0xe34fa47200000000, + 0x23902ab300000000, 0x22f6c82a00000000, 0xe22946eb00000000, + 0x3896d45000000000, 0xf8495a9100000000, 0xf92fb80800000000, + 0x39f036c900000000, 0xbae50de000000000, 0x7a3a832100000000, + 0x7b5c61b800000000, 0xbb83ef7900000000, 0x7d7717ea00000000, + 0xbda8992b00000000, 0xbcce7bb200000000, 0x7c11f57300000000, + 0xff04ce5a00000000, 0x3fdb409b00000000, 0x3ebda20200000000, + 0xfe622cc300000000, 0xf35222fe00000000, 0x338dac3f00000000, + 0x32eb4ea600000000, 0xf234c06700000000, 0x7121fb4e00000000, + 0xb1fe758f00000000, 0xb098971600000000, 0x704719d700000000, + 0xb6b3e14400000000, 0x766c6f8500000000, 0x770a8d1c00000000, + 0xb7d503dd00000000, 0x34c038f400000000, 0xf41fb63500000000, + 0xf57954ac00000000, 0x35a6da6d00000000, 0x9f35e17700000000, + 0x5fea6fb600000000, 0x5e8c8d2f00000000, 0x9e5303ee00000000, + 0x1d4638c700000000, 0xdd99b60600000000, 0xdcff549f00000000, + 0x1c20da5e00000000, 0xdad422cd00000000, 0x1a0bac0c00000000, + 0x1b6d4e9500000000, 0xdbb2c05400000000, 0x58a7fb7d00000000, + 0x987875bc00000000, 0x991e972500000000, 0x59c119e400000000, + 0x54f117d900000000, 0x942e991800000000, 0x95487b8100000000, + 0x5597f54000000000, 0xd682ce6900000000, 0x165d40a800000000, + 0x173ba23100000000, 0xd7e42cf000000000, 0x1110d46300000000, + 0xd1cf5aa200000000, 0xd0a9b83b00000000, 0x107636fa00000000, + 0x93630dd300000000, 0x53bc831200000000, 0x52da618b00000000, + 0x9205ef4a00000000, 0x48ba7df100000000, 0x8865f33000000000, + 0x890311a900000000, 0x49dc9f6800000000, 0xcac9a44100000000, + 0x0a162a8000000000, 0x0b70c81900000000, 0xcbaf46d800000000, + 0x0d5bbe4b00000000, 0xcd84308a00000000, 0xcce2d21300000000, + 0x0c3d5cd200000000, 0x8f2867fb00000000, 0x4ff7e93a00000000, + 0x4e910ba300000000, 0x8e4e856200000000, 0x837e8b5f00000000, + 0x43a1059e00000000, 0x42c7e70700000000, 0x821869c600000000, + 0x010d52ef00000000, 0xc1d2dc2e00000000, 0xc0b43eb700000000, + 0x006bb07600000000, 0xc69f48e500000000, 0x0640c62400000000, + 0x072624bd00000000, 0xc7f9aa7c00000000, 0x44ec915500000000, + 0x84331f9400000000, 0x8555fd0d00000000, 0x458a73cc00000000, + 0x702ca9a100000000, 0xb0f3276000000000, 0xb195c5f900000000, + 0x714a4b3800000000, 0xf25f701100000000, 0x3280fed000000000, + 0x33e61c4900000000, 0xf339928800000000, 0x35cd6a1b00000000, + 0xf512e4da00000000, 0xf474064300000000, 0x34ab888200000000, + 0xb7beb3ab00000000, 0x77613d6a00000000, 0x7607dff300000000, + 0xb6d8513200000000, 0xbbe85f0f00000000, 0x7b37d1ce00000000, + 0x7a51335700000000, 0xba8ebd9600000000, 0x399b86bf00000000, + 0xf944087e00000000, 0xf822eae700000000, 0x38fd642600000000, + 0xfe099cb500000000, 0x3ed6127400000000, 0x3fb0f0ed00000000, + 0xff6f7e2c00000000, 0x7c7a450500000000, 0xbca5cbc400000000, + 0xbdc3295d00000000, 0x7d1ca79c00000000, 0xa7a3352700000000, + 0x677cbbe600000000, 0x661a597f00000000, 0xa6c5d7be00000000, + 0x25d0ec9700000000, 0xe50f625600000000, 0xe46980cf00000000, + 0x24b60e0e00000000, 0xe242f69d00000000, 0x229d785c00000000, + 0x23fb9ac500000000, 0xe324140400000000, 0x60312f2d00000000, + 0xa0eea1ec00000000, 0xa188437500000000, 0x6157cdb400000000, + 0x6c67c38900000000, 0xacb84d4800000000, 0xaddeafd100000000, + 0x6d01211000000000, 0xee141a3900000000, 0x2ecb94f800000000, + 0x2fad766100000000, 0xef72f8a000000000, 0x2986003300000000, + 0xe9598ef200000000, 0xe83f6c6b00000000, 0x28e0e2aa00000000, + 0xabf5d98300000000, 0x6b2a574200000000, 0x6a4cb5db00000000, + 0xaa933b1a00000000}, + {0x0000000000000000, 0x6f4ca59b00000000, 0x9f9e3bec00000000, + 0xf0d29e7700000000, 0x7f3b060300000000, 0x1077a39800000000, + 0xe0a53def00000000, 0x8fe9987400000000, 0xfe760c0600000000, + 0x913aa99d00000000, 0x61e837ea00000000, 0x0ea4927100000000, + 0x814d0a0500000000, 0xee01af9e00000000, 0x1ed331e900000000, + 0x719f947200000000, 0xfced180c00000000, 0x93a1bd9700000000, + 0x637323e000000000, 0x0c3f867b00000000, 0x83d61e0f00000000, + 0xec9abb9400000000, 0x1c4825e300000000, 0x7304807800000000, + 0x029b140a00000000, 0x6dd7b19100000000, 0x9d052fe600000000, + 0xf2498a7d00000000, 0x7da0120900000000, 0x12ecb79200000000, + 0xe23e29e500000000, 0x8d728c7e00000000, 0xf8db311800000000, + 0x9797948300000000, 0x67450af400000000, 0x0809af6f00000000, + 0x87e0371b00000000, 0xe8ac928000000000, 0x187e0cf700000000, + 0x7732a96c00000000, 0x06ad3d1e00000000, 0x69e1988500000000, + 0x993306f200000000, 0xf67fa36900000000, 0x79963b1d00000000, + 0x16da9e8600000000, 0xe60800f100000000, 0x8944a56a00000000, + 0x0436291400000000, 0x6b7a8c8f00000000, 0x9ba812f800000000, + 0xf4e4b76300000000, 0x7b0d2f1700000000, 0x14418a8c00000000, + 0xe49314fb00000000, 0x8bdfb16000000000, 0xfa40251200000000, + 0x950c808900000000, 0x65de1efe00000000, 0x0a92bb6500000000, + 0x857b231100000000, 0xea37868a00000000, 0x1ae518fd00000000, + 0x75a9bd6600000000, 0xf0b7633000000000, 0x9ffbc6ab00000000, + 0x6f2958dc00000000, 0x0065fd4700000000, 0x8f8c653300000000, + 0xe0c0c0a800000000, 0x10125edf00000000, 0x7f5efb4400000000, + 0x0ec16f3600000000, 0x618dcaad00000000, 0x915f54da00000000, + 0xfe13f14100000000, 0x71fa693500000000, 0x1eb6ccae00000000, + 0xee6452d900000000, 0x8128f74200000000, 0x0c5a7b3c00000000, + 0x6316dea700000000, 0x93c440d000000000, 0xfc88e54b00000000, + 0x73617d3f00000000, 0x1c2dd8a400000000, 0xecff46d300000000, + 0x83b3e34800000000, 0xf22c773a00000000, 0x9d60d2a100000000, + 0x6db24cd600000000, 0x02fee94d00000000, 0x8d17713900000000, + 0xe25bd4a200000000, 0x12894ad500000000, 0x7dc5ef4e00000000, + 0x086c522800000000, 0x6720f7b300000000, 0x97f269c400000000, + 0xf8becc5f00000000, 0x7757542b00000000, 0x181bf1b000000000, + 0xe8c96fc700000000, 0x8785ca5c00000000, 0xf61a5e2e00000000, + 0x9956fbb500000000, 0x698465c200000000, 0x06c8c05900000000, + 0x8921582d00000000, 0xe66dfdb600000000, 0x16bf63c100000000, + 0x79f3c65a00000000, 0xf4814a2400000000, 0x9bcdefbf00000000, + 0x6b1f71c800000000, 0x0453d45300000000, 0x8bba4c2700000000, + 0xe4f6e9bc00000000, 0x142477cb00000000, 0x7b68d25000000000, + 0x0af7462200000000, 0x65bbe3b900000000, 0x95697dce00000000, + 0xfa25d85500000000, 0x75cc402100000000, 0x1a80e5ba00000000, + 0xea527bcd00000000, 0x851ede5600000000, 0xe06fc76000000000, + 0x8f2362fb00000000, 0x7ff1fc8c00000000, 0x10bd591700000000, + 0x9f54c16300000000, 0xf01864f800000000, 0x00cafa8f00000000, + 0x6f865f1400000000, 0x1e19cb6600000000, 0x71556efd00000000, + 0x8187f08a00000000, 0xeecb551100000000, 0x6122cd6500000000, + 0x0e6e68fe00000000, 0xfebcf68900000000, 0x91f0531200000000, + 0x1c82df6c00000000, 0x73ce7af700000000, 0x831ce48000000000, + 0xec50411b00000000, 0x63b9d96f00000000, 0x0cf57cf400000000, + 0xfc27e28300000000, 0x936b471800000000, 0xe2f4d36a00000000, + 0x8db876f100000000, 0x7d6ae88600000000, 0x12264d1d00000000, + 0x9dcfd56900000000, 0xf28370f200000000, 0x0251ee8500000000, + 0x6d1d4b1e00000000, 0x18b4f67800000000, 0x77f853e300000000, + 0x872acd9400000000, 0xe866680f00000000, 0x678ff07b00000000, + 0x08c355e000000000, 0xf811cb9700000000, 0x975d6e0c00000000, + 0xe6c2fa7e00000000, 0x898e5fe500000000, 0x795cc19200000000, + 0x1610640900000000, 0x99f9fc7d00000000, 0xf6b559e600000000, + 0x0667c79100000000, 0x692b620a00000000, 0xe459ee7400000000, + 0x8b154bef00000000, 0x7bc7d59800000000, 0x148b700300000000, + 0x9b62e87700000000, 0xf42e4dec00000000, 0x04fcd39b00000000, + 0x6bb0760000000000, 0x1a2fe27200000000, 0x756347e900000000, + 0x85b1d99e00000000, 0xeafd7c0500000000, 0x6514e47100000000, + 0x0a5841ea00000000, 0xfa8adf9d00000000, 0x95c67a0600000000, + 0x10d8a45000000000, 0x7f9401cb00000000, 0x8f469fbc00000000, + 0xe00a3a2700000000, 0x6fe3a25300000000, 0x00af07c800000000, + 0xf07d99bf00000000, 0x9f313c2400000000, 0xeeaea85600000000, + 0x81e20dcd00000000, 0x713093ba00000000, 0x1e7c362100000000, + 0x9195ae5500000000, 0xfed90bce00000000, 0x0e0b95b900000000, + 0x6147302200000000, 0xec35bc5c00000000, 0x837919c700000000, + 0x73ab87b000000000, 0x1ce7222b00000000, 0x930eba5f00000000, + 0xfc421fc400000000, 0x0c9081b300000000, 0x63dc242800000000, + 0x1243b05a00000000, 0x7d0f15c100000000, 0x8ddd8bb600000000, + 0xe2912e2d00000000, 0x6d78b65900000000, 0x023413c200000000, + 0xf2e68db500000000, 0x9daa282e00000000, 0xe803954800000000, + 0x874f30d300000000, 0x779daea400000000, 0x18d10b3f00000000, + 0x9738934b00000000, 0xf87436d000000000, 0x08a6a8a700000000, + 0x67ea0d3c00000000, 0x1675994e00000000, 0x79393cd500000000, + 0x89eba2a200000000, 0xe6a7073900000000, 0x694e9f4d00000000, + 0x06023ad600000000, 0xf6d0a4a100000000, 0x999c013a00000000, + 0x14ee8d4400000000, 0x7ba228df00000000, 0x8b70b6a800000000, + 0xe43c133300000000, 0x6bd58b4700000000, 0x04992edc00000000, + 0xf44bb0ab00000000, 0x9b07153000000000, 0xea98814200000000, + 0x85d424d900000000, 0x7506baae00000000, 0x1a4a1f3500000000, + 0x95a3874100000000, 0xfaef22da00000000, 0x0a3dbcad00000000, + 0x6571193600000000}, + {0x0000000000000000, 0x85d996dd00000000, 0x4bb55c6000000000, + 0xce6ccabd00000000, 0x966ab9c000000000, 0x13b32f1d00000000, + 0xdddfe5a000000000, 0x5806737d00000000, 0x6dd3035a00000000, + 0xe80a958700000000, 0x26665f3a00000000, 0xa3bfc9e700000000, + 0xfbb9ba9a00000000, 0x7e602c4700000000, 0xb00ce6fa00000000, + 0x35d5702700000000, 0xdaa607b400000000, 0x5f7f916900000000, + 0x91135bd400000000, 0x14cacd0900000000, 0x4cccbe7400000000, + 0xc91528a900000000, 0x0779e21400000000, 0x82a074c900000000, + 0xb77504ee00000000, 0x32ac923300000000, 0xfcc0588e00000000, + 0x7919ce5300000000, 0x211fbd2e00000000, 0xa4c62bf300000000, + 0x6aaae14e00000000, 0xef73779300000000, 0xf54b7eb300000000, + 0x7092e86e00000000, 0xbefe22d300000000, 0x3b27b40e00000000, + 0x6321c77300000000, 0xe6f851ae00000000, 0x28949b1300000000, + 0xad4d0dce00000000, 0x98987de900000000, 0x1d41eb3400000000, + 0xd32d218900000000, 0x56f4b75400000000, 0x0ef2c42900000000, + 0x8b2b52f400000000, 0x4547984900000000, 0xc09e0e9400000000, + 0x2fed790700000000, 0xaa34efda00000000, 0x6458256700000000, + 0xe181b3ba00000000, 0xb987c0c700000000, 0x3c5e561a00000000, + 0xf2329ca700000000, 0x77eb0a7a00000000, 0x423e7a5d00000000, + 0xc7e7ec8000000000, 0x098b263d00000000, 0x8c52b0e000000000, + 0xd454c39d00000000, 0x518d554000000000, 0x9fe19ffd00000000, + 0x1a38092000000000, 0xab918dbd00000000, 0x2e481b6000000000, + 0xe024d1dd00000000, 0x65fd470000000000, 0x3dfb347d00000000, + 0xb822a2a000000000, 0x764e681d00000000, 0xf397fec000000000, + 0xc6428ee700000000, 0x439b183a00000000, 0x8df7d28700000000, + 0x082e445a00000000, 0x5028372700000000, 0xd5f1a1fa00000000, + 0x1b9d6b4700000000, 0x9e44fd9a00000000, 0x71378a0900000000, + 0xf4ee1cd400000000, 0x3a82d66900000000, 0xbf5b40b400000000, + 0xe75d33c900000000, 0x6284a51400000000, 0xace86fa900000000, + 0x2931f97400000000, 0x1ce4895300000000, 0x993d1f8e00000000, + 0x5751d53300000000, 0xd28843ee00000000, 0x8a8e309300000000, + 0x0f57a64e00000000, 0xc13b6cf300000000, 0x44e2fa2e00000000, + 0x5edaf30e00000000, 0xdb0365d300000000, 0x156faf6e00000000, + 0x90b639b300000000, 0xc8b04ace00000000, 0x4d69dc1300000000, + 0x830516ae00000000, 0x06dc807300000000, 0x3309f05400000000, + 0xb6d0668900000000, 0x78bcac3400000000, 0xfd653ae900000000, + 0xa563499400000000, 0x20badf4900000000, 0xeed615f400000000, + 0x6b0f832900000000, 0x847cf4ba00000000, 0x01a5626700000000, + 0xcfc9a8da00000000, 0x4a103e0700000000, 0x12164d7a00000000, + 0x97cfdba700000000, 0x59a3111a00000000, 0xdc7a87c700000000, + 0xe9aff7e000000000, 0x6c76613d00000000, 0xa21aab8000000000, + 0x27c33d5d00000000, 0x7fc54e2000000000, 0xfa1cd8fd00000000, + 0x3470124000000000, 0xb1a9849d00000000, 0x17256aa000000000, + 0x92fcfc7d00000000, 0x5c9036c000000000, 0xd949a01d00000000, + 0x814fd36000000000, 0x049645bd00000000, 0xcafa8f0000000000, + 0x4f2319dd00000000, 0x7af669fa00000000, 0xff2fff2700000000, + 0x3143359a00000000, 0xb49aa34700000000, 0xec9cd03a00000000, + 0x694546e700000000, 0xa7298c5a00000000, 0x22f01a8700000000, + 0xcd836d1400000000, 0x485afbc900000000, 0x8636317400000000, + 0x03efa7a900000000, 0x5be9d4d400000000, 0xde30420900000000, + 0x105c88b400000000, 0x95851e6900000000, 0xa0506e4e00000000, + 0x2589f89300000000, 0xebe5322e00000000, 0x6e3ca4f300000000, + 0x363ad78e00000000, 0xb3e3415300000000, 0x7d8f8bee00000000, + 0xf8561d3300000000, 0xe26e141300000000, 0x67b782ce00000000, + 0xa9db487300000000, 0x2c02deae00000000, 0x7404add300000000, + 0xf1dd3b0e00000000, 0x3fb1f1b300000000, 0xba68676e00000000, + 0x8fbd174900000000, 0x0a64819400000000, 0xc4084b2900000000, + 0x41d1ddf400000000, 0x19d7ae8900000000, 0x9c0e385400000000, + 0x5262f2e900000000, 0xd7bb643400000000, 0x38c813a700000000, + 0xbd11857a00000000, 0x737d4fc700000000, 0xf6a4d91a00000000, + 0xaea2aa6700000000, 0x2b7b3cba00000000, 0xe517f60700000000, + 0x60ce60da00000000, 0x551b10fd00000000, 0xd0c2862000000000, + 0x1eae4c9d00000000, 0x9b77da4000000000, 0xc371a93d00000000, + 0x46a83fe000000000, 0x88c4f55d00000000, 0x0d1d638000000000, + 0xbcb4e71d00000000, 0x396d71c000000000, 0xf701bb7d00000000, + 0x72d82da000000000, 0x2ade5edd00000000, 0xaf07c80000000000, + 0x616b02bd00000000, 0xe4b2946000000000, 0xd167e44700000000, + 0x54be729a00000000, 0x9ad2b82700000000, 0x1f0b2efa00000000, + 0x470d5d8700000000, 0xc2d4cb5a00000000, 0x0cb801e700000000, + 0x8961973a00000000, 0x6612e0a900000000, 0xe3cb767400000000, + 0x2da7bcc900000000, 0xa87e2a1400000000, 0xf078596900000000, + 0x75a1cfb400000000, 0xbbcd050900000000, 0x3e1493d400000000, + 0x0bc1e3f300000000, 0x8e18752e00000000, 0x4074bf9300000000, + 0xc5ad294e00000000, 0x9dab5a3300000000, 0x1872ccee00000000, + 0xd61e065300000000, 0x53c7908e00000000, 0x49ff99ae00000000, + 0xcc260f7300000000, 0x024ac5ce00000000, 0x8793531300000000, + 0xdf95206e00000000, 0x5a4cb6b300000000, 0x94207c0e00000000, + 0x11f9ead300000000, 0x242c9af400000000, 0xa1f50c2900000000, + 0x6f99c69400000000, 0xea40504900000000, 0xb246233400000000, + 0x379fb5e900000000, 0xf9f37f5400000000, 0x7c2ae98900000000, + 0x93599e1a00000000, 0x168008c700000000, 0xd8ecc27a00000000, + 0x5d3554a700000000, 0x053327da00000000, 0x80eab10700000000, + 0x4e867bba00000000, 0xcb5fed6700000000, 0xfe8a9d4000000000, + 0x7b530b9d00000000, 0xb53fc12000000000, 0x30e657fd00000000, + 0x68e0248000000000, 0xed39b25d00000000, 0x235578e000000000, + 0xa68cee3d00000000}, + {0x0000000000000000, 0x76e10f9d00000000, 0xadc46ee100000000, + 0xdb25617c00000000, 0x1b8fac1900000000, 0x6d6ea38400000000, + 0xb64bc2f800000000, 0xc0aacd6500000000, 0x361e593300000000, + 0x40ff56ae00000000, 0x9bda37d200000000, 0xed3b384f00000000, + 0x2d91f52a00000000, 0x5b70fab700000000, 0x80559bcb00000000, + 0xf6b4945600000000, 0x6c3cb26600000000, 0x1addbdfb00000000, + 0xc1f8dc8700000000, 0xb719d31a00000000, 0x77b31e7f00000000, + 0x015211e200000000, 0xda77709e00000000, 0xac967f0300000000, + 0x5a22eb5500000000, 0x2cc3e4c800000000, 0xf7e685b400000000, + 0x81078a2900000000, 0x41ad474c00000000, 0x374c48d100000000, + 0xec6929ad00000000, 0x9a88263000000000, 0xd87864cd00000000, + 0xae996b5000000000, 0x75bc0a2c00000000, 0x035d05b100000000, + 0xc3f7c8d400000000, 0xb516c74900000000, 0x6e33a63500000000, + 0x18d2a9a800000000, 0xee663dfe00000000, 0x9887326300000000, + 0x43a2531f00000000, 0x35435c8200000000, 0xf5e991e700000000, + 0x83089e7a00000000, 0x582dff0600000000, 0x2eccf09b00000000, + 0xb444d6ab00000000, 0xc2a5d93600000000, 0x1980b84a00000000, + 0x6f61b7d700000000, 0xafcb7ab200000000, 0xd92a752f00000000, + 0x020f145300000000, 0x74ee1bce00000000, 0x825a8f9800000000, + 0xf4bb800500000000, 0x2f9ee17900000000, 0x597feee400000000, + 0x99d5238100000000, 0xef342c1c00000000, 0x34114d6000000000, + 0x42f042fd00000000, 0xf1f7b94100000000, 0x8716b6dc00000000, + 0x5c33d7a000000000, 0x2ad2d83d00000000, 0xea78155800000000, + 0x9c991ac500000000, 0x47bc7bb900000000, 0x315d742400000000, + 0xc7e9e07200000000, 0xb108efef00000000, 0x6a2d8e9300000000, + 0x1ccc810e00000000, 0xdc664c6b00000000, 0xaa8743f600000000, + 0x71a2228a00000000, 0x07432d1700000000, 0x9dcb0b2700000000, + 0xeb2a04ba00000000, 0x300f65c600000000, 0x46ee6a5b00000000, + 0x8644a73e00000000, 0xf0a5a8a300000000, 0x2b80c9df00000000, + 0x5d61c64200000000, 0xabd5521400000000, 0xdd345d8900000000, + 0x06113cf500000000, 0x70f0336800000000, 0xb05afe0d00000000, + 0xc6bbf19000000000, 0x1d9e90ec00000000, 0x6b7f9f7100000000, + 0x298fdd8c00000000, 0x5f6ed21100000000, 0x844bb36d00000000, + 0xf2aabcf000000000, 0x3200719500000000, 0x44e17e0800000000, + 0x9fc41f7400000000, 0xe92510e900000000, 0x1f9184bf00000000, + 0x69708b2200000000, 0xb255ea5e00000000, 0xc4b4e5c300000000, + 0x041e28a600000000, 0x72ff273b00000000, 0xa9da464700000000, + 0xdf3b49da00000000, 0x45b36fea00000000, 0x3352607700000000, + 0xe877010b00000000, 0x9e960e9600000000, 0x5e3cc3f300000000, + 0x28ddcc6e00000000, 0xf3f8ad1200000000, 0x8519a28f00000000, + 0x73ad36d900000000, 0x054c394400000000, 0xde69583800000000, + 0xa88857a500000000, 0x68229ac000000000, 0x1ec3955d00000000, + 0xc5e6f42100000000, 0xb307fbbc00000000, 0xe2ef738300000000, + 0x940e7c1e00000000, 0x4f2b1d6200000000, 0x39ca12ff00000000, + 0xf960df9a00000000, 0x8f81d00700000000, 0x54a4b17b00000000, + 0x2245bee600000000, 0xd4f12ab000000000, 0xa210252d00000000, + 0x7935445100000000, 0x0fd44bcc00000000, 0xcf7e86a900000000, + 0xb99f893400000000, 0x62bae84800000000, 0x145be7d500000000, + 0x8ed3c1e500000000, 0xf832ce7800000000, 0x2317af0400000000, + 0x55f6a09900000000, 0x955c6dfc00000000, 0xe3bd626100000000, + 0x3898031d00000000, 0x4e790c8000000000, 0xb8cd98d600000000, + 0xce2c974b00000000, 0x1509f63700000000, 0x63e8f9aa00000000, + 0xa34234cf00000000, 0xd5a33b5200000000, 0x0e865a2e00000000, + 0x786755b300000000, 0x3a97174e00000000, 0x4c7618d300000000, + 0x975379af00000000, 0xe1b2763200000000, 0x2118bb5700000000, + 0x57f9b4ca00000000, 0x8cdcd5b600000000, 0xfa3dda2b00000000, + 0x0c894e7d00000000, 0x7a6841e000000000, 0xa14d209c00000000, + 0xd7ac2f0100000000, 0x1706e26400000000, 0x61e7edf900000000, + 0xbac28c8500000000, 0xcc23831800000000, 0x56aba52800000000, + 0x204aaab500000000, 0xfb6fcbc900000000, 0x8d8ec45400000000, + 0x4d24093100000000, 0x3bc506ac00000000, 0xe0e067d000000000, + 0x9601684d00000000, 0x60b5fc1b00000000, 0x1654f38600000000, + 0xcd7192fa00000000, 0xbb909d6700000000, 0x7b3a500200000000, + 0x0ddb5f9f00000000, 0xd6fe3ee300000000, 0xa01f317e00000000, + 0x1318cac200000000, 0x65f9c55f00000000, 0xbedca42300000000, + 0xc83dabbe00000000, 0x089766db00000000, 0x7e76694600000000, + 0xa553083a00000000, 0xd3b207a700000000, 0x250693f100000000, + 0x53e79c6c00000000, 0x88c2fd1000000000, 0xfe23f28d00000000, + 0x3e893fe800000000, 0x4868307500000000, 0x934d510900000000, + 0xe5ac5e9400000000, 0x7f2478a400000000, 0x09c5773900000000, + 0xd2e0164500000000, 0xa40119d800000000, 0x64abd4bd00000000, + 0x124adb2000000000, 0xc96fba5c00000000, 0xbf8eb5c100000000, + 0x493a219700000000, 0x3fdb2e0a00000000, 0xe4fe4f7600000000, + 0x921f40eb00000000, 0x52b58d8e00000000, 0x2454821300000000, + 0xff71e36f00000000, 0x8990ecf200000000, 0xcb60ae0f00000000, + 0xbd81a19200000000, 0x66a4c0ee00000000, 0x1045cf7300000000, + 0xd0ef021600000000, 0xa60e0d8b00000000, 0x7d2b6cf700000000, + 0x0bca636a00000000, 0xfd7ef73c00000000, 0x8b9ff8a100000000, + 0x50ba99dd00000000, 0x265b964000000000, 0xe6f15b2500000000, + 0x901054b800000000, 0x4b3535c400000000, 0x3dd43a5900000000, + 0xa75c1c6900000000, 0xd1bd13f400000000, 0x0a98728800000000, + 0x7c797d1500000000, 0xbcd3b07000000000, 0xca32bfed00000000, + 0x1117de9100000000, 0x67f6d10c00000000, 0x9142455a00000000, + 0xe7a34ac700000000, 0x3c862bbb00000000, 0x4a67242600000000, + 0x8acde94300000000, 0xfc2ce6de00000000, 0x270987a200000000, + 0x51e8883f00000000}, + {0x0000000000000000, 0xe8dbfbb900000000, 0x91b186a800000000, + 0x796a7d1100000000, 0x63657c8a00000000, 0x8bbe873300000000, + 0xf2d4fa2200000000, 0x1a0f019b00000000, 0x87cc89cf00000000, + 0x6f17727600000000, 0x167d0f6700000000, 0xfea6f4de00000000, + 0xe4a9f54500000000, 0x0c720efc00000000, 0x751873ed00000000, + 0x9dc3885400000000, 0x4f9f624400000000, 0xa74499fd00000000, + 0xde2ee4ec00000000, 0x36f51f5500000000, 0x2cfa1ece00000000, + 0xc421e57700000000, 0xbd4b986600000000, 0x559063df00000000, + 0xc853eb8b00000000, 0x2088103200000000, 0x59e26d2300000000, + 0xb139969a00000000, 0xab36970100000000, 0x43ed6cb800000000, + 0x3a8711a900000000, 0xd25cea1000000000, 0x9e3ec58800000000, + 0x76e53e3100000000, 0x0f8f432000000000, 0xe754b89900000000, + 0xfd5bb90200000000, 0x158042bb00000000, 0x6cea3faa00000000, + 0x8431c41300000000, 0x19f24c4700000000, 0xf129b7fe00000000, + 0x8843caef00000000, 0x6098315600000000, 0x7a9730cd00000000, + 0x924ccb7400000000, 0xeb26b66500000000, 0x03fd4ddc00000000, + 0xd1a1a7cc00000000, 0x397a5c7500000000, 0x4010216400000000, + 0xa8cbdadd00000000, 0xb2c4db4600000000, 0x5a1f20ff00000000, + 0x23755dee00000000, 0xcbaea65700000000, 0x566d2e0300000000, + 0xbeb6d5ba00000000, 0xc7dca8ab00000000, 0x2f07531200000000, + 0x3508528900000000, 0xddd3a93000000000, 0xa4b9d42100000000, + 0x4c622f9800000000, 0x7d7bfbca00000000, 0x95a0007300000000, + 0xecca7d6200000000, 0x041186db00000000, 0x1e1e874000000000, + 0xf6c57cf900000000, 0x8faf01e800000000, 0x6774fa5100000000, + 0xfab7720500000000, 0x126c89bc00000000, 0x6b06f4ad00000000, + 0x83dd0f1400000000, 0x99d20e8f00000000, 0x7109f53600000000, + 0x0863882700000000, 0xe0b8739e00000000, 0x32e4998e00000000, + 0xda3f623700000000, 0xa3551f2600000000, 0x4b8ee49f00000000, + 0x5181e50400000000, 0xb95a1ebd00000000, 0xc03063ac00000000, + 0x28eb981500000000, 0xb528104100000000, 0x5df3ebf800000000, + 0x249996e900000000, 0xcc426d5000000000, 0xd64d6ccb00000000, + 0x3e96977200000000, 0x47fcea6300000000, 0xaf2711da00000000, + 0xe3453e4200000000, 0x0b9ec5fb00000000, 0x72f4b8ea00000000, + 0x9a2f435300000000, 0x802042c800000000, 0x68fbb97100000000, + 0x1191c46000000000, 0xf94a3fd900000000, 0x6489b78d00000000, + 0x8c524c3400000000, 0xf538312500000000, 0x1de3ca9c00000000, + 0x07eccb0700000000, 0xef3730be00000000, 0x965d4daf00000000, + 0x7e86b61600000000, 0xacda5c0600000000, 0x4401a7bf00000000, + 0x3d6bdaae00000000, 0xd5b0211700000000, 0xcfbf208c00000000, + 0x2764db3500000000, 0x5e0ea62400000000, 0xb6d55d9d00000000, + 0x2b16d5c900000000, 0xc3cd2e7000000000, 0xbaa7536100000000, + 0x527ca8d800000000, 0x4873a94300000000, 0xa0a852fa00000000, + 0xd9c22feb00000000, 0x3119d45200000000, 0xbbf0874e00000000, + 0x532b7cf700000000, 0x2a4101e600000000, 0xc29afa5f00000000, + 0xd895fbc400000000, 0x304e007d00000000, 0x49247d6c00000000, + 0xa1ff86d500000000, 0x3c3c0e8100000000, 0xd4e7f53800000000, + 0xad8d882900000000, 0x4556739000000000, 0x5f59720b00000000, + 0xb78289b200000000, 0xcee8f4a300000000, 0x26330f1a00000000, + 0xf46fe50a00000000, 0x1cb41eb300000000, 0x65de63a200000000, + 0x8d05981b00000000, 0x970a998000000000, 0x7fd1623900000000, + 0x06bb1f2800000000, 0xee60e49100000000, 0x73a36cc500000000, + 0x9b78977c00000000, 0xe212ea6d00000000, 0x0ac911d400000000, + 0x10c6104f00000000, 0xf81debf600000000, 0x817796e700000000, + 0x69ac6d5e00000000, 0x25ce42c600000000, 0xcd15b97f00000000, + 0xb47fc46e00000000, 0x5ca43fd700000000, 0x46ab3e4c00000000, + 0xae70c5f500000000, 0xd71ab8e400000000, 0x3fc1435d00000000, + 0xa202cb0900000000, 0x4ad930b000000000, 0x33b34da100000000, + 0xdb68b61800000000, 0xc167b78300000000, 0x29bc4c3a00000000, + 0x50d6312b00000000, 0xb80dca9200000000, 0x6a51208200000000, + 0x828adb3b00000000, 0xfbe0a62a00000000, 0x133b5d9300000000, + 0x09345c0800000000, 0xe1efa7b100000000, 0x9885daa000000000, + 0x705e211900000000, 0xed9da94d00000000, 0x054652f400000000, + 0x7c2c2fe500000000, 0x94f7d45c00000000, 0x8ef8d5c700000000, + 0x66232e7e00000000, 0x1f49536f00000000, 0xf792a8d600000000, + 0xc68b7c8400000000, 0x2e50873d00000000, 0x573afa2c00000000, + 0xbfe1019500000000, 0xa5ee000e00000000, 0x4d35fbb700000000, + 0x345f86a600000000, 0xdc847d1f00000000, 0x4147f54b00000000, + 0xa99c0ef200000000, 0xd0f673e300000000, 0x382d885a00000000, + 0x222289c100000000, 0xcaf9727800000000, 0xb3930f6900000000, + 0x5b48f4d000000000, 0x89141ec000000000, 0x61cfe57900000000, + 0x18a5986800000000, 0xf07e63d100000000, 0xea71624a00000000, + 0x02aa99f300000000, 0x7bc0e4e200000000, 0x931b1f5b00000000, + 0x0ed8970f00000000, 0xe6036cb600000000, 0x9f6911a700000000, + 0x77b2ea1e00000000, 0x6dbdeb8500000000, 0x8566103c00000000, + 0xfc0c6d2d00000000, 0x14d7969400000000, 0x58b5b90c00000000, + 0xb06e42b500000000, 0xc9043fa400000000, 0x21dfc41d00000000, + 0x3bd0c58600000000, 0xd30b3e3f00000000, 0xaa61432e00000000, + 0x42bab89700000000, 0xdf7930c300000000, 0x37a2cb7a00000000, + 0x4ec8b66b00000000, 0xa6134dd200000000, 0xbc1c4c4900000000, + 0x54c7b7f000000000, 0x2dadcae100000000, 0xc576315800000000, + 0x172adb4800000000, 0xfff120f100000000, 0x869b5de000000000, + 0x6e40a65900000000, 0x744fa7c200000000, 0x9c945c7b00000000, + 0xe5fe216a00000000, 0x0d25dad300000000, 0x90e6528700000000, + 0x783da93e00000000, 0x0157d42f00000000, 0xe98c2f9600000000, + 0xf3832e0d00000000, 0x1b58d5b400000000, 0x6232a8a500000000, + 0x8ae9531c00000000}, + {0x0000000000000000, 0x919168ae00000000, 0x6325a08700000000, + 0xf2b4c82900000000, 0x874c31d400000000, 0x16dd597a00000000, + 0xe469915300000000, 0x75f8f9fd00000000, 0x4f9f137300000000, + 0xde0e7bdd00000000, 0x2cbab3f400000000, 0xbd2bdb5a00000000, + 0xc8d322a700000000, 0x59424a0900000000, 0xabf6822000000000, + 0x3a67ea8e00000000, 0x9e3e27e600000000, 0x0faf4f4800000000, + 0xfd1b876100000000, 0x6c8aefcf00000000, 0x1972163200000000, + 0x88e37e9c00000000, 0x7a57b6b500000000, 0xebc6de1b00000000, + 0xd1a1349500000000, 0x40305c3b00000000, 0xb284941200000000, + 0x2315fcbc00000000, 0x56ed054100000000, 0xc77c6def00000000, + 0x35c8a5c600000000, 0xa459cd6800000000, 0x7d7b3f1700000000, + 0xecea57b900000000, 0x1e5e9f9000000000, 0x8fcff73e00000000, + 0xfa370ec300000000, 0x6ba6666d00000000, 0x9912ae4400000000, + 0x0883c6ea00000000, 0x32e42c6400000000, 0xa37544ca00000000, + 0x51c18ce300000000, 0xc050e44d00000000, 0xb5a81db000000000, + 0x2439751e00000000, 0xd68dbd3700000000, 0x471cd59900000000, + 0xe34518f100000000, 0x72d4705f00000000, 0x8060b87600000000, + 0x11f1d0d800000000, 0x6409292500000000, 0xf598418b00000000, + 0x072c89a200000000, 0x96bde10c00000000, 0xacda0b8200000000, + 0x3d4b632c00000000, 0xcfffab0500000000, 0x5e6ec3ab00000000, + 0x2b963a5600000000, 0xba0752f800000000, 0x48b39ad100000000, + 0xd922f27f00000000, 0xfaf67e2e00000000, 0x6b67168000000000, + 0x99d3dea900000000, 0x0842b60700000000, 0x7dba4ffa00000000, + 0xec2b275400000000, 0x1e9fef7d00000000, 0x8f0e87d300000000, + 0xb5696d5d00000000, 0x24f805f300000000, 0xd64ccdda00000000, + 0x47dda57400000000, 0x32255c8900000000, 0xa3b4342700000000, + 0x5100fc0e00000000, 0xc09194a000000000, 0x64c859c800000000, + 0xf559316600000000, 0x07edf94f00000000, 0x967c91e100000000, + 0xe384681c00000000, 0x721500b200000000, 0x80a1c89b00000000, + 0x1130a03500000000, 0x2b574abb00000000, 0xbac6221500000000, + 0x4872ea3c00000000, 0xd9e3829200000000, 0xac1b7b6f00000000, + 0x3d8a13c100000000, 0xcf3edbe800000000, 0x5eafb34600000000, + 0x878d413900000000, 0x161c299700000000, 0xe4a8e1be00000000, + 0x7539891000000000, 0x00c170ed00000000, 0x9150184300000000, + 0x63e4d06a00000000, 0xf275b8c400000000, 0xc812524a00000000, + 0x59833ae400000000, 0xab37f2cd00000000, 0x3aa69a6300000000, + 0x4f5e639e00000000, 0xdecf0b3000000000, 0x2c7bc31900000000, + 0xbdeaabb700000000, 0x19b366df00000000, 0x88220e7100000000, + 0x7a96c65800000000, 0xeb07aef600000000, 0x9eff570b00000000, + 0x0f6e3fa500000000, 0xfddaf78c00000000, 0x6c4b9f2200000000, + 0x562c75ac00000000, 0xc7bd1d0200000000, 0x3509d52b00000000, + 0xa498bd8500000000, 0xd160447800000000, 0x40f12cd600000000, + 0xb245e4ff00000000, 0x23d48c5100000000, 0xf4edfd5c00000000, + 0x657c95f200000000, 0x97c85ddb00000000, 0x0659357500000000, + 0x73a1cc8800000000, 0xe230a42600000000, 0x10846c0f00000000, + 0x811504a100000000, 0xbb72ee2f00000000, 0x2ae3868100000000, + 0xd8574ea800000000, 0x49c6260600000000, 0x3c3edffb00000000, + 0xadafb75500000000, 0x5f1b7f7c00000000, 0xce8a17d200000000, + 0x6ad3daba00000000, 0xfb42b21400000000, 0x09f67a3d00000000, + 0x9867129300000000, 0xed9feb6e00000000, 0x7c0e83c000000000, + 0x8eba4be900000000, 0x1f2b234700000000, 0x254cc9c900000000, + 0xb4dda16700000000, 0x4669694e00000000, 0xd7f801e000000000, + 0xa200f81d00000000, 0x339190b300000000, 0xc125589a00000000, + 0x50b4303400000000, 0x8996c24b00000000, 0x1807aae500000000, + 0xeab362cc00000000, 0x7b220a6200000000, 0x0edaf39f00000000, + 0x9f4b9b3100000000, 0x6dff531800000000, 0xfc6e3bb600000000, + 0xc609d13800000000, 0x5798b99600000000, 0xa52c71bf00000000, + 0x34bd191100000000, 0x4145e0ec00000000, 0xd0d4884200000000, + 0x2260406b00000000, 0xb3f128c500000000, 0x17a8e5ad00000000, + 0x86398d0300000000, 0x748d452a00000000, 0xe51c2d8400000000, + 0x90e4d47900000000, 0x0175bcd700000000, 0xf3c174fe00000000, + 0x62501c5000000000, 0x5837f6de00000000, 0xc9a69e7000000000, + 0x3b12565900000000, 0xaa833ef700000000, 0xdf7bc70a00000000, + 0x4eeaafa400000000, 0xbc5e678d00000000, 0x2dcf0f2300000000, + 0x0e1b837200000000, 0x9f8aebdc00000000, 0x6d3e23f500000000, + 0xfcaf4b5b00000000, 0x8957b2a600000000, 0x18c6da0800000000, + 0xea72122100000000, 0x7be37a8f00000000, 0x4184900100000000, + 0xd015f8af00000000, 0x22a1308600000000, 0xb330582800000000, + 0xc6c8a1d500000000, 0x5759c97b00000000, 0xa5ed015200000000, + 0x347c69fc00000000, 0x9025a49400000000, 0x01b4cc3a00000000, + 0xf300041300000000, 0x62916cbd00000000, 0x1769954000000000, + 0x86f8fdee00000000, 0x744c35c700000000, 0xe5dd5d6900000000, + 0xdfbab7e700000000, 0x4e2bdf4900000000, 0xbc9f176000000000, + 0x2d0e7fce00000000, 0x58f6863300000000, 0xc967ee9d00000000, + 0x3bd326b400000000, 0xaa424e1a00000000, 0x7360bc6500000000, + 0xe2f1d4cb00000000, 0x10451ce200000000, 0x81d4744c00000000, + 0xf42c8db100000000, 0x65bde51f00000000, 0x97092d3600000000, + 0x0698459800000000, 0x3cffaf1600000000, 0xad6ec7b800000000, + 0x5fda0f9100000000, 0xce4b673f00000000, 0xbbb39ec200000000, + 0x2a22f66c00000000, 0xd8963e4500000000, 0x490756eb00000000, + 0xed5e9b8300000000, 0x7ccff32d00000000, 0x8e7b3b0400000000, + 0x1fea53aa00000000, 0x6a12aa5700000000, 0xfb83c2f900000000, + 0x09370ad000000000, 0x98a6627e00000000, 0xa2c188f000000000, + 0x3350e05e00000000, 0xc1e4287700000000, 0x507540d900000000, + 0x258db92400000000, 0xb41cd18a00000000, 0x46a819a300000000, + 0xd739710d00000000}}; #else /* W == 4 */ local const z_crc_t FAR crc_braid_table[][256] = { - {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, - 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, - 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232, - 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, - 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, - 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, - 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b, - 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, - 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719, - 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3, - 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, - 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, - 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed, - 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, - 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, - 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041, - 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c, - 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, - 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, - 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, - 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, - 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, - 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed, - 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, - 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, - 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, - 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, - 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c, - 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1, - 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, - 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, - 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, - 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, - 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7, - 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be, - 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, - 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, - 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, - 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a, - 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, - 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278, - 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682, - 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, - 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, - 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561, - 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, - 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, - 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd, - 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, - 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, - 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678, - 0x264b06e6}, - {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, - 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, - 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d, - 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, - 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, - 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, - 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5, - 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, - 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, - 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6, - 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, - 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, - 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579, - 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, - 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, - 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590, - 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4, - 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, - 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, - 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, - 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282, - 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, - 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, - 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, - 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, - 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, - 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, - 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08, - 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c, - 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, - 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, - 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, - 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, - 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd, - 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833, - 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, - 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, - 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, - 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, - 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, - 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff, - 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1, - 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, - 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, - 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617, - 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, - 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, - 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe, - 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, - 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, - 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184, - 0x92364a30}, - {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, - 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, - 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, - 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, - 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, - 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, - 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d, - 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, - 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d, - 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408, - 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, - 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, - 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c, - 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, - 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, - 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9, - 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1, - 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, - 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, - 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, - 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37, - 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, - 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca, - 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, - 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, - 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, - 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, - 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b, - 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643, - 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, - 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, - 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, - 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, - 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026, - 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e, - 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, - 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, - 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, - 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, - 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, - 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf, - 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a, - 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, - 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, - 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82, - 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, - 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, - 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957, - 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, - 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, - 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869, - 0xe4c4abcc}, - {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, - 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, - 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, - 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, - 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, - 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, - 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64, - 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, - 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205, - 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136, - 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, - 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, - 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849, - 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, - 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, - 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98, - 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b, - 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, - 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, - 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, - 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c, - 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, - 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, - 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, - 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, - 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, - 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532, - 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183, - 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710, - 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, - 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, - 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, - 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, - 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7, - 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7, - 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, - 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, - 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, - 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb, - 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, - 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da, - 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9, - 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, - 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, - 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df, - 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, - 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, - 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e, - 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, - 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, - 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, - 0xca64c78c}}; + {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, 0x48e00e64, + 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, 0x91c01cc8, 0x5d6a1c56, + 0x57af154f, 0x9b0515d1, 0x158a1232, 0xd92012ac, 0x7cbb312b, 0xb01131b5, + 0x3e9e3656, 0xf23436c8, 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, + 0xaf5e2a9e, 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, + 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b, 0x77f965b5, + 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, 0x2a9379e3, 0xe639797d, + 0x68b67e9e, 0xa41c7e00, 0xaed97719, 0x62737787, 0xecfc7064, 0x205670fa, + 0x85cd537d, 0x496753e3, 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, + 0x43a25afa, 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, + 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed, 0xe537c273, + 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, 0xeff2cb6a, 0x2358cbf4, + 0xfa78d958, 0x36d2d9c6, 0xb85dde25, 0x74f7debb, 0x7e32d7a2, 0xb298d73c, + 0x3c17d0df, 0xf0bdd041, 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, + 0xd16cfd3c, 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, + 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, 0x8c06e16a, + 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, 0x54a1ae41, 0x980baedf, + 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, 0xcfa4bb90, 0x412bbc73, 0x8d81bced, + 0x8744b5f4, 0x4beeb56a, 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, + 0xee7596ed, 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, + 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, 0x37558441, + 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, 0x111e82a7, 0xddb48239, + 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, + 0xc2fb9912, 0x0e51998c, 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, + 0x2f80b4f1, 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, + 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, 0x72eaa8a7, + 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, 0xaa4de78c, 0x66e7e712, + 0xe868e0f1, 0x24c2e06f, 0x2e07e976, 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, + 0x79a8fc39, 0xb502fca7, 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, + 0xbfc7f5be, 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, + 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, 0xc9b9cd8c, + 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, 0xc37cc495, 0x0fd6c40b, + 0x7aa64737, 0xb60c47a9, 0x3883404a, 0xf42940d4, 0xfeec49cd, 0x32464953, + 0xbcc94eb0, 0x70634e2e, 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, + 0x2d095278, 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682, + 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, 0x0cd87f05, + 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, 0x51b26353, 0x9d1863cd, + 0x1397642e, 0xdf3d64b0, 0x83d02561, 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, + 0x079a2b9b, 0xcb302b05, 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, + 0x121039a9, 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd, + 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, 0xb78b1a2e, + 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, 0x6eab0882, 0xa201081c, + 0xa8c40105, 0x646e019b, 0xeae10678, 0x264b06e6}, + {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, 0x52382fa7, + 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, 0xa4705f4e, 0x020754fa, + 0xc7a06a74, 0x61d761c0, 0x503f7b5d, 0xf64870e9, 0x67de9cce, 0xc1a9977a, + 0xf0418de7, 0x56368653, 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, + 0x5431d2a9, 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, + 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5, 0xfe552301, + 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, 0xfc5277fb, 0x5a257c4f, + 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, 0xae6a585c, 0x9f8242c1, 0x39f54975, + 0xa863a552, 0x0e14aee6, 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, + 0xcbb39068, 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, + 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579, 0xe27c7ecd, + 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, 0x27db4043, 0x81ac4bf7, + 0x77e43b1e, 0xd19330aa, 0xe07b2a37, 0x460c2183, 0x83ab1f0d, 0x25dc14b9, + 0x14340e24, 0xb2430590, 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, + 0xd79acda4, 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, + 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, 0xd59d995e, + 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, 0x7ff968f6, 0xd98e6342, + 0xe86679df, 0x4e11726b, 0xb8590282, 0x1e2e0936, 0x2fc613ab, 0x89b1181f, + 0x4c162691, 0xea612d25, 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, + 0x7bf7c102, 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, + 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, 0x8dbfb1eb, + 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, 0x1f89fbdb, 0xb9fef06f, + 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, + 0x2c66b5bc, 0x8a11be08, 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, + 0xefc8763c, 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, + 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, 0xedcf22c6, + 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, 0x47abd36e, 0xe1dcd8da, + 0xd034c247, 0x7643c9f3, 0xb3e4f77d, 0x1593fcc9, 0x247be654, 0x820cede0, + 0x74449d09, 0xd23396bd, 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, + 0x1794a833, 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, + 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, 0xb5ed0a73, + 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, 0x704a34fd, 0xd63d3f49, + 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, 0xfdf58516, 0x3852bb98, 0x9e25b02c, + 0xafcdaab1, 0x09baa105, 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, + 0x0bbdf5ff, 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1, + 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, 0x6e643dcb, + 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, 0x6c636931, 0xca146285, + 0xfbfc7818, 0x5d8b73ac, 0x03a0a617, 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, + 0xf7ef8204, 0x519889b0, 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, + 0xa7d0f959, 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe, + 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, 0x3646157e, + 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, 0xc00e6597, 0x66796e23, + 0xa3de50ad, 0x05a95b19, 0x34414184, 0x92364a30}, + {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, 0x50cd91b3, + 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, 0xa19b2366, 0x6ac7f0c3, + 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, 0xf156b2d5, 0x03d6029b, 0xc88ad13e, + 0x4e1ea390, 0x85427035, 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, + 0xef8580f6, 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, + 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d, 0x81387798, + 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, 0xebff875b, 0x20a354fe, + 0xa6372650, 0x6d6bf5f5, 0x706ec54d, 0xbb3216e8, 0x3da66446, 0xf6fab7e3, + 0x047a07ad, 0xcf26d408, 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, + 0xd223e4b0, 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, + 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c, 0xc404d9c9, + 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, 0xd901e971, 0x125d3ad4, + 0xe30b8801, 0x28575ba4, 0xaec3290a, 0x659ffaaf, 0x789aca17, 0xb3c619b2, + 0x35526b1c, 0xfe0eb8b9, 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, + 0x971f4ae1, 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, + 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, 0xfdd8ba22, + 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, 0x93654d4c, 0x58399ee9, + 0xdeadec47, 0x15f13fe2, 0xe4a78d37, 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, + 0x7f36cf21, 0xb46a1c84, 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, + 0x46eaacca, 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, + 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, 0xb7bc1e1f, + 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, 0x5378b5d3, 0x98246676, + 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, 0x03b52460, 0xf2e396b5, 0x39bf4510, + 0xbf2b37be, 0x7477e41b, 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, + 0x1d661643, 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, + 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, 0x77a1e680, + 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, 0x191c11ee, 0xd240c24b, + 0x54d4b0e5, 0x9f886340, 0x828d53f8, 0x49d1805d, 0xcf45f2f3, 0x04192156, + 0xf54f9383, 0x3e134026, 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, + 0x2316709e, 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, + 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, 0x3dc542bd, + 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, 0x20c07205, 0xeb9ca1a0, + 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, 0x977c6c1a, 0x8a795ca2, 0x41258f07, + 0xc7b1fda9, 0x0ced2e0c, 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, + 0x662adecf, 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a, + 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, 0x0f3b2c97, + 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, 0x65fcdc54, 0xaea00ff1, + 0x28347d5f, 0xe368aefa, 0x16441b82, 0xdd18c827, 0x5b8cba89, 0x90d0692c, + 0x8dd55994, 0x46898a31, 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, + 0xb7df38e4, 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957, + 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, 0x455f88aa, + 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, 0xb4093a7f, 0x7f55e9da, + 0x6250d962, 0xa90c0ac7, 0x2f987869, 0xe4c4abcc}, + {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, 0xc8e08f70, + 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, 0x4ab018a1, 0x77d03111, + 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, 0x825097d1, 0x60e09782, 0x5d80be32, + 0x1a20c4e2, 0x2740ed52, 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, + 0x5090dc43, 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, + 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64, 0x866155d4, + 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, 0xf1b164c5, 0xccd14d75, + 0x8b7137a5, 0xb6111e15, 0x0431c205, 0x3951ebb5, 0x7ef19165, 0x4391b8d5, + 0xa121b886, 0x9c419136, 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, + 0x2e614d26, 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, + 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849, 0x659371f9, + 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, 0xd7b3ade9, 0xead38459, + 0x68831388, 0x55e33a38, 0x124340e8, 0x2f236958, 0x9d03b548, 0xa0639cf8, + 0xe7c3e628, 0xdaa3cf98, 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, + 0xcd93690b, 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, + 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, 0xba43581a, + 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, 0x6cb2d18d, 0x51d2f83d, + 0x167282ed, 0x2b12ab5d, 0xa9423c8c, 0x9422153c, 0xd3826fec, 0xeee2465c, + 0x5cc29a4c, 0x61a2b3fc, 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, + 0x8312b3af, 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, + 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, 0x0142247e, + 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, 0xcb26e3f2, 0xf646ca42, + 0x44661652, 0x79063fe2, 0x3ea64532, 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, + 0xfb56a833, 0xc6368183, 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, + 0xd1062710, 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, + 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, 0xa6d61601, + 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, 0x70279f96, 0x4d47b626, + 0x0ae7ccf6, 0x3787e546, 0x85a73956, 0xb8c710e6, 0xff676a36, 0xc2074386, + 0x4057d457, 0x7d37fde7, 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, + 0xcf1721f7, 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, + 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, 0x1dd76a65, + 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, 0xaff7b675, 0x92979fc5, + 0xe915e8db, 0xd475c16b, 0x93d5bbbb, 0xaeb5920b, 0x1c954e1b, 0x21f567ab, + 0x66551d7b, 0x5b3534cb, 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, + 0x2ce505da, 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9, + 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, 0x3bd5a349, + 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, 0x4c059258, 0x7165bbe8, + 0x36c5c138, 0x0ba5e888, 0x28d4c7df, 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, + 0xdd54611f, 0xe03448af, 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, + 0x6264df7e, 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e, + 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, 0x80d4df2d, + 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, 0x028448fc, 0x3fe4614c, + 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, 0xca64c78c}}; local const z_word_t FAR crc_braid_big_table[][256] = { - {0x00000000, 0xb029603d, 0x6053c07a, 0xd07aa047, 0xc0a680f5, - 0x708fe0c8, 0xa0f5408f, 0x10dc20b2, 0xc14b7030, 0x7162100d, - 0xa118b04a, 0x1131d077, 0x01edf0c5, 0xb1c490f8, 0x61be30bf, - 0xd1975082, 0x8297e060, 0x32be805d, 0xe2c4201a, 0x52ed4027, - 0x42316095, 0xf21800a8, 0x2262a0ef, 0x924bc0d2, 0x43dc9050, - 0xf3f5f06d, 0x238f502a, 0x93a63017, 0x837a10a5, 0x33537098, - 0xe329d0df, 0x5300b0e2, 0x042fc1c1, 0xb406a1fc, 0x647c01bb, - 0xd4556186, 0xc4894134, 0x74a02109, 0xa4da814e, 0x14f3e173, - 0xc564b1f1, 0x754dd1cc, 0xa537718b, 0x151e11b6, 0x05c23104, - 0xb5eb5139, 0x6591f17e, 0xd5b89143, 0x86b821a1, 0x3691419c, - 0xe6ebe1db, 0x56c281e6, 0x461ea154, 0xf637c169, 0x264d612e, - 0x96640113, 0x47f35191, 0xf7da31ac, 0x27a091eb, 0x9789f1d6, - 0x8755d164, 0x377cb159, 0xe706111e, 0x572f7123, 0x4958f358, - 0xf9719365, 0x290b3322, 0x9922531f, 0x89fe73ad, 0x39d71390, - 0xe9adb3d7, 0x5984d3ea, 0x88138368, 0x383ae355, 0xe8404312, - 0x5869232f, 0x48b5039d, 0xf89c63a0, 0x28e6c3e7, 0x98cfa3da, - 0xcbcf1338, 0x7be67305, 0xab9cd342, 0x1bb5b37f, 0x0b6993cd, - 0xbb40f3f0, 0x6b3a53b7, 0xdb13338a, 0x0a846308, 0xbaad0335, - 0x6ad7a372, 0xdafec34f, 0xca22e3fd, 0x7a0b83c0, 0xaa712387, - 0x1a5843ba, 0x4d773299, 0xfd5e52a4, 0x2d24f2e3, 0x9d0d92de, - 0x8dd1b26c, 0x3df8d251, 0xed827216, 0x5dab122b, 0x8c3c42a9, - 0x3c152294, 0xec6f82d3, 0x5c46e2ee, 0x4c9ac25c, 0xfcb3a261, - 0x2cc90226, 0x9ce0621b, 0xcfe0d2f9, 0x7fc9b2c4, 0xafb31283, - 0x1f9a72be, 0x0f46520c, 0xbf6f3231, 0x6f159276, 0xdf3cf24b, - 0x0eaba2c9, 0xbe82c2f4, 0x6ef862b3, 0xded1028e, 0xce0d223c, - 0x7e244201, 0xae5ee246, 0x1e77827b, 0x92b0e6b1, 0x2299868c, - 0xf2e326cb, 0x42ca46f6, 0x52166644, 0xe23f0679, 0x3245a63e, - 0x826cc603, 0x53fb9681, 0xe3d2f6bc, 0x33a856fb, 0x838136c6, - 0x935d1674, 0x23747649, 0xf30ed60e, 0x4327b633, 0x102706d1, - 0xa00e66ec, 0x7074c6ab, 0xc05da696, 0xd0818624, 0x60a8e619, - 0xb0d2465e, 0x00fb2663, 0xd16c76e1, 0x614516dc, 0xb13fb69b, - 0x0116d6a6, 0x11caf614, 0xa1e39629, 0x7199366e, 0xc1b05653, - 0x969f2770, 0x26b6474d, 0xf6cce70a, 0x46e58737, 0x5639a785, - 0xe610c7b8, 0x366a67ff, 0x864307c2, 0x57d45740, 0xe7fd377d, - 0x3787973a, 0x87aef707, 0x9772d7b5, 0x275bb788, 0xf72117cf, - 0x470877f2, 0x1408c710, 0xa421a72d, 0x745b076a, 0xc4726757, - 0xd4ae47e5, 0x648727d8, 0xb4fd879f, 0x04d4e7a2, 0xd543b720, - 0x656ad71d, 0xb510775a, 0x05391767, 0x15e537d5, 0xa5cc57e8, - 0x75b6f7af, 0xc59f9792, 0xdbe815e9, 0x6bc175d4, 0xbbbbd593, - 0x0b92b5ae, 0x1b4e951c, 0xab67f521, 0x7b1d5566, 0xcb34355b, - 0x1aa365d9, 0xaa8a05e4, 0x7af0a5a3, 0xcad9c59e, 0xda05e52c, - 0x6a2c8511, 0xba562556, 0x0a7f456b, 0x597ff589, 0xe95695b4, - 0x392c35f3, 0x890555ce, 0x99d9757c, 0x29f01541, 0xf98ab506, - 0x49a3d53b, 0x983485b9, 0x281de584, 0xf86745c3, 0x484e25fe, - 0x5892054c, 0xe8bb6571, 0x38c1c536, 0x88e8a50b, 0xdfc7d428, - 0x6feeb415, 0xbf941452, 0x0fbd746f, 0x1f6154dd, 0xaf4834e0, - 0x7f3294a7, 0xcf1bf49a, 0x1e8ca418, 0xaea5c425, 0x7edf6462, - 0xcef6045f, 0xde2a24ed, 0x6e0344d0, 0xbe79e497, 0x0e5084aa, - 0x5d503448, 0xed795475, 0x3d03f432, 0x8d2a940f, 0x9df6b4bd, - 0x2ddfd480, 0xfda574c7, 0x4d8c14fa, 0x9c1b4478, 0x2c322445, - 0xfc488402, 0x4c61e43f, 0x5cbdc48d, 0xec94a4b0, 0x3cee04f7, - 0x8cc764ca}, - {0x00000000, 0xa5d35ccb, 0x0ba1c84d, 0xae729486, 0x1642919b, - 0xb391cd50, 0x1de359d6, 0xb830051d, 0x6d8253ec, 0xc8510f27, - 0x66239ba1, 0xc3f0c76a, 0x7bc0c277, 0xde139ebc, 0x70610a3a, - 0xd5b256f1, 0x9b02d603, 0x3ed18ac8, 0x90a31e4e, 0x35704285, - 0x8d404798, 0x28931b53, 0x86e18fd5, 0x2332d31e, 0xf68085ef, - 0x5353d924, 0xfd214da2, 0x58f21169, 0xe0c21474, 0x451148bf, - 0xeb63dc39, 0x4eb080f2, 0x3605ac07, 0x93d6f0cc, 0x3da4644a, - 0x98773881, 0x20473d9c, 0x85946157, 0x2be6f5d1, 0x8e35a91a, - 0x5b87ffeb, 0xfe54a320, 0x502637a6, 0xf5f56b6d, 0x4dc56e70, - 0xe81632bb, 0x4664a63d, 0xe3b7faf6, 0xad077a04, 0x08d426cf, - 0xa6a6b249, 0x0375ee82, 0xbb45eb9f, 0x1e96b754, 0xb0e423d2, - 0x15377f19, 0xc08529e8, 0x65567523, 0xcb24e1a5, 0x6ef7bd6e, - 0xd6c7b873, 0x7314e4b8, 0xdd66703e, 0x78b52cf5, 0x6c0a580f, - 0xc9d904c4, 0x67ab9042, 0xc278cc89, 0x7a48c994, 0xdf9b955f, - 0x71e901d9, 0xd43a5d12, 0x01880be3, 0xa45b5728, 0x0a29c3ae, - 0xaffa9f65, 0x17ca9a78, 0xb219c6b3, 0x1c6b5235, 0xb9b80efe, - 0xf7088e0c, 0x52dbd2c7, 0xfca94641, 0x597a1a8a, 0xe14a1f97, - 0x4499435c, 0xeaebd7da, 0x4f388b11, 0x9a8adde0, 0x3f59812b, - 0x912b15ad, 0x34f84966, 0x8cc84c7b, 0x291b10b0, 0x87698436, - 0x22bad8fd, 0x5a0ff408, 0xffdca8c3, 0x51ae3c45, 0xf47d608e, - 0x4c4d6593, 0xe99e3958, 0x47ecadde, 0xe23ff115, 0x378da7e4, - 0x925efb2f, 0x3c2c6fa9, 0x99ff3362, 0x21cf367f, 0x841c6ab4, - 0x2a6efe32, 0x8fbda2f9, 0xc10d220b, 0x64de7ec0, 0xcaacea46, - 0x6f7fb68d, 0xd74fb390, 0x729cef5b, 0xdcee7bdd, 0x793d2716, - 0xac8f71e7, 0x095c2d2c, 0xa72eb9aa, 0x02fde561, 0xbacde07c, - 0x1f1ebcb7, 0xb16c2831, 0x14bf74fa, 0xd814b01e, 0x7dc7ecd5, - 0xd3b57853, 0x76662498, 0xce562185, 0x6b857d4e, 0xc5f7e9c8, - 0x6024b503, 0xb596e3f2, 0x1045bf39, 0xbe372bbf, 0x1be47774, - 0xa3d47269, 0x06072ea2, 0xa875ba24, 0x0da6e6ef, 0x4316661d, - 0xe6c53ad6, 0x48b7ae50, 0xed64f29b, 0x5554f786, 0xf087ab4d, - 0x5ef53fcb, 0xfb266300, 0x2e9435f1, 0x8b47693a, 0x2535fdbc, - 0x80e6a177, 0x38d6a46a, 0x9d05f8a1, 0x33776c27, 0x96a430ec, - 0xee111c19, 0x4bc240d2, 0xe5b0d454, 0x4063889f, 0xf8538d82, - 0x5d80d149, 0xf3f245cf, 0x56211904, 0x83934ff5, 0x2640133e, - 0x883287b8, 0x2de1db73, 0x95d1de6e, 0x300282a5, 0x9e701623, - 0x3ba34ae8, 0x7513ca1a, 0xd0c096d1, 0x7eb20257, 0xdb615e9c, - 0x63515b81, 0xc682074a, 0x68f093cc, 0xcd23cf07, 0x189199f6, - 0xbd42c53d, 0x133051bb, 0xb6e30d70, 0x0ed3086d, 0xab0054a6, - 0x0572c020, 0xa0a19ceb, 0xb41ee811, 0x11cdb4da, 0xbfbf205c, - 0x1a6c7c97, 0xa25c798a, 0x078f2541, 0xa9fdb1c7, 0x0c2eed0c, - 0xd99cbbfd, 0x7c4fe736, 0xd23d73b0, 0x77ee2f7b, 0xcfde2a66, - 0x6a0d76ad, 0xc47fe22b, 0x61acbee0, 0x2f1c3e12, 0x8acf62d9, - 0x24bdf65f, 0x816eaa94, 0x395eaf89, 0x9c8df342, 0x32ff67c4, - 0x972c3b0f, 0x429e6dfe, 0xe74d3135, 0x493fa5b3, 0xececf978, - 0x54dcfc65, 0xf10fa0ae, 0x5f7d3428, 0xfaae68e3, 0x821b4416, - 0x27c818dd, 0x89ba8c5b, 0x2c69d090, 0x9459d58d, 0x318a8946, - 0x9ff81dc0, 0x3a2b410b, 0xef9917fa, 0x4a4a4b31, 0xe438dfb7, - 0x41eb837c, 0xf9db8661, 0x5c08daaa, 0xf27a4e2c, 0x57a912e7, - 0x19199215, 0xbccacede, 0x12b85a58, 0xb76b0693, 0x0f5b038e, - 0xaa885f45, 0x04facbc3, 0xa1299708, 0x749bc1f9, 0xd1489d32, - 0x7f3a09b4, 0xdae9557f, 0x62d95062, 0xc70a0ca9, 0x6978982f, - 0xccabc4e4}, - {0x00000000, 0xb40b77a6, 0x29119f97, 0x9d1ae831, 0x13244ff4, - 0xa72f3852, 0x3a35d063, 0x8e3ea7c5, 0x674eef33, 0xd3459895, - 0x4e5f70a4, 0xfa540702, 0x746aa0c7, 0xc061d761, 0x5d7b3f50, - 0xe97048f6, 0xce9cde67, 0x7a97a9c1, 0xe78d41f0, 0x53863656, - 0xddb89193, 0x69b3e635, 0xf4a90e04, 0x40a279a2, 0xa9d23154, - 0x1dd946f2, 0x80c3aec3, 0x34c8d965, 0xbaf67ea0, 0x0efd0906, - 0x93e7e137, 0x27ec9691, 0x9c39bdcf, 0x2832ca69, 0xb5282258, - 0x012355fe, 0x8f1df23b, 0x3b16859d, 0xa60c6dac, 0x12071a0a, - 0xfb7752fc, 0x4f7c255a, 0xd266cd6b, 0x666dbacd, 0xe8531d08, - 0x5c586aae, 0xc142829f, 0x7549f539, 0x52a563a8, 0xe6ae140e, - 0x7bb4fc3f, 0xcfbf8b99, 0x41812c5c, 0xf58a5bfa, 0x6890b3cb, - 0xdc9bc46d, 0x35eb8c9b, 0x81e0fb3d, 0x1cfa130c, 0xa8f164aa, - 0x26cfc36f, 0x92c4b4c9, 0x0fde5cf8, 0xbbd52b5e, 0x79750b44, - 0xcd7e7ce2, 0x506494d3, 0xe46fe375, 0x6a5144b0, 0xde5a3316, - 0x4340db27, 0xf74bac81, 0x1e3be477, 0xaa3093d1, 0x372a7be0, - 0x83210c46, 0x0d1fab83, 0xb914dc25, 0x240e3414, 0x900543b2, - 0xb7e9d523, 0x03e2a285, 0x9ef84ab4, 0x2af33d12, 0xa4cd9ad7, - 0x10c6ed71, 0x8ddc0540, 0x39d772e6, 0xd0a73a10, 0x64ac4db6, - 0xf9b6a587, 0x4dbdd221, 0xc38375e4, 0x77880242, 0xea92ea73, - 0x5e999dd5, 0xe54cb68b, 0x5147c12d, 0xcc5d291c, 0x78565eba, - 0xf668f97f, 0x42638ed9, 0xdf7966e8, 0x6b72114e, 0x820259b8, - 0x36092e1e, 0xab13c62f, 0x1f18b189, 0x9126164c, 0x252d61ea, - 0xb83789db, 0x0c3cfe7d, 0x2bd068ec, 0x9fdb1f4a, 0x02c1f77b, - 0xb6ca80dd, 0x38f42718, 0x8cff50be, 0x11e5b88f, 0xa5eecf29, - 0x4c9e87df, 0xf895f079, 0x658f1848, 0xd1846fee, 0x5fbac82b, - 0xebb1bf8d, 0x76ab57bc, 0xc2a0201a, 0xf2ea1688, 0x46e1612e, - 0xdbfb891f, 0x6ff0feb9, 0xe1ce597c, 0x55c52eda, 0xc8dfc6eb, - 0x7cd4b14d, 0x95a4f9bb, 0x21af8e1d, 0xbcb5662c, 0x08be118a, - 0x8680b64f, 0x328bc1e9, 0xaf9129d8, 0x1b9a5e7e, 0x3c76c8ef, - 0x887dbf49, 0x15675778, 0xa16c20de, 0x2f52871b, 0x9b59f0bd, - 0x0643188c, 0xb2486f2a, 0x5b3827dc, 0xef33507a, 0x7229b84b, - 0xc622cfed, 0x481c6828, 0xfc171f8e, 0x610df7bf, 0xd5068019, - 0x6ed3ab47, 0xdad8dce1, 0x47c234d0, 0xf3c94376, 0x7df7e4b3, - 0xc9fc9315, 0x54e67b24, 0xe0ed0c82, 0x099d4474, 0xbd9633d2, - 0x208cdbe3, 0x9487ac45, 0x1ab90b80, 0xaeb27c26, 0x33a89417, - 0x87a3e3b1, 0xa04f7520, 0x14440286, 0x895eeab7, 0x3d559d11, - 0xb36b3ad4, 0x07604d72, 0x9a7aa543, 0x2e71d2e5, 0xc7019a13, - 0x730aedb5, 0xee100584, 0x5a1b7222, 0xd425d5e7, 0x602ea241, - 0xfd344a70, 0x493f3dd6, 0x8b9f1dcc, 0x3f946a6a, 0xa28e825b, - 0x1685f5fd, 0x98bb5238, 0x2cb0259e, 0xb1aacdaf, 0x05a1ba09, - 0xecd1f2ff, 0x58da8559, 0xc5c06d68, 0x71cb1ace, 0xfff5bd0b, - 0x4bfecaad, 0xd6e4229c, 0x62ef553a, 0x4503c3ab, 0xf108b40d, - 0x6c125c3c, 0xd8192b9a, 0x56278c5f, 0xe22cfbf9, 0x7f3613c8, - 0xcb3d646e, 0x224d2c98, 0x96465b3e, 0x0b5cb30f, 0xbf57c4a9, - 0x3169636c, 0x856214ca, 0x1878fcfb, 0xac738b5d, 0x17a6a003, - 0xa3add7a5, 0x3eb73f94, 0x8abc4832, 0x0482eff7, 0xb0899851, - 0x2d937060, 0x999807c6, 0x70e84f30, 0xc4e33896, 0x59f9d0a7, - 0xedf2a701, 0x63cc00c4, 0xd7c77762, 0x4add9f53, 0xfed6e8f5, - 0xd93a7e64, 0x6d3109c2, 0xf02be1f3, 0x44209655, 0xca1e3190, - 0x7e154636, 0xe30fae07, 0x5704d9a1, 0xbe749157, 0x0a7fe6f1, - 0x97650ec0, 0x236e7966, 0xad50dea3, 0x195ba905, 0x84414134, - 0x304a3692}, - {0x00000000, 0x9e00aacc, 0x7d072542, 0xe3078f8e, 0xfa0e4a84, - 0x640ee048, 0x87096fc6, 0x1909c50a, 0xb51be5d3, 0x2b1b4f1f, - 0xc81cc091, 0x561c6a5d, 0x4f15af57, 0xd115059b, 0x32128a15, - 0xac1220d9, 0x2b31bb7c, 0xb53111b0, 0x56369e3e, 0xc83634f2, - 0xd13ff1f8, 0x4f3f5b34, 0xac38d4ba, 0x32387e76, 0x9e2a5eaf, - 0x002af463, 0xe32d7bed, 0x7d2dd121, 0x6424142b, 0xfa24bee7, - 0x19233169, 0x87239ba5, 0x566276f9, 0xc862dc35, 0x2b6553bb, - 0xb565f977, 0xac6c3c7d, 0x326c96b1, 0xd16b193f, 0x4f6bb3f3, - 0xe379932a, 0x7d7939e6, 0x9e7eb668, 0x007e1ca4, 0x1977d9ae, - 0x87777362, 0x6470fcec, 0xfa705620, 0x7d53cd85, 0xe3536749, - 0x0054e8c7, 0x9e54420b, 0x875d8701, 0x195d2dcd, 0xfa5aa243, - 0x645a088f, 0xc8482856, 0x5648829a, 0xb54f0d14, 0x2b4fa7d8, - 0x324662d2, 0xac46c81e, 0x4f414790, 0xd141ed5c, 0xedc29d29, - 0x73c237e5, 0x90c5b86b, 0x0ec512a7, 0x17ccd7ad, 0x89cc7d61, - 0x6acbf2ef, 0xf4cb5823, 0x58d978fa, 0xc6d9d236, 0x25de5db8, - 0xbbdef774, 0xa2d7327e, 0x3cd798b2, 0xdfd0173c, 0x41d0bdf0, - 0xc6f32655, 0x58f38c99, 0xbbf40317, 0x25f4a9db, 0x3cfd6cd1, - 0xa2fdc61d, 0x41fa4993, 0xdffae35f, 0x73e8c386, 0xede8694a, - 0x0eefe6c4, 0x90ef4c08, 0x89e68902, 0x17e623ce, 0xf4e1ac40, - 0x6ae1068c, 0xbba0ebd0, 0x25a0411c, 0xc6a7ce92, 0x58a7645e, - 0x41aea154, 0xdfae0b98, 0x3ca98416, 0xa2a92eda, 0x0ebb0e03, - 0x90bba4cf, 0x73bc2b41, 0xedbc818d, 0xf4b54487, 0x6ab5ee4b, - 0x89b261c5, 0x17b2cb09, 0x909150ac, 0x0e91fa60, 0xed9675ee, - 0x7396df22, 0x6a9f1a28, 0xf49fb0e4, 0x17983f6a, 0x899895a6, - 0x258ab57f, 0xbb8a1fb3, 0x588d903d, 0xc68d3af1, 0xdf84fffb, - 0x41845537, 0xa283dab9, 0x3c837075, 0xda853b53, 0x4485919f, - 0xa7821e11, 0x3982b4dd, 0x208b71d7, 0xbe8bdb1b, 0x5d8c5495, - 0xc38cfe59, 0x6f9ede80, 0xf19e744c, 0x1299fbc2, 0x8c99510e, - 0x95909404, 0x0b903ec8, 0xe897b146, 0x76971b8a, 0xf1b4802f, - 0x6fb42ae3, 0x8cb3a56d, 0x12b30fa1, 0x0bbacaab, 0x95ba6067, - 0x76bdefe9, 0xe8bd4525, 0x44af65fc, 0xdaafcf30, 0x39a840be, - 0xa7a8ea72, 0xbea12f78, 0x20a185b4, 0xc3a60a3a, 0x5da6a0f6, - 0x8ce74daa, 0x12e7e766, 0xf1e068e8, 0x6fe0c224, 0x76e9072e, - 0xe8e9ade2, 0x0bee226c, 0x95ee88a0, 0x39fca879, 0xa7fc02b5, - 0x44fb8d3b, 0xdafb27f7, 0xc3f2e2fd, 0x5df24831, 0xbef5c7bf, - 0x20f56d73, 0xa7d6f6d6, 0x39d65c1a, 0xdad1d394, 0x44d17958, - 0x5dd8bc52, 0xc3d8169e, 0x20df9910, 0xbedf33dc, 0x12cd1305, - 0x8ccdb9c9, 0x6fca3647, 0xf1ca9c8b, 0xe8c35981, 0x76c3f34d, - 0x95c47cc3, 0x0bc4d60f, 0x3747a67a, 0xa9470cb6, 0x4a408338, - 0xd44029f4, 0xcd49ecfe, 0x53494632, 0xb04ec9bc, 0x2e4e6370, - 0x825c43a9, 0x1c5ce965, 0xff5b66eb, 0x615bcc27, 0x7852092d, - 0xe652a3e1, 0x05552c6f, 0x9b5586a3, 0x1c761d06, 0x8276b7ca, - 0x61713844, 0xff719288, 0xe6785782, 0x7878fd4e, 0x9b7f72c0, - 0x057fd80c, 0xa96df8d5, 0x376d5219, 0xd46add97, 0x4a6a775b, - 0x5363b251, 0xcd63189d, 0x2e649713, 0xb0643ddf, 0x6125d083, - 0xff257a4f, 0x1c22f5c1, 0x82225f0d, 0x9b2b9a07, 0x052b30cb, - 0xe62cbf45, 0x782c1589, 0xd43e3550, 0x4a3e9f9c, 0xa9391012, - 0x3739bade, 0x2e307fd4, 0xb030d518, 0x53375a96, 0xcd37f05a, - 0x4a146bff, 0xd414c133, 0x37134ebd, 0xa913e471, 0xb01a217b, - 0x2e1a8bb7, 0xcd1d0439, 0x531daef5, 0xff0f8e2c, 0x610f24e0, - 0x8208ab6e, 0x1c0801a2, 0x0501c4a8, 0x9b016e64, 0x7806e1ea, - 0xe6064b26}}; + {0x00000000, 0xb029603d, 0x6053c07a, 0xd07aa047, 0xc0a680f5, 0x708fe0c8, + 0xa0f5408f, 0x10dc20b2, 0xc14b7030, 0x7162100d, 0xa118b04a, 0x1131d077, + 0x01edf0c5, 0xb1c490f8, 0x61be30bf, 0xd1975082, 0x8297e060, 0x32be805d, + 0xe2c4201a, 0x52ed4027, 0x42316095, 0xf21800a8, 0x2262a0ef, 0x924bc0d2, + 0x43dc9050, 0xf3f5f06d, 0x238f502a, 0x93a63017, 0x837a10a5, 0x33537098, + 0xe329d0df, 0x5300b0e2, 0x042fc1c1, 0xb406a1fc, 0x647c01bb, 0xd4556186, + 0xc4894134, 0x74a02109, 0xa4da814e, 0x14f3e173, 0xc564b1f1, 0x754dd1cc, + 0xa537718b, 0x151e11b6, 0x05c23104, 0xb5eb5139, 0x6591f17e, 0xd5b89143, + 0x86b821a1, 0x3691419c, 0xe6ebe1db, 0x56c281e6, 0x461ea154, 0xf637c169, + 0x264d612e, 0x96640113, 0x47f35191, 0xf7da31ac, 0x27a091eb, 0x9789f1d6, + 0x8755d164, 0x377cb159, 0xe706111e, 0x572f7123, 0x4958f358, 0xf9719365, + 0x290b3322, 0x9922531f, 0x89fe73ad, 0x39d71390, 0xe9adb3d7, 0x5984d3ea, + 0x88138368, 0x383ae355, 0xe8404312, 0x5869232f, 0x48b5039d, 0xf89c63a0, + 0x28e6c3e7, 0x98cfa3da, 0xcbcf1338, 0x7be67305, 0xab9cd342, 0x1bb5b37f, + 0x0b6993cd, 0xbb40f3f0, 0x6b3a53b7, 0xdb13338a, 0x0a846308, 0xbaad0335, + 0x6ad7a372, 0xdafec34f, 0xca22e3fd, 0x7a0b83c0, 0xaa712387, 0x1a5843ba, + 0x4d773299, 0xfd5e52a4, 0x2d24f2e3, 0x9d0d92de, 0x8dd1b26c, 0x3df8d251, + 0xed827216, 0x5dab122b, 0x8c3c42a9, 0x3c152294, 0xec6f82d3, 0x5c46e2ee, + 0x4c9ac25c, 0xfcb3a261, 0x2cc90226, 0x9ce0621b, 0xcfe0d2f9, 0x7fc9b2c4, + 0xafb31283, 0x1f9a72be, 0x0f46520c, 0xbf6f3231, 0x6f159276, 0xdf3cf24b, + 0x0eaba2c9, 0xbe82c2f4, 0x6ef862b3, 0xded1028e, 0xce0d223c, 0x7e244201, + 0xae5ee246, 0x1e77827b, 0x92b0e6b1, 0x2299868c, 0xf2e326cb, 0x42ca46f6, + 0x52166644, 0xe23f0679, 0x3245a63e, 0x826cc603, 0x53fb9681, 0xe3d2f6bc, + 0x33a856fb, 0x838136c6, 0x935d1674, 0x23747649, 0xf30ed60e, 0x4327b633, + 0x102706d1, 0xa00e66ec, 0x7074c6ab, 0xc05da696, 0xd0818624, 0x60a8e619, + 0xb0d2465e, 0x00fb2663, 0xd16c76e1, 0x614516dc, 0xb13fb69b, 0x0116d6a6, + 0x11caf614, 0xa1e39629, 0x7199366e, 0xc1b05653, 0x969f2770, 0x26b6474d, + 0xf6cce70a, 0x46e58737, 0x5639a785, 0xe610c7b8, 0x366a67ff, 0x864307c2, + 0x57d45740, 0xe7fd377d, 0x3787973a, 0x87aef707, 0x9772d7b5, 0x275bb788, + 0xf72117cf, 0x470877f2, 0x1408c710, 0xa421a72d, 0x745b076a, 0xc4726757, + 0xd4ae47e5, 0x648727d8, 0xb4fd879f, 0x04d4e7a2, 0xd543b720, 0x656ad71d, + 0xb510775a, 0x05391767, 0x15e537d5, 0xa5cc57e8, 0x75b6f7af, 0xc59f9792, + 0xdbe815e9, 0x6bc175d4, 0xbbbbd593, 0x0b92b5ae, 0x1b4e951c, 0xab67f521, + 0x7b1d5566, 0xcb34355b, 0x1aa365d9, 0xaa8a05e4, 0x7af0a5a3, 0xcad9c59e, + 0xda05e52c, 0x6a2c8511, 0xba562556, 0x0a7f456b, 0x597ff589, 0xe95695b4, + 0x392c35f3, 0x890555ce, 0x99d9757c, 0x29f01541, 0xf98ab506, 0x49a3d53b, + 0x983485b9, 0x281de584, 0xf86745c3, 0x484e25fe, 0x5892054c, 0xe8bb6571, + 0x38c1c536, 0x88e8a50b, 0xdfc7d428, 0x6feeb415, 0xbf941452, 0x0fbd746f, + 0x1f6154dd, 0xaf4834e0, 0x7f3294a7, 0xcf1bf49a, 0x1e8ca418, 0xaea5c425, + 0x7edf6462, 0xcef6045f, 0xde2a24ed, 0x6e0344d0, 0xbe79e497, 0x0e5084aa, + 0x5d503448, 0xed795475, 0x3d03f432, 0x8d2a940f, 0x9df6b4bd, 0x2ddfd480, + 0xfda574c7, 0x4d8c14fa, 0x9c1b4478, 0x2c322445, 0xfc488402, 0x4c61e43f, + 0x5cbdc48d, 0xec94a4b0, 0x3cee04f7, 0x8cc764ca}, + {0x00000000, 0xa5d35ccb, 0x0ba1c84d, 0xae729486, 0x1642919b, 0xb391cd50, + 0x1de359d6, 0xb830051d, 0x6d8253ec, 0xc8510f27, 0x66239ba1, 0xc3f0c76a, + 0x7bc0c277, 0xde139ebc, 0x70610a3a, 0xd5b256f1, 0x9b02d603, 0x3ed18ac8, + 0x90a31e4e, 0x35704285, 0x8d404798, 0x28931b53, 0x86e18fd5, 0x2332d31e, + 0xf68085ef, 0x5353d924, 0xfd214da2, 0x58f21169, 0xe0c21474, 0x451148bf, + 0xeb63dc39, 0x4eb080f2, 0x3605ac07, 0x93d6f0cc, 0x3da4644a, 0x98773881, + 0x20473d9c, 0x85946157, 0x2be6f5d1, 0x8e35a91a, 0x5b87ffeb, 0xfe54a320, + 0x502637a6, 0xf5f56b6d, 0x4dc56e70, 0xe81632bb, 0x4664a63d, 0xe3b7faf6, + 0xad077a04, 0x08d426cf, 0xa6a6b249, 0x0375ee82, 0xbb45eb9f, 0x1e96b754, + 0xb0e423d2, 0x15377f19, 0xc08529e8, 0x65567523, 0xcb24e1a5, 0x6ef7bd6e, + 0xd6c7b873, 0x7314e4b8, 0xdd66703e, 0x78b52cf5, 0x6c0a580f, 0xc9d904c4, + 0x67ab9042, 0xc278cc89, 0x7a48c994, 0xdf9b955f, 0x71e901d9, 0xd43a5d12, + 0x01880be3, 0xa45b5728, 0x0a29c3ae, 0xaffa9f65, 0x17ca9a78, 0xb219c6b3, + 0x1c6b5235, 0xb9b80efe, 0xf7088e0c, 0x52dbd2c7, 0xfca94641, 0x597a1a8a, + 0xe14a1f97, 0x4499435c, 0xeaebd7da, 0x4f388b11, 0x9a8adde0, 0x3f59812b, + 0x912b15ad, 0x34f84966, 0x8cc84c7b, 0x291b10b0, 0x87698436, 0x22bad8fd, + 0x5a0ff408, 0xffdca8c3, 0x51ae3c45, 0xf47d608e, 0x4c4d6593, 0xe99e3958, + 0x47ecadde, 0xe23ff115, 0x378da7e4, 0x925efb2f, 0x3c2c6fa9, 0x99ff3362, + 0x21cf367f, 0x841c6ab4, 0x2a6efe32, 0x8fbda2f9, 0xc10d220b, 0x64de7ec0, + 0xcaacea46, 0x6f7fb68d, 0xd74fb390, 0x729cef5b, 0xdcee7bdd, 0x793d2716, + 0xac8f71e7, 0x095c2d2c, 0xa72eb9aa, 0x02fde561, 0xbacde07c, 0x1f1ebcb7, + 0xb16c2831, 0x14bf74fa, 0xd814b01e, 0x7dc7ecd5, 0xd3b57853, 0x76662498, + 0xce562185, 0x6b857d4e, 0xc5f7e9c8, 0x6024b503, 0xb596e3f2, 0x1045bf39, + 0xbe372bbf, 0x1be47774, 0xa3d47269, 0x06072ea2, 0xa875ba24, 0x0da6e6ef, + 0x4316661d, 0xe6c53ad6, 0x48b7ae50, 0xed64f29b, 0x5554f786, 0xf087ab4d, + 0x5ef53fcb, 0xfb266300, 0x2e9435f1, 0x8b47693a, 0x2535fdbc, 0x80e6a177, + 0x38d6a46a, 0x9d05f8a1, 0x33776c27, 0x96a430ec, 0xee111c19, 0x4bc240d2, + 0xe5b0d454, 0x4063889f, 0xf8538d82, 0x5d80d149, 0xf3f245cf, 0x56211904, + 0x83934ff5, 0x2640133e, 0x883287b8, 0x2de1db73, 0x95d1de6e, 0x300282a5, + 0x9e701623, 0x3ba34ae8, 0x7513ca1a, 0xd0c096d1, 0x7eb20257, 0xdb615e9c, + 0x63515b81, 0xc682074a, 0x68f093cc, 0xcd23cf07, 0x189199f6, 0xbd42c53d, + 0x133051bb, 0xb6e30d70, 0x0ed3086d, 0xab0054a6, 0x0572c020, 0xa0a19ceb, + 0xb41ee811, 0x11cdb4da, 0xbfbf205c, 0x1a6c7c97, 0xa25c798a, 0x078f2541, + 0xa9fdb1c7, 0x0c2eed0c, 0xd99cbbfd, 0x7c4fe736, 0xd23d73b0, 0x77ee2f7b, + 0xcfde2a66, 0x6a0d76ad, 0xc47fe22b, 0x61acbee0, 0x2f1c3e12, 0x8acf62d9, + 0x24bdf65f, 0x816eaa94, 0x395eaf89, 0x9c8df342, 0x32ff67c4, 0x972c3b0f, + 0x429e6dfe, 0xe74d3135, 0x493fa5b3, 0xececf978, 0x54dcfc65, 0xf10fa0ae, + 0x5f7d3428, 0xfaae68e3, 0x821b4416, 0x27c818dd, 0x89ba8c5b, 0x2c69d090, + 0x9459d58d, 0x318a8946, 0x9ff81dc0, 0x3a2b410b, 0xef9917fa, 0x4a4a4b31, + 0xe438dfb7, 0x41eb837c, 0xf9db8661, 0x5c08daaa, 0xf27a4e2c, 0x57a912e7, + 0x19199215, 0xbccacede, 0x12b85a58, 0xb76b0693, 0x0f5b038e, 0xaa885f45, + 0x04facbc3, 0xa1299708, 0x749bc1f9, 0xd1489d32, 0x7f3a09b4, 0xdae9557f, + 0x62d95062, 0xc70a0ca9, 0x6978982f, 0xccabc4e4}, + {0x00000000, 0xb40b77a6, 0x29119f97, 0x9d1ae831, 0x13244ff4, 0xa72f3852, + 0x3a35d063, 0x8e3ea7c5, 0x674eef33, 0xd3459895, 0x4e5f70a4, 0xfa540702, + 0x746aa0c7, 0xc061d761, 0x5d7b3f50, 0xe97048f6, 0xce9cde67, 0x7a97a9c1, + 0xe78d41f0, 0x53863656, 0xddb89193, 0x69b3e635, 0xf4a90e04, 0x40a279a2, + 0xa9d23154, 0x1dd946f2, 0x80c3aec3, 0x34c8d965, 0xbaf67ea0, 0x0efd0906, + 0x93e7e137, 0x27ec9691, 0x9c39bdcf, 0x2832ca69, 0xb5282258, 0x012355fe, + 0x8f1df23b, 0x3b16859d, 0xa60c6dac, 0x12071a0a, 0xfb7752fc, 0x4f7c255a, + 0xd266cd6b, 0x666dbacd, 0xe8531d08, 0x5c586aae, 0xc142829f, 0x7549f539, + 0x52a563a8, 0xe6ae140e, 0x7bb4fc3f, 0xcfbf8b99, 0x41812c5c, 0xf58a5bfa, + 0x6890b3cb, 0xdc9bc46d, 0x35eb8c9b, 0x81e0fb3d, 0x1cfa130c, 0xa8f164aa, + 0x26cfc36f, 0x92c4b4c9, 0x0fde5cf8, 0xbbd52b5e, 0x79750b44, 0xcd7e7ce2, + 0x506494d3, 0xe46fe375, 0x6a5144b0, 0xde5a3316, 0x4340db27, 0xf74bac81, + 0x1e3be477, 0xaa3093d1, 0x372a7be0, 0x83210c46, 0x0d1fab83, 0xb914dc25, + 0x240e3414, 0x900543b2, 0xb7e9d523, 0x03e2a285, 0x9ef84ab4, 0x2af33d12, + 0xa4cd9ad7, 0x10c6ed71, 0x8ddc0540, 0x39d772e6, 0xd0a73a10, 0x64ac4db6, + 0xf9b6a587, 0x4dbdd221, 0xc38375e4, 0x77880242, 0xea92ea73, 0x5e999dd5, + 0xe54cb68b, 0x5147c12d, 0xcc5d291c, 0x78565eba, 0xf668f97f, 0x42638ed9, + 0xdf7966e8, 0x6b72114e, 0x820259b8, 0x36092e1e, 0xab13c62f, 0x1f18b189, + 0x9126164c, 0x252d61ea, 0xb83789db, 0x0c3cfe7d, 0x2bd068ec, 0x9fdb1f4a, + 0x02c1f77b, 0xb6ca80dd, 0x38f42718, 0x8cff50be, 0x11e5b88f, 0xa5eecf29, + 0x4c9e87df, 0xf895f079, 0x658f1848, 0xd1846fee, 0x5fbac82b, 0xebb1bf8d, + 0x76ab57bc, 0xc2a0201a, 0xf2ea1688, 0x46e1612e, 0xdbfb891f, 0x6ff0feb9, + 0xe1ce597c, 0x55c52eda, 0xc8dfc6eb, 0x7cd4b14d, 0x95a4f9bb, 0x21af8e1d, + 0xbcb5662c, 0x08be118a, 0x8680b64f, 0x328bc1e9, 0xaf9129d8, 0x1b9a5e7e, + 0x3c76c8ef, 0x887dbf49, 0x15675778, 0xa16c20de, 0x2f52871b, 0x9b59f0bd, + 0x0643188c, 0xb2486f2a, 0x5b3827dc, 0xef33507a, 0x7229b84b, 0xc622cfed, + 0x481c6828, 0xfc171f8e, 0x610df7bf, 0xd5068019, 0x6ed3ab47, 0xdad8dce1, + 0x47c234d0, 0xf3c94376, 0x7df7e4b3, 0xc9fc9315, 0x54e67b24, 0xe0ed0c82, + 0x099d4474, 0xbd9633d2, 0x208cdbe3, 0x9487ac45, 0x1ab90b80, 0xaeb27c26, + 0x33a89417, 0x87a3e3b1, 0xa04f7520, 0x14440286, 0x895eeab7, 0x3d559d11, + 0xb36b3ad4, 0x07604d72, 0x9a7aa543, 0x2e71d2e5, 0xc7019a13, 0x730aedb5, + 0xee100584, 0x5a1b7222, 0xd425d5e7, 0x602ea241, 0xfd344a70, 0x493f3dd6, + 0x8b9f1dcc, 0x3f946a6a, 0xa28e825b, 0x1685f5fd, 0x98bb5238, 0x2cb0259e, + 0xb1aacdaf, 0x05a1ba09, 0xecd1f2ff, 0x58da8559, 0xc5c06d68, 0x71cb1ace, + 0xfff5bd0b, 0x4bfecaad, 0xd6e4229c, 0x62ef553a, 0x4503c3ab, 0xf108b40d, + 0x6c125c3c, 0xd8192b9a, 0x56278c5f, 0xe22cfbf9, 0x7f3613c8, 0xcb3d646e, + 0x224d2c98, 0x96465b3e, 0x0b5cb30f, 0xbf57c4a9, 0x3169636c, 0x856214ca, + 0x1878fcfb, 0xac738b5d, 0x17a6a003, 0xa3add7a5, 0x3eb73f94, 0x8abc4832, + 0x0482eff7, 0xb0899851, 0x2d937060, 0x999807c6, 0x70e84f30, 0xc4e33896, + 0x59f9d0a7, 0xedf2a701, 0x63cc00c4, 0xd7c77762, 0x4add9f53, 0xfed6e8f5, + 0xd93a7e64, 0x6d3109c2, 0xf02be1f3, 0x44209655, 0xca1e3190, 0x7e154636, + 0xe30fae07, 0x5704d9a1, 0xbe749157, 0x0a7fe6f1, 0x97650ec0, 0x236e7966, + 0xad50dea3, 0x195ba905, 0x84414134, 0x304a3692}, + {0x00000000, 0x9e00aacc, 0x7d072542, 0xe3078f8e, 0xfa0e4a84, 0x640ee048, + 0x87096fc6, 0x1909c50a, 0xb51be5d3, 0x2b1b4f1f, 0xc81cc091, 0x561c6a5d, + 0x4f15af57, 0xd115059b, 0x32128a15, 0xac1220d9, 0x2b31bb7c, 0xb53111b0, + 0x56369e3e, 0xc83634f2, 0xd13ff1f8, 0x4f3f5b34, 0xac38d4ba, 0x32387e76, + 0x9e2a5eaf, 0x002af463, 0xe32d7bed, 0x7d2dd121, 0x6424142b, 0xfa24bee7, + 0x19233169, 0x87239ba5, 0x566276f9, 0xc862dc35, 0x2b6553bb, 0xb565f977, + 0xac6c3c7d, 0x326c96b1, 0xd16b193f, 0x4f6bb3f3, 0xe379932a, 0x7d7939e6, + 0x9e7eb668, 0x007e1ca4, 0x1977d9ae, 0x87777362, 0x6470fcec, 0xfa705620, + 0x7d53cd85, 0xe3536749, 0x0054e8c7, 0x9e54420b, 0x875d8701, 0x195d2dcd, + 0xfa5aa243, 0x645a088f, 0xc8482856, 0x5648829a, 0xb54f0d14, 0x2b4fa7d8, + 0x324662d2, 0xac46c81e, 0x4f414790, 0xd141ed5c, 0xedc29d29, 0x73c237e5, + 0x90c5b86b, 0x0ec512a7, 0x17ccd7ad, 0x89cc7d61, 0x6acbf2ef, 0xf4cb5823, + 0x58d978fa, 0xc6d9d236, 0x25de5db8, 0xbbdef774, 0xa2d7327e, 0x3cd798b2, + 0xdfd0173c, 0x41d0bdf0, 0xc6f32655, 0x58f38c99, 0xbbf40317, 0x25f4a9db, + 0x3cfd6cd1, 0xa2fdc61d, 0x41fa4993, 0xdffae35f, 0x73e8c386, 0xede8694a, + 0x0eefe6c4, 0x90ef4c08, 0x89e68902, 0x17e623ce, 0xf4e1ac40, 0x6ae1068c, + 0xbba0ebd0, 0x25a0411c, 0xc6a7ce92, 0x58a7645e, 0x41aea154, 0xdfae0b98, + 0x3ca98416, 0xa2a92eda, 0x0ebb0e03, 0x90bba4cf, 0x73bc2b41, 0xedbc818d, + 0xf4b54487, 0x6ab5ee4b, 0x89b261c5, 0x17b2cb09, 0x909150ac, 0x0e91fa60, + 0xed9675ee, 0x7396df22, 0x6a9f1a28, 0xf49fb0e4, 0x17983f6a, 0x899895a6, + 0x258ab57f, 0xbb8a1fb3, 0x588d903d, 0xc68d3af1, 0xdf84fffb, 0x41845537, + 0xa283dab9, 0x3c837075, 0xda853b53, 0x4485919f, 0xa7821e11, 0x3982b4dd, + 0x208b71d7, 0xbe8bdb1b, 0x5d8c5495, 0xc38cfe59, 0x6f9ede80, 0xf19e744c, + 0x1299fbc2, 0x8c99510e, 0x95909404, 0x0b903ec8, 0xe897b146, 0x76971b8a, + 0xf1b4802f, 0x6fb42ae3, 0x8cb3a56d, 0x12b30fa1, 0x0bbacaab, 0x95ba6067, + 0x76bdefe9, 0xe8bd4525, 0x44af65fc, 0xdaafcf30, 0x39a840be, 0xa7a8ea72, + 0xbea12f78, 0x20a185b4, 0xc3a60a3a, 0x5da6a0f6, 0x8ce74daa, 0x12e7e766, + 0xf1e068e8, 0x6fe0c224, 0x76e9072e, 0xe8e9ade2, 0x0bee226c, 0x95ee88a0, + 0x39fca879, 0xa7fc02b5, 0x44fb8d3b, 0xdafb27f7, 0xc3f2e2fd, 0x5df24831, + 0xbef5c7bf, 0x20f56d73, 0xa7d6f6d6, 0x39d65c1a, 0xdad1d394, 0x44d17958, + 0x5dd8bc52, 0xc3d8169e, 0x20df9910, 0xbedf33dc, 0x12cd1305, 0x8ccdb9c9, + 0x6fca3647, 0xf1ca9c8b, 0xe8c35981, 0x76c3f34d, 0x95c47cc3, 0x0bc4d60f, + 0x3747a67a, 0xa9470cb6, 0x4a408338, 0xd44029f4, 0xcd49ecfe, 0x53494632, + 0xb04ec9bc, 0x2e4e6370, 0x825c43a9, 0x1c5ce965, 0xff5b66eb, 0x615bcc27, + 0x7852092d, 0xe652a3e1, 0x05552c6f, 0x9b5586a3, 0x1c761d06, 0x8276b7ca, + 0x61713844, 0xff719288, 0xe6785782, 0x7878fd4e, 0x9b7f72c0, 0x057fd80c, + 0xa96df8d5, 0x376d5219, 0xd46add97, 0x4a6a775b, 0x5363b251, 0xcd63189d, + 0x2e649713, 0xb0643ddf, 0x6125d083, 0xff257a4f, 0x1c22f5c1, 0x82225f0d, + 0x9b2b9a07, 0x052b30cb, 0xe62cbf45, 0x782c1589, 0xd43e3550, 0x4a3e9f9c, + 0xa9391012, 0x3739bade, 0x2e307fd4, 0xb030d518, 0x53375a96, 0xcd37f05a, + 0x4a146bff, 0xd414c133, 0x37134ebd, 0xa913e471, 0xb01a217b, 0x2e1a8bb7, + 0xcd1d0439, 0x531daef5, 0xff0f8e2c, 0x610f24e0, 0x8208ab6e, 0x1c0801a2, + 0x0501c4a8, 0x9b016e64, 0x7806e1ea, 0xe6064b26}}; #endif @@ -3287,1534 +2981,1390 @@ local const z_word_t FAR crc_braid_big_table[][256] = { #if W == 8 local const z_crc_t FAR crc_braid_table[][256] = { - {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f, - 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999, - 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee, - 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615, - 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383, - 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb, - 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275, - 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d, - 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b, - 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460, - 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317, - 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1, - 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5, - 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd, - 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04, - 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c, - 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7, - 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11, - 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66, - 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7, - 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871, - 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309, - 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd, - 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85, - 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913, - 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d, - 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a, - 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc, - 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57, - 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f, - 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6, - 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e, - 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f, - 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289, - 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe, - 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05, - 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893, - 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb, - 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0, - 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8, - 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e, - 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5, - 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2, - 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574, - 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5, - 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add, - 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114, - 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c, - 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7, - 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701, - 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076, - 0x09cd8551}, - {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193, - 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2, - 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c, - 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71, - 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a, - 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d, - 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71, - 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436, - 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d, - 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000, - 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae, - 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf, - 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930, - 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277, - 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff, - 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8, - 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef, - 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e, - 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20, - 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95, - 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e, - 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9, - 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d, - 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a, - 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151, - 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4, - 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a, - 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b, - 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c, - 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b, - 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3, - 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4, - 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b, - 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a, - 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4, - 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189, - 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92, - 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5, - 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9, - 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe, - 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5, - 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8, - 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66, - 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707, - 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8, - 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f, - 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707, - 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40, - 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017, - 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876, - 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8, - 0x7bc97a0c}, - {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300, - 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0, - 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80, - 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701, - 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41, - 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81, - 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43, - 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83, - 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3, - 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42, - 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202, - 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2, - 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7, - 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407, - 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47, - 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87, - 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86, - 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46, - 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506, - 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44, - 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704, - 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4, - 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5, - 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505, - 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45, - 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f, - 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f, - 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f, - 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e, - 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e, - 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e, - 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce, - 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c, - 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc, - 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c, - 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d, - 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d, - 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d, - 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88, - 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48, - 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708, - 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89, - 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9, - 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309, - 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb, - 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b, - 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b, - 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b, - 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a, - 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a, - 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a, - 0x7851a2ca}, - {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb, - 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8, - 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0, - 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f, - 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a, - 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf, - 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5, - 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380, - 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815, - 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa, - 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2, - 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1, - 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1, - 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4, - 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa, - 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df, - 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6, - 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5, - 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad, - 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca, - 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f, - 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a, - 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8, - 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d, - 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708, - 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d, - 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865, - 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636, - 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f, - 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a, - 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744, - 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061, - 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0, - 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293, - 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb, - 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874, - 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1, - 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4, - 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f, - 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a, - 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f, - 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120, - 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778, - 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b, - 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a, - 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af, - 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81, - 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4, - 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd, - 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e, - 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6, - 0x566b6848}, - {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59, - 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4, - 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67, - 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef, - 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97, - 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88, - 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687, - 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698, - 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0, - 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068, - 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb, - 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056, - 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016, - 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009, - 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028, - 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037, - 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a, - 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7, - 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054, - 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7, - 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af, - 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0, - 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4, - 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab, - 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3, - 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a, - 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9, - 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54, - 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09, - 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16, - 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37, - 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28, - 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e, - 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3, - 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40, - 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8, - 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0, - 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf, - 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6, - 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9, - 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1, - 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059, - 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca, - 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067, - 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031, - 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e, - 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f, - 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010, - 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d, - 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0, - 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073, - 0xd8ac6b35}, - {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2, - 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd, - 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696, - 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3, - 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f, - 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35, - 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5, - 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f, - 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673, - 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46, - 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d, - 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632, - 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28, - 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192, - 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c, - 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6, - 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0, - 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff, - 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4, - 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95, - 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9, - 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03, - 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7, - 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d, - 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151, - 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808, - 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343, - 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c, - 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a, - 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0, - 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e, - 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594, - 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6, - 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399, - 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2, - 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7, - 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb, - 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571, - 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289, - 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33, - 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f, - 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a, - 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461, - 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e, - 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c, - 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6, - 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918, - 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2, - 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484, - 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb, - 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0, - 0xa140efa8}, - {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706, - 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed, - 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289, - 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a, - 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214, - 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3, - 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3, - 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254, - 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a, - 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9, - 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad, - 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746, - 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060, - 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187, - 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef, - 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408, - 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e, - 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495, - 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1, - 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532, - 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c, - 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb, - 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb, - 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c, - 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42, - 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060, - 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04, - 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef, - 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99, - 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e, - 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16, - 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1, - 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7, - 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c, - 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38, - 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb, - 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5, - 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42, - 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62, - 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85, - 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb, - 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18, - 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c, - 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997, - 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1, - 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36, - 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e, - 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9, - 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf, - 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24, - 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040, - 0x917cd6a1}, - {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf, - 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd, - 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896, - 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9, - 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3, - 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f, - 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d, - 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1, - 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab, - 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4, - 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f, - 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d, - 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4, - 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978, - 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad, - 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621, - 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46, - 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854, - 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f, - 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a, - 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890, - 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c, - 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4, - 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238, - 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622, - 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab, - 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0, - 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2, - 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295, - 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19, - 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc, - 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140, - 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd, - 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf, - 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184, - 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb, - 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1, - 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d, - 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb, - 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257, - 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d, - 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22, - 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069, - 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b, - 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6, - 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a, - 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf, - 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33, - 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254, - 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146, - 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d, - 0x18ba364e}}; + {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f, 0xe823fb78, + 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999, 0x0b36f0b1, 0x8a139596, + 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee, 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, + 0xa650b332, 0x2775d615, 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, + 0xad664383, 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb, + 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275, 0xa6c85752, + 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d, 0x2cdbc2c4, 0xadfea7e3, + 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b, 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, + 0x81bd8147, 0x0098e460, 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, + 0x3180d317, 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1, + 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5, 0xa7f99f92, + 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd, 0x96e1a8e5, 0x17c4cdc2, + 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04, 0xaccf6f23, 0x9dd75854, 0x1cf23d73, + 0x44ec945b, 0xc5c9f17c, 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, + 0x30b11bd7, 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11, + 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66, 0xbaa28e41, + 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7, 0xb10c9a90, 0x3029ffb7, + 0x6837569f, 0xe91233b8, 0x0a073871, 0x8b225d56, 0xd33cf47e, 0x52199159, + 0x6301a62e, 0xe224c309, 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, + 0x7e5ab7fd, 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85, + 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913, 0x9d4fbc34, + 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d, 0x94823965, 0x15a75c42, + 0x24bf6b35, 0xa59a0e12, 0xfd84a73a, 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, + 0x468f05db, 0xc7aa60fc, 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, + 0x32d28a57, 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f, + 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6, 0xb8c11fc1, + 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e, 0xb36f0b10, 0x324a6e37, + 0x6a54c71f, 0xeb71a238, 0xda69954f, 0x5b4cf068, 0x03525940, 0x82773c67, + 0x616237ae, 0xe0475289, 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, + 0xd15f65fe, 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05, + 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893, 0x9f2c2db4, + 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb, 0xae341ac3, 0x2f117fe4, + 0x6b650fdf, 0xea406af8, 0xb25ec3d0, 0x337ba6f7, 0x02639180, 0x8346f4a7, + 0xdb585d8f, 0x5a7d38a8, 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, + 0xd06ead3e, 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5, + 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2, 0x25164795, + 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574, 0xaf05d203, 0x2e20b724, + 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5, 0x14969482, 0x4c883daa, 0xcdad588d, + 0xfcb56ffa, 0x7d900add, 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, + 0x9e850114, 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c, + 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7, 0x02fb75e0, + 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701, 0xe1ee7e29, 0x60cb1b0e, + 0x51d32c79, 0xd0f6495e, 0x88e8e076, 0x09cd8551}, + {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193, 0x9b2f4b47, + 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2, 0xed2f90cf, 0x765c7a1b, + 0x00e5e2b5, 0x9b960861, 0xed73315c, 0x7600db88, 0x0172864c, 0x9a016c98, + 0xece455a5, 0x7797bf71, 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, + 0x01cbc56a, 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d, + 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71, 0x740035a5, + 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436, 0x025c4fbe, 0x992fa56a, + 0xefca9c57, 0x74b97683, 0x0200ee2d, 0x997304f9, 0xef963dc4, 0x74e5d710, + 0x03978ad4, 0x98e46000, 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, + 0xee5df8ae, 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf, + 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930, 0x9eb9f3e4, + 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277, 0xe8006b4a, 0x7373819e, + 0x05735a16, 0x9e00b0c2, 0xe8e589ff, 0x7396632b, 0x052ffb85, 0x9e5c1151, + 0xe8b9286c, 0x73cac2b8, 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, + 0x04e43eef, 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e, + 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20, 0x72b844f4, + 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95, 0x0773b43b, 0x9c005eef, + 0xeae567d2, 0x71968d06, 0x0796568e, 0x9ce5bc5a, 0xea008567, 0x71736fb3, + 0x07caf71d, 0x9cb91dc9, 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, + 0xebcb400d, 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a, + 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151, 0x9dcb9b85, + 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4, 0xe602e189, 0x7d710b5d, + 0x0bc893f3, 0x90bb7927, 0xe65e401a, 0x7d2daace, 0x0b2d7146, 0x905e9b92, + 0xe6bba2af, 0x7dc8487b, 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, + 0x0ae6b42c, 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b, + 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3, 0x7cbace37, + 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4, 0x09713ef8, 0x9202d42c, + 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b, 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, + 0x09c87dde, 0x92bb970a, 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, + 0xe4020fa4, 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189, + 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92, 0x93c91146, + 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5, 0xe57089e8, 0x7e03633c, + 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9, 0x78bb126d, 0x0e028ac3, 0x95716017, + 0xe394592a, 0x78e7b3fe, 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, + 0x0ebbc9e5, 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8, + 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66, 0x799535b2, + 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707, 0x0fc94fa9, 0x94baa57d, + 0xe25f9c40, 0x792c7694, 0x0cbb27c8, 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, + 0x0ce7865b, 0x97946c8f, 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, + 0xe194b707, 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40, + 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017, 0x96e6eac3, + 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876, 0xe0e6314b, 0x7b95db9f, + 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8, 0x7bc97a0c}, + {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300, 0x4b89f7c0, + 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0, 0x9713ef80, 0x803b8b40, + 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80, 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, + 0x87a783c1, 0x908fe701, 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, + 0x10b46c41, 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81, + 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43, 0xb1e73f83, + 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83, 0x31dcb4c3, 0x26f4d003, + 0x1f8c7d43, 0x08a41983, 0x6d7d27c3, 0x7a554303, 0x432dee43, 0x54058a83, + 0x2168d882, 0x3640bc42, 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, + 0x53998202, 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2, + 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7, 0xdd664707, + 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407, 0xb8bf7947, 0xaf971d87, + 0x730d05c7, 0x64256107, 0x5d5dcc47, 0x4a75a887, 0x2fac96c7, 0x3884f207, + 0x01fc5f47, 0x16d43b87, 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, + 0x3f18fa86, 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46, + 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506, 0xbf2371c6, + 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44, 0x1e702204, 0x095846c4, + 0x3020eb84, 0x27088f44, 0xfb929704, 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, + 0xa7330404, 0xb01b60c4, 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, + 0xc57632c5, 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505, + 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45, 0x19ec2a85, + 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f, 0x61bd884f, 0x7695ec8f, + 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f, 0x2a347f8f, 0xf6ae67cf, 0xe186030f, + 0xd8feae4f, 0xcfd6ca8f, 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, + 0xe61a0b8e, 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e, + 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e, 0x662180ce, + 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce, 0xc772d30c, 0xd05ab7cc, + 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c, 0x8cfb24cc, 0xb583898c, 0xa2abed4c, + 0x7e31f50c, 0x691991cc, 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, + 0x0cc0af8c, 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d, + 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d, 0xc0eedb8d, + 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d, 0xa537e5cd, 0xb21f810d, + 0x85a36208, 0x928b06c8, 0xabf3ab88, 0xbcdbcf48, 0xd902f108, 0xce2a95c8, + 0xf7523888, 0xe07a5c48, 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, + 0x6041d708, 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89, + 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9, 0x498d1609, + 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309, 0xc9b69d49, 0xde9ef989, + 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb, 0x1a14940b, 0x236c394b, 0x34445d8b, + 0x519d63cb, 0x46b5070b, 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, + 0x9a2f1f4b, 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b, + 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a, 0xef424d4a, + 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a, 0x33d8550a, 0x24f031ca, + 0x41290f8a, 0x56016b4a, 0x6f79c60a, 0x7851a2ca}, + {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb, 0x8d238725, + 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8, 0xc136080b, 0x5eec8b95, + 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0, 0x4c158f2e, 0x4be412ec, 0xd43e9172, + 0xaf201391, 0x30fa900f, 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, + 0x6e161b9a, 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf, + 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5, 0xecd6a73b, + 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380, 0xb23a2cae, 0x2de0af30, + 0x56fe2dd3, 0xc924ae4d, 0xa0c32815, 0x3f19ab8b, 0x44072968, 0xdbddaaf6, + 0xdc2c3734, 0x43f6b4aa, 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, + 0x2a1132f2, 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1, + 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1, 0x6b3bce6f, + 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4, 0x02dc4837, 0x9d06cba9, + 0xd1134487, 0x4ec9c719, 0x35d745fa, 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, + 0x272e4141, 0xb8f4c2df, 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, + 0xadfc5ba6, 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5, + 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad, 0xf310d033, + 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca, 0x71d06c92, 0xee0aef0c, + 0x95146def, 0x0aceee71, 0x46db615f, 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, + 0x542265e4, 0xcbf8e67a, 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, + 0xcc097bb8, 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d, + 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708, 0x801cf496, + 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d, 0xd6779cde, 0x49ad1f40, + 0x204a9918, 0xbf901a86, 0xc48e9865, 0x5b541bfb, 0x174194d5, 0x889b174b, + 0xf38595a8, 0x6c5f1636, 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, + 0x79578f4f, 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a, + 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744, 0x27bb04da, + 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061, 0xa57bb87b, 0x3aa13be5, + 0x41bfb906, 0xde653a98, 0xb782bcc0, 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, + 0x8089b10d, 0x1f533293, 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, + 0x76b4b4cb, 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874, + 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1, 0x54b7207f, + 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4, 0x3d50a627, 0xa28a25b9, + 0xc652d052, 0x598853cc, 0x2296d12f, 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, + 0x306fd594, 0xafb5560a, 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, + 0xf159dd9f, 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120, + 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778, 0xe45144e6, + 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b, 0xbabdcf73, 0x25674ced, + 0x5e79ce0e, 0xc1a34d90, 0x519af58a, 0xce407614, 0xb55ef4f7, 0x2a847769, + 0x4363f131, 0xdcb972af, 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, + 0x90acfd81, 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4, + 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd, 0x975d6043, + 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e, 0xdb48ef6d, 0x44926cf3, + 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6, 0x566b6848}, + {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59, 0x2b8ad01f, + 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4, 0x5715a03e, 0x32729b78, + 0xd3363deb, 0xb65106ad, 0x19f84b67, 0x7c9f7021, 0xe0c6ab25, 0x85a19063, + 0x2a08dda9, 0x4f6fe6ef, 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, + 0x7d1d7d97, 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88, + 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687, 0xb5551dc1, + 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698, 0x872786b9, 0xe240bdff, + 0x4de9f035, 0x288ecb73, 0xc9ca6de0, 0xacad56a6, 0x03041b6c, 0x6663202a, + 0xfa3afb2e, 0x9f5dc068, 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, + 0x7e1966fb, 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056, + 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016, 0x509f9b50, + 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009, 0xb1db3dc3, 0xd4bc0685, + 0xa82376a4, 0xcd444de2, 0x62ed0028, 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, + 0x2c00eb71, 0x4967d037, 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, + 0x9bd3e06a, 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7, + 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054, 0xa9a17b12, + 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7, 0x61e91b44, 0x048e2002, + 0xab276dc8, 0xce40568e, 0xb2df26af, 0xd7b81de9, 0x78115023, 0x1d766b65, + 0xfc32cdf6, 0x9955f6b0, 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, + 0x050c2db4, 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab, + 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3, 0x79935d95, + 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a, 0xa13f36a0, 0xc4580de6, + 0x251cab75, 0x407b9033, 0xefd2ddf9, 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, + 0x3ce4e012, 0x5983db54, 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, + 0x8b37eb09, 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16, + 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37, 0xb9457071, + 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28, 0x710d1027, 0x146a2b61, + 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e, 0x5a87c038, 0xf52e8df2, 0x9049b6b4, + 0xecd6c695, 0x89b1fdd3, 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, + 0x68f55b40, 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8, + 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0, 0x697756f6, + 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf, 0x8833f065, 0xed54cb23, + 0x5e09e03a, 0x3b6edb7c, 0x94c796b6, 0xf1a0adf0, 0x10e40b63, 0x75833025, + 0xda2a7def, 0xbf4d46a9, 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, + 0x8d3fddd1, 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059, + 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca, 0x5f8bed8c, + 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067, 0x6df976f4, 0x089e4db2, + 0xa7370078, 0xc2503b3e, 0x44f5b031, 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, + 0x0a185b68, 0x6f7f602e, 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, + 0x13e0100f, 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010, + 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d, 0x8fb9cb0b, + 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0, 0xf326bb2a, 0x9641806c, + 0x770526ff, 0x12621db9, 0xbdcb5073, 0xd8ac6b35}, + {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2, 0x3e8a8dba, + 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd, 0x7d151b74, 0xaaf79b2c, + 0xe0c91067, 0x372b903f, 0x947d1696, 0x439f96ce, 0x13423b0a, 0xc4a0bb52, + 0x67f63dfb, 0xb014bda3, 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, + 0x1ae3268f, 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35, + 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5, 0x85d2f0bd, + 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f, 0x2f256b91, 0xf8c7ebc9, + 0x5b916d60, 0x8c73ed38, 0xc64d6673, 0x11afe62b, 0xb2f96082, 0x651be0da, + 0x35c64d1e, 0xe224cd46, 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, + 0xa81a460d, 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632, + 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28, 0x9aea6c70, + 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192, 0xd0d4e73b, 0x07366763, + 0x44a9f1ad, 0x934b71f5, 0x301df75c, 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, + 0xd975fabe, 0x0e977ae6, 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, + 0xb722dac0, 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff, + 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4, 0x1dd541ec, + 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95, 0x82e497de, 0x55061786, + 0xf650912f, 0x21b21177, 0x622d87b9, 0xb5cf07e1, 0x16998148, 0xc17b0110, + 0x8b458a5b, 0x5ca70a03, 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, + 0x0c7aa7c7, 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d, + 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151, 0x4fe53109, + 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808, 0xeea5dea1, 0x39475ef9, + 0x7379d5b2, 0xa49b55ea, 0x07cdd343, 0xd02f531b, 0x93b0c5d5, 0x4452458d, + 0xe704c324, 0x30e6437c, 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, + 0x8953e35a, 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0, + 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e, 0x23a47876, + 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594, 0xbc95ae44, 0x6b772e1c, + 0xc821a8b5, 0x1fc328ed, 0x55fda3a6, 0x821f23fe, 0x2149a557, 0xf6ab250f, + 0xb534b3c1, 0x62d63399, 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, + 0x28e8b8d2, 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7, + 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb, 0x71940893, + 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571, 0x3baa83d8, 0xec480380, + 0xd7193478, 0x00fbb420, 0xa3ad3289, 0x744fb2d1, 0x3e71399a, 0xe993b9c2, + 0x4ac53f6b, 0x9d27bf33, 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, + 0x37d0241f, 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a, + 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461, 0x8e658439, + 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e, 0x24921f15, 0xf3709f4d, + 0x502619e4, 0x87c499bc, 0xf19d426c, 0x267fc234, 0x8529449d, 0x52cbc4c5, + 0x18f54f8e, 0xcf17cfd6, 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, + 0x8c885918, 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2, + 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484, 0xdc55f4dc, + 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb, 0x9fca6212, 0x4828e24a, + 0x02166901, 0xd5f4e959, 0x76a26ff0, 0xa140efa8}, + {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706, 0xe4fa61e7, + 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed, 0x1285c58f, 0xfdd7736e, + 0x1cf9790a, 0xf3abcfeb, 0x192d1289, 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, + 0x2b77379b, 0xc425817a, 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, + 0x39f2f214, 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3, + 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3, 0xb7c06552, + 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254, 0x4a17163c, 0xa545a0dd, + 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a, 0xaeed77db, 0x446baab9, 0xab391c58, + 0x73e5e428, 0x9cb752c9, 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, + 0x7d9958ad, 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746, + 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060, 0x55dfc681, + 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187, 0xb4f1cce5, 0x5ba37a04, + 0xaddcde6c, 0x428e688d, 0xa808b5ef, 0x475a030e, 0xa674096a, 0x4926bf8b, + 0xa3a062e9, 0x4cf2d408, 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, + 0x9f86fb7e, 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495, + 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1, 0x62518810, + 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532, 0xec631f56, 0x0331a9b7, + 0xe9b774d5, 0x06e5c234, 0xf09a665c, 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, + 0xfb32b15a, 0x146007bb, 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, + 0xccbcffcb, 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c, + 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42, 0x3ac35ba3, + 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060, 0xabbf8d02, 0x44ed3be3, + 0xa5c33187, 0x4a918766, 0xa0175a04, 0x4f45ece5, 0xb93a488d, 0x5668fe6c, + 0xbcee230e, 0x53bc95ef, 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, + 0x80c8ba99, 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e, + 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16, 0x7d1fc9f7, + 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1, 0xf32d5eb1, 0x1c7fe850, + 0xf6f93532, 0x19ab83d3, 0xf88589b7, 0x17d73f56, 0xfd51e234, 0x120354d5, + 0xe47cf0bd, 0x0b2e465c, 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, + 0xea004c38, 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb, + 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5, 0x258d1a44, + 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42, 0xc4a31020, 0x2bf1a6c1, + 0x14e696e1, 0xfbb42000, 0x1132fd62, 0xfe604b83, 0x1f4e41e7, 0xf01cf706, + 0x1a9a2a64, 0xf5c89c85, 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, + 0x081fefeb, 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18, + 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c, 0xdb6bc09d, + 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997, 0x26bcb3f3, 0xc9ee0512, + 0x2368d870, 0xcc3a6e91, 0x49a02ed1, 0xa6f29830, 0x4c744552, 0xa326f3b3, + 0x4208f9d7, 0xad5a4f36, 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, + 0x5b25eb5e, 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9, + 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf, 0x83f9132e, + 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24, 0x7586b746, 0x9ad401a7, + 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040, 0x917cd6a1}, + {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf, 0xf4aeec8c, + 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd, 0x322cdf59, 0xb58a141a, + 0x95186851, 0x12bea312, 0x4124f896, 0xc68233d5, 0x1751997d, 0x90f7523e, + 0xc36d09ba, 0x44cbc2f9, 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, + 0xf141d6e3, 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f, + 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d, 0x7d39697e, + 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1, 0xc8b37d64, 0x4f15b627, + 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab, 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, + 0x39f2ab87, 0xbe5460c4, 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, + 0x9ec61c8f, 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d, + 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4, 0xdae0aeb7, + 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978, 0xfa72d2fc, 0x7dd419bf, + 0xbb562a6a, 0x3cf0e129, 0x6f6abaad, 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, + 0x1c629d62, 0x9bc45621, 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, + 0x391fdb46, 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854, + 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f, 0x8c95cf5c, + 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a, 0x00ed70c1, 0x874bbb82, + 0xd4d1e006, 0x53772b45, 0x95f51890, 0x1253d3d3, 0x41c98857, 0xc66f4314, + 0xe6fd3f5f, 0x615bf41c, 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, + 0xb0885eb4, 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238, + 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622, 0x760a6d61, + 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab, 0x6eb05b2f, 0xe916906c, + 0xc984ec27, 0x4e222764, 0x1db87ce0, 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, + 0x88a014b1, 0x0f06dff2, 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, + 0xaddd5295, 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19, + 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc, 0x1857468f, + 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140, 0x942ff912, 0x13893251, + 0x401369d5, 0xc7b5a296, 0xe727dedd, 0x6081159e, 0x331b4e1a, 0xb4bd8559, + 0x723fb68c, 0xf5997dcf, 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, + 0xd50b0184, 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb, + 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1, 0xe2c8e4b2, + 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d, 0xc25a98f9, 0x45fc53ba, + 0xe7caae1c, 0x606c655f, 0x33f63edb, 0xb450f598, 0x94c289d3, 0x13644290, + 0x40fe1914, 0xc758d257, 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, + 0x72d2c64d, 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22, + 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069, 0xd0094b2a, + 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b, 0x65835f30, 0xe2259473, + 0xb1bfcff7, 0x361904b4, 0xc9699ce6, 0x4ecf57a5, 0x1d550c21, 0x9af3c762, + 0xba61bb29, 0x3dc7706a, 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, + 0xfb4543bf, 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33, + 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254, 0x2a96e917, + 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146, 0xec14dac2, 0x6bb21181, + 0x4b206dca, 0xcc86a689, 0x9f1cfd0d, 0x18ba364e}}; local const z_word_t FAR crc_braid_big_table[][256] = { - {0x0000000000000000, 0x43cba68700000000, 0xc7903cd400000000, - 0x845b9a5300000000, 0xcf27087300000000, 0x8cecaef400000000, - 0x08b734a700000000, 0x4b7c922000000000, 0x9e4f10e600000000, - 0xdd84b66100000000, 0x59df2c3200000000, 0x1a148ab500000000, - 0x5168189500000000, 0x12a3be1200000000, 0x96f8244100000000, - 0xd53382c600000000, 0x7d99511700000000, 0x3e52f79000000000, - 0xba096dc300000000, 0xf9c2cb4400000000, 0xb2be596400000000, - 0xf175ffe300000000, 0x752e65b000000000, 0x36e5c33700000000, - 0xe3d641f100000000, 0xa01de77600000000, 0x24467d2500000000, - 0x678ddba200000000, 0x2cf1498200000000, 0x6f3aef0500000000, - 0xeb61755600000000, 0xa8aad3d100000000, 0xfa32a32e00000000, - 0xb9f905a900000000, 0x3da29ffa00000000, 0x7e69397d00000000, - 0x3515ab5d00000000, 0x76de0dda00000000, 0xf285978900000000, - 0xb14e310e00000000, 0x647db3c800000000, 0x27b6154f00000000, - 0xa3ed8f1c00000000, 0xe026299b00000000, 0xab5abbbb00000000, - 0xe8911d3c00000000, 0x6cca876f00000000, 0x2f0121e800000000, - 0x87abf23900000000, 0xc46054be00000000, 0x403bceed00000000, - 0x03f0686a00000000, 0x488cfa4a00000000, 0x0b475ccd00000000, - 0x8f1cc69e00000000, 0xccd7601900000000, 0x19e4e2df00000000, - 0x5a2f445800000000, 0xde74de0b00000000, 0x9dbf788c00000000, - 0xd6c3eaac00000000, 0x95084c2b00000000, 0x1153d67800000000, - 0x529870ff00000000, 0xf465465d00000000, 0xb7aee0da00000000, - 0x33f57a8900000000, 0x703edc0e00000000, 0x3b424e2e00000000, - 0x7889e8a900000000, 0xfcd272fa00000000, 0xbf19d47d00000000, - 0x6a2a56bb00000000, 0x29e1f03c00000000, 0xadba6a6f00000000, - 0xee71cce800000000, 0xa50d5ec800000000, 0xe6c6f84f00000000, - 0x629d621c00000000, 0x2156c49b00000000, 0x89fc174a00000000, - 0xca37b1cd00000000, 0x4e6c2b9e00000000, 0x0da78d1900000000, - 0x46db1f3900000000, 0x0510b9be00000000, 0x814b23ed00000000, - 0xc280856a00000000, 0x17b307ac00000000, 0x5478a12b00000000, - 0xd0233b7800000000, 0x93e89dff00000000, 0xd8940fdf00000000, - 0x9b5fa95800000000, 0x1f04330b00000000, 0x5ccf958c00000000, - 0x0e57e57300000000, 0x4d9c43f400000000, 0xc9c7d9a700000000, - 0x8a0c7f2000000000, 0xc170ed0000000000, 0x82bb4b8700000000, - 0x06e0d1d400000000, 0x452b775300000000, 0x9018f59500000000, - 0xd3d3531200000000, 0x5788c94100000000, 0x14436fc600000000, - 0x5f3ffde600000000, 0x1cf45b6100000000, 0x98afc13200000000, - 0xdb6467b500000000, 0x73ceb46400000000, 0x300512e300000000, - 0xb45e88b000000000, 0xf7952e3700000000, 0xbce9bc1700000000, - 0xff221a9000000000, 0x7b7980c300000000, 0x38b2264400000000, - 0xed81a48200000000, 0xae4a020500000000, 0x2a11985600000000, - 0x69da3ed100000000, 0x22a6acf100000000, 0x616d0a7600000000, - 0xe536902500000000, 0xa6fd36a200000000, 0xe8cb8cba00000000, - 0xab002a3d00000000, 0x2f5bb06e00000000, 0x6c9016e900000000, - 0x27ec84c900000000, 0x6427224e00000000, 0xe07cb81d00000000, - 0xa3b71e9a00000000, 0x76849c5c00000000, 0x354f3adb00000000, - 0xb114a08800000000, 0xf2df060f00000000, 0xb9a3942f00000000, - 0xfa6832a800000000, 0x7e33a8fb00000000, 0x3df80e7c00000000, - 0x9552ddad00000000, 0xd6997b2a00000000, 0x52c2e17900000000, - 0x110947fe00000000, 0x5a75d5de00000000, 0x19be735900000000, - 0x9de5e90a00000000, 0xde2e4f8d00000000, 0x0b1dcd4b00000000, - 0x48d66bcc00000000, 0xcc8df19f00000000, 0x8f46571800000000, - 0xc43ac53800000000, 0x87f163bf00000000, 0x03aaf9ec00000000, - 0x40615f6b00000000, 0x12f92f9400000000, 0x5132891300000000, - 0xd569134000000000, 0x96a2b5c700000000, 0xddde27e700000000, - 0x9e15816000000000, 0x1a4e1b3300000000, 0x5985bdb400000000, - 0x8cb63f7200000000, 0xcf7d99f500000000, 0x4b2603a600000000, - 0x08eda52100000000, 0x4391370100000000, 0x005a918600000000, - 0x84010bd500000000, 0xc7caad5200000000, 0x6f607e8300000000, - 0x2cabd80400000000, 0xa8f0425700000000, 0xeb3be4d000000000, - 0xa04776f000000000, 0xe38cd07700000000, 0x67d74a2400000000, - 0x241ceca300000000, 0xf12f6e6500000000, 0xb2e4c8e200000000, - 0x36bf52b100000000, 0x7574f43600000000, 0x3e08661600000000, - 0x7dc3c09100000000, 0xf9985ac200000000, 0xba53fc4500000000, - 0x1caecae700000000, 0x5f656c6000000000, 0xdb3ef63300000000, - 0x98f550b400000000, 0xd389c29400000000, 0x9042641300000000, - 0x1419fe4000000000, 0x57d258c700000000, 0x82e1da0100000000, - 0xc12a7c8600000000, 0x4571e6d500000000, 0x06ba405200000000, - 0x4dc6d27200000000, 0x0e0d74f500000000, 0x8a56eea600000000, - 0xc99d482100000000, 0x61379bf000000000, 0x22fc3d7700000000, - 0xa6a7a72400000000, 0xe56c01a300000000, 0xae10938300000000, - 0xeddb350400000000, 0x6980af5700000000, 0x2a4b09d000000000, - 0xff788b1600000000, 0xbcb32d9100000000, 0x38e8b7c200000000, - 0x7b23114500000000, 0x305f836500000000, 0x739425e200000000, - 0xf7cfbfb100000000, 0xb404193600000000, 0xe69c69c900000000, - 0xa557cf4e00000000, 0x210c551d00000000, 0x62c7f39a00000000, - 0x29bb61ba00000000, 0x6a70c73d00000000, 0xee2b5d6e00000000, - 0xade0fbe900000000, 0x78d3792f00000000, 0x3b18dfa800000000, - 0xbf4345fb00000000, 0xfc88e37c00000000, 0xb7f4715c00000000, - 0xf43fd7db00000000, 0x70644d8800000000, 0x33afeb0f00000000, - 0x9b0538de00000000, 0xd8ce9e5900000000, 0x5c95040a00000000, - 0x1f5ea28d00000000, 0x542230ad00000000, 0x17e9962a00000000, - 0x93b20c7900000000, 0xd079aafe00000000, 0x054a283800000000, - 0x46818ebf00000000, 0xc2da14ec00000000, 0x8111b26b00000000, - 0xca6d204b00000000, 0x89a686cc00000000, 0x0dfd1c9f00000000, - 0x4e36ba1800000000}, - {0x0000000000000000, 0xe1b652ef00000000, 0x836bd40500000000, - 0x62dd86ea00000000, 0x06d7a80b00000000, 0xe761fae400000000, - 0x85bc7c0e00000000, 0x640a2ee100000000, 0x0cae511700000000, - 0xed1803f800000000, 0x8fc5851200000000, 0x6e73d7fd00000000, - 0x0a79f91c00000000, 0xebcfabf300000000, 0x89122d1900000000, - 0x68a47ff600000000, 0x185ca32e00000000, 0xf9eaf1c100000000, - 0x9b37772b00000000, 0x7a8125c400000000, 0x1e8b0b2500000000, - 0xff3d59ca00000000, 0x9de0df2000000000, 0x7c568dcf00000000, - 0x14f2f23900000000, 0xf544a0d600000000, 0x9799263c00000000, - 0x762f74d300000000, 0x12255a3200000000, 0xf39308dd00000000, - 0x914e8e3700000000, 0x70f8dcd800000000, 0x30b8465d00000000, - 0xd10e14b200000000, 0xb3d3925800000000, 0x5265c0b700000000, - 0x366fee5600000000, 0xd7d9bcb900000000, 0xb5043a5300000000, - 0x54b268bc00000000, 0x3c16174a00000000, 0xdda045a500000000, - 0xbf7dc34f00000000, 0x5ecb91a000000000, 0x3ac1bf4100000000, - 0xdb77edae00000000, 0xb9aa6b4400000000, 0x581c39ab00000000, - 0x28e4e57300000000, 0xc952b79c00000000, 0xab8f317600000000, - 0x4a39639900000000, 0x2e334d7800000000, 0xcf851f9700000000, - 0xad58997d00000000, 0x4ceecb9200000000, 0x244ab46400000000, - 0xc5fce68b00000000, 0xa721606100000000, 0x4697328e00000000, - 0x229d1c6f00000000, 0xc32b4e8000000000, 0xa1f6c86a00000000, - 0x40409a8500000000, 0x60708dba00000000, 0x81c6df5500000000, - 0xe31b59bf00000000, 0x02ad0b5000000000, 0x66a725b100000000, - 0x8711775e00000000, 0xe5ccf1b400000000, 0x047aa35b00000000, - 0x6cdedcad00000000, 0x8d688e4200000000, 0xefb508a800000000, - 0x0e035a4700000000, 0x6a0974a600000000, 0x8bbf264900000000, - 0xe962a0a300000000, 0x08d4f24c00000000, 0x782c2e9400000000, - 0x999a7c7b00000000, 0xfb47fa9100000000, 0x1af1a87e00000000, - 0x7efb869f00000000, 0x9f4dd47000000000, 0xfd90529a00000000, - 0x1c26007500000000, 0x74827f8300000000, 0x95342d6c00000000, - 0xf7e9ab8600000000, 0x165ff96900000000, 0x7255d78800000000, - 0x93e3856700000000, 0xf13e038d00000000, 0x1088516200000000, - 0x50c8cbe700000000, 0xb17e990800000000, 0xd3a31fe200000000, - 0x32154d0d00000000, 0x561f63ec00000000, 0xb7a9310300000000, - 0xd574b7e900000000, 0x34c2e50600000000, 0x5c669af000000000, - 0xbdd0c81f00000000, 0xdf0d4ef500000000, 0x3ebb1c1a00000000, - 0x5ab132fb00000000, 0xbb07601400000000, 0xd9dae6fe00000000, - 0x386cb41100000000, 0x489468c900000000, 0xa9223a2600000000, - 0xcbffbccc00000000, 0x2a49ee2300000000, 0x4e43c0c200000000, - 0xaff5922d00000000, 0xcd2814c700000000, 0x2c9e462800000000, - 0x443a39de00000000, 0xa58c6b3100000000, 0xc751eddb00000000, - 0x26e7bf3400000000, 0x42ed91d500000000, 0xa35bc33a00000000, - 0xc18645d000000000, 0x2030173f00000000, 0x81e66bae00000000, - 0x6050394100000000, 0x028dbfab00000000, 0xe33bed4400000000, - 0x8731c3a500000000, 0x6687914a00000000, 0x045a17a000000000, - 0xe5ec454f00000000, 0x8d483ab900000000, 0x6cfe685600000000, - 0x0e23eebc00000000, 0xef95bc5300000000, 0x8b9f92b200000000, - 0x6a29c05d00000000, 0x08f446b700000000, 0xe942145800000000, - 0x99bac88000000000, 0x780c9a6f00000000, 0x1ad11c8500000000, - 0xfb674e6a00000000, 0x9f6d608b00000000, 0x7edb326400000000, - 0x1c06b48e00000000, 0xfdb0e66100000000, 0x9514999700000000, - 0x74a2cb7800000000, 0x167f4d9200000000, 0xf7c91f7d00000000, - 0x93c3319c00000000, 0x7275637300000000, 0x10a8e59900000000, - 0xf11eb77600000000, 0xb15e2df300000000, 0x50e87f1c00000000, - 0x3235f9f600000000, 0xd383ab1900000000, 0xb78985f800000000, - 0x563fd71700000000, 0x34e251fd00000000, 0xd554031200000000, - 0xbdf07ce400000000, 0x5c462e0b00000000, 0x3e9ba8e100000000, - 0xdf2dfa0e00000000, 0xbb27d4ef00000000, 0x5a91860000000000, - 0x384c00ea00000000, 0xd9fa520500000000, 0xa9028edd00000000, - 0x48b4dc3200000000, 0x2a695ad800000000, 0xcbdf083700000000, - 0xafd526d600000000, 0x4e63743900000000, 0x2cbef2d300000000, - 0xcd08a03c00000000, 0xa5acdfca00000000, 0x441a8d2500000000, - 0x26c70bcf00000000, 0xc771592000000000, 0xa37b77c100000000, - 0x42cd252e00000000, 0x2010a3c400000000, 0xc1a6f12b00000000, - 0xe196e61400000000, 0x0020b4fb00000000, 0x62fd321100000000, - 0x834b60fe00000000, 0xe7414e1f00000000, 0x06f71cf000000000, - 0x642a9a1a00000000, 0x859cc8f500000000, 0xed38b70300000000, - 0x0c8ee5ec00000000, 0x6e53630600000000, 0x8fe531e900000000, - 0xebef1f0800000000, 0x0a594de700000000, 0x6884cb0d00000000, - 0x893299e200000000, 0xf9ca453a00000000, 0x187c17d500000000, - 0x7aa1913f00000000, 0x9b17c3d000000000, 0xff1ded3100000000, - 0x1eabbfde00000000, 0x7c76393400000000, 0x9dc06bdb00000000, - 0xf564142d00000000, 0x14d246c200000000, 0x760fc02800000000, - 0x97b992c700000000, 0xf3b3bc2600000000, 0x1205eec900000000, - 0x70d8682300000000, 0x916e3acc00000000, 0xd12ea04900000000, - 0x3098f2a600000000, 0x5245744c00000000, 0xb3f326a300000000, - 0xd7f9084200000000, 0x364f5aad00000000, 0x5492dc4700000000, - 0xb5248ea800000000, 0xdd80f15e00000000, 0x3c36a3b100000000, - 0x5eeb255b00000000, 0xbf5d77b400000000, 0xdb57595500000000, - 0x3ae10bba00000000, 0x583c8d5000000000, 0xb98adfbf00000000, - 0xc972036700000000, 0x28c4518800000000, 0x4a19d76200000000, - 0xabaf858d00000000, 0xcfa5ab6c00000000, 0x2e13f98300000000, - 0x4cce7f6900000000, 0xad782d8600000000, 0xc5dc527000000000, - 0x246a009f00000000, 0x46b7867500000000, 0xa701d49a00000000, - 0xc30bfa7b00000000, 0x22bda89400000000, 0x40602e7e00000000, - 0xa1d67c9100000000}, - {0x0000000000000000, 0x5880e2d700000000, 0xf106b47400000000, - 0xa98656a300000000, 0xe20d68e900000000, 0xba8d8a3e00000000, - 0x130bdc9d00000000, 0x4b8b3e4a00000000, 0x851da10900000000, - 0xdd9d43de00000000, 0x741b157d00000000, 0x2c9bf7aa00000000, - 0x6710c9e000000000, 0x3f902b3700000000, 0x96167d9400000000, - 0xce969f4300000000, 0x0a3b421300000000, 0x52bba0c400000000, - 0xfb3df66700000000, 0xa3bd14b000000000, 0xe8362afa00000000, - 0xb0b6c82d00000000, 0x19309e8e00000000, 0x41b07c5900000000, - 0x8f26e31a00000000, 0xd7a601cd00000000, 0x7e20576e00000000, - 0x26a0b5b900000000, 0x6d2b8bf300000000, 0x35ab692400000000, - 0x9c2d3f8700000000, 0xc4addd5000000000, 0x1476842600000000, - 0x4cf666f100000000, 0xe570305200000000, 0xbdf0d28500000000, - 0xf67beccf00000000, 0xaefb0e1800000000, 0x077d58bb00000000, - 0x5ffdba6c00000000, 0x916b252f00000000, 0xc9ebc7f800000000, - 0x606d915b00000000, 0x38ed738c00000000, 0x73664dc600000000, - 0x2be6af1100000000, 0x8260f9b200000000, 0xdae01b6500000000, - 0x1e4dc63500000000, 0x46cd24e200000000, 0xef4b724100000000, - 0xb7cb909600000000, 0xfc40aedc00000000, 0xa4c04c0b00000000, - 0x0d461aa800000000, 0x55c6f87f00000000, 0x9b50673c00000000, - 0xc3d085eb00000000, 0x6a56d34800000000, 0x32d6319f00000000, - 0x795d0fd500000000, 0x21dded0200000000, 0x885bbba100000000, - 0xd0db597600000000, 0x28ec084d00000000, 0x706cea9a00000000, - 0xd9eabc3900000000, 0x816a5eee00000000, 0xcae160a400000000, - 0x9261827300000000, 0x3be7d4d000000000, 0x6367360700000000, - 0xadf1a94400000000, 0xf5714b9300000000, 0x5cf71d3000000000, - 0x0477ffe700000000, 0x4ffcc1ad00000000, 0x177c237a00000000, - 0xbefa75d900000000, 0xe67a970e00000000, 0x22d74a5e00000000, - 0x7a57a88900000000, 0xd3d1fe2a00000000, 0x8b511cfd00000000, - 0xc0da22b700000000, 0x985ac06000000000, 0x31dc96c300000000, - 0x695c741400000000, 0xa7caeb5700000000, 0xff4a098000000000, - 0x56cc5f2300000000, 0x0e4cbdf400000000, 0x45c783be00000000, - 0x1d47616900000000, 0xb4c137ca00000000, 0xec41d51d00000000, - 0x3c9a8c6b00000000, 0x641a6ebc00000000, 0xcd9c381f00000000, - 0x951cdac800000000, 0xde97e48200000000, 0x8617065500000000, - 0x2f9150f600000000, 0x7711b22100000000, 0xb9872d6200000000, - 0xe107cfb500000000, 0x4881991600000000, 0x10017bc100000000, - 0x5b8a458b00000000, 0x030aa75c00000000, 0xaa8cf1ff00000000, - 0xf20c132800000000, 0x36a1ce7800000000, 0x6e212caf00000000, - 0xc7a77a0c00000000, 0x9f2798db00000000, 0xd4aca69100000000, - 0x8c2c444600000000, 0x25aa12e500000000, 0x7d2af03200000000, - 0xb3bc6f7100000000, 0xeb3c8da600000000, 0x42badb0500000000, - 0x1a3a39d200000000, 0x51b1079800000000, 0x0931e54f00000000, - 0xa0b7b3ec00000000, 0xf837513b00000000, 0x50d8119a00000000, - 0x0858f34d00000000, 0xa1dea5ee00000000, 0xf95e473900000000, - 0xb2d5797300000000, 0xea559ba400000000, 0x43d3cd0700000000, - 0x1b532fd000000000, 0xd5c5b09300000000, 0x8d45524400000000, - 0x24c304e700000000, 0x7c43e63000000000, 0x37c8d87a00000000, - 0x6f483aad00000000, 0xc6ce6c0e00000000, 0x9e4e8ed900000000, - 0x5ae3538900000000, 0x0263b15e00000000, 0xabe5e7fd00000000, - 0xf365052a00000000, 0xb8ee3b6000000000, 0xe06ed9b700000000, - 0x49e88f1400000000, 0x11686dc300000000, 0xdffef28000000000, - 0x877e105700000000, 0x2ef846f400000000, 0x7678a42300000000, - 0x3df39a6900000000, 0x657378be00000000, 0xccf52e1d00000000, - 0x9475ccca00000000, 0x44ae95bc00000000, 0x1c2e776b00000000, - 0xb5a821c800000000, 0xed28c31f00000000, 0xa6a3fd5500000000, - 0xfe231f8200000000, 0x57a5492100000000, 0x0f25abf600000000, - 0xc1b334b500000000, 0x9933d66200000000, 0x30b580c100000000, - 0x6835621600000000, 0x23be5c5c00000000, 0x7b3ebe8b00000000, - 0xd2b8e82800000000, 0x8a380aff00000000, 0x4e95d7af00000000, - 0x1615357800000000, 0xbf9363db00000000, 0xe713810c00000000, - 0xac98bf4600000000, 0xf4185d9100000000, 0x5d9e0b3200000000, - 0x051ee9e500000000, 0xcb8876a600000000, 0x9308947100000000, - 0x3a8ec2d200000000, 0x620e200500000000, 0x29851e4f00000000, - 0x7105fc9800000000, 0xd883aa3b00000000, 0x800348ec00000000, - 0x783419d700000000, 0x20b4fb0000000000, 0x8932ada300000000, - 0xd1b24f7400000000, 0x9a39713e00000000, 0xc2b993e900000000, - 0x6b3fc54a00000000, 0x33bf279d00000000, 0xfd29b8de00000000, - 0xa5a95a0900000000, 0x0c2f0caa00000000, 0x54afee7d00000000, - 0x1f24d03700000000, 0x47a432e000000000, 0xee22644300000000, - 0xb6a2869400000000, 0x720f5bc400000000, 0x2a8fb91300000000, - 0x8309efb000000000, 0xdb890d6700000000, 0x9002332d00000000, - 0xc882d1fa00000000, 0x6104875900000000, 0x3984658e00000000, - 0xf712facd00000000, 0xaf92181a00000000, 0x06144eb900000000, - 0x5e94ac6e00000000, 0x151f922400000000, 0x4d9f70f300000000, - 0xe419265000000000, 0xbc99c48700000000, 0x6c429df100000000, - 0x34c27f2600000000, 0x9d44298500000000, 0xc5c4cb5200000000, - 0x8e4ff51800000000, 0xd6cf17cf00000000, 0x7f49416c00000000, - 0x27c9a3bb00000000, 0xe95f3cf800000000, 0xb1dfde2f00000000, - 0x1859888c00000000, 0x40d96a5b00000000, 0x0b52541100000000, - 0x53d2b6c600000000, 0xfa54e06500000000, 0xa2d402b200000000, - 0x6679dfe200000000, 0x3ef93d3500000000, 0x977f6b9600000000, - 0xcfff894100000000, 0x8474b70b00000000, 0xdcf455dc00000000, - 0x7572037f00000000, 0x2df2e1a800000000, 0xe3647eeb00000000, - 0xbbe49c3c00000000, 0x1262ca9f00000000, 0x4ae2284800000000, - 0x0169160200000000, 0x59e9f4d500000000, 0xf06fa27600000000, - 0xa8ef40a100000000}, - {0x0000000000000000, 0x463b676500000000, 0x8c76ceca00000000, - 0xca4da9af00000000, 0x59ebed4e00000000, 0x1fd08a2b00000000, - 0xd59d238400000000, 0x93a644e100000000, 0xb2d6db9d00000000, - 0xf4edbcf800000000, 0x3ea0155700000000, 0x789b723200000000, - 0xeb3d36d300000000, 0xad0651b600000000, 0x674bf81900000000, - 0x21709f7c00000000, 0x25abc6e000000000, 0x6390a18500000000, - 0xa9dd082a00000000, 0xefe66f4f00000000, 0x7c402bae00000000, - 0x3a7b4ccb00000000, 0xf036e56400000000, 0xb60d820100000000, - 0x977d1d7d00000000, 0xd1467a1800000000, 0x1b0bd3b700000000, - 0x5d30b4d200000000, 0xce96f03300000000, 0x88ad975600000000, - 0x42e03ef900000000, 0x04db599c00000000, 0x0b50fc1a00000000, - 0x4d6b9b7f00000000, 0x872632d000000000, 0xc11d55b500000000, - 0x52bb115400000000, 0x1480763100000000, 0xdecddf9e00000000, - 0x98f6b8fb00000000, 0xb986278700000000, 0xffbd40e200000000, - 0x35f0e94d00000000, 0x73cb8e2800000000, 0xe06dcac900000000, - 0xa656adac00000000, 0x6c1b040300000000, 0x2a20636600000000, - 0x2efb3afa00000000, 0x68c05d9f00000000, 0xa28df43000000000, - 0xe4b6935500000000, 0x7710d7b400000000, 0x312bb0d100000000, - 0xfb66197e00000000, 0xbd5d7e1b00000000, 0x9c2de16700000000, - 0xda16860200000000, 0x105b2fad00000000, 0x566048c800000000, - 0xc5c60c2900000000, 0x83fd6b4c00000000, 0x49b0c2e300000000, - 0x0f8ba58600000000, 0x16a0f83500000000, 0x509b9f5000000000, - 0x9ad636ff00000000, 0xdced519a00000000, 0x4f4b157b00000000, - 0x0970721e00000000, 0xc33ddbb100000000, 0x8506bcd400000000, - 0xa47623a800000000, 0xe24d44cd00000000, 0x2800ed6200000000, - 0x6e3b8a0700000000, 0xfd9dcee600000000, 0xbba6a98300000000, - 0x71eb002c00000000, 0x37d0674900000000, 0x330b3ed500000000, - 0x753059b000000000, 0xbf7df01f00000000, 0xf946977a00000000, - 0x6ae0d39b00000000, 0x2cdbb4fe00000000, 0xe6961d5100000000, - 0xa0ad7a3400000000, 0x81dde54800000000, 0xc7e6822d00000000, - 0x0dab2b8200000000, 0x4b904ce700000000, 0xd836080600000000, - 0x9e0d6f6300000000, 0x5440c6cc00000000, 0x127ba1a900000000, - 0x1df0042f00000000, 0x5bcb634a00000000, 0x9186cae500000000, - 0xd7bdad8000000000, 0x441be96100000000, 0x02208e0400000000, - 0xc86d27ab00000000, 0x8e5640ce00000000, 0xaf26dfb200000000, - 0xe91db8d700000000, 0x2350117800000000, 0x656b761d00000000, - 0xf6cd32fc00000000, 0xb0f6559900000000, 0x7abbfc3600000000, - 0x3c809b5300000000, 0x385bc2cf00000000, 0x7e60a5aa00000000, - 0xb42d0c0500000000, 0xf2166b6000000000, 0x61b02f8100000000, - 0x278b48e400000000, 0xedc6e14b00000000, 0xabfd862e00000000, - 0x8a8d195200000000, 0xccb67e3700000000, 0x06fbd79800000000, - 0x40c0b0fd00000000, 0xd366f41c00000000, 0x955d937900000000, - 0x5f103ad600000000, 0x192b5db300000000, 0x2c40f16b00000000, - 0x6a7b960e00000000, 0xa0363fa100000000, 0xe60d58c400000000, - 0x75ab1c2500000000, 0x33907b4000000000, 0xf9ddd2ef00000000, - 0xbfe6b58a00000000, 0x9e962af600000000, 0xd8ad4d9300000000, - 0x12e0e43c00000000, 0x54db835900000000, 0xc77dc7b800000000, - 0x8146a0dd00000000, 0x4b0b097200000000, 0x0d306e1700000000, - 0x09eb378b00000000, 0x4fd050ee00000000, 0x859df94100000000, - 0xc3a69e2400000000, 0x5000dac500000000, 0x163bbda000000000, - 0xdc76140f00000000, 0x9a4d736a00000000, 0xbb3dec1600000000, - 0xfd068b7300000000, 0x374b22dc00000000, 0x717045b900000000, - 0xe2d6015800000000, 0xa4ed663d00000000, 0x6ea0cf9200000000, - 0x289ba8f700000000, 0x27100d7100000000, 0x612b6a1400000000, - 0xab66c3bb00000000, 0xed5da4de00000000, 0x7efbe03f00000000, - 0x38c0875a00000000, 0xf28d2ef500000000, 0xb4b6499000000000, - 0x95c6d6ec00000000, 0xd3fdb18900000000, 0x19b0182600000000, - 0x5f8b7f4300000000, 0xcc2d3ba200000000, 0x8a165cc700000000, - 0x405bf56800000000, 0x0660920d00000000, 0x02bbcb9100000000, - 0x4480acf400000000, 0x8ecd055b00000000, 0xc8f6623e00000000, - 0x5b5026df00000000, 0x1d6b41ba00000000, 0xd726e81500000000, - 0x911d8f7000000000, 0xb06d100c00000000, 0xf656776900000000, - 0x3c1bdec600000000, 0x7a20b9a300000000, 0xe986fd4200000000, - 0xafbd9a2700000000, 0x65f0338800000000, 0x23cb54ed00000000, - 0x3ae0095e00000000, 0x7cdb6e3b00000000, 0xb696c79400000000, - 0xf0ada0f100000000, 0x630be41000000000, 0x2530837500000000, - 0xef7d2ada00000000, 0xa9464dbf00000000, 0x8836d2c300000000, - 0xce0db5a600000000, 0x04401c0900000000, 0x427b7b6c00000000, - 0xd1dd3f8d00000000, 0x97e658e800000000, 0x5dabf14700000000, - 0x1b90962200000000, 0x1f4bcfbe00000000, 0x5970a8db00000000, - 0x933d017400000000, 0xd506661100000000, 0x46a022f000000000, - 0x009b459500000000, 0xcad6ec3a00000000, 0x8ced8b5f00000000, - 0xad9d142300000000, 0xeba6734600000000, 0x21ebdae900000000, - 0x67d0bd8c00000000, 0xf476f96d00000000, 0xb24d9e0800000000, - 0x780037a700000000, 0x3e3b50c200000000, 0x31b0f54400000000, - 0x778b922100000000, 0xbdc63b8e00000000, 0xfbfd5ceb00000000, - 0x685b180a00000000, 0x2e607f6f00000000, 0xe42dd6c000000000, - 0xa216b1a500000000, 0x83662ed900000000, 0xc55d49bc00000000, - 0x0f10e01300000000, 0x492b877600000000, 0xda8dc39700000000, - 0x9cb6a4f200000000, 0x56fb0d5d00000000, 0x10c06a3800000000, - 0x141b33a400000000, 0x522054c100000000, 0x986dfd6e00000000, - 0xde569a0b00000000, 0x4df0deea00000000, 0x0bcbb98f00000000, - 0xc186102000000000, 0x87bd774500000000, 0xa6cde83900000000, - 0xe0f68f5c00000000, 0x2abb26f300000000, 0x6c80419600000000, - 0xff26057700000000, 0xb91d621200000000, 0x7350cbbd00000000, - 0x356bacd800000000}, - {0x0000000000000000, 0x9e83da9f00000000, 0x7d01c4e400000000, - 0xe3821e7b00000000, 0xbb04f91200000000, 0x2587238d00000000, - 0xc6053df600000000, 0x5886e76900000000, 0x7609f22500000000, - 0xe88a28ba00000000, 0x0b0836c100000000, 0x958bec5e00000000, - 0xcd0d0b3700000000, 0x538ed1a800000000, 0xb00ccfd300000000, - 0x2e8f154c00000000, 0xec12e44b00000000, 0x72913ed400000000, - 0x911320af00000000, 0x0f90fa3000000000, 0x57161d5900000000, - 0xc995c7c600000000, 0x2a17d9bd00000000, 0xb494032200000000, - 0x9a1b166e00000000, 0x0498ccf100000000, 0xe71ad28a00000000, - 0x7999081500000000, 0x211fef7c00000000, 0xbf9c35e300000000, - 0x5c1e2b9800000000, 0xc29df10700000000, 0xd825c89700000000, - 0x46a6120800000000, 0xa5240c7300000000, 0x3ba7d6ec00000000, - 0x6321318500000000, 0xfda2eb1a00000000, 0x1e20f56100000000, - 0x80a32ffe00000000, 0xae2c3ab200000000, 0x30afe02d00000000, - 0xd32dfe5600000000, 0x4dae24c900000000, 0x1528c3a000000000, - 0x8bab193f00000000, 0x6829074400000000, 0xf6aadddb00000000, - 0x34372cdc00000000, 0xaab4f64300000000, 0x4936e83800000000, - 0xd7b532a700000000, 0x8f33d5ce00000000, 0x11b00f5100000000, - 0xf232112a00000000, 0x6cb1cbb500000000, 0x423edef900000000, - 0xdcbd046600000000, 0x3f3f1a1d00000000, 0xa1bcc08200000000, - 0xf93a27eb00000000, 0x67b9fd7400000000, 0x843be30f00000000, - 0x1ab8399000000000, 0xf14de1f400000000, 0x6fce3b6b00000000, - 0x8c4c251000000000, 0x12cfff8f00000000, 0x4a4918e600000000, - 0xd4cac27900000000, 0x3748dc0200000000, 0xa9cb069d00000000, - 0x874413d100000000, 0x19c7c94e00000000, 0xfa45d73500000000, - 0x64c60daa00000000, 0x3c40eac300000000, 0xa2c3305c00000000, - 0x41412e2700000000, 0xdfc2f4b800000000, 0x1d5f05bf00000000, - 0x83dcdf2000000000, 0x605ec15b00000000, 0xfedd1bc400000000, - 0xa65bfcad00000000, 0x38d8263200000000, 0xdb5a384900000000, - 0x45d9e2d600000000, 0x6b56f79a00000000, 0xf5d52d0500000000, - 0x1657337e00000000, 0x88d4e9e100000000, 0xd0520e8800000000, - 0x4ed1d41700000000, 0xad53ca6c00000000, 0x33d010f300000000, - 0x2968296300000000, 0xb7ebf3fc00000000, 0x5469ed8700000000, - 0xcaea371800000000, 0x926cd07100000000, 0x0cef0aee00000000, - 0xef6d149500000000, 0x71eece0a00000000, 0x5f61db4600000000, - 0xc1e201d900000000, 0x22601fa200000000, 0xbce3c53d00000000, - 0xe465225400000000, 0x7ae6f8cb00000000, 0x9964e6b000000000, - 0x07e73c2f00000000, 0xc57acd2800000000, 0x5bf917b700000000, - 0xb87b09cc00000000, 0x26f8d35300000000, 0x7e7e343a00000000, - 0xe0fdeea500000000, 0x037ff0de00000000, 0x9dfc2a4100000000, - 0xb3733f0d00000000, 0x2df0e59200000000, 0xce72fbe900000000, - 0x50f1217600000000, 0x0877c61f00000000, 0x96f41c8000000000, - 0x757602fb00000000, 0xebf5d86400000000, 0xa39db33200000000, - 0x3d1e69ad00000000, 0xde9c77d600000000, 0x401fad4900000000, - 0x18994a2000000000, 0x861a90bf00000000, 0x65988ec400000000, - 0xfb1b545b00000000, 0xd594411700000000, 0x4b179b8800000000, - 0xa89585f300000000, 0x36165f6c00000000, 0x6e90b80500000000, - 0xf013629a00000000, 0x13917ce100000000, 0x8d12a67e00000000, - 0x4f8f577900000000, 0xd10c8de600000000, 0x328e939d00000000, - 0xac0d490200000000, 0xf48bae6b00000000, 0x6a0874f400000000, - 0x898a6a8f00000000, 0x1709b01000000000, 0x3986a55c00000000, - 0xa7057fc300000000, 0x448761b800000000, 0xda04bb2700000000, - 0x82825c4e00000000, 0x1c0186d100000000, 0xff8398aa00000000, - 0x6100423500000000, 0x7bb87ba500000000, 0xe53ba13a00000000, - 0x06b9bf4100000000, 0x983a65de00000000, 0xc0bc82b700000000, - 0x5e3f582800000000, 0xbdbd465300000000, 0x233e9ccc00000000, - 0x0db1898000000000, 0x9332531f00000000, 0x70b04d6400000000, - 0xee3397fb00000000, 0xb6b5709200000000, 0x2836aa0d00000000, - 0xcbb4b47600000000, 0x55376ee900000000, 0x97aa9fee00000000, - 0x0929457100000000, 0xeaab5b0a00000000, 0x7428819500000000, - 0x2cae66fc00000000, 0xb22dbc6300000000, 0x51afa21800000000, - 0xcf2c788700000000, 0xe1a36dcb00000000, 0x7f20b75400000000, - 0x9ca2a92f00000000, 0x022173b000000000, 0x5aa794d900000000, - 0xc4244e4600000000, 0x27a6503d00000000, 0xb9258aa200000000, - 0x52d052c600000000, 0xcc53885900000000, 0x2fd1962200000000, - 0xb1524cbd00000000, 0xe9d4abd400000000, 0x7757714b00000000, - 0x94d56f3000000000, 0x0a56b5af00000000, 0x24d9a0e300000000, - 0xba5a7a7c00000000, 0x59d8640700000000, 0xc75bbe9800000000, - 0x9fdd59f100000000, 0x015e836e00000000, 0xe2dc9d1500000000, - 0x7c5f478a00000000, 0xbec2b68d00000000, 0x20416c1200000000, - 0xc3c3726900000000, 0x5d40a8f600000000, 0x05c64f9f00000000, - 0x9b45950000000000, 0x78c78b7b00000000, 0xe64451e400000000, - 0xc8cb44a800000000, 0x56489e3700000000, 0xb5ca804c00000000, - 0x2b495ad300000000, 0x73cfbdba00000000, 0xed4c672500000000, - 0x0ece795e00000000, 0x904da3c100000000, 0x8af59a5100000000, - 0x147640ce00000000, 0xf7f45eb500000000, 0x6977842a00000000, - 0x31f1634300000000, 0xaf72b9dc00000000, 0x4cf0a7a700000000, - 0xd2737d3800000000, 0xfcfc687400000000, 0x627fb2eb00000000, - 0x81fdac9000000000, 0x1f7e760f00000000, 0x47f8916600000000, - 0xd97b4bf900000000, 0x3af9558200000000, 0xa47a8f1d00000000, - 0x66e77e1a00000000, 0xf864a48500000000, 0x1be6bafe00000000, - 0x8565606100000000, 0xdde3870800000000, 0x43605d9700000000, - 0xa0e243ec00000000, 0x3e61997300000000, 0x10ee8c3f00000000, - 0x8e6d56a000000000, 0x6def48db00000000, 0xf36c924400000000, - 0xabea752d00000000, 0x3569afb200000000, 0xd6ebb1c900000000, - 0x48686b5600000000}, - {0x0000000000000000, 0xc064281700000000, 0x80c9502e00000000, - 0x40ad783900000000, 0x0093a15c00000000, 0xc0f7894b00000000, - 0x805af17200000000, 0x403ed96500000000, 0x002643b900000000, - 0xc0426bae00000000, 0x80ef139700000000, 0x408b3b8000000000, - 0x00b5e2e500000000, 0xc0d1caf200000000, 0x807cb2cb00000000, - 0x40189adc00000000, 0x414af7a900000000, 0x812edfbe00000000, - 0xc183a78700000000, 0x01e78f9000000000, 0x41d956f500000000, - 0x81bd7ee200000000, 0xc11006db00000000, 0x01742ecc00000000, - 0x416cb41000000000, 0x81089c0700000000, 0xc1a5e43e00000000, - 0x01c1cc2900000000, 0x41ff154c00000000, 0x819b3d5b00000000, - 0xc136456200000000, 0x01526d7500000000, 0xc3929f8800000000, - 0x03f6b79f00000000, 0x435bcfa600000000, 0x833fe7b100000000, - 0xc3013ed400000000, 0x036516c300000000, 0x43c86efa00000000, - 0x83ac46ed00000000, 0xc3b4dc3100000000, 0x03d0f42600000000, - 0x437d8c1f00000000, 0x8319a40800000000, 0xc3277d6d00000000, - 0x0343557a00000000, 0x43ee2d4300000000, 0x838a055400000000, - 0x82d8682100000000, 0x42bc403600000000, 0x0211380f00000000, - 0xc275101800000000, 0x824bc97d00000000, 0x422fe16a00000000, - 0x0282995300000000, 0xc2e6b14400000000, 0x82fe2b9800000000, - 0x429a038f00000000, 0x02377bb600000000, 0xc25353a100000000, - 0x826d8ac400000000, 0x4209a2d300000000, 0x02a4daea00000000, - 0xc2c0f2fd00000000, 0xc7234eca00000000, 0x074766dd00000000, - 0x47ea1ee400000000, 0x878e36f300000000, 0xc7b0ef9600000000, - 0x07d4c78100000000, 0x4779bfb800000000, 0x871d97af00000000, - 0xc7050d7300000000, 0x0761256400000000, 0x47cc5d5d00000000, - 0x87a8754a00000000, 0xc796ac2f00000000, 0x07f2843800000000, - 0x475ffc0100000000, 0x873bd41600000000, 0x8669b96300000000, - 0x460d917400000000, 0x06a0e94d00000000, 0xc6c4c15a00000000, - 0x86fa183f00000000, 0x469e302800000000, 0x0633481100000000, - 0xc657600600000000, 0x864ffada00000000, 0x462bd2cd00000000, - 0x0686aaf400000000, 0xc6e282e300000000, 0x86dc5b8600000000, - 0x46b8739100000000, 0x06150ba800000000, 0xc67123bf00000000, - 0x04b1d14200000000, 0xc4d5f95500000000, 0x8478816c00000000, - 0x441ca97b00000000, 0x0422701e00000000, 0xc446580900000000, - 0x84eb203000000000, 0x448f082700000000, 0x049792fb00000000, - 0xc4f3baec00000000, 0x845ec2d500000000, 0x443aeac200000000, - 0x040433a700000000, 0xc4601bb000000000, 0x84cd638900000000, - 0x44a94b9e00000000, 0x45fb26eb00000000, 0x859f0efc00000000, - 0xc53276c500000000, 0x05565ed200000000, 0x456887b700000000, - 0x850cafa000000000, 0xc5a1d79900000000, 0x05c5ff8e00000000, - 0x45dd655200000000, 0x85b94d4500000000, 0xc514357c00000000, - 0x05701d6b00000000, 0x454ec40e00000000, 0x852aec1900000000, - 0xc587942000000000, 0x05e3bc3700000000, 0xcf41ed4f00000000, - 0x0f25c55800000000, 0x4f88bd6100000000, 0x8fec957600000000, - 0xcfd24c1300000000, 0x0fb6640400000000, 0x4f1b1c3d00000000, - 0x8f7f342a00000000, 0xcf67aef600000000, 0x0f0386e100000000, - 0x4faefed800000000, 0x8fcad6cf00000000, 0xcff40faa00000000, - 0x0f9027bd00000000, 0x4f3d5f8400000000, 0x8f59779300000000, - 0x8e0b1ae600000000, 0x4e6f32f100000000, 0x0ec24ac800000000, - 0xcea662df00000000, 0x8e98bbba00000000, 0x4efc93ad00000000, - 0x0e51eb9400000000, 0xce35c38300000000, 0x8e2d595f00000000, - 0x4e49714800000000, 0x0ee4097100000000, 0xce80216600000000, - 0x8ebef80300000000, 0x4edad01400000000, 0x0e77a82d00000000, - 0xce13803a00000000, 0x0cd372c700000000, 0xccb75ad000000000, - 0x8c1a22e900000000, 0x4c7e0afe00000000, 0x0c40d39b00000000, - 0xcc24fb8c00000000, 0x8c8983b500000000, 0x4cedaba200000000, - 0x0cf5317e00000000, 0xcc91196900000000, 0x8c3c615000000000, - 0x4c58494700000000, 0x0c66902200000000, 0xcc02b83500000000, - 0x8cafc00c00000000, 0x4ccbe81b00000000, 0x4d99856e00000000, - 0x8dfdad7900000000, 0xcd50d54000000000, 0x0d34fd5700000000, - 0x4d0a243200000000, 0x8d6e0c2500000000, 0xcdc3741c00000000, - 0x0da75c0b00000000, 0x4dbfc6d700000000, 0x8ddbeec000000000, - 0xcd7696f900000000, 0x0d12beee00000000, 0x4d2c678b00000000, - 0x8d484f9c00000000, 0xcde537a500000000, 0x0d811fb200000000, - 0x0862a38500000000, 0xc8068b9200000000, 0x88abf3ab00000000, - 0x48cfdbbc00000000, 0x08f102d900000000, 0xc8952ace00000000, - 0x883852f700000000, 0x485c7ae000000000, 0x0844e03c00000000, - 0xc820c82b00000000, 0x888db01200000000, 0x48e9980500000000, - 0x08d7416000000000, 0xc8b3697700000000, 0x881e114e00000000, - 0x487a395900000000, 0x4928542c00000000, 0x894c7c3b00000000, - 0xc9e1040200000000, 0x09852c1500000000, 0x49bbf57000000000, - 0x89dfdd6700000000, 0xc972a55e00000000, 0x09168d4900000000, - 0x490e179500000000, 0x896a3f8200000000, 0xc9c747bb00000000, - 0x09a36fac00000000, 0x499db6c900000000, 0x89f99ede00000000, - 0xc954e6e700000000, 0x0930cef000000000, 0xcbf03c0d00000000, - 0x0b94141a00000000, 0x4b396c2300000000, 0x8b5d443400000000, - 0xcb639d5100000000, 0x0b07b54600000000, 0x4baacd7f00000000, - 0x8bcee56800000000, 0xcbd67fb400000000, 0x0bb257a300000000, - 0x4b1f2f9a00000000, 0x8b7b078d00000000, 0xcb45dee800000000, - 0x0b21f6ff00000000, 0x4b8c8ec600000000, 0x8be8a6d100000000, - 0x8abacba400000000, 0x4adee3b300000000, 0x0a739b8a00000000, - 0xca17b39d00000000, 0x8a296af800000000, 0x4a4d42ef00000000, - 0x0ae03ad600000000, 0xca8412c100000000, 0x8a9c881d00000000, - 0x4af8a00a00000000, 0x0a55d83300000000, 0xca31f02400000000, - 0x8a0f294100000000, 0x4a6b015600000000, 0x0ac6796f00000000, - 0xcaa2517800000000}, - {0x0000000000000000, 0xd4ea739b00000000, 0xe9d396ed00000000, - 0x3d39e57600000000, 0x93a15c0000000000, 0x474b2f9b00000000, - 0x7a72caed00000000, 0xae98b97600000000, 0x2643b90000000000, - 0xf2a9ca9b00000000, 0xcf902fed00000000, 0x1b7a5c7600000000, - 0xb5e2e50000000000, 0x6108969b00000000, 0x5c3173ed00000000, - 0x88db007600000000, 0x4c86720100000000, 0x986c019a00000000, - 0xa555e4ec00000000, 0x71bf977700000000, 0xdf272e0100000000, - 0x0bcd5d9a00000000, 0x36f4b8ec00000000, 0xe21ecb7700000000, - 0x6ac5cb0100000000, 0xbe2fb89a00000000, 0x83165dec00000000, - 0x57fc2e7700000000, 0xf964970100000000, 0x2d8ee49a00000000, - 0x10b701ec00000000, 0xc45d727700000000, 0x980ce50200000000, - 0x4ce6969900000000, 0x71df73ef00000000, 0xa535007400000000, - 0x0badb90200000000, 0xdf47ca9900000000, 0xe27e2fef00000000, - 0x36945c7400000000, 0xbe4f5c0200000000, 0x6aa52f9900000000, - 0x579ccaef00000000, 0x8376b97400000000, 0x2dee000200000000, - 0xf904739900000000, 0xc43d96ef00000000, 0x10d7e57400000000, - 0xd48a970300000000, 0x0060e49800000000, 0x3d5901ee00000000, - 0xe9b3727500000000, 0x472bcb0300000000, 0x93c1b89800000000, - 0xaef85dee00000000, 0x7a122e7500000000, 0xf2c92e0300000000, - 0x26235d9800000000, 0x1b1ab8ee00000000, 0xcff0cb7500000000, - 0x6168720300000000, 0xb582019800000000, 0x88bbe4ee00000000, - 0x5c51977500000000, 0x3019ca0500000000, 0xe4f3b99e00000000, - 0xd9ca5ce800000000, 0x0d202f7300000000, 0xa3b8960500000000, - 0x7752e59e00000000, 0x4a6b00e800000000, 0x9e81737300000000, - 0x165a730500000000, 0xc2b0009e00000000, 0xff89e5e800000000, - 0x2b63967300000000, 0x85fb2f0500000000, 0x51115c9e00000000, - 0x6c28b9e800000000, 0xb8c2ca7300000000, 0x7c9fb80400000000, - 0xa875cb9f00000000, 0x954c2ee900000000, 0x41a65d7200000000, - 0xef3ee40400000000, 0x3bd4979f00000000, 0x06ed72e900000000, - 0xd207017200000000, 0x5adc010400000000, 0x8e36729f00000000, - 0xb30f97e900000000, 0x67e5e47200000000, 0xc97d5d0400000000, - 0x1d972e9f00000000, 0x20aecbe900000000, 0xf444b87200000000, - 0xa8152f0700000000, 0x7cff5c9c00000000, 0x41c6b9ea00000000, - 0x952cca7100000000, 0x3bb4730700000000, 0xef5e009c00000000, - 0xd267e5ea00000000, 0x068d967100000000, 0x8e56960700000000, - 0x5abce59c00000000, 0x678500ea00000000, 0xb36f737100000000, - 0x1df7ca0700000000, 0xc91db99c00000000, 0xf4245cea00000000, - 0x20ce2f7100000000, 0xe4935d0600000000, 0x30792e9d00000000, - 0x0d40cbeb00000000, 0xd9aab87000000000, 0x7732010600000000, - 0xa3d8729d00000000, 0x9ee197eb00000000, 0x4a0be47000000000, - 0xc2d0e40600000000, 0x163a979d00000000, 0x2b0372eb00000000, - 0xffe9017000000000, 0x5171b80600000000, 0x859bcb9d00000000, - 0xb8a22eeb00000000, 0x6c485d7000000000, 0x6032940b00000000, - 0xb4d8e79000000000, 0x89e102e600000000, 0x5d0b717d00000000, - 0xf393c80b00000000, 0x2779bb9000000000, 0x1a405ee600000000, - 0xceaa2d7d00000000, 0x46712d0b00000000, 0x929b5e9000000000, - 0xafa2bbe600000000, 0x7b48c87d00000000, 0xd5d0710b00000000, - 0x013a029000000000, 0x3c03e7e600000000, 0xe8e9947d00000000, - 0x2cb4e60a00000000, 0xf85e959100000000, 0xc56770e700000000, - 0x118d037c00000000, 0xbf15ba0a00000000, 0x6bffc99100000000, - 0x56c62ce700000000, 0x822c5f7c00000000, 0x0af75f0a00000000, - 0xde1d2c9100000000, 0xe324c9e700000000, 0x37ceba7c00000000, - 0x9956030a00000000, 0x4dbc709100000000, 0x708595e700000000, - 0xa46fe67c00000000, 0xf83e710900000000, 0x2cd4029200000000, - 0x11ede7e400000000, 0xc507947f00000000, 0x6b9f2d0900000000, - 0xbf755e9200000000, 0x824cbbe400000000, 0x56a6c87f00000000, - 0xde7dc80900000000, 0x0a97bb9200000000, 0x37ae5ee400000000, - 0xe3442d7f00000000, 0x4ddc940900000000, 0x9936e79200000000, - 0xa40f02e400000000, 0x70e5717f00000000, 0xb4b8030800000000, - 0x6052709300000000, 0x5d6b95e500000000, 0x8981e67e00000000, - 0x27195f0800000000, 0xf3f32c9300000000, 0xcecac9e500000000, - 0x1a20ba7e00000000, 0x92fbba0800000000, 0x4611c99300000000, - 0x7b282ce500000000, 0xafc25f7e00000000, 0x015ae60800000000, - 0xd5b0959300000000, 0xe88970e500000000, 0x3c63037e00000000, - 0x502b5e0e00000000, 0x84c12d9500000000, 0xb9f8c8e300000000, - 0x6d12bb7800000000, 0xc38a020e00000000, 0x1760719500000000, - 0x2a5994e300000000, 0xfeb3e77800000000, 0x7668e70e00000000, - 0xa282949500000000, 0x9fbb71e300000000, 0x4b51027800000000, - 0xe5c9bb0e00000000, 0x3123c89500000000, 0x0c1a2de300000000, - 0xd8f05e7800000000, 0x1cad2c0f00000000, 0xc8475f9400000000, - 0xf57ebae200000000, 0x2194c97900000000, 0x8f0c700f00000000, - 0x5be6039400000000, 0x66dfe6e200000000, 0xb235957900000000, - 0x3aee950f00000000, 0xee04e69400000000, 0xd33d03e200000000, - 0x07d7707900000000, 0xa94fc90f00000000, 0x7da5ba9400000000, - 0x409c5fe200000000, 0x94762c7900000000, 0xc827bb0c00000000, - 0x1ccdc89700000000, 0x21f42de100000000, 0xf51e5e7a00000000, - 0x5b86e70c00000000, 0x8f6c949700000000, 0xb25571e100000000, - 0x66bf027a00000000, 0xee64020c00000000, 0x3a8e719700000000, - 0x07b794e100000000, 0xd35de77a00000000, 0x7dc55e0c00000000, - 0xa92f2d9700000000, 0x9416c8e100000000, 0x40fcbb7a00000000, - 0x84a1c90d00000000, 0x504bba9600000000, 0x6d725fe000000000, - 0xb9982c7b00000000, 0x1700950d00000000, 0xc3eae69600000000, - 0xfed303e000000000, 0x2a39707b00000000, 0xa2e2700d00000000, - 0x7608039600000000, 0x4b31e6e000000000, 0x9fdb957b00000000, - 0x31432c0d00000000, 0xe5a95f9600000000, 0xd890bae000000000, - 0x0c7ac97b00000000}, - {0x0000000000000000, 0x2765258100000000, 0x0fcc3bd900000000, - 0x28a91e5800000000, 0x5f9e066900000000, 0x78fb23e800000000, - 0x50523db000000000, 0x7737183100000000, 0xbe3c0dd200000000, - 0x9959285300000000, 0xb1f0360b00000000, 0x9695138a00000000, - 0xe1a20bbb00000000, 0xc6c72e3a00000000, 0xee6e306200000000, - 0xc90b15e300000000, 0x3d7f6b7f00000000, 0x1a1a4efe00000000, - 0x32b350a600000000, 0x15d6752700000000, 0x62e16d1600000000, - 0x4584489700000000, 0x6d2d56cf00000000, 0x4a48734e00000000, - 0x834366ad00000000, 0xa426432c00000000, 0x8c8f5d7400000000, - 0xabea78f500000000, 0xdcdd60c400000000, 0xfbb8454500000000, - 0xd3115b1d00000000, 0xf4747e9c00000000, 0x7afed6fe00000000, - 0x5d9bf37f00000000, 0x7532ed2700000000, 0x5257c8a600000000, - 0x2560d09700000000, 0x0205f51600000000, 0x2aaceb4e00000000, - 0x0dc9cecf00000000, 0xc4c2db2c00000000, 0xe3a7fead00000000, - 0xcb0ee0f500000000, 0xec6bc57400000000, 0x9b5cdd4500000000, - 0xbc39f8c400000000, 0x9490e69c00000000, 0xb3f5c31d00000000, - 0x4781bd8100000000, 0x60e4980000000000, 0x484d865800000000, - 0x6f28a3d900000000, 0x181fbbe800000000, 0x3f7a9e6900000000, - 0x17d3803100000000, 0x30b6a5b000000000, 0xf9bdb05300000000, - 0xded895d200000000, 0xf6718b8a00000000, 0xd114ae0b00000000, - 0xa623b63a00000000, 0x814693bb00000000, 0xa9ef8de300000000, - 0x8e8aa86200000000, 0xb5fadc2600000000, 0x929ff9a700000000, - 0xba36e7ff00000000, 0x9d53c27e00000000, 0xea64da4f00000000, - 0xcd01ffce00000000, 0xe5a8e19600000000, 0xc2cdc41700000000, - 0x0bc6d1f400000000, 0x2ca3f47500000000, 0x040aea2d00000000, - 0x236fcfac00000000, 0x5458d79d00000000, 0x733df21c00000000, - 0x5b94ec4400000000, 0x7cf1c9c500000000, 0x8885b75900000000, - 0xafe092d800000000, 0x87498c8000000000, 0xa02ca90100000000, - 0xd71bb13000000000, 0xf07e94b100000000, 0xd8d78ae900000000, - 0xffb2af6800000000, 0x36b9ba8b00000000, 0x11dc9f0a00000000, - 0x3975815200000000, 0x1e10a4d300000000, 0x6927bce200000000, - 0x4e42996300000000, 0x66eb873b00000000, 0x418ea2ba00000000, - 0xcf040ad800000000, 0xe8612f5900000000, 0xc0c8310100000000, - 0xe7ad148000000000, 0x909a0cb100000000, 0xb7ff293000000000, - 0x9f56376800000000, 0xb83312e900000000, 0x7138070a00000000, - 0x565d228b00000000, 0x7ef43cd300000000, 0x5991195200000000, - 0x2ea6016300000000, 0x09c324e200000000, 0x216a3aba00000000, - 0x060f1f3b00000000, 0xf27b61a700000000, 0xd51e442600000000, - 0xfdb75a7e00000000, 0xdad27fff00000000, 0xade567ce00000000, - 0x8a80424f00000000, 0xa2295c1700000000, 0x854c799600000000, - 0x4c476c7500000000, 0x6b2249f400000000, 0x438b57ac00000000, - 0x64ee722d00000000, 0x13d96a1c00000000, 0x34bc4f9d00000000, - 0x1c1551c500000000, 0x3b70744400000000, 0x6af5b94d00000000, - 0x4d909ccc00000000, 0x6539829400000000, 0x425ca71500000000, - 0x356bbf2400000000, 0x120e9aa500000000, 0x3aa784fd00000000, - 0x1dc2a17c00000000, 0xd4c9b49f00000000, 0xf3ac911e00000000, - 0xdb058f4600000000, 0xfc60aac700000000, 0x8b57b2f600000000, - 0xac32977700000000, 0x849b892f00000000, 0xa3feacae00000000, - 0x578ad23200000000, 0x70eff7b300000000, 0x5846e9eb00000000, - 0x7f23cc6a00000000, 0x0814d45b00000000, 0x2f71f1da00000000, - 0x07d8ef8200000000, 0x20bdca0300000000, 0xe9b6dfe000000000, - 0xced3fa6100000000, 0xe67ae43900000000, 0xc11fc1b800000000, - 0xb628d98900000000, 0x914dfc0800000000, 0xb9e4e25000000000, - 0x9e81c7d100000000, 0x100b6fb300000000, 0x376e4a3200000000, - 0x1fc7546a00000000, 0x38a271eb00000000, 0x4f9569da00000000, - 0x68f04c5b00000000, 0x4059520300000000, 0x673c778200000000, - 0xae37626100000000, 0x895247e000000000, 0xa1fb59b800000000, - 0x869e7c3900000000, 0xf1a9640800000000, 0xd6cc418900000000, - 0xfe655fd100000000, 0xd9007a5000000000, 0x2d7404cc00000000, - 0x0a11214d00000000, 0x22b83f1500000000, 0x05dd1a9400000000, - 0x72ea02a500000000, 0x558f272400000000, 0x7d26397c00000000, - 0x5a431cfd00000000, 0x9348091e00000000, 0xb42d2c9f00000000, - 0x9c8432c700000000, 0xbbe1174600000000, 0xccd60f7700000000, - 0xebb32af600000000, 0xc31a34ae00000000, 0xe47f112f00000000, - 0xdf0f656b00000000, 0xf86a40ea00000000, 0xd0c35eb200000000, - 0xf7a67b3300000000, 0x8091630200000000, 0xa7f4468300000000, - 0x8f5d58db00000000, 0xa8387d5a00000000, 0x613368b900000000, - 0x46564d3800000000, 0x6eff536000000000, 0x499a76e100000000, - 0x3ead6ed000000000, 0x19c84b5100000000, 0x3161550900000000, - 0x1604708800000000, 0xe2700e1400000000, 0xc5152b9500000000, - 0xedbc35cd00000000, 0xcad9104c00000000, 0xbdee087d00000000, - 0x9a8b2dfc00000000, 0xb22233a400000000, 0x9547162500000000, - 0x5c4c03c600000000, 0x7b29264700000000, 0x5380381f00000000, - 0x74e51d9e00000000, 0x03d205af00000000, 0x24b7202e00000000, - 0x0c1e3e7600000000, 0x2b7b1bf700000000, 0xa5f1b39500000000, - 0x8294961400000000, 0xaa3d884c00000000, 0x8d58adcd00000000, - 0xfa6fb5fc00000000, 0xdd0a907d00000000, 0xf5a38e2500000000, - 0xd2c6aba400000000, 0x1bcdbe4700000000, 0x3ca89bc600000000, - 0x1401859e00000000, 0x3364a01f00000000, 0x4453b82e00000000, - 0x63369daf00000000, 0x4b9f83f700000000, 0x6cfaa67600000000, - 0x988ed8ea00000000, 0xbfebfd6b00000000, 0x9742e33300000000, - 0xb027c6b200000000, 0xc710de8300000000, 0xe075fb0200000000, - 0xc8dce55a00000000, 0xefb9c0db00000000, 0x26b2d53800000000, - 0x01d7f0b900000000, 0x297eeee100000000, 0x0e1bcb6000000000, - 0x792cd35100000000, 0x5e49f6d000000000, 0x76e0e88800000000, - 0x5185cd0900000000}}; + {0x0000000000000000, 0x43cba68700000000, 0xc7903cd400000000, + 0x845b9a5300000000, 0xcf27087300000000, 0x8cecaef400000000, + 0x08b734a700000000, 0x4b7c922000000000, 0x9e4f10e600000000, + 0xdd84b66100000000, 0x59df2c3200000000, 0x1a148ab500000000, + 0x5168189500000000, 0x12a3be1200000000, 0x96f8244100000000, + 0xd53382c600000000, 0x7d99511700000000, 0x3e52f79000000000, + 0xba096dc300000000, 0xf9c2cb4400000000, 0xb2be596400000000, + 0xf175ffe300000000, 0x752e65b000000000, 0x36e5c33700000000, + 0xe3d641f100000000, 0xa01de77600000000, 0x24467d2500000000, + 0x678ddba200000000, 0x2cf1498200000000, 0x6f3aef0500000000, + 0xeb61755600000000, 0xa8aad3d100000000, 0xfa32a32e00000000, + 0xb9f905a900000000, 0x3da29ffa00000000, 0x7e69397d00000000, + 0x3515ab5d00000000, 0x76de0dda00000000, 0xf285978900000000, + 0xb14e310e00000000, 0x647db3c800000000, 0x27b6154f00000000, + 0xa3ed8f1c00000000, 0xe026299b00000000, 0xab5abbbb00000000, + 0xe8911d3c00000000, 0x6cca876f00000000, 0x2f0121e800000000, + 0x87abf23900000000, 0xc46054be00000000, 0x403bceed00000000, + 0x03f0686a00000000, 0x488cfa4a00000000, 0x0b475ccd00000000, + 0x8f1cc69e00000000, 0xccd7601900000000, 0x19e4e2df00000000, + 0x5a2f445800000000, 0xde74de0b00000000, 0x9dbf788c00000000, + 0xd6c3eaac00000000, 0x95084c2b00000000, 0x1153d67800000000, + 0x529870ff00000000, 0xf465465d00000000, 0xb7aee0da00000000, + 0x33f57a8900000000, 0x703edc0e00000000, 0x3b424e2e00000000, + 0x7889e8a900000000, 0xfcd272fa00000000, 0xbf19d47d00000000, + 0x6a2a56bb00000000, 0x29e1f03c00000000, 0xadba6a6f00000000, + 0xee71cce800000000, 0xa50d5ec800000000, 0xe6c6f84f00000000, + 0x629d621c00000000, 0x2156c49b00000000, 0x89fc174a00000000, + 0xca37b1cd00000000, 0x4e6c2b9e00000000, 0x0da78d1900000000, + 0x46db1f3900000000, 0x0510b9be00000000, 0x814b23ed00000000, + 0xc280856a00000000, 0x17b307ac00000000, 0x5478a12b00000000, + 0xd0233b7800000000, 0x93e89dff00000000, 0xd8940fdf00000000, + 0x9b5fa95800000000, 0x1f04330b00000000, 0x5ccf958c00000000, + 0x0e57e57300000000, 0x4d9c43f400000000, 0xc9c7d9a700000000, + 0x8a0c7f2000000000, 0xc170ed0000000000, 0x82bb4b8700000000, + 0x06e0d1d400000000, 0x452b775300000000, 0x9018f59500000000, + 0xd3d3531200000000, 0x5788c94100000000, 0x14436fc600000000, + 0x5f3ffde600000000, 0x1cf45b6100000000, 0x98afc13200000000, + 0xdb6467b500000000, 0x73ceb46400000000, 0x300512e300000000, + 0xb45e88b000000000, 0xf7952e3700000000, 0xbce9bc1700000000, + 0xff221a9000000000, 0x7b7980c300000000, 0x38b2264400000000, + 0xed81a48200000000, 0xae4a020500000000, 0x2a11985600000000, + 0x69da3ed100000000, 0x22a6acf100000000, 0x616d0a7600000000, + 0xe536902500000000, 0xa6fd36a200000000, 0xe8cb8cba00000000, + 0xab002a3d00000000, 0x2f5bb06e00000000, 0x6c9016e900000000, + 0x27ec84c900000000, 0x6427224e00000000, 0xe07cb81d00000000, + 0xa3b71e9a00000000, 0x76849c5c00000000, 0x354f3adb00000000, + 0xb114a08800000000, 0xf2df060f00000000, 0xb9a3942f00000000, + 0xfa6832a800000000, 0x7e33a8fb00000000, 0x3df80e7c00000000, + 0x9552ddad00000000, 0xd6997b2a00000000, 0x52c2e17900000000, + 0x110947fe00000000, 0x5a75d5de00000000, 0x19be735900000000, + 0x9de5e90a00000000, 0xde2e4f8d00000000, 0x0b1dcd4b00000000, + 0x48d66bcc00000000, 0xcc8df19f00000000, 0x8f46571800000000, + 0xc43ac53800000000, 0x87f163bf00000000, 0x03aaf9ec00000000, + 0x40615f6b00000000, 0x12f92f9400000000, 0x5132891300000000, + 0xd569134000000000, 0x96a2b5c700000000, 0xddde27e700000000, + 0x9e15816000000000, 0x1a4e1b3300000000, 0x5985bdb400000000, + 0x8cb63f7200000000, 0xcf7d99f500000000, 0x4b2603a600000000, + 0x08eda52100000000, 0x4391370100000000, 0x005a918600000000, + 0x84010bd500000000, 0xc7caad5200000000, 0x6f607e8300000000, + 0x2cabd80400000000, 0xa8f0425700000000, 0xeb3be4d000000000, + 0xa04776f000000000, 0xe38cd07700000000, 0x67d74a2400000000, + 0x241ceca300000000, 0xf12f6e6500000000, 0xb2e4c8e200000000, + 0x36bf52b100000000, 0x7574f43600000000, 0x3e08661600000000, + 0x7dc3c09100000000, 0xf9985ac200000000, 0xba53fc4500000000, + 0x1caecae700000000, 0x5f656c6000000000, 0xdb3ef63300000000, + 0x98f550b400000000, 0xd389c29400000000, 0x9042641300000000, + 0x1419fe4000000000, 0x57d258c700000000, 0x82e1da0100000000, + 0xc12a7c8600000000, 0x4571e6d500000000, 0x06ba405200000000, + 0x4dc6d27200000000, 0x0e0d74f500000000, 0x8a56eea600000000, + 0xc99d482100000000, 0x61379bf000000000, 0x22fc3d7700000000, + 0xa6a7a72400000000, 0xe56c01a300000000, 0xae10938300000000, + 0xeddb350400000000, 0x6980af5700000000, 0x2a4b09d000000000, + 0xff788b1600000000, 0xbcb32d9100000000, 0x38e8b7c200000000, + 0x7b23114500000000, 0x305f836500000000, 0x739425e200000000, + 0xf7cfbfb100000000, 0xb404193600000000, 0xe69c69c900000000, + 0xa557cf4e00000000, 0x210c551d00000000, 0x62c7f39a00000000, + 0x29bb61ba00000000, 0x6a70c73d00000000, 0xee2b5d6e00000000, + 0xade0fbe900000000, 0x78d3792f00000000, 0x3b18dfa800000000, + 0xbf4345fb00000000, 0xfc88e37c00000000, 0xb7f4715c00000000, + 0xf43fd7db00000000, 0x70644d8800000000, 0x33afeb0f00000000, + 0x9b0538de00000000, 0xd8ce9e5900000000, 0x5c95040a00000000, + 0x1f5ea28d00000000, 0x542230ad00000000, 0x17e9962a00000000, + 0x93b20c7900000000, 0xd079aafe00000000, 0x054a283800000000, + 0x46818ebf00000000, 0xc2da14ec00000000, 0x8111b26b00000000, + 0xca6d204b00000000, 0x89a686cc00000000, 0x0dfd1c9f00000000, + 0x4e36ba1800000000}, + {0x0000000000000000, 0xe1b652ef00000000, 0x836bd40500000000, + 0x62dd86ea00000000, 0x06d7a80b00000000, 0xe761fae400000000, + 0x85bc7c0e00000000, 0x640a2ee100000000, 0x0cae511700000000, + 0xed1803f800000000, 0x8fc5851200000000, 0x6e73d7fd00000000, + 0x0a79f91c00000000, 0xebcfabf300000000, 0x89122d1900000000, + 0x68a47ff600000000, 0x185ca32e00000000, 0xf9eaf1c100000000, + 0x9b37772b00000000, 0x7a8125c400000000, 0x1e8b0b2500000000, + 0xff3d59ca00000000, 0x9de0df2000000000, 0x7c568dcf00000000, + 0x14f2f23900000000, 0xf544a0d600000000, 0x9799263c00000000, + 0x762f74d300000000, 0x12255a3200000000, 0xf39308dd00000000, + 0x914e8e3700000000, 0x70f8dcd800000000, 0x30b8465d00000000, + 0xd10e14b200000000, 0xb3d3925800000000, 0x5265c0b700000000, + 0x366fee5600000000, 0xd7d9bcb900000000, 0xb5043a5300000000, + 0x54b268bc00000000, 0x3c16174a00000000, 0xdda045a500000000, + 0xbf7dc34f00000000, 0x5ecb91a000000000, 0x3ac1bf4100000000, + 0xdb77edae00000000, 0xb9aa6b4400000000, 0x581c39ab00000000, + 0x28e4e57300000000, 0xc952b79c00000000, 0xab8f317600000000, + 0x4a39639900000000, 0x2e334d7800000000, 0xcf851f9700000000, + 0xad58997d00000000, 0x4ceecb9200000000, 0x244ab46400000000, + 0xc5fce68b00000000, 0xa721606100000000, 0x4697328e00000000, + 0x229d1c6f00000000, 0xc32b4e8000000000, 0xa1f6c86a00000000, + 0x40409a8500000000, 0x60708dba00000000, 0x81c6df5500000000, + 0xe31b59bf00000000, 0x02ad0b5000000000, 0x66a725b100000000, + 0x8711775e00000000, 0xe5ccf1b400000000, 0x047aa35b00000000, + 0x6cdedcad00000000, 0x8d688e4200000000, 0xefb508a800000000, + 0x0e035a4700000000, 0x6a0974a600000000, 0x8bbf264900000000, + 0xe962a0a300000000, 0x08d4f24c00000000, 0x782c2e9400000000, + 0x999a7c7b00000000, 0xfb47fa9100000000, 0x1af1a87e00000000, + 0x7efb869f00000000, 0x9f4dd47000000000, 0xfd90529a00000000, + 0x1c26007500000000, 0x74827f8300000000, 0x95342d6c00000000, + 0xf7e9ab8600000000, 0x165ff96900000000, 0x7255d78800000000, + 0x93e3856700000000, 0xf13e038d00000000, 0x1088516200000000, + 0x50c8cbe700000000, 0xb17e990800000000, 0xd3a31fe200000000, + 0x32154d0d00000000, 0x561f63ec00000000, 0xb7a9310300000000, + 0xd574b7e900000000, 0x34c2e50600000000, 0x5c669af000000000, + 0xbdd0c81f00000000, 0xdf0d4ef500000000, 0x3ebb1c1a00000000, + 0x5ab132fb00000000, 0xbb07601400000000, 0xd9dae6fe00000000, + 0x386cb41100000000, 0x489468c900000000, 0xa9223a2600000000, + 0xcbffbccc00000000, 0x2a49ee2300000000, 0x4e43c0c200000000, + 0xaff5922d00000000, 0xcd2814c700000000, 0x2c9e462800000000, + 0x443a39de00000000, 0xa58c6b3100000000, 0xc751eddb00000000, + 0x26e7bf3400000000, 0x42ed91d500000000, 0xa35bc33a00000000, + 0xc18645d000000000, 0x2030173f00000000, 0x81e66bae00000000, + 0x6050394100000000, 0x028dbfab00000000, 0xe33bed4400000000, + 0x8731c3a500000000, 0x6687914a00000000, 0x045a17a000000000, + 0xe5ec454f00000000, 0x8d483ab900000000, 0x6cfe685600000000, + 0x0e23eebc00000000, 0xef95bc5300000000, 0x8b9f92b200000000, + 0x6a29c05d00000000, 0x08f446b700000000, 0xe942145800000000, + 0x99bac88000000000, 0x780c9a6f00000000, 0x1ad11c8500000000, + 0xfb674e6a00000000, 0x9f6d608b00000000, 0x7edb326400000000, + 0x1c06b48e00000000, 0xfdb0e66100000000, 0x9514999700000000, + 0x74a2cb7800000000, 0x167f4d9200000000, 0xf7c91f7d00000000, + 0x93c3319c00000000, 0x7275637300000000, 0x10a8e59900000000, + 0xf11eb77600000000, 0xb15e2df300000000, 0x50e87f1c00000000, + 0x3235f9f600000000, 0xd383ab1900000000, 0xb78985f800000000, + 0x563fd71700000000, 0x34e251fd00000000, 0xd554031200000000, + 0xbdf07ce400000000, 0x5c462e0b00000000, 0x3e9ba8e100000000, + 0xdf2dfa0e00000000, 0xbb27d4ef00000000, 0x5a91860000000000, + 0x384c00ea00000000, 0xd9fa520500000000, 0xa9028edd00000000, + 0x48b4dc3200000000, 0x2a695ad800000000, 0xcbdf083700000000, + 0xafd526d600000000, 0x4e63743900000000, 0x2cbef2d300000000, + 0xcd08a03c00000000, 0xa5acdfca00000000, 0x441a8d2500000000, + 0x26c70bcf00000000, 0xc771592000000000, 0xa37b77c100000000, + 0x42cd252e00000000, 0x2010a3c400000000, 0xc1a6f12b00000000, + 0xe196e61400000000, 0x0020b4fb00000000, 0x62fd321100000000, + 0x834b60fe00000000, 0xe7414e1f00000000, 0x06f71cf000000000, + 0x642a9a1a00000000, 0x859cc8f500000000, 0xed38b70300000000, + 0x0c8ee5ec00000000, 0x6e53630600000000, 0x8fe531e900000000, + 0xebef1f0800000000, 0x0a594de700000000, 0x6884cb0d00000000, + 0x893299e200000000, 0xf9ca453a00000000, 0x187c17d500000000, + 0x7aa1913f00000000, 0x9b17c3d000000000, 0xff1ded3100000000, + 0x1eabbfde00000000, 0x7c76393400000000, 0x9dc06bdb00000000, + 0xf564142d00000000, 0x14d246c200000000, 0x760fc02800000000, + 0x97b992c700000000, 0xf3b3bc2600000000, 0x1205eec900000000, + 0x70d8682300000000, 0x916e3acc00000000, 0xd12ea04900000000, + 0x3098f2a600000000, 0x5245744c00000000, 0xb3f326a300000000, + 0xd7f9084200000000, 0x364f5aad00000000, 0x5492dc4700000000, + 0xb5248ea800000000, 0xdd80f15e00000000, 0x3c36a3b100000000, + 0x5eeb255b00000000, 0xbf5d77b400000000, 0xdb57595500000000, + 0x3ae10bba00000000, 0x583c8d5000000000, 0xb98adfbf00000000, + 0xc972036700000000, 0x28c4518800000000, 0x4a19d76200000000, + 0xabaf858d00000000, 0xcfa5ab6c00000000, 0x2e13f98300000000, + 0x4cce7f6900000000, 0xad782d8600000000, 0xc5dc527000000000, + 0x246a009f00000000, 0x46b7867500000000, 0xa701d49a00000000, + 0xc30bfa7b00000000, 0x22bda89400000000, 0x40602e7e00000000, + 0xa1d67c9100000000}, + {0x0000000000000000, 0x5880e2d700000000, 0xf106b47400000000, + 0xa98656a300000000, 0xe20d68e900000000, 0xba8d8a3e00000000, + 0x130bdc9d00000000, 0x4b8b3e4a00000000, 0x851da10900000000, + 0xdd9d43de00000000, 0x741b157d00000000, 0x2c9bf7aa00000000, + 0x6710c9e000000000, 0x3f902b3700000000, 0x96167d9400000000, + 0xce969f4300000000, 0x0a3b421300000000, 0x52bba0c400000000, + 0xfb3df66700000000, 0xa3bd14b000000000, 0xe8362afa00000000, + 0xb0b6c82d00000000, 0x19309e8e00000000, 0x41b07c5900000000, + 0x8f26e31a00000000, 0xd7a601cd00000000, 0x7e20576e00000000, + 0x26a0b5b900000000, 0x6d2b8bf300000000, 0x35ab692400000000, + 0x9c2d3f8700000000, 0xc4addd5000000000, 0x1476842600000000, + 0x4cf666f100000000, 0xe570305200000000, 0xbdf0d28500000000, + 0xf67beccf00000000, 0xaefb0e1800000000, 0x077d58bb00000000, + 0x5ffdba6c00000000, 0x916b252f00000000, 0xc9ebc7f800000000, + 0x606d915b00000000, 0x38ed738c00000000, 0x73664dc600000000, + 0x2be6af1100000000, 0x8260f9b200000000, 0xdae01b6500000000, + 0x1e4dc63500000000, 0x46cd24e200000000, 0xef4b724100000000, + 0xb7cb909600000000, 0xfc40aedc00000000, 0xa4c04c0b00000000, + 0x0d461aa800000000, 0x55c6f87f00000000, 0x9b50673c00000000, + 0xc3d085eb00000000, 0x6a56d34800000000, 0x32d6319f00000000, + 0x795d0fd500000000, 0x21dded0200000000, 0x885bbba100000000, + 0xd0db597600000000, 0x28ec084d00000000, 0x706cea9a00000000, + 0xd9eabc3900000000, 0x816a5eee00000000, 0xcae160a400000000, + 0x9261827300000000, 0x3be7d4d000000000, 0x6367360700000000, + 0xadf1a94400000000, 0xf5714b9300000000, 0x5cf71d3000000000, + 0x0477ffe700000000, 0x4ffcc1ad00000000, 0x177c237a00000000, + 0xbefa75d900000000, 0xe67a970e00000000, 0x22d74a5e00000000, + 0x7a57a88900000000, 0xd3d1fe2a00000000, 0x8b511cfd00000000, + 0xc0da22b700000000, 0x985ac06000000000, 0x31dc96c300000000, + 0x695c741400000000, 0xa7caeb5700000000, 0xff4a098000000000, + 0x56cc5f2300000000, 0x0e4cbdf400000000, 0x45c783be00000000, + 0x1d47616900000000, 0xb4c137ca00000000, 0xec41d51d00000000, + 0x3c9a8c6b00000000, 0x641a6ebc00000000, 0xcd9c381f00000000, + 0x951cdac800000000, 0xde97e48200000000, 0x8617065500000000, + 0x2f9150f600000000, 0x7711b22100000000, 0xb9872d6200000000, + 0xe107cfb500000000, 0x4881991600000000, 0x10017bc100000000, + 0x5b8a458b00000000, 0x030aa75c00000000, 0xaa8cf1ff00000000, + 0xf20c132800000000, 0x36a1ce7800000000, 0x6e212caf00000000, + 0xc7a77a0c00000000, 0x9f2798db00000000, 0xd4aca69100000000, + 0x8c2c444600000000, 0x25aa12e500000000, 0x7d2af03200000000, + 0xb3bc6f7100000000, 0xeb3c8da600000000, 0x42badb0500000000, + 0x1a3a39d200000000, 0x51b1079800000000, 0x0931e54f00000000, + 0xa0b7b3ec00000000, 0xf837513b00000000, 0x50d8119a00000000, + 0x0858f34d00000000, 0xa1dea5ee00000000, 0xf95e473900000000, + 0xb2d5797300000000, 0xea559ba400000000, 0x43d3cd0700000000, + 0x1b532fd000000000, 0xd5c5b09300000000, 0x8d45524400000000, + 0x24c304e700000000, 0x7c43e63000000000, 0x37c8d87a00000000, + 0x6f483aad00000000, 0xc6ce6c0e00000000, 0x9e4e8ed900000000, + 0x5ae3538900000000, 0x0263b15e00000000, 0xabe5e7fd00000000, + 0xf365052a00000000, 0xb8ee3b6000000000, 0xe06ed9b700000000, + 0x49e88f1400000000, 0x11686dc300000000, 0xdffef28000000000, + 0x877e105700000000, 0x2ef846f400000000, 0x7678a42300000000, + 0x3df39a6900000000, 0x657378be00000000, 0xccf52e1d00000000, + 0x9475ccca00000000, 0x44ae95bc00000000, 0x1c2e776b00000000, + 0xb5a821c800000000, 0xed28c31f00000000, 0xa6a3fd5500000000, + 0xfe231f8200000000, 0x57a5492100000000, 0x0f25abf600000000, + 0xc1b334b500000000, 0x9933d66200000000, 0x30b580c100000000, + 0x6835621600000000, 0x23be5c5c00000000, 0x7b3ebe8b00000000, + 0xd2b8e82800000000, 0x8a380aff00000000, 0x4e95d7af00000000, + 0x1615357800000000, 0xbf9363db00000000, 0xe713810c00000000, + 0xac98bf4600000000, 0xf4185d9100000000, 0x5d9e0b3200000000, + 0x051ee9e500000000, 0xcb8876a600000000, 0x9308947100000000, + 0x3a8ec2d200000000, 0x620e200500000000, 0x29851e4f00000000, + 0x7105fc9800000000, 0xd883aa3b00000000, 0x800348ec00000000, + 0x783419d700000000, 0x20b4fb0000000000, 0x8932ada300000000, + 0xd1b24f7400000000, 0x9a39713e00000000, 0xc2b993e900000000, + 0x6b3fc54a00000000, 0x33bf279d00000000, 0xfd29b8de00000000, + 0xa5a95a0900000000, 0x0c2f0caa00000000, 0x54afee7d00000000, + 0x1f24d03700000000, 0x47a432e000000000, 0xee22644300000000, + 0xb6a2869400000000, 0x720f5bc400000000, 0x2a8fb91300000000, + 0x8309efb000000000, 0xdb890d6700000000, 0x9002332d00000000, + 0xc882d1fa00000000, 0x6104875900000000, 0x3984658e00000000, + 0xf712facd00000000, 0xaf92181a00000000, 0x06144eb900000000, + 0x5e94ac6e00000000, 0x151f922400000000, 0x4d9f70f300000000, + 0xe419265000000000, 0xbc99c48700000000, 0x6c429df100000000, + 0x34c27f2600000000, 0x9d44298500000000, 0xc5c4cb5200000000, + 0x8e4ff51800000000, 0xd6cf17cf00000000, 0x7f49416c00000000, + 0x27c9a3bb00000000, 0xe95f3cf800000000, 0xb1dfde2f00000000, + 0x1859888c00000000, 0x40d96a5b00000000, 0x0b52541100000000, + 0x53d2b6c600000000, 0xfa54e06500000000, 0xa2d402b200000000, + 0x6679dfe200000000, 0x3ef93d3500000000, 0x977f6b9600000000, + 0xcfff894100000000, 0x8474b70b00000000, 0xdcf455dc00000000, + 0x7572037f00000000, 0x2df2e1a800000000, 0xe3647eeb00000000, + 0xbbe49c3c00000000, 0x1262ca9f00000000, 0x4ae2284800000000, + 0x0169160200000000, 0x59e9f4d500000000, 0xf06fa27600000000, + 0xa8ef40a100000000}, + {0x0000000000000000, 0x463b676500000000, 0x8c76ceca00000000, + 0xca4da9af00000000, 0x59ebed4e00000000, 0x1fd08a2b00000000, + 0xd59d238400000000, 0x93a644e100000000, 0xb2d6db9d00000000, + 0xf4edbcf800000000, 0x3ea0155700000000, 0x789b723200000000, + 0xeb3d36d300000000, 0xad0651b600000000, 0x674bf81900000000, + 0x21709f7c00000000, 0x25abc6e000000000, 0x6390a18500000000, + 0xa9dd082a00000000, 0xefe66f4f00000000, 0x7c402bae00000000, + 0x3a7b4ccb00000000, 0xf036e56400000000, 0xb60d820100000000, + 0x977d1d7d00000000, 0xd1467a1800000000, 0x1b0bd3b700000000, + 0x5d30b4d200000000, 0xce96f03300000000, 0x88ad975600000000, + 0x42e03ef900000000, 0x04db599c00000000, 0x0b50fc1a00000000, + 0x4d6b9b7f00000000, 0x872632d000000000, 0xc11d55b500000000, + 0x52bb115400000000, 0x1480763100000000, 0xdecddf9e00000000, + 0x98f6b8fb00000000, 0xb986278700000000, 0xffbd40e200000000, + 0x35f0e94d00000000, 0x73cb8e2800000000, 0xe06dcac900000000, + 0xa656adac00000000, 0x6c1b040300000000, 0x2a20636600000000, + 0x2efb3afa00000000, 0x68c05d9f00000000, 0xa28df43000000000, + 0xe4b6935500000000, 0x7710d7b400000000, 0x312bb0d100000000, + 0xfb66197e00000000, 0xbd5d7e1b00000000, 0x9c2de16700000000, + 0xda16860200000000, 0x105b2fad00000000, 0x566048c800000000, + 0xc5c60c2900000000, 0x83fd6b4c00000000, 0x49b0c2e300000000, + 0x0f8ba58600000000, 0x16a0f83500000000, 0x509b9f5000000000, + 0x9ad636ff00000000, 0xdced519a00000000, 0x4f4b157b00000000, + 0x0970721e00000000, 0xc33ddbb100000000, 0x8506bcd400000000, + 0xa47623a800000000, 0xe24d44cd00000000, 0x2800ed6200000000, + 0x6e3b8a0700000000, 0xfd9dcee600000000, 0xbba6a98300000000, + 0x71eb002c00000000, 0x37d0674900000000, 0x330b3ed500000000, + 0x753059b000000000, 0xbf7df01f00000000, 0xf946977a00000000, + 0x6ae0d39b00000000, 0x2cdbb4fe00000000, 0xe6961d5100000000, + 0xa0ad7a3400000000, 0x81dde54800000000, 0xc7e6822d00000000, + 0x0dab2b8200000000, 0x4b904ce700000000, 0xd836080600000000, + 0x9e0d6f6300000000, 0x5440c6cc00000000, 0x127ba1a900000000, + 0x1df0042f00000000, 0x5bcb634a00000000, 0x9186cae500000000, + 0xd7bdad8000000000, 0x441be96100000000, 0x02208e0400000000, + 0xc86d27ab00000000, 0x8e5640ce00000000, 0xaf26dfb200000000, + 0xe91db8d700000000, 0x2350117800000000, 0x656b761d00000000, + 0xf6cd32fc00000000, 0xb0f6559900000000, 0x7abbfc3600000000, + 0x3c809b5300000000, 0x385bc2cf00000000, 0x7e60a5aa00000000, + 0xb42d0c0500000000, 0xf2166b6000000000, 0x61b02f8100000000, + 0x278b48e400000000, 0xedc6e14b00000000, 0xabfd862e00000000, + 0x8a8d195200000000, 0xccb67e3700000000, 0x06fbd79800000000, + 0x40c0b0fd00000000, 0xd366f41c00000000, 0x955d937900000000, + 0x5f103ad600000000, 0x192b5db300000000, 0x2c40f16b00000000, + 0x6a7b960e00000000, 0xa0363fa100000000, 0xe60d58c400000000, + 0x75ab1c2500000000, 0x33907b4000000000, 0xf9ddd2ef00000000, + 0xbfe6b58a00000000, 0x9e962af600000000, 0xd8ad4d9300000000, + 0x12e0e43c00000000, 0x54db835900000000, 0xc77dc7b800000000, + 0x8146a0dd00000000, 0x4b0b097200000000, 0x0d306e1700000000, + 0x09eb378b00000000, 0x4fd050ee00000000, 0x859df94100000000, + 0xc3a69e2400000000, 0x5000dac500000000, 0x163bbda000000000, + 0xdc76140f00000000, 0x9a4d736a00000000, 0xbb3dec1600000000, + 0xfd068b7300000000, 0x374b22dc00000000, 0x717045b900000000, + 0xe2d6015800000000, 0xa4ed663d00000000, 0x6ea0cf9200000000, + 0x289ba8f700000000, 0x27100d7100000000, 0x612b6a1400000000, + 0xab66c3bb00000000, 0xed5da4de00000000, 0x7efbe03f00000000, + 0x38c0875a00000000, 0xf28d2ef500000000, 0xb4b6499000000000, + 0x95c6d6ec00000000, 0xd3fdb18900000000, 0x19b0182600000000, + 0x5f8b7f4300000000, 0xcc2d3ba200000000, 0x8a165cc700000000, + 0x405bf56800000000, 0x0660920d00000000, 0x02bbcb9100000000, + 0x4480acf400000000, 0x8ecd055b00000000, 0xc8f6623e00000000, + 0x5b5026df00000000, 0x1d6b41ba00000000, 0xd726e81500000000, + 0x911d8f7000000000, 0xb06d100c00000000, 0xf656776900000000, + 0x3c1bdec600000000, 0x7a20b9a300000000, 0xe986fd4200000000, + 0xafbd9a2700000000, 0x65f0338800000000, 0x23cb54ed00000000, + 0x3ae0095e00000000, 0x7cdb6e3b00000000, 0xb696c79400000000, + 0xf0ada0f100000000, 0x630be41000000000, 0x2530837500000000, + 0xef7d2ada00000000, 0xa9464dbf00000000, 0x8836d2c300000000, + 0xce0db5a600000000, 0x04401c0900000000, 0x427b7b6c00000000, + 0xd1dd3f8d00000000, 0x97e658e800000000, 0x5dabf14700000000, + 0x1b90962200000000, 0x1f4bcfbe00000000, 0x5970a8db00000000, + 0x933d017400000000, 0xd506661100000000, 0x46a022f000000000, + 0x009b459500000000, 0xcad6ec3a00000000, 0x8ced8b5f00000000, + 0xad9d142300000000, 0xeba6734600000000, 0x21ebdae900000000, + 0x67d0bd8c00000000, 0xf476f96d00000000, 0xb24d9e0800000000, + 0x780037a700000000, 0x3e3b50c200000000, 0x31b0f54400000000, + 0x778b922100000000, 0xbdc63b8e00000000, 0xfbfd5ceb00000000, + 0x685b180a00000000, 0x2e607f6f00000000, 0xe42dd6c000000000, + 0xa216b1a500000000, 0x83662ed900000000, 0xc55d49bc00000000, + 0x0f10e01300000000, 0x492b877600000000, 0xda8dc39700000000, + 0x9cb6a4f200000000, 0x56fb0d5d00000000, 0x10c06a3800000000, + 0x141b33a400000000, 0x522054c100000000, 0x986dfd6e00000000, + 0xde569a0b00000000, 0x4df0deea00000000, 0x0bcbb98f00000000, + 0xc186102000000000, 0x87bd774500000000, 0xa6cde83900000000, + 0xe0f68f5c00000000, 0x2abb26f300000000, 0x6c80419600000000, + 0xff26057700000000, 0xb91d621200000000, 0x7350cbbd00000000, + 0x356bacd800000000}, + {0x0000000000000000, 0x9e83da9f00000000, 0x7d01c4e400000000, + 0xe3821e7b00000000, 0xbb04f91200000000, 0x2587238d00000000, + 0xc6053df600000000, 0x5886e76900000000, 0x7609f22500000000, + 0xe88a28ba00000000, 0x0b0836c100000000, 0x958bec5e00000000, + 0xcd0d0b3700000000, 0x538ed1a800000000, 0xb00ccfd300000000, + 0x2e8f154c00000000, 0xec12e44b00000000, 0x72913ed400000000, + 0x911320af00000000, 0x0f90fa3000000000, 0x57161d5900000000, + 0xc995c7c600000000, 0x2a17d9bd00000000, 0xb494032200000000, + 0x9a1b166e00000000, 0x0498ccf100000000, 0xe71ad28a00000000, + 0x7999081500000000, 0x211fef7c00000000, 0xbf9c35e300000000, + 0x5c1e2b9800000000, 0xc29df10700000000, 0xd825c89700000000, + 0x46a6120800000000, 0xa5240c7300000000, 0x3ba7d6ec00000000, + 0x6321318500000000, 0xfda2eb1a00000000, 0x1e20f56100000000, + 0x80a32ffe00000000, 0xae2c3ab200000000, 0x30afe02d00000000, + 0xd32dfe5600000000, 0x4dae24c900000000, 0x1528c3a000000000, + 0x8bab193f00000000, 0x6829074400000000, 0xf6aadddb00000000, + 0x34372cdc00000000, 0xaab4f64300000000, 0x4936e83800000000, + 0xd7b532a700000000, 0x8f33d5ce00000000, 0x11b00f5100000000, + 0xf232112a00000000, 0x6cb1cbb500000000, 0x423edef900000000, + 0xdcbd046600000000, 0x3f3f1a1d00000000, 0xa1bcc08200000000, + 0xf93a27eb00000000, 0x67b9fd7400000000, 0x843be30f00000000, + 0x1ab8399000000000, 0xf14de1f400000000, 0x6fce3b6b00000000, + 0x8c4c251000000000, 0x12cfff8f00000000, 0x4a4918e600000000, + 0xd4cac27900000000, 0x3748dc0200000000, 0xa9cb069d00000000, + 0x874413d100000000, 0x19c7c94e00000000, 0xfa45d73500000000, + 0x64c60daa00000000, 0x3c40eac300000000, 0xa2c3305c00000000, + 0x41412e2700000000, 0xdfc2f4b800000000, 0x1d5f05bf00000000, + 0x83dcdf2000000000, 0x605ec15b00000000, 0xfedd1bc400000000, + 0xa65bfcad00000000, 0x38d8263200000000, 0xdb5a384900000000, + 0x45d9e2d600000000, 0x6b56f79a00000000, 0xf5d52d0500000000, + 0x1657337e00000000, 0x88d4e9e100000000, 0xd0520e8800000000, + 0x4ed1d41700000000, 0xad53ca6c00000000, 0x33d010f300000000, + 0x2968296300000000, 0xb7ebf3fc00000000, 0x5469ed8700000000, + 0xcaea371800000000, 0x926cd07100000000, 0x0cef0aee00000000, + 0xef6d149500000000, 0x71eece0a00000000, 0x5f61db4600000000, + 0xc1e201d900000000, 0x22601fa200000000, 0xbce3c53d00000000, + 0xe465225400000000, 0x7ae6f8cb00000000, 0x9964e6b000000000, + 0x07e73c2f00000000, 0xc57acd2800000000, 0x5bf917b700000000, + 0xb87b09cc00000000, 0x26f8d35300000000, 0x7e7e343a00000000, + 0xe0fdeea500000000, 0x037ff0de00000000, 0x9dfc2a4100000000, + 0xb3733f0d00000000, 0x2df0e59200000000, 0xce72fbe900000000, + 0x50f1217600000000, 0x0877c61f00000000, 0x96f41c8000000000, + 0x757602fb00000000, 0xebf5d86400000000, 0xa39db33200000000, + 0x3d1e69ad00000000, 0xde9c77d600000000, 0x401fad4900000000, + 0x18994a2000000000, 0x861a90bf00000000, 0x65988ec400000000, + 0xfb1b545b00000000, 0xd594411700000000, 0x4b179b8800000000, + 0xa89585f300000000, 0x36165f6c00000000, 0x6e90b80500000000, + 0xf013629a00000000, 0x13917ce100000000, 0x8d12a67e00000000, + 0x4f8f577900000000, 0xd10c8de600000000, 0x328e939d00000000, + 0xac0d490200000000, 0xf48bae6b00000000, 0x6a0874f400000000, + 0x898a6a8f00000000, 0x1709b01000000000, 0x3986a55c00000000, + 0xa7057fc300000000, 0x448761b800000000, 0xda04bb2700000000, + 0x82825c4e00000000, 0x1c0186d100000000, 0xff8398aa00000000, + 0x6100423500000000, 0x7bb87ba500000000, 0xe53ba13a00000000, + 0x06b9bf4100000000, 0x983a65de00000000, 0xc0bc82b700000000, + 0x5e3f582800000000, 0xbdbd465300000000, 0x233e9ccc00000000, + 0x0db1898000000000, 0x9332531f00000000, 0x70b04d6400000000, + 0xee3397fb00000000, 0xb6b5709200000000, 0x2836aa0d00000000, + 0xcbb4b47600000000, 0x55376ee900000000, 0x97aa9fee00000000, + 0x0929457100000000, 0xeaab5b0a00000000, 0x7428819500000000, + 0x2cae66fc00000000, 0xb22dbc6300000000, 0x51afa21800000000, + 0xcf2c788700000000, 0xe1a36dcb00000000, 0x7f20b75400000000, + 0x9ca2a92f00000000, 0x022173b000000000, 0x5aa794d900000000, + 0xc4244e4600000000, 0x27a6503d00000000, 0xb9258aa200000000, + 0x52d052c600000000, 0xcc53885900000000, 0x2fd1962200000000, + 0xb1524cbd00000000, 0xe9d4abd400000000, 0x7757714b00000000, + 0x94d56f3000000000, 0x0a56b5af00000000, 0x24d9a0e300000000, + 0xba5a7a7c00000000, 0x59d8640700000000, 0xc75bbe9800000000, + 0x9fdd59f100000000, 0x015e836e00000000, 0xe2dc9d1500000000, + 0x7c5f478a00000000, 0xbec2b68d00000000, 0x20416c1200000000, + 0xc3c3726900000000, 0x5d40a8f600000000, 0x05c64f9f00000000, + 0x9b45950000000000, 0x78c78b7b00000000, 0xe64451e400000000, + 0xc8cb44a800000000, 0x56489e3700000000, 0xb5ca804c00000000, + 0x2b495ad300000000, 0x73cfbdba00000000, 0xed4c672500000000, + 0x0ece795e00000000, 0x904da3c100000000, 0x8af59a5100000000, + 0x147640ce00000000, 0xf7f45eb500000000, 0x6977842a00000000, + 0x31f1634300000000, 0xaf72b9dc00000000, 0x4cf0a7a700000000, + 0xd2737d3800000000, 0xfcfc687400000000, 0x627fb2eb00000000, + 0x81fdac9000000000, 0x1f7e760f00000000, 0x47f8916600000000, + 0xd97b4bf900000000, 0x3af9558200000000, 0xa47a8f1d00000000, + 0x66e77e1a00000000, 0xf864a48500000000, 0x1be6bafe00000000, + 0x8565606100000000, 0xdde3870800000000, 0x43605d9700000000, + 0xa0e243ec00000000, 0x3e61997300000000, 0x10ee8c3f00000000, + 0x8e6d56a000000000, 0x6def48db00000000, 0xf36c924400000000, + 0xabea752d00000000, 0x3569afb200000000, 0xd6ebb1c900000000, + 0x48686b5600000000}, + {0x0000000000000000, 0xc064281700000000, 0x80c9502e00000000, + 0x40ad783900000000, 0x0093a15c00000000, 0xc0f7894b00000000, + 0x805af17200000000, 0x403ed96500000000, 0x002643b900000000, + 0xc0426bae00000000, 0x80ef139700000000, 0x408b3b8000000000, + 0x00b5e2e500000000, 0xc0d1caf200000000, 0x807cb2cb00000000, + 0x40189adc00000000, 0x414af7a900000000, 0x812edfbe00000000, + 0xc183a78700000000, 0x01e78f9000000000, 0x41d956f500000000, + 0x81bd7ee200000000, 0xc11006db00000000, 0x01742ecc00000000, + 0x416cb41000000000, 0x81089c0700000000, 0xc1a5e43e00000000, + 0x01c1cc2900000000, 0x41ff154c00000000, 0x819b3d5b00000000, + 0xc136456200000000, 0x01526d7500000000, 0xc3929f8800000000, + 0x03f6b79f00000000, 0x435bcfa600000000, 0x833fe7b100000000, + 0xc3013ed400000000, 0x036516c300000000, 0x43c86efa00000000, + 0x83ac46ed00000000, 0xc3b4dc3100000000, 0x03d0f42600000000, + 0x437d8c1f00000000, 0x8319a40800000000, 0xc3277d6d00000000, + 0x0343557a00000000, 0x43ee2d4300000000, 0x838a055400000000, + 0x82d8682100000000, 0x42bc403600000000, 0x0211380f00000000, + 0xc275101800000000, 0x824bc97d00000000, 0x422fe16a00000000, + 0x0282995300000000, 0xc2e6b14400000000, 0x82fe2b9800000000, + 0x429a038f00000000, 0x02377bb600000000, 0xc25353a100000000, + 0x826d8ac400000000, 0x4209a2d300000000, 0x02a4daea00000000, + 0xc2c0f2fd00000000, 0xc7234eca00000000, 0x074766dd00000000, + 0x47ea1ee400000000, 0x878e36f300000000, 0xc7b0ef9600000000, + 0x07d4c78100000000, 0x4779bfb800000000, 0x871d97af00000000, + 0xc7050d7300000000, 0x0761256400000000, 0x47cc5d5d00000000, + 0x87a8754a00000000, 0xc796ac2f00000000, 0x07f2843800000000, + 0x475ffc0100000000, 0x873bd41600000000, 0x8669b96300000000, + 0x460d917400000000, 0x06a0e94d00000000, 0xc6c4c15a00000000, + 0x86fa183f00000000, 0x469e302800000000, 0x0633481100000000, + 0xc657600600000000, 0x864ffada00000000, 0x462bd2cd00000000, + 0x0686aaf400000000, 0xc6e282e300000000, 0x86dc5b8600000000, + 0x46b8739100000000, 0x06150ba800000000, 0xc67123bf00000000, + 0x04b1d14200000000, 0xc4d5f95500000000, 0x8478816c00000000, + 0x441ca97b00000000, 0x0422701e00000000, 0xc446580900000000, + 0x84eb203000000000, 0x448f082700000000, 0x049792fb00000000, + 0xc4f3baec00000000, 0x845ec2d500000000, 0x443aeac200000000, + 0x040433a700000000, 0xc4601bb000000000, 0x84cd638900000000, + 0x44a94b9e00000000, 0x45fb26eb00000000, 0x859f0efc00000000, + 0xc53276c500000000, 0x05565ed200000000, 0x456887b700000000, + 0x850cafa000000000, 0xc5a1d79900000000, 0x05c5ff8e00000000, + 0x45dd655200000000, 0x85b94d4500000000, 0xc514357c00000000, + 0x05701d6b00000000, 0x454ec40e00000000, 0x852aec1900000000, + 0xc587942000000000, 0x05e3bc3700000000, 0xcf41ed4f00000000, + 0x0f25c55800000000, 0x4f88bd6100000000, 0x8fec957600000000, + 0xcfd24c1300000000, 0x0fb6640400000000, 0x4f1b1c3d00000000, + 0x8f7f342a00000000, 0xcf67aef600000000, 0x0f0386e100000000, + 0x4faefed800000000, 0x8fcad6cf00000000, 0xcff40faa00000000, + 0x0f9027bd00000000, 0x4f3d5f8400000000, 0x8f59779300000000, + 0x8e0b1ae600000000, 0x4e6f32f100000000, 0x0ec24ac800000000, + 0xcea662df00000000, 0x8e98bbba00000000, 0x4efc93ad00000000, + 0x0e51eb9400000000, 0xce35c38300000000, 0x8e2d595f00000000, + 0x4e49714800000000, 0x0ee4097100000000, 0xce80216600000000, + 0x8ebef80300000000, 0x4edad01400000000, 0x0e77a82d00000000, + 0xce13803a00000000, 0x0cd372c700000000, 0xccb75ad000000000, + 0x8c1a22e900000000, 0x4c7e0afe00000000, 0x0c40d39b00000000, + 0xcc24fb8c00000000, 0x8c8983b500000000, 0x4cedaba200000000, + 0x0cf5317e00000000, 0xcc91196900000000, 0x8c3c615000000000, + 0x4c58494700000000, 0x0c66902200000000, 0xcc02b83500000000, + 0x8cafc00c00000000, 0x4ccbe81b00000000, 0x4d99856e00000000, + 0x8dfdad7900000000, 0xcd50d54000000000, 0x0d34fd5700000000, + 0x4d0a243200000000, 0x8d6e0c2500000000, 0xcdc3741c00000000, + 0x0da75c0b00000000, 0x4dbfc6d700000000, 0x8ddbeec000000000, + 0xcd7696f900000000, 0x0d12beee00000000, 0x4d2c678b00000000, + 0x8d484f9c00000000, 0xcde537a500000000, 0x0d811fb200000000, + 0x0862a38500000000, 0xc8068b9200000000, 0x88abf3ab00000000, + 0x48cfdbbc00000000, 0x08f102d900000000, 0xc8952ace00000000, + 0x883852f700000000, 0x485c7ae000000000, 0x0844e03c00000000, + 0xc820c82b00000000, 0x888db01200000000, 0x48e9980500000000, + 0x08d7416000000000, 0xc8b3697700000000, 0x881e114e00000000, + 0x487a395900000000, 0x4928542c00000000, 0x894c7c3b00000000, + 0xc9e1040200000000, 0x09852c1500000000, 0x49bbf57000000000, + 0x89dfdd6700000000, 0xc972a55e00000000, 0x09168d4900000000, + 0x490e179500000000, 0x896a3f8200000000, 0xc9c747bb00000000, + 0x09a36fac00000000, 0x499db6c900000000, 0x89f99ede00000000, + 0xc954e6e700000000, 0x0930cef000000000, 0xcbf03c0d00000000, + 0x0b94141a00000000, 0x4b396c2300000000, 0x8b5d443400000000, + 0xcb639d5100000000, 0x0b07b54600000000, 0x4baacd7f00000000, + 0x8bcee56800000000, 0xcbd67fb400000000, 0x0bb257a300000000, + 0x4b1f2f9a00000000, 0x8b7b078d00000000, 0xcb45dee800000000, + 0x0b21f6ff00000000, 0x4b8c8ec600000000, 0x8be8a6d100000000, + 0x8abacba400000000, 0x4adee3b300000000, 0x0a739b8a00000000, + 0xca17b39d00000000, 0x8a296af800000000, 0x4a4d42ef00000000, + 0x0ae03ad600000000, 0xca8412c100000000, 0x8a9c881d00000000, + 0x4af8a00a00000000, 0x0a55d83300000000, 0xca31f02400000000, + 0x8a0f294100000000, 0x4a6b015600000000, 0x0ac6796f00000000, + 0xcaa2517800000000}, + {0x0000000000000000, 0xd4ea739b00000000, 0xe9d396ed00000000, + 0x3d39e57600000000, 0x93a15c0000000000, 0x474b2f9b00000000, + 0x7a72caed00000000, 0xae98b97600000000, 0x2643b90000000000, + 0xf2a9ca9b00000000, 0xcf902fed00000000, 0x1b7a5c7600000000, + 0xb5e2e50000000000, 0x6108969b00000000, 0x5c3173ed00000000, + 0x88db007600000000, 0x4c86720100000000, 0x986c019a00000000, + 0xa555e4ec00000000, 0x71bf977700000000, 0xdf272e0100000000, + 0x0bcd5d9a00000000, 0x36f4b8ec00000000, 0xe21ecb7700000000, + 0x6ac5cb0100000000, 0xbe2fb89a00000000, 0x83165dec00000000, + 0x57fc2e7700000000, 0xf964970100000000, 0x2d8ee49a00000000, + 0x10b701ec00000000, 0xc45d727700000000, 0x980ce50200000000, + 0x4ce6969900000000, 0x71df73ef00000000, 0xa535007400000000, + 0x0badb90200000000, 0xdf47ca9900000000, 0xe27e2fef00000000, + 0x36945c7400000000, 0xbe4f5c0200000000, 0x6aa52f9900000000, + 0x579ccaef00000000, 0x8376b97400000000, 0x2dee000200000000, + 0xf904739900000000, 0xc43d96ef00000000, 0x10d7e57400000000, + 0xd48a970300000000, 0x0060e49800000000, 0x3d5901ee00000000, + 0xe9b3727500000000, 0x472bcb0300000000, 0x93c1b89800000000, + 0xaef85dee00000000, 0x7a122e7500000000, 0xf2c92e0300000000, + 0x26235d9800000000, 0x1b1ab8ee00000000, 0xcff0cb7500000000, + 0x6168720300000000, 0xb582019800000000, 0x88bbe4ee00000000, + 0x5c51977500000000, 0x3019ca0500000000, 0xe4f3b99e00000000, + 0xd9ca5ce800000000, 0x0d202f7300000000, 0xa3b8960500000000, + 0x7752e59e00000000, 0x4a6b00e800000000, 0x9e81737300000000, + 0x165a730500000000, 0xc2b0009e00000000, 0xff89e5e800000000, + 0x2b63967300000000, 0x85fb2f0500000000, 0x51115c9e00000000, + 0x6c28b9e800000000, 0xb8c2ca7300000000, 0x7c9fb80400000000, + 0xa875cb9f00000000, 0x954c2ee900000000, 0x41a65d7200000000, + 0xef3ee40400000000, 0x3bd4979f00000000, 0x06ed72e900000000, + 0xd207017200000000, 0x5adc010400000000, 0x8e36729f00000000, + 0xb30f97e900000000, 0x67e5e47200000000, 0xc97d5d0400000000, + 0x1d972e9f00000000, 0x20aecbe900000000, 0xf444b87200000000, + 0xa8152f0700000000, 0x7cff5c9c00000000, 0x41c6b9ea00000000, + 0x952cca7100000000, 0x3bb4730700000000, 0xef5e009c00000000, + 0xd267e5ea00000000, 0x068d967100000000, 0x8e56960700000000, + 0x5abce59c00000000, 0x678500ea00000000, 0xb36f737100000000, + 0x1df7ca0700000000, 0xc91db99c00000000, 0xf4245cea00000000, + 0x20ce2f7100000000, 0xe4935d0600000000, 0x30792e9d00000000, + 0x0d40cbeb00000000, 0xd9aab87000000000, 0x7732010600000000, + 0xa3d8729d00000000, 0x9ee197eb00000000, 0x4a0be47000000000, + 0xc2d0e40600000000, 0x163a979d00000000, 0x2b0372eb00000000, + 0xffe9017000000000, 0x5171b80600000000, 0x859bcb9d00000000, + 0xb8a22eeb00000000, 0x6c485d7000000000, 0x6032940b00000000, + 0xb4d8e79000000000, 0x89e102e600000000, 0x5d0b717d00000000, + 0xf393c80b00000000, 0x2779bb9000000000, 0x1a405ee600000000, + 0xceaa2d7d00000000, 0x46712d0b00000000, 0x929b5e9000000000, + 0xafa2bbe600000000, 0x7b48c87d00000000, 0xd5d0710b00000000, + 0x013a029000000000, 0x3c03e7e600000000, 0xe8e9947d00000000, + 0x2cb4e60a00000000, 0xf85e959100000000, 0xc56770e700000000, + 0x118d037c00000000, 0xbf15ba0a00000000, 0x6bffc99100000000, + 0x56c62ce700000000, 0x822c5f7c00000000, 0x0af75f0a00000000, + 0xde1d2c9100000000, 0xe324c9e700000000, 0x37ceba7c00000000, + 0x9956030a00000000, 0x4dbc709100000000, 0x708595e700000000, + 0xa46fe67c00000000, 0xf83e710900000000, 0x2cd4029200000000, + 0x11ede7e400000000, 0xc507947f00000000, 0x6b9f2d0900000000, + 0xbf755e9200000000, 0x824cbbe400000000, 0x56a6c87f00000000, + 0xde7dc80900000000, 0x0a97bb9200000000, 0x37ae5ee400000000, + 0xe3442d7f00000000, 0x4ddc940900000000, 0x9936e79200000000, + 0xa40f02e400000000, 0x70e5717f00000000, 0xb4b8030800000000, + 0x6052709300000000, 0x5d6b95e500000000, 0x8981e67e00000000, + 0x27195f0800000000, 0xf3f32c9300000000, 0xcecac9e500000000, + 0x1a20ba7e00000000, 0x92fbba0800000000, 0x4611c99300000000, + 0x7b282ce500000000, 0xafc25f7e00000000, 0x015ae60800000000, + 0xd5b0959300000000, 0xe88970e500000000, 0x3c63037e00000000, + 0x502b5e0e00000000, 0x84c12d9500000000, 0xb9f8c8e300000000, + 0x6d12bb7800000000, 0xc38a020e00000000, 0x1760719500000000, + 0x2a5994e300000000, 0xfeb3e77800000000, 0x7668e70e00000000, + 0xa282949500000000, 0x9fbb71e300000000, 0x4b51027800000000, + 0xe5c9bb0e00000000, 0x3123c89500000000, 0x0c1a2de300000000, + 0xd8f05e7800000000, 0x1cad2c0f00000000, 0xc8475f9400000000, + 0xf57ebae200000000, 0x2194c97900000000, 0x8f0c700f00000000, + 0x5be6039400000000, 0x66dfe6e200000000, 0xb235957900000000, + 0x3aee950f00000000, 0xee04e69400000000, 0xd33d03e200000000, + 0x07d7707900000000, 0xa94fc90f00000000, 0x7da5ba9400000000, + 0x409c5fe200000000, 0x94762c7900000000, 0xc827bb0c00000000, + 0x1ccdc89700000000, 0x21f42de100000000, 0xf51e5e7a00000000, + 0x5b86e70c00000000, 0x8f6c949700000000, 0xb25571e100000000, + 0x66bf027a00000000, 0xee64020c00000000, 0x3a8e719700000000, + 0x07b794e100000000, 0xd35de77a00000000, 0x7dc55e0c00000000, + 0xa92f2d9700000000, 0x9416c8e100000000, 0x40fcbb7a00000000, + 0x84a1c90d00000000, 0x504bba9600000000, 0x6d725fe000000000, + 0xb9982c7b00000000, 0x1700950d00000000, 0xc3eae69600000000, + 0xfed303e000000000, 0x2a39707b00000000, 0xa2e2700d00000000, + 0x7608039600000000, 0x4b31e6e000000000, 0x9fdb957b00000000, + 0x31432c0d00000000, 0xe5a95f9600000000, 0xd890bae000000000, + 0x0c7ac97b00000000}, + {0x0000000000000000, 0x2765258100000000, 0x0fcc3bd900000000, + 0x28a91e5800000000, 0x5f9e066900000000, 0x78fb23e800000000, + 0x50523db000000000, 0x7737183100000000, 0xbe3c0dd200000000, + 0x9959285300000000, 0xb1f0360b00000000, 0x9695138a00000000, + 0xe1a20bbb00000000, 0xc6c72e3a00000000, 0xee6e306200000000, + 0xc90b15e300000000, 0x3d7f6b7f00000000, 0x1a1a4efe00000000, + 0x32b350a600000000, 0x15d6752700000000, 0x62e16d1600000000, + 0x4584489700000000, 0x6d2d56cf00000000, 0x4a48734e00000000, + 0x834366ad00000000, 0xa426432c00000000, 0x8c8f5d7400000000, + 0xabea78f500000000, 0xdcdd60c400000000, 0xfbb8454500000000, + 0xd3115b1d00000000, 0xf4747e9c00000000, 0x7afed6fe00000000, + 0x5d9bf37f00000000, 0x7532ed2700000000, 0x5257c8a600000000, + 0x2560d09700000000, 0x0205f51600000000, 0x2aaceb4e00000000, + 0x0dc9cecf00000000, 0xc4c2db2c00000000, 0xe3a7fead00000000, + 0xcb0ee0f500000000, 0xec6bc57400000000, 0x9b5cdd4500000000, + 0xbc39f8c400000000, 0x9490e69c00000000, 0xb3f5c31d00000000, + 0x4781bd8100000000, 0x60e4980000000000, 0x484d865800000000, + 0x6f28a3d900000000, 0x181fbbe800000000, 0x3f7a9e6900000000, + 0x17d3803100000000, 0x30b6a5b000000000, 0xf9bdb05300000000, + 0xded895d200000000, 0xf6718b8a00000000, 0xd114ae0b00000000, + 0xa623b63a00000000, 0x814693bb00000000, 0xa9ef8de300000000, + 0x8e8aa86200000000, 0xb5fadc2600000000, 0x929ff9a700000000, + 0xba36e7ff00000000, 0x9d53c27e00000000, 0xea64da4f00000000, + 0xcd01ffce00000000, 0xe5a8e19600000000, 0xc2cdc41700000000, + 0x0bc6d1f400000000, 0x2ca3f47500000000, 0x040aea2d00000000, + 0x236fcfac00000000, 0x5458d79d00000000, 0x733df21c00000000, + 0x5b94ec4400000000, 0x7cf1c9c500000000, 0x8885b75900000000, + 0xafe092d800000000, 0x87498c8000000000, 0xa02ca90100000000, + 0xd71bb13000000000, 0xf07e94b100000000, 0xd8d78ae900000000, + 0xffb2af6800000000, 0x36b9ba8b00000000, 0x11dc9f0a00000000, + 0x3975815200000000, 0x1e10a4d300000000, 0x6927bce200000000, + 0x4e42996300000000, 0x66eb873b00000000, 0x418ea2ba00000000, + 0xcf040ad800000000, 0xe8612f5900000000, 0xc0c8310100000000, + 0xe7ad148000000000, 0x909a0cb100000000, 0xb7ff293000000000, + 0x9f56376800000000, 0xb83312e900000000, 0x7138070a00000000, + 0x565d228b00000000, 0x7ef43cd300000000, 0x5991195200000000, + 0x2ea6016300000000, 0x09c324e200000000, 0x216a3aba00000000, + 0x060f1f3b00000000, 0xf27b61a700000000, 0xd51e442600000000, + 0xfdb75a7e00000000, 0xdad27fff00000000, 0xade567ce00000000, + 0x8a80424f00000000, 0xa2295c1700000000, 0x854c799600000000, + 0x4c476c7500000000, 0x6b2249f400000000, 0x438b57ac00000000, + 0x64ee722d00000000, 0x13d96a1c00000000, 0x34bc4f9d00000000, + 0x1c1551c500000000, 0x3b70744400000000, 0x6af5b94d00000000, + 0x4d909ccc00000000, 0x6539829400000000, 0x425ca71500000000, + 0x356bbf2400000000, 0x120e9aa500000000, 0x3aa784fd00000000, + 0x1dc2a17c00000000, 0xd4c9b49f00000000, 0xf3ac911e00000000, + 0xdb058f4600000000, 0xfc60aac700000000, 0x8b57b2f600000000, + 0xac32977700000000, 0x849b892f00000000, 0xa3feacae00000000, + 0x578ad23200000000, 0x70eff7b300000000, 0x5846e9eb00000000, + 0x7f23cc6a00000000, 0x0814d45b00000000, 0x2f71f1da00000000, + 0x07d8ef8200000000, 0x20bdca0300000000, 0xe9b6dfe000000000, + 0xced3fa6100000000, 0xe67ae43900000000, 0xc11fc1b800000000, + 0xb628d98900000000, 0x914dfc0800000000, 0xb9e4e25000000000, + 0x9e81c7d100000000, 0x100b6fb300000000, 0x376e4a3200000000, + 0x1fc7546a00000000, 0x38a271eb00000000, 0x4f9569da00000000, + 0x68f04c5b00000000, 0x4059520300000000, 0x673c778200000000, + 0xae37626100000000, 0x895247e000000000, 0xa1fb59b800000000, + 0x869e7c3900000000, 0xf1a9640800000000, 0xd6cc418900000000, + 0xfe655fd100000000, 0xd9007a5000000000, 0x2d7404cc00000000, + 0x0a11214d00000000, 0x22b83f1500000000, 0x05dd1a9400000000, + 0x72ea02a500000000, 0x558f272400000000, 0x7d26397c00000000, + 0x5a431cfd00000000, 0x9348091e00000000, 0xb42d2c9f00000000, + 0x9c8432c700000000, 0xbbe1174600000000, 0xccd60f7700000000, + 0xebb32af600000000, 0xc31a34ae00000000, 0xe47f112f00000000, + 0xdf0f656b00000000, 0xf86a40ea00000000, 0xd0c35eb200000000, + 0xf7a67b3300000000, 0x8091630200000000, 0xa7f4468300000000, + 0x8f5d58db00000000, 0xa8387d5a00000000, 0x613368b900000000, + 0x46564d3800000000, 0x6eff536000000000, 0x499a76e100000000, + 0x3ead6ed000000000, 0x19c84b5100000000, 0x3161550900000000, + 0x1604708800000000, 0xe2700e1400000000, 0xc5152b9500000000, + 0xedbc35cd00000000, 0xcad9104c00000000, 0xbdee087d00000000, + 0x9a8b2dfc00000000, 0xb22233a400000000, 0x9547162500000000, + 0x5c4c03c600000000, 0x7b29264700000000, 0x5380381f00000000, + 0x74e51d9e00000000, 0x03d205af00000000, 0x24b7202e00000000, + 0x0c1e3e7600000000, 0x2b7b1bf700000000, 0xa5f1b39500000000, + 0x8294961400000000, 0xaa3d884c00000000, 0x8d58adcd00000000, + 0xfa6fb5fc00000000, 0xdd0a907d00000000, 0xf5a38e2500000000, + 0xd2c6aba400000000, 0x1bcdbe4700000000, 0x3ca89bc600000000, + 0x1401859e00000000, 0x3364a01f00000000, 0x4453b82e00000000, + 0x63369daf00000000, 0x4b9f83f700000000, 0x6cfaa67600000000, + 0x988ed8ea00000000, 0xbfebfd6b00000000, 0x9742e33300000000, + 0xb027c6b200000000, 0xc710de8300000000, 0xe075fb0200000000, + 0xc8dce55a00000000, 0xefb9c0db00000000, 0x26b2d53800000000, + 0x01d7f0b900000000, 0x297eeee100000000, 0x0e1bcb6000000000, + 0x792cd35100000000, 0x5e49f6d000000000, 0x76e0e88800000000, + 0x5185cd0900000000}}; #else /* W == 4 */ local const z_crc_t FAR crc_braid_table[][256] = { - {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, - 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91, - 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e, - 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c, - 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02, - 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12, - 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567, - 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, - 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679, - 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b, - 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4, - 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, - 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0, - 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0, - 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91, - 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881, - 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173, - 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, - 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, - 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8, - 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6, - 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6, - 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b, - 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b, - 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, - 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, - 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00, - 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee, - 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c, - 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c, - 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d, - 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, - 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, - 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89, - 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706, - 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, - 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a, - 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a, - 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f, - 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f, - 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591, - 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983, - 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, - 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, - 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8, - 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8, - 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89, - 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99, - 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b, - 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, - 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a, - 0x36197165}, - {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, - 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85, - 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06, - 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca, - 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e, - 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc, - 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616, - 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, - 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10, - 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc, - 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f, - 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, - 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef, - 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad, - 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b, - 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29, - 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6, - 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, - 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, - 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039, - 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d, - 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f, - 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32, - 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770, - 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, - 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, - 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc, - 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db, - 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154, - 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16, - 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0, - 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, - 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca, - 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd, - 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e, - 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, - 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6, - 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384, - 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, - 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3, - 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7, - 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b, - 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, - 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff, - 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7, - 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5, - 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23, - 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761, - 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee, - 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, - 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, - 0x1a3b93aa}, - {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, - 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca, - 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3, - 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb, - 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c, - 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58, - 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed, - 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, - 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e, - 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906, - 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f, - 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, - 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0, - 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4, - 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769, - 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d, - 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632, - 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, - 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, - 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73, - 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484, - 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0, - 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5, - 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1, - 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, - 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, - 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946, - 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6, - 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9, - 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad, - 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820, - 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, - 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, - 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b, - 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62, - 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, - 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, - 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089, - 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, - 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8, - 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f, - 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477, - 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, - 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be, - 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71, - 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635, - 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8, - 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc, - 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3, - 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, - 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a, - 0xe147d714}, - {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, - 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b, - 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92, - 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4, - 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069, - 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526, - 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25, - 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, - 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7, - 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491, - 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958, - 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, - 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307, - 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648, - 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999, - 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6, - 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a, - 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, - 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, - 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61, - 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc, - 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3, - 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53, - 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c, - 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, - 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, - 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5, - 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92, - 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e, - 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771, - 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0, - 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, - 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0, - 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7, - 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e, - 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, - 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285, - 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca, - 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce, - 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81, - 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c, - 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a, - 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, - 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4, - 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb, - 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4, - 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75, - 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a, - 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296, - 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, - 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808, - 0x494f0c4b}}; + {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, 0x98a37710, + 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91, 0xea37e861, 0x7192a40e, + 0x050a4d81, 0x9eaf01ee, 0xe931d31e, 0x72949f71, 0x0c18edfc, 0x97bda193, + 0xe0237363, 0x7b863f0c, 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, + 0x0a149b02, 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12, + 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567, 0x6faf0908, + 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, 0x1e3dad06, 0x8598e169, + 0xf2063399, 0x69a37ff6, 0x1d3b9679, 0x869eda16, 0xf10008e6, 0x6aa54489, + 0x14293604, 0x8f8c7a6b, 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, + 0xfb1493e4, 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, + 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0, 0xabc6fb9f, + 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0, 0xdf5e1210, 0x44fb5e7f, + 0x366fc10e, 0xadca8d61, 0xda545f91, 0x41f113fe, 0x3569fa71, 0xaeccb61e, + 0xd95264ee, 0x42f72881, 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, + 0x3f7d6173, 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, + 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, 0x4eefc57d, + 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8, 0x2b545777, 0xb0f11b18, + 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6, 0xb5fb5699, 0xc2658469, 0x59c0c806, + 0x2d582189, 0xb6fd6de6, 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, + 0xc8711f6b, 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b, + 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, 0xbae5801a, + 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, 0x8cfcf17f, 0x1759bd10, + 0x63c1549f, 0xf86418f0, 0x8ffaca00, 0x145f866f, 0x66cb191e, 0xfd6e5571, + 0x8af08781, 0x1155cbee, 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, + 0x6cdf821c, 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c, + 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d, 0x1d4d2612, + 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, 0x78f6b418, 0xe353f877, + 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, 0xe055c308, 0x97cb11f8, 0x0c6e5d97, + 0x7efac2e6, 0xe55f8e89, 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, + 0x91c76706, 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, + 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a, 0xe9476375, + 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a, 0x9ddf8afa, 0x067ac695, + 0x50a4d810, 0xcb01947f, 0xbc9f468f, 0x273a0ae0, 0x53a2e36f, 0xc807af00, + 0xbf997df0, 0x243c319f, 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, + 0x55ae9591, 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983, + 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, 0x2824dc63, + 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, 0x59b6786d, 0xc2133402, + 0xb58de6f2, 0x2e28aa9d, 0x489503e8, 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, + 0x4b933897, 0xd03674f8, 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, + 0xa2a2eb89, 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99, + 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b, 0xdc2e9904, + 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, 0xaeba0675, 0x351f4a1a, + 0x4187a395, 0xda22effa, 0xadbc3d0a, 0x36197165}, + {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, 0x7157ac42, + 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85, 0xe2af5884, 0x23218744, + 0x0a1a92c7, 0xcb944d07, 0x52762b06, 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, + 0xf69a7d0a, 0x3714a2ca, 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, + 0x1435258e, 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc, + 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616, 0x1f7ee9d6, + 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, 0x3c5f6e92, 0xfdd1b152, + 0x6433d753, 0xa5bd0893, 0x8c861d10, 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, + 0x286a4b1c, 0xe9e494dc, 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, + 0xc0df815f, 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, + 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef, 0x17c6c62f, + 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad, 0x3efdd3ac, 0xff730c6c, + 0x6c8bf8aa, 0xad05276a, 0x34e7416b, 0xf5699eab, 0xdc528b28, 0x1ddc54e8, + 0x843e32e9, 0x45b0ed29, 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, + 0xc867aea6, 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, + 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, 0xeb4629e2, + 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039, 0xe00de5ba, 0x21833a7a, + 0xb8615c7b, 0x79ef83bb, 0xea17777d, 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, + 0x5ace04ff, 0x9b40db3f, 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, + 0xa64eeb32, 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770, + 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, 0x35b61ff4, + 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, 0x2f8d8c5e, 0xee03539e, + 0xc738461d, 0x06b699dd, 0x9f54ffdc, 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, + 0x954e6d1b, 0x54c0b2db, 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, + 0xd917f154, 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16, + 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0, 0xfa367610, + 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, 0xf17dba48, 0x30f36588, + 0xa9110389, 0x689fdc49, 0x41a4c9ca, 0x802a160a, 0x19c8700b, 0xd846afcb, + 0x4bbe5b0d, 0x8a3084cd, 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, + 0xa30b914e, 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, + 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6, 0x24c64006, + 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384, 0x0dfd5585, 0xcc738a45, + 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, 0x384b4a71, 0x11705ff2, 0xd0fe8032, + 0x491ce633, 0x889239f3, 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, + 0xabb3beb7, 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b, + 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, 0x2664fd38, + 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff, 0x05457a7c, 0xc4cba5bc, + 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7, 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, + 0x97ecd025, 0x56620fe5, 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, + 0xc59afb23, 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761, + 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee, 0xf894cb2e, + 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, 0x6b6c3fe8, 0xaae2e028, + 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, 0x1a3b93aa}, + {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, 0xe629cb44, + 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca, 0x172290c9, 0xf8e0fbf7, + 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3, 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, + 0x235b51d5, 0xcc993aeb, 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, + 0x3479c11c, 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58, + 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed, 0xa46ab8d3, + 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, 0x5c8a4324, 0xb348281a, + 0x587f9319, 0xb7bdf827, 0x5561e35e, 0xbaa38860, 0x51943363, 0xbe56585d, + 0x68f38238, 0x8731e906, 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, + 0x65edf27f, 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, + 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0, 0x71786c9e, + 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4, 0x93a477e7, 0x7c661cd9, + 0x8d6d4754, 0x62af2c6a, 0x89989769, 0x665afc57, 0x8486e72e, 0x6b448c10, + 0x80733713, 0x6fb15c2d, 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, + 0xb0ff2632, 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, + 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, 0x481fddc5, + 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73, 0xd80ca40a, 0x37cecf34, + 0xdcf97437, 0x333b1f09, 0xc2304484, 0x2df22fba, 0xc6c594b9, 0x2907ff87, + 0xcbdbe4fe, 0x24198fc0, 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, + 0xf2bc55a5, 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1, + 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, 0x03b70e28, + 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, 0xe2f0d93c, 0x0d32b202, + 0xefeea97b, 0x002cc245, 0xeb1b7946, 0x04d91278, 0xf5d249f5, 0x1a1022cb, + 0xf12799c8, 0x1ee5f2f6, 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, + 0xc1ab88e9, 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad, + 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820, 0x394b731e, + 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, 0xa9580ad1, 0x469a61ef, + 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, 0x4f71c195, 0xa4467a96, 0x4b8411a8, + 0xba8f4a25, 0x554d211b, 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, + 0xb7913a62, 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, + 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, 0x72e3a0f3, + 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089, 0x903fbb8a, 0x7ffdd0b4, + 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, + 0x75a17ee6, 0x9a6315d8, 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, + 0x6283ee2f, 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477, + 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, 0xbdcd9430, + 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be, 0x452d6fc7, 0xaaef04f9, + 0x41d8bffa, 0xae1ad4c4, 0x37e20d71, 0xd820664f, 0x3317dd4c, 0xdcd5b672, + 0x3e09ad0b, 0xd1cbc635, 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, + 0x20c09db8, 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc, + 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3, 0xf66547dd, + 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, 0x076e1c50, 0xe8ac776e, + 0x0a706c17, 0xe5b20729, 0x0e85bc2a, 0xe147d714}, + {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, 0x4a97454f, + 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b, 0x952e8a9e, 0x82559edd, + 0xe634f314, 0xf14fe757, 0xc8c2db92, 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, + 0x82366af7, 0x954d7eb4, 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, + 0x1718e069, 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526, + 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25, 0xbb7cbe66, + 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, 0x392920bb, 0x2e5234f8, + 0x17df083d, 0x00a41c7e, 0x64c571b7, 0x73be65f4, 0x4a335931, 0x5d484d72, + 0x2e31c0d2, 0x394ad491, 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, + 0x5d2bb958, 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, + 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307, 0xc9e91744, + 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648, 0xad887a8d, 0xbaf36ece, + 0x654aa11f, 0x7231b55c, 0x4bbc8999, 0x5cc79dda, 0x38a6f013, 0x2fdde450, + 0x1650d895, 0x012bccd6, 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, + 0x2fbe107a, 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, + 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, 0xadeb8ea7, + 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61, 0x018fd0a8, 0x16f4c4eb, + 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc, 0xf0c037ff, 0xc94d0b3a, 0xde361f79, + 0xba5772b0, 0xad2c66f3, 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, + 0xde55eb53, 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c, + 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, 0x01ec2482, + 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, 0x48a328c9, 0x5fd83c8a, + 0x3bb95143, 0x2cc24500, 0x154f79c5, 0x02346d86, 0xdd8da257, 0xcaf6b614, + 0xf37b8ad1, 0xe4009e92, 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, + 0xca95423e, 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771, + 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0, 0x48c0dce3, + 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, 0xe4a482ec, 0xf3df96af, + 0xca52aa6a, 0xdd29be29, 0xb948d3e0, 0xae33c7a3, 0x97befb66, 0x80c5ef25, + 0x5f7c20f4, 0x480734b7, 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, + 0x2c66597e, 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, + 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285, 0xe4c776c6, + 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca, 0x80a61b0f, 0x97dd0f4c, + 0xb8c70348, 0xafbc170b, 0x96312bce, 0x814a3f8d, 0xe52b5244, 0xf2504607, + 0xcbdd7ac2, 0xdca66e81, 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, + 0x5ef3f05c, 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a, + 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, 0x70662cf0, + 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4, 0xf233b22d, 0xe548a66e, + 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb, 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, + 0x67dad0e7, 0x70a1c4a4, 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, + 0xaf180b75, 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a, + 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296, 0xdc6186d5, + 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, 0x03d84904, 0x14a35d47, + 0x70c2308e, 0x67b924cd, 0x5e341808, 0x494f0c4b}}; local const z_word_t FAR crc_braid_big_table[][256] = { - {0x00000000, 0x43147b17, 0x8628f62e, 0xc53c8d39, 0x0c51ec5d, - 0x4f45974a, 0x8a791a73, 0xc96d6164, 0x18a2d8bb, 0x5bb6a3ac, - 0x9e8a2e95, 0xdd9e5582, 0x14f334e6, 0x57e74ff1, 0x92dbc2c8, - 0xd1cfb9df, 0x7142c0ac, 0x3256bbbb, 0xf76a3682, 0xb47e4d95, - 0x7d132cf1, 0x3e0757e6, 0xfb3bdadf, 0xb82fa1c8, 0x69e01817, - 0x2af46300, 0xefc8ee39, 0xacdc952e, 0x65b1f44a, 0x26a58f5d, - 0xe3990264, 0xa08d7973, 0xa382f182, 0xe0968a95, 0x25aa07ac, - 0x66be7cbb, 0xafd31ddf, 0xecc766c8, 0x29fbebf1, 0x6aef90e6, - 0xbb202939, 0xf834522e, 0x3d08df17, 0x7e1ca400, 0xb771c564, - 0xf465be73, 0x3159334a, 0x724d485d, 0xd2c0312e, 0x91d44a39, - 0x54e8c700, 0x17fcbc17, 0xde91dd73, 0x9d85a664, 0x58b92b5d, - 0x1bad504a, 0xca62e995, 0x89769282, 0x4c4a1fbb, 0x0f5e64ac, - 0xc63305c8, 0x85277edf, 0x401bf3e6, 0x030f88f1, 0x070392de, - 0x4417e9c9, 0x812b64f0, 0xc23f1fe7, 0x0b527e83, 0x48460594, - 0x8d7a88ad, 0xce6ef3ba, 0x1fa14a65, 0x5cb53172, 0x9989bc4b, - 0xda9dc75c, 0x13f0a638, 0x50e4dd2f, 0x95d85016, 0xd6cc2b01, - 0x76415272, 0x35552965, 0xf069a45c, 0xb37ddf4b, 0x7a10be2f, - 0x3904c538, 0xfc384801, 0xbf2c3316, 0x6ee38ac9, 0x2df7f1de, - 0xe8cb7ce7, 0xabdf07f0, 0x62b26694, 0x21a61d83, 0xe49a90ba, - 0xa78eebad, 0xa481635c, 0xe795184b, 0x22a99572, 0x61bdee65, - 0xa8d08f01, 0xebc4f416, 0x2ef8792f, 0x6dec0238, 0xbc23bbe7, - 0xff37c0f0, 0x3a0b4dc9, 0x791f36de, 0xb07257ba, 0xf3662cad, - 0x365aa194, 0x754eda83, 0xd5c3a3f0, 0x96d7d8e7, 0x53eb55de, - 0x10ff2ec9, 0xd9924fad, 0x9a8634ba, 0x5fbab983, 0x1caec294, - 0xcd617b4b, 0x8e75005c, 0x4b498d65, 0x085df672, 0xc1309716, - 0x8224ec01, 0x47186138, 0x040c1a2f, 0x4f005566, 0x0c142e71, - 0xc928a348, 0x8a3cd85f, 0x4351b93b, 0x0045c22c, 0xc5794f15, - 0x866d3402, 0x57a28ddd, 0x14b6f6ca, 0xd18a7bf3, 0x929e00e4, - 0x5bf36180, 0x18e71a97, 0xdddb97ae, 0x9ecfecb9, 0x3e4295ca, - 0x7d56eedd, 0xb86a63e4, 0xfb7e18f3, 0x32137997, 0x71070280, - 0xb43b8fb9, 0xf72ff4ae, 0x26e04d71, 0x65f43666, 0xa0c8bb5f, - 0xe3dcc048, 0x2ab1a12c, 0x69a5da3b, 0xac995702, 0xef8d2c15, - 0xec82a4e4, 0xaf96dff3, 0x6aaa52ca, 0x29be29dd, 0xe0d348b9, - 0xa3c733ae, 0x66fbbe97, 0x25efc580, 0xf4207c5f, 0xb7340748, - 0x72088a71, 0x311cf166, 0xf8719002, 0xbb65eb15, 0x7e59662c, - 0x3d4d1d3b, 0x9dc06448, 0xded41f5f, 0x1be89266, 0x58fce971, - 0x91918815, 0xd285f302, 0x17b97e3b, 0x54ad052c, 0x8562bcf3, - 0xc676c7e4, 0x034a4add, 0x405e31ca, 0x893350ae, 0xca272bb9, - 0x0f1ba680, 0x4c0fdd97, 0x4803c7b8, 0x0b17bcaf, 0xce2b3196, - 0x8d3f4a81, 0x44522be5, 0x074650f2, 0xc27addcb, 0x816ea6dc, - 0x50a11f03, 0x13b56414, 0xd689e92d, 0x959d923a, 0x5cf0f35e, - 0x1fe48849, 0xdad80570, 0x99cc7e67, 0x39410714, 0x7a557c03, - 0xbf69f13a, 0xfc7d8a2d, 0x3510eb49, 0x7604905e, 0xb3381d67, - 0xf02c6670, 0x21e3dfaf, 0x62f7a4b8, 0xa7cb2981, 0xe4df5296, - 0x2db233f2, 0x6ea648e5, 0xab9ac5dc, 0xe88ebecb, 0xeb81363a, - 0xa8954d2d, 0x6da9c014, 0x2ebdbb03, 0xe7d0da67, 0xa4c4a170, - 0x61f82c49, 0x22ec575e, 0xf323ee81, 0xb0379596, 0x750b18af, - 0x361f63b8, 0xff7202dc, 0xbc6679cb, 0x795af4f2, 0x3a4e8fe5, - 0x9ac3f696, 0xd9d78d81, 0x1ceb00b8, 0x5fff7baf, 0x96921acb, - 0xd58661dc, 0x10baece5, 0x53ae97f2, 0x82612e2d, 0xc175553a, - 0x0449d803, 0x475da314, 0x8e30c270, 0xcd24b967, 0x0818345e, - 0x4b0c4f49}, - {0x00000000, 0x3e6bc2ef, 0x3dd0f504, 0x03bb37eb, 0x7aa0eb09, - 0x44cb29e6, 0x47701e0d, 0x791bdce2, 0xf440d713, 0xca2b15fc, - 0xc9902217, 0xf7fbe0f8, 0x8ee03c1a, 0xb08bfef5, 0xb330c91e, - 0x8d5b0bf1, 0xe881ae27, 0xd6ea6cc8, 0xd5515b23, 0xeb3a99cc, - 0x9221452e, 0xac4a87c1, 0xaff1b02a, 0x919a72c5, 0x1cc17934, - 0x22aabbdb, 0x21118c30, 0x1f7a4edf, 0x6661923d, 0x580a50d2, - 0x5bb16739, 0x65daa5d6, 0xd0035d4f, 0xee689fa0, 0xedd3a84b, - 0xd3b86aa4, 0xaaa3b646, 0x94c874a9, 0x97734342, 0xa91881ad, - 0x24438a5c, 0x1a2848b3, 0x19937f58, 0x27f8bdb7, 0x5ee36155, - 0x6088a3ba, 0x63339451, 0x5d5856be, 0x3882f368, 0x06e93187, - 0x0552066c, 0x3b39c483, 0x42221861, 0x7c49da8e, 0x7ff2ed65, - 0x41992f8a, 0xccc2247b, 0xf2a9e694, 0xf112d17f, 0xcf791390, - 0xb662cf72, 0x88090d9d, 0x8bb23a76, 0xb5d9f899, 0xa007ba9e, - 0x9e6c7871, 0x9dd74f9a, 0xa3bc8d75, 0xdaa75197, 0xe4cc9378, - 0xe777a493, 0xd91c667c, 0x54476d8d, 0x6a2caf62, 0x69979889, - 0x57fc5a66, 0x2ee78684, 0x108c446b, 0x13377380, 0x2d5cb16f, - 0x488614b9, 0x76edd656, 0x7556e1bd, 0x4b3d2352, 0x3226ffb0, - 0x0c4d3d5f, 0x0ff60ab4, 0x319dc85b, 0xbcc6c3aa, 0x82ad0145, - 0x811636ae, 0xbf7df441, 0xc66628a3, 0xf80dea4c, 0xfbb6dda7, - 0xc5dd1f48, 0x7004e7d1, 0x4e6f253e, 0x4dd412d5, 0x73bfd03a, - 0x0aa40cd8, 0x34cfce37, 0x3774f9dc, 0x091f3b33, 0x844430c2, - 0xba2ff22d, 0xb994c5c6, 0x87ff0729, 0xfee4dbcb, 0xc08f1924, - 0xc3342ecf, 0xfd5fec20, 0x988549f6, 0xa6ee8b19, 0xa555bcf2, - 0x9b3e7e1d, 0xe225a2ff, 0xdc4e6010, 0xdff557fb, 0xe19e9514, - 0x6cc59ee5, 0x52ae5c0a, 0x51156be1, 0x6f7ea90e, 0x166575ec, - 0x280eb703, 0x2bb580e8, 0x15de4207, 0x010905e6, 0x3f62c709, - 0x3cd9f0e2, 0x02b2320d, 0x7ba9eeef, 0x45c22c00, 0x46791beb, - 0x7812d904, 0xf549d2f5, 0xcb22101a, 0xc89927f1, 0xf6f2e51e, - 0x8fe939fc, 0xb182fb13, 0xb239ccf8, 0x8c520e17, 0xe988abc1, - 0xd7e3692e, 0xd4585ec5, 0xea339c2a, 0x932840c8, 0xad438227, - 0xaef8b5cc, 0x90937723, 0x1dc87cd2, 0x23a3be3d, 0x201889d6, - 0x1e734b39, 0x676897db, 0x59035534, 0x5ab862df, 0x64d3a030, - 0xd10a58a9, 0xef619a46, 0xecdaadad, 0xd2b16f42, 0xabaab3a0, - 0x95c1714f, 0x967a46a4, 0xa811844b, 0x254a8fba, 0x1b214d55, - 0x189a7abe, 0x26f1b851, 0x5fea64b3, 0x6181a65c, 0x623a91b7, - 0x5c515358, 0x398bf68e, 0x07e03461, 0x045b038a, 0x3a30c165, - 0x432b1d87, 0x7d40df68, 0x7efbe883, 0x40902a6c, 0xcdcb219d, - 0xf3a0e372, 0xf01bd499, 0xce701676, 0xb76bca94, 0x8900087b, - 0x8abb3f90, 0xb4d0fd7f, 0xa10ebf78, 0x9f657d97, 0x9cde4a7c, - 0xa2b58893, 0xdbae5471, 0xe5c5969e, 0xe67ea175, 0xd815639a, - 0x554e686b, 0x6b25aa84, 0x689e9d6f, 0x56f55f80, 0x2fee8362, - 0x1185418d, 0x123e7666, 0x2c55b489, 0x498f115f, 0x77e4d3b0, - 0x745fe45b, 0x4a3426b4, 0x332ffa56, 0x0d4438b9, 0x0eff0f52, - 0x3094cdbd, 0xbdcfc64c, 0x83a404a3, 0x801f3348, 0xbe74f1a7, - 0xc76f2d45, 0xf904efaa, 0xfabfd841, 0xc4d41aae, 0x710de237, - 0x4f6620d8, 0x4cdd1733, 0x72b6d5dc, 0x0bad093e, 0x35c6cbd1, - 0x367dfc3a, 0x08163ed5, 0x854d3524, 0xbb26f7cb, 0xb89dc020, - 0x86f602cf, 0xffedde2d, 0xc1861cc2, 0xc23d2b29, 0xfc56e9c6, - 0x998c4c10, 0xa7e78eff, 0xa45cb914, 0x9a377bfb, 0xe32ca719, - 0xdd4765f6, 0xdefc521d, 0xe09790f2, 0x6dcc9b03, 0x53a759ec, - 0x501c6e07, 0x6e77ace8, 0x176c700a, 0x2907b2e5, 0x2abc850e, - 0x14d747e1}, - {0x00000000, 0xc0df8ec1, 0xc1b96c58, 0x0166e299, 0x8273d9b0, - 0x42ac5771, 0x43cab5e8, 0x83153b29, 0x45e1c3ba, 0x853e4d7b, - 0x8458afe2, 0x44872123, 0xc7921a0a, 0x074d94cb, 0x062b7652, - 0xc6f4f893, 0xcbc4f6ae, 0x0b1b786f, 0x0a7d9af6, 0xcaa21437, - 0x49b72f1e, 0x8968a1df, 0x880e4346, 0x48d1cd87, 0x8e253514, - 0x4efabbd5, 0x4f9c594c, 0x8f43d78d, 0x0c56eca4, 0xcc896265, - 0xcdef80fc, 0x0d300e3d, 0xd78f9c86, 0x17501247, 0x1636f0de, - 0xd6e97e1f, 0x55fc4536, 0x9523cbf7, 0x9445296e, 0x549aa7af, - 0x926e5f3c, 0x52b1d1fd, 0x53d73364, 0x9308bda5, 0x101d868c, - 0xd0c2084d, 0xd1a4ead4, 0x117b6415, 0x1c4b6a28, 0xdc94e4e9, - 0xddf20670, 0x1d2d88b1, 0x9e38b398, 0x5ee73d59, 0x5f81dfc0, - 0x9f5e5101, 0x59aaa992, 0x99752753, 0x9813c5ca, 0x58cc4b0b, - 0xdbd97022, 0x1b06fee3, 0x1a601c7a, 0xdabf92bb, 0xef1948d6, - 0x2fc6c617, 0x2ea0248e, 0xee7faa4f, 0x6d6a9166, 0xadb51fa7, - 0xacd3fd3e, 0x6c0c73ff, 0xaaf88b6c, 0x6a2705ad, 0x6b41e734, - 0xab9e69f5, 0x288b52dc, 0xe854dc1d, 0xe9323e84, 0x29edb045, - 0x24ddbe78, 0xe40230b9, 0xe564d220, 0x25bb5ce1, 0xa6ae67c8, - 0x6671e909, 0x67170b90, 0xa7c88551, 0x613c7dc2, 0xa1e3f303, - 0xa085119a, 0x605a9f5b, 0xe34fa472, 0x23902ab3, 0x22f6c82a, - 0xe22946eb, 0x3896d450, 0xf8495a91, 0xf92fb808, 0x39f036c9, - 0xbae50de0, 0x7a3a8321, 0x7b5c61b8, 0xbb83ef79, 0x7d7717ea, - 0xbda8992b, 0xbcce7bb2, 0x7c11f573, 0xff04ce5a, 0x3fdb409b, - 0x3ebda202, 0xfe622cc3, 0xf35222fe, 0x338dac3f, 0x32eb4ea6, - 0xf234c067, 0x7121fb4e, 0xb1fe758f, 0xb0989716, 0x704719d7, - 0xb6b3e144, 0x766c6f85, 0x770a8d1c, 0xb7d503dd, 0x34c038f4, - 0xf41fb635, 0xf57954ac, 0x35a6da6d, 0x9f35e177, 0x5fea6fb6, - 0x5e8c8d2f, 0x9e5303ee, 0x1d4638c7, 0xdd99b606, 0xdcff549f, - 0x1c20da5e, 0xdad422cd, 0x1a0bac0c, 0x1b6d4e95, 0xdbb2c054, - 0x58a7fb7d, 0x987875bc, 0x991e9725, 0x59c119e4, 0x54f117d9, - 0x942e9918, 0x95487b81, 0x5597f540, 0xd682ce69, 0x165d40a8, - 0x173ba231, 0xd7e42cf0, 0x1110d463, 0xd1cf5aa2, 0xd0a9b83b, - 0x107636fa, 0x93630dd3, 0x53bc8312, 0x52da618b, 0x9205ef4a, - 0x48ba7df1, 0x8865f330, 0x890311a9, 0x49dc9f68, 0xcac9a441, - 0x0a162a80, 0x0b70c819, 0xcbaf46d8, 0x0d5bbe4b, 0xcd84308a, - 0xcce2d213, 0x0c3d5cd2, 0x8f2867fb, 0x4ff7e93a, 0x4e910ba3, - 0x8e4e8562, 0x837e8b5f, 0x43a1059e, 0x42c7e707, 0x821869c6, - 0x010d52ef, 0xc1d2dc2e, 0xc0b43eb7, 0x006bb076, 0xc69f48e5, - 0x0640c624, 0x072624bd, 0xc7f9aa7c, 0x44ec9155, 0x84331f94, - 0x8555fd0d, 0x458a73cc, 0x702ca9a1, 0xb0f32760, 0xb195c5f9, - 0x714a4b38, 0xf25f7011, 0x3280fed0, 0x33e61c49, 0xf3399288, - 0x35cd6a1b, 0xf512e4da, 0xf4740643, 0x34ab8882, 0xb7beb3ab, - 0x77613d6a, 0x7607dff3, 0xb6d85132, 0xbbe85f0f, 0x7b37d1ce, - 0x7a513357, 0xba8ebd96, 0x399b86bf, 0xf944087e, 0xf822eae7, - 0x38fd6426, 0xfe099cb5, 0x3ed61274, 0x3fb0f0ed, 0xff6f7e2c, - 0x7c7a4505, 0xbca5cbc4, 0xbdc3295d, 0x7d1ca79c, 0xa7a33527, - 0x677cbbe6, 0x661a597f, 0xa6c5d7be, 0x25d0ec97, 0xe50f6256, - 0xe46980cf, 0x24b60e0e, 0xe242f69d, 0x229d785c, 0x23fb9ac5, - 0xe3241404, 0x60312f2d, 0xa0eea1ec, 0xa1884375, 0x6157cdb4, - 0x6c67c389, 0xacb84d48, 0xaddeafd1, 0x6d012110, 0xee141a39, - 0x2ecb94f8, 0x2fad7661, 0xef72f8a0, 0x29860033, 0xe9598ef2, - 0xe83f6c6b, 0x28e0e2aa, 0xabf5d983, 0x6b2a5742, 0x6a4cb5db, - 0xaa933b1a}, - {0x00000000, 0x6f4ca59b, 0x9f9e3bec, 0xf0d29e77, 0x7f3b0603, - 0x1077a398, 0xe0a53def, 0x8fe99874, 0xfe760c06, 0x913aa99d, - 0x61e837ea, 0x0ea49271, 0x814d0a05, 0xee01af9e, 0x1ed331e9, - 0x719f9472, 0xfced180c, 0x93a1bd97, 0x637323e0, 0x0c3f867b, - 0x83d61e0f, 0xec9abb94, 0x1c4825e3, 0x73048078, 0x029b140a, - 0x6dd7b191, 0x9d052fe6, 0xf2498a7d, 0x7da01209, 0x12ecb792, - 0xe23e29e5, 0x8d728c7e, 0xf8db3118, 0x97979483, 0x67450af4, - 0x0809af6f, 0x87e0371b, 0xe8ac9280, 0x187e0cf7, 0x7732a96c, - 0x06ad3d1e, 0x69e19885, 0x993306f2, 0xf67fa369, 0x79963b1d, - 0x16da9e86, 0xe60800f1, 0x8944a56a, 0x04362914, 0x6b7a8c8f, - 0x9ba812f8, 0xf4e4b763, 0x7b0d2f17, 0x14418a8c, 0xe49314fb, - 0x8bdfb160, 0xfa402512, 0x950c8089, 0x65de1efe, 0x0a92bb65, - 0x857b2311, 0xea37868a, 0x1ae518fd, 0x75a9bd66, 0xf0b76330, - 0x9ffbc6ab, 0x6f2958dc, 0x0065fd47, 0x8f8c6533, 0xe0c0c0a8, - 0x10125edf, 0x7f5efb44, 0x0ec16f36, 0x618dcaad, 0x915f54da, - 0xfe13f141, 0x71fa6935, 0x1eb6ccae, 0xee6452d9, 0x8128f742, - 0x0c5a7b3c, 0x6316dea7, 0x93c440d0, 0xfc88e54b, 0x73617d3f, - 0x1c2dd8a4, 0xecff46d3, 0x83b3e348, 0xf22c773a, 0x9d60d2a1, - 0x6db24cd6, 0x02fee94d, 0x8d177139, 0xe25bd4a2, 0x12894ad5, - 0x7dc5ef4e, 0x086c5228, 0x6720f7b3, 0x97f269c4, 0xf8becc5f, - 0x7757542b, 0x181bf1b0, 0xe8c96fc7, 0x8785ca5c, 0xf61a5e2e, - 0x9956fbb5, 0x698465c2, 0x06c8c059, 0x8921582d, 0xe66dfdb6, - 0x16bf63c1, 0x79f3c65a, 0xf4814a24, 0x9bcdefbf, 0x6b1f71c8, - 0x0453d453, 0x8bba4c27, 0xe4f6e9bc, 0x142477cb, 0x7b68d250, - 0x0af74622, 0x65bbe3b9, 0x95697dce, 0xfa25d855, 0x75cc4021, - 0x1a80e5ba, 0xea527bcd, 0x851ede56, 0xe06fc760, 0x8f2362fb, - 0x7ff1fc8c, 0x10bd5917, 0x9f54c163, 0xf01864f8, 0x00cafa8f, - 0x6f865f14, 0x1e19cb66, 0x71556efd, 0x8187f08a, 0xeecb5511, - 0x6122cd65, 0x0e6e68fe, 0xfebcf689, 0x91f05312, 0x1c82df6c, - 0x73ce7af7, 0x831ce480, 0xec50411b, 0x63b9d96f, 0x0cf57cf4, - 0xfc27e283, 0x936b4718, 0xe2f4d36a, 0x8db876f1, 0x7d6ae886, - 0x12264d1d, 0x9dcfd569, 0xf28370f2, 0x0251ee85, 0x6d1d4b1e, - 0x18b4f678, 0x77f853e3, 0x872acd94, 0xe866680f, 0x678ff07b, - 0x08c355e0, 0xf811cb97, 0x975d6e0c, 0xe6c2fa7e, 0x898e5fe5, - 0x795cc192, 0x16106409, 0x99f9fc7d, 0xf6b559e6, 0x0667c791, - 0x692b620a, 0xe459ee74, 0x8b154bef, 0x7bc7d598, 0x148b7003, - 0x9b62e877, 0xf42e4dec, 0x04fcd39b, 0x6bb07600, 0x1a2fe272, - 0x756347e9, 0x85b1d99e, 0xeafd7c05, 0x6514e471, 0x0a5841ea, - 0xfa8adf9d, 0x95c67a06, 0x10d8a450, 0x7f9401cb, 0x8f469fbc, - 0xe00a3a27, 0x6fe3a253, 0x00af07c8, 0xf07d99bf, 0x9f313c24, - 0xeeaea856, 0x81e20dcd, 0x713093ba, 0x1e7c3621, 0x9195ae55, - 0xfed90bce, 0x0e0b95b9, 0x61473022, 0xec35bc5c, 0x837919c7, - 0x73ab87b0, 0x1ce7222b, 0x930eba5f, 0xfc421fc4, 0x0c9081b3, - 0x63dc2428, 0x1243b05a, 0x7d0f15c1, 0x8ddd8bb6, 0xe2912e2d, - 0x6d78b659, 0x023413c2, 0xf2e68db5, 0x9daa282e, 0xe8039548, - 0x874f30d3, 0x779daea4, 0x18d10b3f, 0x9738934b, 0xf87436d0, - 0x08a6a8a7, 0x67ea0d3c, 0x1675994e, 0x79393cd5, 0x89eba2a2, - 0xe6a70739, 0x694e9f4d, 0x06023ad6, 0xf6d0a4a1, 0x999c013a, - 0x14ee8d44, 0x7ba228df, 0x8b70b6a8, 0xe43c1333, 0x6bd58b47, - 0x04992edc, 0xf44bb0ab, 0x9b071530, 0xea988142, 0x85d424d9, - 0x7506baae, 0x1a4a1f35, 0x95a38741, 0xfaef22da, 0x0a3dbcad, - 0x65711936}}; + {0x00000000, 0x43147b17, 0x8628f62e, 0xc53c8d39, 0x0c51ec5d, 0x4f45974a, + 0x8a791a73, 0xc96d6164, 0x18a2d8bb, 0x5bb6a3ac, 0x9e8a2e95, 0xdd9e5582, + 0x14f334e6, 0x57e74ff1, 0x92dbc2c8, 0xd1cfb9df, 0x7142c0ac, 0x3256bbbb, + 0xf76a3682, 0xb47e4d95, 0x7d132cf1, 0x3e0757e6, 0xfb3bdadf, 0xb82fa1c8, + 0x69e01817, 0x2af46300, 0xefc8ee39, 0xacdc952e, 0x65b1f44a, 0x26a58f5d, + 0xe3990264, 0xa08d7973, 0xa382f182, 0xe0968a95, 0x25aa07ac, 0x66be7cbb, + 0xafd31ddf, 0xecc766c8, 0x29fbebf1, 0x6aef90e6, 0xbb202939, 0xf834522e, + 0x3d08df17, 0x7e1ca400, 0xb771c564, 0xf465be73, 0x3159334a, 0x724d485d, + 0xd2c0312e, 0x91d44a39, 0x54e8c700, 0x17fcbc17, 0xde91dd73, 0x9d85a664, + 0x58b92b5d, 0x1bad504a, 0xca62e995, 0x89769282, 0x4c4a1fbb, 0x0f5e64ac, + 0xc63305c8, 0x85277edf, 0x401bf3e6, 0x030f88f1, 0x070392de, 0x4417e9c9, + 0x812b64f0, 0xc23f1fe7, 0x0b527e83, 0x48460594, 0x8d7a88ad, 0xce6ef3ba, + 0x1fa14a65, 0x5cb53172, 0x9989bc4b, 0xda9dc75c, 0x13f0a638, 0x50e4dd2f, + 0x95d85016, 0xd6cc2b01, 0x76415272, 0x35552965, 0xf069a45c, 0xb37ddf4b, + 0x7a10be2f, 0x3904c538, 0xfc384801, 0xbf2c3316, 0x6ee38ac9, 0x2df7f1de, + 0xe8cb7ce7, 0xabdf07f0, 0x62b26694, 0x21a61d83, 0xe49a90ba, 0xa78eebad, + 0xa481635c, 0xe795184b, 0x22a99572, 0x61bdee65, 0xa8d08f01, 0xebc4f416, + 0x2ef8792f, 0x6dec0238, 0xbc23bbe7, 0xff37c0f0, 0x3a0b4dc9, 0x791f36de, + 0xb07257ba, 0xf3662cad, 0x365aa194, 0x754eda83, 0xd5c3a3f0, 0x96d7d8e7, + 0x53eb55de, 0x10ff2ec9, 0xd9924fad, 0x9a8634ba, 0x5fbab983, 0x1caec294, + 0xcd617b4b, 0x8e75005c, 0x4b498d65, 0x085df672, 0xc1309716, 0x8224ec01, + 0x47186138, 0x040c1a2f, 0x4f005566, 0x0c142e71, 0xc928a348, 0x8a3cd85f, + 0x4351b93b, 0x0045c22c, 0xc5794f15, 0x866d3402, 0x57a28ddd, 0x14b6f6ca, + 0xd18a7bf3, 0x929e00e4, 0x5bf36180, 0x18e71a97, 0xdddb97ae, 0x9ecfecb9, + 0x3e4295ca, 0x7d56eedd, 0xb86a63e4, 0xfb7e18f3, 0x32137997, 0x71070280, + 0xb43b8fb9, 0xf72ff4ae, 0x26e04d71, 0x65f43666, 0xa0c8bb5f, 0xe3dcc048, + 0x2ab1a12c, 0x69a5da3b, 0xac995702, 0xef8d2c15, 0xec82a4e4, 0xaf96dff3, + 0x6aaa52ca, 0x29be29dd, 0xe0d348b9, 0xa3c733ae, 0x66fbbe97, 0x25efc580, + 0xf4207c5f, 0xb7340748, 0x72088a71, 0x311cf166, 0xf8719002, 0xbb65eb15, + 0x7e59662c, 0x3d4d1d3b, 0x9dc06448, 0xded41f5f, 0x1be89266, 0x58fce971, + 0x91918815, 0xd285f302, 0x17b97e3b, 0x54ad052c, 0x8562bcf3, 0xc676c7e4, + 0x034a4add, 0x405e31ca, 0x893350ae, 0xca272bb9, 0x0f1ba680, 0x4c0fdd97, + 0x4803c7b8, 0x0b17bcaf, 0xce2b3196, 0x8d3f4a81, 0x44522be5, 0x074650f2, + 0xc27addcb, 0x816ea6dc, 0x50a11f03, 0x13b56414, 0xd689e92d, 0x959d923a, + 0x5cf0f35e, 0x1fe48849, 0xdad80570, 0x99cc7e67, 0x39410714, 0x7a557c03, + 0xbf69f13a, 0xfc7d8a2d, 0x3510eb49, 0x7604905e, 0xb3381d67, 0xf02c6670, + 0x21e3dfaf, 0x62f7a4b8, 0xa7cb2981, 0xe4df5296, 0x2db233f2, 0x6ea648e5, + 0xab9ac5dc, 0xe88ebecb, 0xeb81363a, 0xa8954d2d, 0x6da9c014, 0x2ebdbb03, + 0xe7d0da67, 0xa4c4a170, 0x61f82c49, 0x22ec575e, 0xf323ee81, 0xb0379596, + 0x750b18af, 0x361f63b8, 0xff7202dc, 0xbc6679cb, 0x795af4f2, 0x3a4e8fe5, + 0x9ac3f696, 0xd9d78d81, 0x1ceb00b8, 0x5fff7baf, 0x96921acb, 0xd58661dc, + 0x10baece5, 0x53ae97f2, 0x82612e2d, 0xc175553a, 0x0449d803, 0x475da314, + 0x8e30c270, 0xcd24b967, 0x0818345e, 0x4b0c4f49}, + {0x00000000, 0x3e6bc2ef, 0x3dd0f504, 0x03bb37eb, 0x7aa0eb09, 0x44cb29e6, + 0x47701e0d, 0x791bdce2, 0xf440d713, 0xca2b15fc, 0xc9902217, 0xf7fbe0f8, + 0x8ee03c1a, 0xb08bfef5, 0xb330c91e, 0x8d5b0bf1, 0xe881ae27, 0xd6ea6cc8, + 0xd5515b23, 0xeb3a99cc, 0x9221452e, 0xac4a87c1, 0xaff1b02a, 0x919a72c5, + 0x1cc17934, 0x22aabbdb, 0x21118c30, 0x1f7a4edf, 0x6661923d, 0x580a50d2, + 0x5bb16739, 0x65daa5d6, 0xd0035d4f, 0xee689fa0, 0xedd3a84b, 0xd3b86aa4, + 0xaaa3b646, 0x94c874a9, 0x97734342, 0xa91881ad, 0x24438a5c, 0x1a2848b3, + 0x19937f58, 0x27f8bdb7, 0x5ee36155, 0x6088a3ba, 0x63339451, 0x5d5856be, + 0x3882f368, 0x06e93187, 0x0552066c, 0x3b39c483, 0x42221861, 0x7c49da8e, + 0x7ff2ed65, 0x41992f8a, 0xccc2247b, 0xf2a9e694, 0xf112d17f, 0xcf791390, + 0xb662cf72, 0x88090d9d, 0x8bb23a76, 0xb5d9f899, 0xa007ba9e, 0x9e6c7871, + 0x9dd74f9a, 0xa3bc8d75, 0xdaa75197, 0xe4cc9378, 0xe777a493, 0xd91c667c, + 0x54476d8d, 0x6a2caf62, 0x69979889, 0x57fc5a66, 0x2ee78684, 0x108c446b, + 0x13377380, 0x2d5cb16f, 0x488614b9, 0x76edd656, 0x7556e1bd, 0x4b3d2352, + 0x3226ffb0, 0x0c4d3d5f, 0x0ff60ab4, 0x319dc85b, 0xbcc6c3aa, 0x82ad0145, + 0x811636ae, 0xbf7df441, 0xc66628a3, 0xf80dea4c, 0xfbb6dda7, 0xc5dd1f48, + 0x7004e7d1, 0x4e6f253e, 0x4dd412d5, 0x73bfd03a, 0x0aa40cd8, 0x34cfce37, + 0x3774f9dc, 0x091f3b33, 0x844430c2, 0xba2ff22d, 0xb994c5c6, 0x87ff0729, + 0xfee4dbcb, 0xc08f1924, 0xc3342ecf, 0xfd5fec20, 0x988549f6, 0xa6ee8b19, + 0xa555bcf2, 0x9b3e7e1d, 0xe225a2ff, 0xdc4e6010, 0xdff557fb, 0xe19e9514, + 0x6cc59ee5, 0x52ae5c0a, 0x51156be1, 0x6f7ea90e, 0x166575ec, 0x280eb703, + 0x2bb580e8, 0x15de4207, 0x010905e6, 0x3f62c709, 0x3cd9f0e2, 0x02b2320d, + 0x7ba9eeef, 0x45c22c00, 0x46791beb, 0x7812d904, 0xf549d2f5, 0xcb22101a, + 0xc89927f1, 0xf6f2e51e, 0x8fe939fc, 0xb182fb13, 0xb239ccf8, 0x8c520e17, + 0xe988abc1, 0xd7e3692e, 0xd4585ec5, 0xea339c2a, 0x932840c8, 0xad438227, + 0xaef8b5cc, 0x90937723, 0x1dc87cd2, 0x23a3be3d, 0x201889d6, 0x1e734b39, + 0x676897db, 0x59035534, 0x5ab862df, 0x64d3a030, 0xd10a58a9, 0xef619a46, + 0xecdaadad, 0xd2b16f42, 0xabaab3a0, 0x95c1714f, 0x967a46a4, 0xa811844b, + 0x254a8fba, 0x1b214d55, 0x189a7abe, 0x26f1b851, 0x5fea64b3, 0x6181a65c, + 0x623a91b7, 0x5c515358, 0x398bf68e, 0x07e03461, 0x045b038a, 0x3a30c165, + 0x432b1d87, 0x7d40df68, 0x7efbe883, 0x40902a6c, 0xcdcb219d, 0xf3a0e372, + 0xf01bd499, 0xce701676, 0xb76bca94, 0x8900087b, 0x8abb3f90, 0xb4d0fd7f, + 0xa10ebf78, 0x9f657d97, 0x9cde4a7c, 0xa2b58893, 0xdbae5471, 0xe5c5969e, + 0xe67ea175, 0xd815639a, 0x554e686b, 0x6b25aa84, 0x689e9d6f, 0x56f55f80, + 0x2fee8362, 0x1185418d, 0x123e7666, 0x2c55b489, 0x498f115f, 0x77e4d3b0, + 0x745fe45b, 0x4a3426b4, 0x332ffa56, 0x0d4438b9, 0x0eff0f52, 0x3094cdbd, + 0xbdcfc64c, 0x83a404a3, 0x801f3348, 0xbe74f1a7, 0xc76f2d45, 0xf904efaa, + 0xfabfd841, 0xc4d41aae, 0x710de237, 0x4f6620d8, 0x4cdd1733, 0x72b6d5dc, + 0x0bad093e, 0x35c6cbd1, 0x367dfc3a, 0x08163ed5, 0x854d3524, 0xbb26f7cb, + 0xb89dc020, 0x86f602cf, 0xffedde2d, 0xc1861cc2, 0xc23d2b29, 0xfc56e9c6, + 0x998c4c10, 0xa7e78eff, 0xa45cb914, 0x9a377bfb, 0xe32ca719, 0xdd4765f6, + 0xdefc521d, 0xe09790f2, 0x6dcc9b03, 0x53a759ec, 0x501c6e07, 0x6e77ace8, + 0x176c700a, 0x2907b2e5, 0x2abc850e, 0x14d747e1}, + {0x00000000, 0xc0df8ec1, 0xc1b96c58, 0x0166e299, 0x8273d9b0, 0x42ac5771, + 0x43cab5e8, 0x83153b29, 0x45e1c3ba, 0x853e4d7b, 0x8458afe2, 0x44872123, + 0xc7921a0a, 0x074d94cb, 0x062b7652, 0xc6f4f893, 0xcbc4f6ae, 0x0b1b786f, + 0x0a7d9af6, 0xcaa21437, 0x49b72f1e, 0x8968a1df, 0x880e4346, 0x48d1cd87, + 0x8e253514, 0x4efabbd5, 0x4f9c594c, 0x8f43d78d, 0x0c56eca4, 0xcc896265, + 0xcdef80fc, 0x0d300e3d, 0xd78f9c86, 0x17501247, 0x1636f0de, 0xd6e97e1f, + 0x55fc4536, 0x9523cbf7, 0x9445296e, 0x549aa7af, 0x926e5f3c, 0x52b1d1fd, + 0x53d73364, 0x9308bda5, 0x101d868c, 0xd0c2084d, 0xd1a4ead4, 0x117b6415, + 0x1c4b6a28, 0xdc94e4e9, 0xddf20670, 0x1d2d88b1, 0x9e38b398, 0x5ee73d59, + 0x5f81dfc0, 0x9f5e5101, 0x59aaa992, 0x99752753, 0x9813c5ca, 0x58cc4b0b, + 0xdbd97022, 0x1b06fee3, 0x1a601c7a, 0xdabf92bb, 0xef1948d6, 0x2fc6c617, + 0x2ea0248e, 0xee7faa4f, 0x6d6a9166, 0xadb51fa7, 0xacd3fd3e, 0x6c0c73ff, + 0xaaf88b6c, 0x6a2705ad, 0x6b41e734, 0xab9e69f5, 0x288b52dc, 0xe854dc1d, + 0xe9323e84, 0x29edb045, 0x24ddbe78, 0xe40230b9, 0xe564d220, 0x25bb5ce1, + 0xa6ae67c8, 0x6671e909, 0x67170b90, 0xa7c88551, 0x613c7dc2, 0xa1e3f303, + 0xa085119a, 0x605a9f5b, 0xe34fa472, 0x23902ab3, 0x22f6c82a, 0xe22946eb, + 0x3896d450, 0xf8495a91, 0xf92fb808, 0x39f036c9, 0xbae50de0, 0x7a3a8321, + 0x7b5c61b8, 0xbb83ef79, 0x7d7717ea, 0xbda8992b, 0xbcce7bb2, 0x7c11f573, + 0xff04ce5a, 0x3fdb409b, 0x3ebda202, 0xfe622cc3, 0xf35222fe, 0x338dac3f, + 0x32eb4ea6, 0xf234c067, 0x7121fb4e, 0xb1fe758f, 0xb0989716, 0x704719d7, + 0xb6b3e144, 0x766c6f85, 0x770a8d1c, 0xb7d503dd, 0x34c038f4, 0xf41fb635, + 0xf57954ac, 0x35a6da6d, 0x9f35e177, 0x5fea6fb6, 0x5e8c8d2f, 0x9e5303ee, + 0x1d4638c7, 0xdd99b606, 0xdcff549f, 0x1c20da5e, 0xdad422cd, 0x1a0bac0c, + 0x1b6d4e95, 0xdbb2c054, 0x58a7fb7d, 0x987875bc, 0x991e9725, 0x59c119e4, + 0x54f117d9, 0x942e9918, 0x95487b81, 0x5597f540, 0xd682ce69, 0x165d40a8, + 0x173ba231, 0xd7e42cf0, 0x1110d463, 0xd1cf5aa2, 0xd0a9b83b, 0x107636fa, + 0x93630dd3, 0x53bc8312, 0x52da618b, 0x9205ef4a, 0x48ba7df1, 0x8865f330, + 0x890311a9, 0x49dc9f68, 0xcac9a441, 0x0a162a80, 0x0b70c819, 0xcbaf46d8, + 0x0d5bbe4b, 0xcd84308a, 0xcce2d213, 0x0c3d5cd2, 0x8f2867fb, 0x4ff7e93a, + 0x4e910ba3, 0x8e4e8562, 0x837e8b5f, 0x43a1059e, 0x42c7e707, 0x821869c6, + 0x010d52ef, 0xc1d2dc2e, 0xc0b43eb7, 0x006bb076, 0xc69f48e5, 0x0640c624, + 0x072624bd, 0xc7f9aa7c, 0x44ec9155, 0x84331f94, 0x8555fd0d, 0x458a73cc, + 0x702ca9a1, 0xb0f32760, 0xb195c5f9, 0x714a4b38, 0xf25f7011, 0x3280fed0, + 0x33e61c49, 0xf3399288, 0x35cd6a1b, 0xf512e4da, 0xf4740643, 0x34ab8882, + 0xb7beb3ab, 0x77613d6a, 0x7607dff3, 0xb6d85132, 0xbbe85f0f, 0x7b37d1ce, + 0x7a513357, 0xba8ebd96, 0x399b86bf, 0xf944087e, 0xf822eae7, 0x38fd6426, + 0xfe099cb5, 0x3ed61274, 0x3fb0f0ed, 0xff6f7e2c, 0x7c7a4505, 0xbca5cbc4, + 0xbdc3295d, 0x7d1ca79c, 0xa7a33527, 0x677cbbe6, 0x661a597f, 0xa6c5d7be, + 0x25d0ec97, 0xe50f6256, 0xe46980cf, 0x24b60e0e, 0xe242f69d, 0x229d785c, + 0x23fb9ac5, 0xe3241404, 0x60312f2d, 0xa0eea1ec, 0xa1884375, 0x6157cdb4, + 0x6c67c389, 0xacb84d48, 0xaddeafd1, 0x6d012110, 0xee141a39, 0x2ecb94f8, + 0x2fad7661, 0xef72f8a0, 0x29860033, 0xe9598ef2, 0xe83f6c6b, 0x28e0e2aa, + 0xabf5d983, 0x6b2a5742, 0x6a4cb5db, 0xaa933b1a}, + {0x00000000, 0x6f4ca59b, 0x9f9e3bec, 0xf0d29e77, 0x7f3b0603, 0x1077a398, + 0xe0a53def, 0x8fe99874, 0xfe760c06, 0x913aa99d, 0x61e837ea, 0x0ea49271, + 0x814d0a05, 0xee01af9e, 0x1ed331e9, 0x719f9472, 0xfced180c, 0x93a1bd97, + 0x637323e0, 0x0c3f867b, 0x83d61e0f, 0xec9abb94, 0x1c4825e3, 0x73048078, + 0x029b140a, 0x6dd7b191, 0x9d052fe6, 0xf2498a7d, 0x7da01209, 0x12ecb792, + 0xe23e29e5, 0x8d728c7e, 0xf8db3118, 0x97979483, 0x67450af4, 0x0809af6f, + 0x87e0371b, 0xe8ac9280, 0x187e0cf7, 0x7732a96c, 0x06ad3d1e, 0x69e19885, + 0x993306f2, 0xf67fa369, 0x79963b1d, 0x16da9e86, 0xe60800f1, 0x8944a56a, + 0x04362914, 0x6b7a8c8f, 0x9ba812f8, 0xf4e4b763, 0x7b0d2f17, 0x14418a8c, + 0xe49314fb, 0x8bdfb160, 0xfa402512, 0x950c8089, 0x65de1efe, 0x0a92bb65, + 0x857b2311, 0xea37868a, 0x1ae518fd, 0x75a9bd66, 0xf0b76330, 0x9ffbc6ab, + 0x6f2958dc, 0x0065fd47, 0x8f8c6533, 0xe0c0c0a8, 0x10125edf, 0x7f5efb44, + 0x0ec16f36, 0x618dcaad, 0x915f54da, 0xfe13f141, 0x71fa6935, 0x1eb6ccae, + 0xee6452d9, 0x8128f742, 0x0c5a7b3c, 0x6316dea7, 0x93c440d0, 0xfc88e54b, + 0x73617d3f, 0x1c2dd8a4, 0xecff46d3, 0x83b3e348, 0xf22c773a, 0x9d60d2a1, + 0x6db24cd6, 0x02fee94d, 0x8d177139, 0xe25bd4a2, 0x12894ad5, 0x7dc5ef4e, + 0x086c5228, 0x6720f7b3, 0x97f269c4, 0xf8becc5f, 0x7757542b, 0x181bf1b0, + 0xe8c96fc7, 0x8785ca5c, 0xf61a5e2e, 0x9956fbb5, 0x698465c2, 0x06c8c059, + 0x8921582d, 0xe66dfdb6, 0x16bf63c1, 0x79f3c65a, 0xf4814a24, 0x9bcdefbf, + 0x6b1f71c8, 0x0453d453, 0x8bba4c27, 0xe4f6e9bc, 0x142477cb, 0x7b68d250, + 0x0af74622, 0x65bbe3b9, 0x95697dce, 0xfa25d855, 0x75cc4021, 0x1a80e5ba, + 0xea527bcd, 0x851ede56, 0xe06fc760, 0x8f2362fb, 0x7ff1fc8c, 0x10bd5917, + 0x9f54c163, 0xf01864f8, 0x00cafa8f, 0x6f865f14, 0x1e19cb66, 0x71556efd, + 0x8187f08a, 0xeecb5511, 0x6122cd65, 0x0e6e68fe, 0xfebcf689, 0x91f05312, + 0x1c82df6c, 0x73ce7af7, 0x831ce480, 0xec50411b, 0x63b9d96f, 0x0cf57cf4, + 0xfc27e283, 0x936b4718, 0xe2f4d36a, 0x8db876f1, 0x7d6ae886, 0x12264d1d, + 0x9dcfd569, 0xf28370f2, 0x0251ee85, 0x6d1d4b1e, 0x18b4f678, 0x77f853e3, + 0x872acd94, 0xe866680f, 0x678ff07b, 0x08c355e0, 0xf811cb97, 0x975d6e0c, + 0xe6c2fa7e, 0x898e5fe5, 0x795cc192, 0x16106409, 0x99f9fc7d, 0xf6b559e6, + 0x0667c791, 0x692b620a, 0xe459ee74, 0x8b154bef, 0x7bc7d598, 0x148b7003, + 0x9b62e877, 0xf42e4dec, 0x04fcd39b, 0x6bb07600, 0x1a2fe272, 0x756347e9, + 0x85b1d99e, 0xeafd7c05, 0x6514e471, 0x0a5841ea, 0xfa8adf9d, 0x95c67a06, + 0x10d8a450, 0x7f9401cb, 0x8f469fbc, 0xe00a3a27, 0x6fe3a253, 0x00af07c8, + 0xf07d99bf, 0x9f313c24, 0xeeaea856, 0x81e20dcd, 0x713093ba, 0x1e7c3621, + 0x9195ae55, 0xfed90bce, 0x0e0b95b9, 0x61473022, 0xec35bc5c, 0x837919c7, + 0x73ab87b0, 0x1ce7222b, 0x930eba5f, 0xfc421fc4, 0x0c9081b3, 0x63dc2428, + 0x1243b05a, 0x7d0f15c1, 0x8ddd8bb6, 0xe2912e2d, 0x6d78b659, 0x023413c2, + 0xf2e68db5, 0x9daa282e, 0xe8039548, 0x874f30d3, 0x779daea4, 0x18d10b3f, + 0x9738934b, 0xf87436d0, 0x08a6a8a7, 0x67ea0d3c, 0x1675994e, 0x79393cd5, + 0x89eba2a2, 0xe6a70739, 0x694e9f4d, 0x06023ad6, 0xf6d0a4a1, 0x999c013a, + 0x14ee8d44, 0x7ba228df, 0x8b70b6a8, 0xe43c1333, 0x6bd58b47, 0x04992edc, + 0xf44bb0ab, 0x9b071530, 0xea988142, 0x85d424d9, 0x7506baae, 0x1a4a1f35, + 0x95a38741, 0xfaef22da, 0x0a3dbcad, 0x65711936}}; #endif @@ -4825,1534 +4375,1390 @@ local const z_word_t FAR crc_braid_big_table[][256] = { #if W == 8 local const z_crc_t FAR crc_braid_table[][256] = { - {0x00000000, 0xf1da05aa, 0x38c50d15, 0xc91f08bf, 0x718a1a2a, - 0x80501f80, 0x494f173f, 0xb8951295, 0xe3143454, 0x12ce31fe, - 0xdbd13941, 0x2a0b3ceb, 0x929e2e7e, 0x63442bd4, 0xaa5b236b, - 0x5b8126c1, 0x1d596ee9, 0xec836b43, 0x259c63fc, 0xd4466656, - 0x6cd374c3, 0x9d097169, 0x541679d6, 0xa5cc7c7c, 0xfe4d5abd, - 0x0f975f17, 0xc68857a8, 0x37525202, 0x8fc74097, 0x7e1d453d, - 0xb7024d82, 0x46d84828, 0x3ab2ddd2, 0xcb68d878, 0x0277d0c7, - 0xf3add56d, 0x4b38c7f8, 0xbae2c252, 0x73fdcaed, 0x8227cf47, - 0xd9a6e986, 0x287cec2c, 0xe163e493, 0x10b9e139, 0xa82cf3ac, - 0x59f6f606, 0x90e9feb9, 0x6133fb13, 0x27ebb33b, 0xd631b691, - 0x1f2ebe2e, 0xeef4bb84, 0x5661a911, 0xa7bbacbb, 0x6ea4a404, - 0x9f7ea1ae, 0xc4ff876f, 0x352582c5, 0xfc3a8a7a, 0x0de08fd0, - 0xb5759d45, 0x44af98ef, 0x8db09050, 0x7c6a95fa, 0x7565bba4, - 0x84bfbe0e, 0x4da0b6b1, 0xbc7ab31b, 0x04efa18e, 0xf535a424, - 0x3c2aac9b, 0xcdf0a931, 0x96718ff0, 0x67ab8a5a, 0xaeb482e5, - 0x5f6e874f, 0xe7fb95da, 0x16219070, 0xdf3e98cf, 0x2ee49d65, - 0x683cd54d, 0x99e6d0e7, 0x50f9d858, 0xa123ddf2, 0x19b6cf67, - 0xe86ccacd, 0x2173c272, 0xd0a9c7d8, 0x8b28e119, 0x7af2e4b3, - 0xb3edec0c, 0x4237e9a6, 0xfaa2fb33, 0x0b78fe99, 0xc267f626, - 0x33bdf38c, 0x4fd76676, 0xbe0d63dc, 0x77126b63, 0x86c86ec9, - 0x3e5d7c5c, 0xcf8779f6, 0x06987149, 0xf74274e3, 0xacc35222, - 0x5d195788, 0x94065f37, 0x65dc5a9d, 0xdd494808, 0x2c934da2, - 0xe58c451d, 0x145640b7, 0x528e089f, 0xa3540d35, 0x6a4b058a, - 0x9b910020, 0x230412b5, 0xd2de171f, 0x1bc11fa0, 0xea1b1a0a, - 0xb19a3ccb, 0x40403961, 0x895f31de, 0x78853474, 0xc01026e1, - 0x31ca234b, 0xf8d52bf4, 0x090f2e5e, 0xeacb7748, 0x1b1172e2, - 0xd20e7a5d, 0x23d47ff7, 0x9b416d62, 0x6a9b68c8, 0xa3846077, - 0x525e65dd, 0x09df431c, 0xf80546b6, 0x311a4e09, 0xc0c04ba3, - 0x78555936, 0x898f5c9c, 0x40905423, 0xb14a5189, 0xf79219a1, - 0x06481c0b, 0xcf5714b4, 0x3e8d111e, 0x8618038b, 0x77c20621, - 0xbedd0e9e, 0x4f070b34, 0x14862df5, 0xe55c285f, 0x2c4320e0, - 0xdd99254a, 0x650c37df, 0x94d63275, 0x5dc93aca, 0xac133f60, - 0xd079aa9a, 0x21a3af30, 0xe8bca78f, 0x1966a225, 0xa1f3b0b0, - 0x5029b51a, 0x9936bda5, 0x68ecb80f, 0x336d9ece, 0xc2b79b64, - 0x0ba893db, 0xfa729671, 0x42e784e4, 0xb33d814e, 0x7a2289f1, - 0x8bf88c5b, 0xcd20c473, 0x3cfac1d9, 0xf5e5c966, 0x043fcccc, - 0xbcaade59, 0x4d70dbf3, 0x846fd34c, 0x75b5d6e6, 0x2e34f027, - 0xdfeef58d, 0x16f1fd32, 0xe72bf898, 0x5fbeea0d, 0xae64efa7, - 0x677be718, 0x96a1e2b2, 0x9faeccec, 0x6e74c946, 0xa76bc1f9, - 0x56b1c453, 0xee24d6c6, 0x1ffed36c, 0xd6e1dbd3, 0x273bde79, - 0x7cbaf8b8, 0x8d60fd12, 0x447ff5ad, 0xb5a5f007, 0x0d30e292, - 0xfceae738, 0x35f5ef87, 0xc42fea2d, 0x82f7a205, 0x732da7af, - 0xba32af10, 0x4be8aaba, 0xf37db82f, 0x02a7bd85, 0xcbb8b53a, - 0x3a62b090, 0x61e39651, 0x903993fb, 0x59269b44, 0xa8fc9eee, - 0x10698c7b, 0xe1b389d1, 0x28ac816e, 0xd97684c4, 0xa51c113e, - 0x54c61494, 0x9dd91c2b, 0x6c031981, 0xd4960b14, 0x254c0ebe, - 0xec530601, 0x1d8903ab, 0x4608256a, 0xb7d220c0, 0x7ecd287f, - 0x8f172dd5, 0x37823f40, 0xc6583aea, 0x0f473255, 0xfe9d37ff, - 0xb8457fd7, 0x499f7a7d, 0x808072c2, 0x715a7768, 0xc9cf65fd, - 0x38156057, 0xf10a68e8, 0x00d06d42, 0x5b514b83, 0xaa8b4e29, - 0x63944696, 0x924e433c, 0x2adb51a9, 0xdb015403, 0x121e5cbc, - 0xe3c45916}, - {0x00000000, 0x0ee7e8d1, 0x1dcfd1a2, 0x13283973, 0x3b9fa344, - 0x35784b95, 0x265072e6, 0x28b79a37, 0x773f4688, 0x79d8ae59, - 0x6af0972a, 0x64177ffb, 0x4ca0e5cc, 0x42470d1d, 0x516f346e, - 0x5f88dcbf, 0xee7e8d10, 0xe09965c1, 0xf3b15cb2, 0xfd56b463, - 0xd5e12e54, 0xdb06c685, 0xc82efff6, 0xc6c91727, 0x9941cb98, - 0x97a62349, 0x848e1a3a, 0x8a69f2eb, 0xa2de68dc, 0xac39800d, - 0xbf11b97e, 0xb1f651af, 0x078c1c61, 0x096bf4b0, 0x1a43cdc3, - 0x14a42512, 0x3c13bf25, 0x32f457f4, 0x21dc6e87, 0x2f3b8656, - 0x70b35ae9, 0x7e54b238, 0x6d7c8b4b, 0x639b639a, 0x4b2cf9ad, - 0x45cb117c, 0x56e3280f, 0x5804c0de, 0xe9f29171, 0xe71579a0, - 0xf43d40d3, 0xfadaa802, 0xd26d3235, 0xdc8adae4, 0xcfa2e397, - 0xc1450b46, 0x9ecdd7f9, 0x902a3f28, 0x8302065b, 0x8de5ee8a, - 0xa55274bd, 0xabb59c6c, 0xb89da51f, 0xb67a4dce, 0x0f1838c2, - 0x01ffd013, 0x12d7e960, 0x1c3001b1, 0x34879b86, 0x3a607357, - 0x29484a24, 0x27afa2f5, 0x78277e4a, 0x76c0969b, 0x65e8afe8, - 0x6b0f4739, 0x43b8dd0e, 0x4d5f35df, 0x5e770cac, 0x5090e47d, - 0xe166b5d2, 0xef815d03, 0xfca96470, 0xf24e8ca1, 0xdaf91696, - 0xd41efe47, 0xc736c734, 0xc9d12fe5, 0x9659f35a, 0x98be1b8b, - 0x8b9622f8, 0x8571ca29, 0xadc6501e, 0xa321b8cf, 0xb00981bc, - 0xbeee696d, 0x089424a3, 0x0673cc72, 0x155bf501, 0x1bbc1dd0, - 0x330b87e7, 0x3dec6f36, 0x2ec45645, 0x2023be94, 0x7fab622b, - 0x714c8afa, 0x6264b389, 0x6c835b58, 0x4434c16f, 0x4ad329be, - 0x59fb10cd, 0x571cf81c, 0xe6eaa9b3, 0xe80d4162, 0xfb257811, - 0xf5c290c0, 0xdd750af7, 0xd392e226, 0xc0badb55, 0xce5d3384, - 0x91d5ef3b, 0x9f3207ea, 0x8c1a3e99, 0x82fdd648, 0xaa4a4c7f, - 0xa4ada4ae, 0xb7859ddd, 0xb962750c, 0x1e307184, 0x10d79955, - 0x03ffa026, 0x0d1848f7, 0x25afd2c0, 0x2b483a11, 0x38600362, - 0x3687ebb3, 0x690f370c, 0x67e8dfdd, 0x74c0e6ae, 0x7a270e7f, - 0x52909448, 0x5c777c99, 0x4f5f45ea, 0x41b8ad3b, 0xf04efc94, - 0xfea91445, 0xed812d36, 0xe366c5e7, 0xcbd15fd0, 0xc536b701, - 0xd61e8e72, 0xd8f966a3, 0x8771ba1c, 0x899652cd, 0x9abe6bbe, - 0x9459836f, 0xbcee1958, 0xb209f189, 0xa121c8fa, 0xafc6202b, - 0x19bc6de5, 0x175b8534, 0x0473bc47, 0x0a945496, 0x2223cea1, - 0x2cc42670, 0x3fec1f03, 0x310bf7d2, 0x6e832b6d, 0x6064c3bc, - 0x734cfacf, 0x7dab121e, 0x551c8829, 0x5bfb60f8, 0x48d3598b, - 0x4634b15a, 0xf7c2e0f5, 0xf9250824, 0xea0d3157, 0xe4ead986, - 0xcc5d43b1, 0xc2baab60, 0xd1929213, 0xdf757ac2, 0x80fda67d, - 0x8e1a4eac, 0x9d3277df, 0x93d59f0e, 0xbb620539, 0xb585ede8, - 0xa6add49b, 0xa84a3c4a, 0x11284946, 0x1fcfa197, 0x0ce798e4, - 0x02007035, 0x2ab7ea02, 0x245002d3, 0x37783ba0, 0x399fd371, - 0x66170fce, 0x68f0e71f, 0x7bd8de6c, 0x753f36bd, 0x5d88ac8a, - 0x536f445b, 0x40477d28, 0x4ea095f9, 0xff56c456, 0xf1b12c87, - 0xe29915f4, 0xec7efd25, 0xc4c96712, 0xca2e8fc3, 0xd906b6b0, - 0xd7e15e61, 0x886982de, 0x868e6a0f, 0x95a6537c, 0x9b41bbad, - 0xb3f6219a, 0xbd11c94b, 0xae39f038, 0xa0de18e9, 0x16a45527, - 0x1843bdf6, 0x0b6b8485, 0x058c6c54, 0x2d3bf663, 0x23dc1eb2, - 0x30f427c1, 0x3e13cf10, 0x619b13af, 0x6f7cfb7e, 0x7c54c20d, - 0x72b32adc, 0x5a04b0eb, 0x54e3583a, 0x47cb6149, 0x492c8998, - 0xf8dad837, 0xf63d30e6, 0xe5150995, 0xebf2e144, 0xc3457b73, - 0xcda293a2, 0xde8aaad1, 0xd06d4200, 0x8fe59ebf, 0x8102766e, - 0x922a4f1d, 0x9ccda7cc, 0xb47a3dfb, 0xba9dd52a, 0xa9b5ec59, - 0xa7520488}, - {0x00000000, 0x3c60e308, 0x78c1c610, 0x44a12518, 0xf1838c20, - 0xcde36f28, 0x89424a30, 0xb522a938, 0x38761e01, 0x0416fd09, - 0x40b7d811, 0x7cd73b19, 0xc9f59221, 0xf5957129, 0xb1345431, - 0x8d54b739, 0x70ec3c02, 0x4c8cdf0a, 0x082dfa12, 0x344d191a, - 0x816fb022, 0xbd0f532a, 0xf9ae7632, 0xc5ce953a, 0x489a2203, - 0x74fac10b, 0x305be413, 0x0c3b071b, 0xb919ae23, 0x85794d2b, - 0xc1d86833, 0xfdb88b3b, 0xe1d87804, 0xddb89b0c, 0x9919be14, - 0xa5795d1c, 0x105bf424, 0x2c3b172c, 0x689a3234, 0x54fad13c, - 0xd9ae6605, 0xe5ce850d, 0xa16fa015, 0x9d0f431d, 0x282dea25, - 0x144d092d, 0x50ec2c35, 0x6c8ccf3d, 0x91344406, 0xad54a70e, - 0xe9f58216, 0xd595611e, 0x60b7c826, 0x5cd72b2e, 0x18760e36, - 0x2416ed3e, 0xa9425a07, 0x9522b90f, 0xd1839c17, 0xede37f1f, - 0x58c1d627, 0x64a1352f, 0x20001037, 0x1c60f33f, 0x18c1f649, - 0x24a11541, 0x60003059, 0x5c60d351, 0xe9427a69, 0xd5229961, - 0x9183bc79, 0xade35f71, 0x20b7e848, 0x1cd70b40, 0x58762e58, - 0x6416cd50, 0xd1346468, 0xed548760, 0xa9f5a278, 0x95954170, - 0x682dca4b, 0x544d2943, 0x10ec0c5b, 0x2c8cef53, 0x99ae466b, - 0xa5cea563, 0xe16f807b, 0xdd0f6373, 0x505bd44a, 0x6c3b3742, - 0x289a125a, 0x14faf152, 0xa1d8586a, 0x9db8bb62, 0xd9199e7a, - 0xe5797d72, 0xf9198e4d, 0xc5796d45, 0x81d8485d, 0xbdb8ab55, - 0x089a026d, 0x34fae165, 0x705bc47d, 0x4c3b2775, 0xc16f904c, - 0xfd0f7344, 0xb9ae565c, 0x85ceb554, 0x30ec1c6c, 0x0c8cff64, - 0x482dda7c, 0x744d3974, 0x89f5b24f, 0xb5955147, 0xf134745f, - 0xcd549757, 0x78763e6f, 0x4416dd67, 0x00b7f87f, 0x3cd71b77, - 0xb183ac4e, 0x8de34f46, 0xc9426a5e, 0xf5228956, 0x4000206e, - 0x7c60c366, 0x38c1e67e, 0x04a10576, 0x3183ec92, 0x0de30f9a, - 0x49422a82, 0x7522c98a, 0xc00060b2, 0xfc6083ba, 0xb8c1a6a2, - 0x84a145aa, 0x09f5f293, 0x3595119b, 0x71343483, 0x4d54d78b, - 0xf8767eb3, 0xc4169dbb, 0x80b7b8a3, 0xbcd75bab, 0x416fd090, - 0x7d0f3398, 0x39ae1680, 0x05cef588, 0xb0ec5cb0, 0x8c8cbfb8, - 0xc82d9aa0, 0xf44d79a8, 0x7919ce91, 0x45792d99, 0x01d80881, - 0x3db8eb89, 0x889a42b1, 0xb4faa1b9, 0xf05b84a1, 0xcc3b67a9, - 0xd05b9496, 0xec3b779e, 0xa89a5286, 0x94fab18e, 0x21d818b6, - 0x1db8fbbe, 0x5919dea6, 0x65793dae, 0xe82d8a97, 0xd44d699f, - 0x90ec4c87, 0xac8caf8f, 0x19ae06b7, 0x25cee5bf, 0x616fc0a7, - 0x5d0f23af, 0xa0b7a894, 0x9cd74b9c, 0xd8766e84, 0xe4168d8c, - 0x513424b4, 0x6d54c7bc, 0x29f5e2a4, 0x159501ac, 0x98c1b695, - 0xa4a1559d, 0xe0007085, 0xdc60938d, 0x69423ab5, 0x5522d9bd, - 0x1183fca5, 0x2de31fad, 0x29421adb, 0x1522f9d3, 0x5183dccb, - 0x6de33fc3, 0xd8c196fb, 0xe4a175f3, 0xa00050eb, 0x9c60b3e3, - 0x113404da, 0x2d54e7d2, 0x69f5c2ca, 0x559521c2, 0xe0b788fa, - 0xdcd76bf2, 0x98764eea, 0xa416ade2, 0x59ae26d9, 0x65cec5d1, - 0x216fe0c9, 0x1d0f03c1, 0xa82daaf9, 0x944d49f1, 0xd0ec6ce9, - 0xec8c8fe1, 0x61d838d8, 0x5db8dbd0, 0x1919fec8, 0x25791dc0, - 0x905bb4f8, 0xac3b57f0, 0xe89a72e8, 0xd4fa91e0, 0xc89a62df, - 0xf4fa81d7, 0xb05ba4cf, 0x8c3b47c7, 0x3919eeff, 0x05790df7, - 0x41d828ef, 0x7db8cbe7, 0xf0ec7cde, 0xcc8c9fd6, 0x882dbace, - 0xb44d59c6, 0x016ff0fe, 0x3d0f13f6, 0x79ae36ee, 0x45ced5e6, - 0xb8765edd, 0x8416bdd5, 0xc0b798cd, 0xfcd77bc5, 0x49f5d2fd, - 0x759531f5, 0x313414ed, 0x0d54f7e5, 0x800040dc, 0xbc60a3d4, - 0xf8c186cc, 0xc4a165c4, 0x7183ccfc, 0x4de32ff4, 0x09420aec, - 0x3522e9e4}, - {0x00000000, 0x6307d924, 0xc60fb248, 0xa5086b6c, 0x576e62d1, - 0x3469bbf5, 0x9161d099, 0xf26609bd, 0xaedcc5a2, 0xcddb1c86, - 0x68d377ea, 0x0bd4aece, 0xf9b2a773, 0x9ab57e57, 0x3fbd153b, - 0x5cbacc1f, 0x86c88d05, 0xe5cf5421, 0x40c73f4d, 0x23c0e669, - 0xd1a6efd4, 0xb2a136f0, 0x17a95d9c, 0x74ae84b8, 0x281448a7, - 0x4b139183, 0xee1bfaef, 0x8d1c23cb, 0x7f7a2a76, 0x1c7df352, - 0xb975983e, 0xda72411a, 0xd6e01c4b, 0xb5e7c56f, 0x10efae03, - 0x73e87727, 0x818e7e9a, 0xe289a7be, 0x4781ccd2, 0x248615f6, - 0x783cd9e9, 0x1b3b00cd, 0xbe336ba1, 0xdd34b285, 0x2f52bb38, - 0x4c55621c, 0xe95d0970, 0x8a5ad054, 0x5028914e, 0x332f486a, - 0x96272306, 0xf520fa22, 0x0746f39f, 0x64412abb, 0xc14941d7, - 0xa24e98f3, 0xfef454ec, 0x9df38dc8, 0x38fbe6a4, 0x5bfc3f80, - 0xa99a363d, 0xca9def19, 0x6f958475, 0x0c925d51, 0x76b13ed7, - 0x15b6e7f3, 0xb0be8c9f, 0xd3b955bb, 0x21df5c06, 0x42d88522, - 0xe7d0ee4e, 0x84d7376a, 0xd86dfb75, 0xbb6a2251, 0x1e62493d, - 0x7d659019, 0x8f0399a4, 0xec044080, 0x490c2bec, 0x2a0bf2c8, - 0xf079b3d2, 0x937e6af6, 0x3676019a, 0x5571d8be, 0xa717d103, - 0xc4100827, 0x6118634b, 0x021fba6f, 0x5ea57670, 0x3da2af54, - 0x98aac438, 0xfbad1d1c, 0x09cb14a1, 0x6acccd85, 0xcfc4a6e9, - 0xacc37fcd, 0xa051229c, 0xc356fbb8, 0x665e90d4, 0x055949f0, - 0xf73f404d, 0x94389969, 0x3130f205, 0x52372b21, 0x0e8de73e, - 0x6d8a3e1a, 0xc8825576, 0xab858c52, 0x59e385ef, 0x3ae45ccb, - 0x9fec37a7, 0xfcebee83, 0x2699af99, 0x459e76bd, 0xe0961dd1, - 0x8391c4f5, 0x71f7cd48, 0x12f0146c, 0xb7f87f00, 0xd4ffa624, - 0x88456a3b, 0xeb42b31f, 0x4e4ad873, 0x2d4d0157, 0xdf2b08ea, - 0xbc2cd1ce, 0x1924baa2, 0x7a236386, 0xed627dae, 0x8e65a48a, - 0x2b6dcfe6, 0x486a16c2, 0xba0c1f7f, 0xd90bc65b, 0x7c03ad37, - 0x1f047413, 0x43beb80c, 0x20b96128, 0x85b10a44, 0xe6b6d360, - 0x14d0dadd, 0x77d703f9, 0xd2df6895, 0xb1d8b1b1, 0x6baaf0ab, - 0x08ad298f, 0xada542e3, 0xcea29bc7, 0x3cc4927a, 0x5fc34b5e, - 0xfacb2032, 0x99ccf916, 0xc5763509, 0xa671ec2d, 0x03798741, - 0x607e5e65, 0x921857d8, 0xf11f8efc, 0x5417e590, 0x37103cb4, - 0x3b8261e5, 0x5885b8c1, 0xfd8dd3ad, 0x9e8a0a89, 0x6cec0334, - 0x0febda10, 0xaae3b17c, 0xc9e46858, 0x955ea447, 0xf6597d63, - 0x5351160f, 0x3056cf2b, 0xc230c696, 0xa1371fb2, 0x043f74de, - 0x6738adfa, 0xbd4aece0, 0xde4d35c4, 0x7b455ea8, 0x1842878c, - 0xea248e31, 0x89235715, 0x2c2b3c79, 0x4f2ce55d, 0x13962942, - 0x7091f066, 0xd5999b0a, 0xb69e422e, 0x44f84b93, 0x27ff92b7, - 0x82f7f9db, 0xe1f020ff, 0x9bd34379, 0xf8d49a5d, 0x5ddcf131, - 0x3edb2815, 0xccbd21a8, 0xafbaf88c, 0x0ab293e0, 0x69b54ac4, - 0x350f86db, 0x56085fff, 0xf3003493, 0x9007edb7, 0x6261e40a, - 0x01663d2e, 0xa46e5642, 0xc7698f66, 0x1d1bce7c, 0x7e1c1758, - 0xdb147c34, 0xb813a510, 0x4a75acad, 0x29727589, 0x8c7a1ee5, - 0xef7dc7c1, 0xb3c70bde, 0xd0c0d2fa, 0x75c8b996, 0x16cf60b2, - 0xe4a9690f, 0x87aeb02b, 0x22a6db47, 0x41a10263, 0x4d335f32, - 0x2e348616, 0x8b3ced7a, 0xe83b345e, 0x1a5d3de3, 0x795ae4c7, - 0xdc528fab, 0xbf55568f, 0xe3ef9a90, 0x80e843b4, 0x25e028d8, - 0x46e7f1fc, 0xb481f841, 0xd7862165, 0x728e4a09, 0x1189932d, - 0xcbfbd237, 0xa8fc0b13, 0x0df4607f, 0x6ef3b95b, 0x9c95b0e6, - 0xff9269c2, 0x5a9a02ae, 0x399ddb8a, 0x65271795, 0x0620ceb1, - 0xa328a5dd, 0xc02f7cf9, 0x32497544, 0x514eac60, 0xf446c70c, - 0x97411e28}, - {0x00000000, 0x01b5fd1d, 0x036bfa3a, 0x02de0727, 0x06d7f474, - 0x07620969, 0x05bc0e4e, 0x0409f353, 0x0dafe8e8, 0x0c1a15f5, - 0x0ec412d2, 0x0f71efcf, 0x0b781c9c, 0x0acde181, 0x0813e6a6, - 0x09a61bbb, 0x1b5fd1d0, 0x1aea2ccd, 0x18342bea, 0x1981d6f7, - 0x1d8825a4, 0x1c3dd8b9, 0x1ee3df9e, 0x1f562283, 0x16f03938, - 0x1745c425, 0x159bc302, 0x142e3e1f, 0x1027cd4c, 0x11923051, - 0x134c3776, 0x12f9ca6b, 0x36bfa3a0, 0x370a5ebd, 0x35d4599a, - 0x3461a487, 0x306857d4, 0x31ddaac9, 0x3303adee, 0x32b650f3, - 0x3b104b48, 0x3aa5b655, 0x387bb172, 0x39ce4c6f, 0x3dc7bf3c, - 0x3c724221, 0x3eac4506, 0x3f19b81b, 0x2de07270, 0x2c558f6d, - 0x2e8b884a, 0x2f3e7557, 0x2b378604, 0x2a827b19, 0x285c7c3e, - 0x29e98123, 0x204f9a98, 0x21fa6785, 0x232460a2, 0x22919dbf, - 0x26986eec, 0x272d93f1, 0x25f394d6, 0x244669cb, 0x6d7f4740, - 0x6ccaba5d, 0x6e14bd7a, 0x6fa14067, 0x6ba8b334, 0x6a1d4e29, - 0x68c3490e, 0x6976b413, 0x60d0afa8, 0x616552b5, 0x63bb5592, - 0x620ea88f, 0x66075bdc, 0x67b2a6c1, 0x656ca1e6, 0x64d95cfb, - 0x76209690, 0x77956b8d, 0x754b6caa, 0x74fe91b7, 0x70f762e4, - 0x71429ff9, 0x739c98de, 0x722965c3, 0x7b8f7e78, 0x7a3a8365, - 0x78e48442, 0x7951795f, 0x7d588a0c, 0x7ced7711, 0x7e337036, - 0x7f868d2b, 0x5bc0e4e0, 0x5a7519fd, 0x58ab1eda, 0x591ee3c7, - 0x5d171094, 0x5ca2ed89, 0x5e7ceaae, 0x5fc917b3, 0x566f0c08, - 0x57daf115, 0x5504f632, 0x54b10b2f, 0x50b8f87c, 0x510d0561, - 0x53d30246, 0x5266ff5b, 0x409f3530, 0x412ac82d, 0x43f4cf0a, - 0x42413217, 0x4648c144, 0x47fd3c59, 0x45233b7e, 0x4496c663, - 0x4d30ddd8, 0x4c8520c5, 0x4e5b27e2, 0x4feedaff, 0x4be729ac, - 0x4a52d4b1, 0x488cd396, 0x49392e8b, 0xdafe8e80, 0xdb4b739d, - 0xd99574ba, 0xd82089a7, 0xdc297af4, 0xdd9c87e9, 0xdf4280ce, - 0xdef77dd3, 0xd7516668, 0xd6e49b75, 0xd43a9c52, 0xd58f614f, - 0xd186921c, 0xd0336f01, 0xd2ed6826, 0xd358953b, 0xc1a15f50, - 0xc014a24d, 0xc2caa56a, 0xc37f5877, 0xc776ab24, 0xc6c35639, - 0xc41d511e, 0xc5a8ac03, 0xcc0eb7b8, 0xcdbb4aa5, 0xcf654d82, - 0xced0b09f, 0xcad943cc, 0xcb6cbed1, 0xc9b2b9f6, 0xc80744eb, - 0xec412d20, 0xedf4d03d, 0xef2ad71a, 0xee9f2a07, 0xea96d954, - 0xeb232449, 0xe9fd236e, 0xe848de73, 0xe1eec5c8, 0xe05b38d5, - 0xe2853ff2, 0xe330c2ef, 0xe73931bc, 0xe68ccca1, 0xe452cb86, - 0xe5e7369b, 0xf71efcf0, 0xf6ab01ed, 0xf47506ca, 0xf5c0fbd7, - 0xf1c90884, 0xf07cf599, 0xf2a2f2be, 0xf3170fa3, 0xfab11418, - 0xfb04e905, 0xf9daee22, 0xf86f133f, 0xfc66e06c, 0xfdd31d71, - 0xff0d1a56, 0xfeb8e74b, 0xb781c9c0, 0xb63434dd, 0xb4ea33fa, - 0xb55fcee7, 0xb1563db4, 0xb0e3c0a9, 0xb23dc78e, 0xb3883a93, - 0xba2e2128, 0xbb9bdc35, 0xb945db12, 0xb8f0260f, 0xbcf9d55c, - 0xbd4c2841, 0xbf922f66, 0xbe27d27b, 0xacde1810, 0xad6be50d, - 0xafb5e22a, 0xae001f37, 0xaa09ec64, 0xabbc1179, 0xa962165e, - 0xa8d7eb43, 0xa171f0f8, 0xa0c40de5, 0xa21a0ac2, 0xa3aff7df, - 0xa7a6048c, 0xa613f991, 0xa4cdfeb6, 0xa57803ab, 0x813e6a60, - 0x808b977d, 0x8255905a, 0x83e06d47, 0x87e99e14, 0x865c6309, - 0x8482642e, 0x85379933, 0x8c918288, 0x8d247f95, 0x8ffa78b2, - 0x8e4f85af, 0x8a4676fc, 0x8bf38be1, 0x892d8cc6, 0x889871db, - 0x9a61bbb0, 0x9bd446ad, 0x990a418a, 0x98bfbc97, 0x9cb64fc4, - 0x9d03b2d9, 0x9fddb5fe, 0x9e6848e3, 0x97ce5358, 0x967bae45, - 0x94a5a962, 0x9510547f, 0x9119a72c, 0x90ac5a31, 0x92725d16, - 0x93c7a00b}, - {0x00000000, 0x6e8c1b41, 0xdd183682, 0xb3942dc3, 0x61416b45, - 0x0fcd7004, 0xbc595dc7, 0xd2d54686, 0xc282d68a, 0xac0ecdcb, - 0x1f9ae008, 0x7116fb49, 0xa3c3bdcf, 0xcd4fa68e, 0x7edb8b4d, - 0x1057900c, 0x5e74ab55, 0x30f8b014, 0x836c9dd7, 0xede08696, - 0x3f35c010, 0x51b9db51, 0xe22df692, 0x8ca1edd3, 0x9cf67ddf, - 0xf27a669e, 0x41ee4b5d, 0x2f62501c, 0xfdb7169a, 0x933b0ddb, - 0x20af2018, 0x4e233b59, 0xbce956aa, 0xd2654deb, 0x61f16028, - 0x0f7d7b69, 0xdda83def, 0xb32426ae, 0x00b00b6d, 0x6e3c102c, - 0x7e6b8020, 0x10e79b61, 0xa373b6a2, 0xcdffade3, 0x1f2aeb65, - 0x71a6f024, 0xc232dde7, 0xacbec6a6, 0xe29dfdff, 0x8c11e6be, - 0x3f85cb7d, 0x5109d03c, 0x83dc96ba, 0xed508dfb, 0x5ec4a038, - 0x3048bb79, 0x201f2b75, 0x4e933034, 0xfd071df7, 0x938b06b6, - 0x415e4030, 0x2fd25b71, 0x9c4676b2, 0xf2ca6df3, 0xa2a3ab15, - 0xcc2fb054, 0x7fbb9d97, 0x113786d6, 0xc3e2c050, 0xad6edb11, - 0x1efaf6d2, 0x7076ed93, 0x60217d9f, 0x0ead66de, 0xbd394b1d, - 0xd3b5505c, 0x016016da, 0x6fec0d9b, 0xdc782058, 0xb2f43b19, - 0xfcd70040, 0x925b1b01, 0x21cf36c2, 0x4f432d83, 0x9d966b05, - 0xf31a7044, 0x408e5d87, 0x2e0246c6, 0x3e55d6ca, 0x50d9cd8b, - 0xe34de048, 0x8dc1fb09, 0x5f14bd8f, 0x3198a6ce, 0x820c8b0d, - 0xec80904c, 0x1e4afdbf, 0x70c6e6fe, 0xc352cb3d, 0xadded07c, - 0x7f0b96fa, 0x11878dbb, 0xa213a078, 0xcc9fbb39, 0xdcc82b35, - 0xb2443074, 0x01d01db7, 0x6f5c06f6, 0xbd894070, 0xd3055b31, - 0x609176f2, 0x0e1d6db3, 0x403e56ea, 0x2eb24dab, 0x9d266068, - 0xf3aa7b29, 0x217f3daf, 0x4ff326ee, 0xfc670b2d, 0x92eb106c, - 0x82bc8060, 0xec309b21, 0x5fa4b6e2, 0x3128ada3, 0xe3fdeb25, - 0x8d71f064, 0x3ee5dda7, 0x5069c6e6, 0x9e36506b, 0xf0ba4b2a, - 0x432e66e9, 0x2da27da8, 0xff773b2e, 0x91fb206f, 0x226f0dac, - 0x4ce316ed, 0x5cb486e1, 0x32389da0, 0x81acb063, 0xef20ab22, - 0x3df5eda4, 0x5379f6e5, 0xe0eddb26, 0x8e61c067, 0xc042fb3e, - 0xaecee07f, 0x1d5acdbc, 0x73d6d6fd, 0xa103907b, 0xcf8f8b3a, - 0x7c1ba6f9, 0x1297bdb8, 0x02c02db4, 0x6c4c36f5, 0xdfd81b36, - 0xb1540077, 0x638146f1, 0x0d0d5db0, 0xbe997073, 0xd0156b32, - 0x22df06c1, 0x4c531d80, 0xffc73043, 0x914b2b02, 0x439e6d84, - 0x2d1276c5, 0x9e865b06, 0xf00a4047, 0xe05dd04b, 0x8ed1cb0a, - 0x3d45e6c9, 0x53c9fd88, 0x811cbb0e, 0xef90a04f, 0x5c048d8c, - 0x328896cd, 0x7cabad94, 0x1227b6d5, 0xa1b39b16, 0xcf3f8057, - 0x1deac6d1, 0x7366dd90, 0xc0f2f053, 0xae7eeb12, 0xbe297b1e, - 0xd0a5605f, 0x63314d9c, 0x0dbd56dd, 0xdf68105b, 0xb1e40b1a, - 0x027026d9, 0x6cfc3d98, 0x3c95fb7e, 0x5219e03f, 0xe18dcdfc, - 0x8f01d6bd, 0x5dd4903b, 0x33588b7a, 0x80cca6b9, 0xee40bdf8, - 0xfe172df4, 0x909b36b5, 0x230f1b76, 0x4d830037, 0x9f5646b1, - 0xf1da5df0, 0x424e7033, 0x2cc26b72, 0x62e1502b, 0x0c6d4b6a, - 0xbff966a9, 0xd1757de8, 0x03a03b6e, 0x6d2c202f, 0xdeb80dec, - 0xb03416ad, 0xa06386a1, 0xceef9de0, 0x7d7bb023, 0x13f7ab62, - 0xc122ede4, 0xafaef6a5, 0x1c3adb66, 0x72b6c027, 0x807cadd4, - 0xeef0b695, 0x5d649b56, 0x33e88017, 0xe13dc691, 0x8fb1ddd0, - 0x3c25f013, 0x52a9eb52, 0x42fe7b5e, 0x2c72601f, 0x9fe64ddc, - 0xf16a569d, 0x23bf101b, 0x4d330b5a, 0xfea72699, 0x902b3dd8, - 0xde080681, 0xb0841dc0, 0x03103003, 0x6d9c2b42, 0xbf496dc4, - 0xd1c57685, 0x62515b46, 0x0cdd4007, 0x1c8ad00b, 0x7206cb4a, - 0xc192e689, 0xaf1efdc8, 0x7dcbbb4e, 0x1347a00f, 0xa0d38dcc, - 0xce5f968d}, - {0x00000000, 0xe71da697, 0x154a4b6f, 0xf257edf8, 0x2a9496de, - 0xcd893049, 0x3fdeddb1, 0xd8c37b26, 0x55292dbc, 0xb2348b2b, - 0x406366d3, 0xa77ec044, 0x7fbdbb62, 0x98a01df5, 0x6af7f00d, - 0x8dea569a, 0xaa525b78, 0x4d4ffdef, 0xbf181017, 0x5805b680, - 0x80c6cda6, 0x67db6b31, 0x958c86c9, 0x7291205e, 0xff7b76c4, - 0x1866d053, 0xea313dab, 0x0d2c9b3c, 0xd5efe01a, 0x32f2468d, - 0xc0a5ab75, 0x27b80de2, 0x8fd5b0b1, 0x68c81626, 0x9a9ffbde, - 0x7d825d49, 0xa541266f, 0x425c80f8, 0xb00b6d00, 0x5716cb97, - 0xdafc9d0d, 0x3de13b9a, 0xcfb6d662, 0x28ab70f5, 0xf0680bd3, - 0x1775ad44, 0xe52240bc, 0x023fe62b, 0x2587ebc9, 0xc29a4d5e, - 0x30cda0a6, 0xd7d00631, 0x0f137d17, 0xe80edb80, 0x1a593678, - 0xfd4490ef, 0x70aec675, 0x97b360e2, 0x65e48d1a, 0x82f92b8d, - 0x5a3a50ab, 0xbd27f63c, 0x4f701bc4, 0xa86dbd53, 0xc4da6723, - 0x23c7c1b4, 0xd1902c4c, 0x368d8adb, 0xee4ef1fd, 0x0953576a, - 0xfb04ba92, 0x1c191c05, 0x91f34a9f, 0x76eeec08, 0x84b901f0, - 0x63a4a767, 0xbb67dc41, 0x5c7a7ad6, 0xae2d972e, 0x493031b9, - 0x6e883c5b, 0x89959acc, 0x7bc27734, 0x9cdfd1a3, 0x441caa85, - 0xa3010c12, 0x5156e1ea, 0xb64b477d, 0x3ba111e7, 0xdcbcb770, - 0x2eeb5a88, 0xc9f6fc1f, 0x11358739, 0xf62821ae, 0x047fcc56, - 0xe3626ac1, 0x4b0fd792, 0xac127105, 0x5e459cfd, 0xb9583a6a, - 0x619b414c, 0x8686e7db, 0x74d10a23, 0x93ccacb4, 0x1e26fa2e, - 0xf93b5cb9, 0x0b6cb141, 0xec7117d6, 0x34b26cf0, 0xd3afca67, - 0x21f8279f, 0xc6e58108, 0xe15d8cea, 0x06402a7d, 0xf417c785, - 0x130a6112, 0xcbc91a34, 0x2cd4bca3, 0xde83515b, 0x399ef7cc, - 0xb474a156, 0x536907c1, 0xa13eea39, 0x46234cae, 0x9ee03788, - 0x79fd911f, 0x8baa7ce7, 0x6cb7da70, 0x52c5c807, 0xb5d86e90, - 0x478f8368, 0xa09225ff, 0x78515ed9, 0x9f4cf84e, 0x6d1b15b6, - 0x8a06b321, 0x07ece5bb, 0xe0f1432c, 0x12a6aed4, 0xf5bb0843, - 0x2d787365, 0xca65d5f2, 0x3832380a, 0xdf2f9e9d, 0xf897937f, - 0x1f8a35e8, 0xedddd810, 0x0ac07e87, 0xd20305a1, 0x351ea336, - 0xc7494ece, 0x2054e859, 0xadbebec3, 0x4aa31854, 0xb8f4f5ac, - 0x5fe9533b, 0x872a281d, 0x60378e8a, 0x92606372, 0x757dc5e5, - 0xdd1078b6, 0x3a0dde21, 0xc85a33d9, 0x2f47954e, 0xf784ee68, - 0x109948ff, 0xe2cea507, 0x05d30390, 0x8839550a, 0x6f24f39d, - 0x9d731e65, 0x7a6eb8f2, 0xa2adc3d4, 0x45b06543, 0xb7e788bb, - 0x50fa2e2c, 0x774223ce, 0x905f8559, 0x620868a1, 0x8515ce36, - 0x5dd6b510, 0xbacb1387, 0x489cfe7f, 0xaf8158e8, 0x226b0e72, - 0xc576a8e5, 0x3721451d, 0xd03ce38a, 0x08ff98ac, 0xefe23e3b, - 0x1db5d3c3, 0xfaa87554, 0x961faf24, 0x710209b3, 0x8355e44b, - 0x644842dc, 0xbc8b39fa, 0x5b969f6d, 0xa9c17295, 0x4edcd402, - 0xc3368298, 0x242b240f, 0xd67cc9f7, 0x31616f60, 0xe9a21446, - 0x0ebfb2d1, 0xfce85f29, 0x1bf5f9be, 0x3c4df45c, 0xdb5052cb, - 0x2907bf33, 0xce1a19a4, 0x16d96282, 0xf1c4c415, 0x039329ed, - 0xe48e8f7a, 0x6964d9e0, 0x8e797f77, 0x7c2e928f, 0x9b333418, - 0x43f04f3e, 0xa4ede9a9, 0x56ba0451, 0xb1a7a2c6, 0x19ca1f95, - 0xfed7b902, 0x0c8054fa, 0xeb9df26d, 0x335e894b, 0xd4432fdc, - 0x2614c224, 0xc10964b3, 0x4ce33229, 0xabfe94be, 0x59a97946, - 0xbeb4dfd1, 0x6677a4f7, 0x816a0260, 0x733def98, 0x9420490f, - 0xb39844ed, 0x5485e27a, 0xa6d20f82, 0x41cfa915, 0x990cd233, - 0x7e1174a4, 0x8c46995c, 0x6b5b3fcb, 0xe6b16951, 0x01accfc6, - 0xf3fb223e, 0x14e684a9, 0xcc25ff8f, 0x2b385918, 0xd96fb4e0, - 0x3e721277}, - {0x00000000, 0xa58b900e, 0x9066265d, 0x35edb653, 0xfbbd4afb, - 0x5e36daf5, 0x6bdb6ca6, 0xce50fca8, 0x2c0b93b7, 0x898003b9, - 0xbc6db5ea, 0x19e625e4, 0xd7b6d94c, 0x723d4942, 0x47d0ff11, - 0xe25b6f1f, 0x5817276e, 0xfd9cb760, 0xc8710133, 0x6dfa913d, - 0xa3aa6d95, 0x0621fd9b, 0x33cc4bc8, 0x9647dbc6, 0x741cb4d9, - 0xd19724d7, 0xe47a9284, 0x41f1028a, 0x8fa1fe22, 0x2a2a6e2c, - 0x1fc7d87f, 0xba4c4871, 0xb02e4edc, 0x15a5ded2, 0x20486881, - 0x85c3f88f, 0x4b930427, 0xee189429, 0xdbf5227a, 0x7e7eb274, - 0x9c25dd6b, 0x39ae4d65, 0x0c43fb36, 0xa9c86b38, 0x67989790, - 0xc213079e, 0xf7feb1cd, 0x527521c3, 0xe83969b2, 0x4db2f9bc, - 0x785f4fef, 0xddd4dfe1, 0x13842349, 0xb60fb347, 0x83e20514, - 0x2669951a, 0xc432fa05, 0x61b96a0b, 0x5454dc58, 0xf1df4c56, - 0x3f8fb0fe, 0x9a0420f0, 0xafe996a3, 0x0a6206ad, 0xbb2d9bf9, - 0x1ea60bf7, 0x2b4bbda4, 0x8ec02daa, 0x4090d102, 0xe51b410c, - 0xd0f6f75f, 0x757d6751, 0x9726084e, 0x32ad9840, 0x07402e13, - 0xa2cbbe1d, 0x6c9b42b5, 0xc910d2bb, 0xfcfd64e8, 0x5976f4e6, - 0xe33abc97, 0x46b12c99, 0x735c9aca, 0xd6d70ac4, 0x1887f66c, - 0xbd0c6662, 0x88e1d031, 0x2d6a403f, 0xcf312f20, 0x6ababf2e, - 0x5f57097d, 0xfadc9973, 0x348c65db, 0x9107f5d5, 0xa4ea4386, - 0x0161d388, 0x0b03d525, 0xae88452b, 0x9b65f378, 0x3eee6376, - 0xf0be9fde, 0x55350fd0, 0x60d8b983, 0xc553298d, 0x27084692, - 0x8283d69c, 0xb76e60cf, 0x12e5f0c1, 0xdcb50c69, 0x793e9c67, - 0x4cd32a34, 0xe958ba3a, 0x5314f24b, 0xf69f6245, 0xc372d416, - 0x66f94418, 0xa8a9b8b0, 0x0d2228be, 0x38cf9eed, 0x9d440ee3, - 0x7f1f61fc, 0xda94f1f2, 0xef7947a1, 0x4af2d7af, 0x84a22b07, - 0x2129bb09, 0x14c40d5a, 0xb14f9d54, 0xad2a31b3, 0x08a1a1bd, - 0x3d4c17ee, 0x98c787e0, 0x56977b48, 0xf31ceb46, 0xc6f15d15, - 0x637acd1b, 0x8121a204, 0x24aa320a, 0x11478459, 0xb4cc1457, - 0x7a9ce8ff, 0xdf1778f1, 0xeafacea2, 0x4f715eac, 0xf53d16dd, - 0x50b686d3, 0x655b3080, 0xc0d0a08e, 0x0e805c26, 0xab0bcc28, - 0x9ee67a7b, 0x3b6dea75, 0xd936856a, 0x7cbd1564, 0x4950a337, - 0xecdb3339, 0x228bcf91, 0x87005f9f, 0xb2ede9cc, 0x176679c2, - 0x1d047f6f, 0xb88fef61, 0x8d625932, 0x28e9c93c, 0xe6b93594, - 0x4332a59a, 0x76df13c9, 0xd35483c7, 0x310fecd8, 0x94847cd6, - 0xa169ca85, 0x04e25a8b, 0xcab2a623, 0x6f39362d, 0x5ad4807e, - 0xff5f1070, 0x45135801, 0xe098c80f, 0xd5757e5c, 0x70feee52, - 0xbeae12fa, 0x1b2582f4, 0x2ec834a7, 0x8b43a4a9, 0x6918cbb6, - 0xcc935bb8, 0xf97eedeb, 0x5cf57de5, 0x92a5814d, 0x372e1143, - 0x02c3a710, 0xa748371e, 0x1607aa4a, 0xb38c3a44, 0x86618c17, - 0x23ea1c19, 0xedbae0b1, 0x483170bf, 0x7ddcc6ec, 0xd85756e2, - 0x3a0c39fd, 0x9f87a9f3, 0xaa6a1fa0, 0x0fe18fae, 0xc1b17306, - 0x643ae308, 0x51d7555b, 0xf45cc555, 0x4e108d24, 0xeb9b1d2a, - 0xde76ab79, 0x7bfd3b77, 0xb5adc7df, 0x102657d1, 0x25cbe182, - 0x8040718c, 0x621b1e93, 0xc7908e9d, 0xf27d38ce, 0x57f6a8c0, - 0x99a65468, 0x3c2dc466, 0x09c07235, 0xac4be23b, 0xa629e496, - 0x03a27498, 0x364fc2cb, 0x93c452c5, 0x5d94ae6d, 0xf81f3e63, - 0xcdf28830, 0x6879183e, 0x8a227721, 0x2fa9e72f, 0x1a44517c, - 0xbfcfc172, 0x719f3dda, 0xd414add4, 0xe1f91b87, 0x44728b89, - 0xfe3ec3f8, 0x5bb553f6, 0x6e58e5a5, 0xcbd375ab, 0x05838903, - 0xa008190d, 0x95e5af5e, 0x306e3f50, 0xd235504f, 0x77bec041, - 0x42537612, 0xe7d8e61c, 0x29881ab4, 0x8c038aba, 0xb9ee3ce9, - 0x1c65ace7}}; + {0x00000000, 0xf1da05aa, 0x38c50d15, 0xc91f08bf, 0x718a1a2a, 0x80501f80, + 0x494f173f, 0xb8951295, 0xe3143454, 0x12ce31fe, 0xdbd13941, 0x2a0b3ceb, + 0x929e2e7e, 0x63442bd4, 0xaa5b236b, 0x5b8126c1, 0x1d596ee9, 0xec836b43, + 0x259c63fc, 0xd4466656, 0x6cd374c3, 0x9d097169, 0x541679d6, 0xa5cc7c7c, + 0xfe4d5abd, 0x0f975f17, 0xc68857a8, 0x37525202, 0x8fc74097, 0x7e1d453d, + 0xb7024d82, 0x46d84828, 0x3ab2ddd2, 0xcb68d878, 0x0277d0c7, 0xf3add56d, + 0x4b38c7f8, 0xbae2c252, 0x73fdcaed, 0x8227cf47, 0xd9a6e986, 0x287cec2c, + 0xe163e493, 0x10b9e139, 0xa82cf3ac, 0x59f6f606, 0x90e9feb9, 0x6133fb13, + 0x27ebb33b, 0xd631b691, 0x1f2ebe2e, 0xeef4bb84, 0x5661a911, 0xa7bbacbb, + 0x6ea4a404, 0x9f7ea1ae, 0xc4ff876f, 0x352582c5, 0xfc3a8a7a, 0x0de08fd0, + 0xb5759d45, 0x44af98ef, 0x8db09050, 0x7c6a95fa, 0x7565bba4, 0x84bfbe0e, + 0x4da0b6b1, 0xbc7ab31b, 0x04efa18e, 0xf535a424, 0x3c2aac9b, 0xcdf0a931, + 0x96718ff0, 0x67ab8a5a, 0xaeb482e5, 0x5f6e874f, 0xe7fb95da, 0x16219070, + 0xdf3e98cf, 0x2ee49d65, 0x683cd54d, 0x99e6d0e7, 0x50f9d858, 0xa123ddf2, + 0x19b6cf67, 0xe86ccacd, 0x2173c272, 0xd0a9c7d8, 0x8b28e119, 0x7af2e4b3, + 0xb3edec0c, 0x4237e9a6, 0xfaa2fb33, 0x0b78fe99, 0xc267f626, 0x33bdf38c, + 0x4fd76676, 0xbe0d63dc, 0x77126b63, 0x86c86ec9, 0x3e5d7c5c, 0xcf8779f6, + 0x06987149, 0xf74274e3, 0xacc35222, 0x5d195788, 0x94065f37, 0x65dc5a9d, + 0xdd494808, 0x2c934da2, 0xe58c451d, 0x145640b7, 0x528e089f, 0xa3540d35, + 0x6a4b058a, 0x9b910020, 0x230412b5, 0xd2de171f, 0x1bc11fa0, 0xea1b1a0a, + 0xb19a3ccb, 0x40403961, 0x895f31de, 0x78853474, 0xc01026e1, 0x31ca234b, + 0xf8d52bf4, 0x090f2e5e, 0xeacb7748, 0x1b1172e2, 0xd20e7a5d, 0x23d47ff7, + 0x9b416d62, 0x6a9b68c8, 0xa3846077, 0x525e65dd, 0x09df431c, 0xf80546b6, + 0x311a4e09, 0xc0c04ba3, 0x78555936, 0x898f5c9c, 0x40905423, 0xb14a5189, + 0xf79219a1, 0x06481c0b, 0xcf5714b4, 0x3e8d111e, 0x8618038b, 0x77c20621, + 0xbedd0e9e, 0x4f070b34, 0x14862df5, 0xe55c285f, 0x2c4320e0, 0xdd99254a, + 0x650c37df, 0x94d63275, 0x5dc93aca, 0xac133f60, 0xd079aa9a, 0x21a3af30, + 0xe8bca78f, 0x1966a225, 0xa1f3b0b0, 0x5029b51a, 0x9936bda5, 0x68ecb80f, + 0x336d9ece, 0xc2b79b64, 0x0ba893db, 0xfa729671, 0x42e784e4, 0xb33d814e, + 0x7a2289f1, 0x8bf88c5b, 0xcd20c473, 0x3cfac1d9, 0xf5e5c966, 0x043fcccc, + 0xbcaade59, 0x4d70dbf3, 0x846fd34c, 0x75b5d6e6, 0x2e34f027, 0xdfeef58d, + 0x16f1fd32, 0xe72bf898, 0x5fbeea0d, 0xae64efa7, 0x677be718, 0x96a1e2b2, + 0x9faeccec, 0x6e74c946, 0xa76bc1f9, 0x56b1c453, 0xee24d6c6, 0x1ffed36c, + 0xd6e1dbd3, 0x273bde79, 0x7cbaf8b8, 0x8d60fd12, 0x447ff5ad, 0xb5a5f007, + 0x0d30e292, 0xfceae738, 0x35f5ef87, 0xc42fea2d, 0x82f7a205, 0x732da7af, + 0xba32af10, 0x4be8aaba, 0xf37db82f, 0x02a7bd85, 0xcbb8b53a, 0x3a62b090, + 0x61e39651, 0x903993fb, 0x59269b44, 0xa8fc9eee, 0x10698c7b, 0xe1b389d1, + 0x28ac816e, 0xd97684c4, 0xa51c113e, 0x54c61494, 0x9dd91c2b, 0x6c031981, + 0xd4960b14, 0x254c0ebe, 0xec530601, 0x1d8903ab, 0x4608256a, 0xb7d220c0, + 0x7ecd287f, 0x8f172dd5, 0x37823f40, 0xc6583aea, 0x0f473255, 0xfe9d37ff, + 0xb8457fd7, 0x499f7a7d, 0x808072c2, 0x715a7768, 0xc9cf65fd, 0x38156057, + 0xf10a68e8, 0x00d06d42, 0x5b514b83, 0xaa8b4e29, 0x63944696, 0x924e433c, + 0x2adb51a9, 0xdb015403, 0x121e5cbc, 0xe3c45916}, + {0x00000000, 0x0ee7e8d1, 0x1dcfd1a2, 0x13283973, 0x3b9fa344, 0x35784b95, + 0x265072e6, 0x28b79a37, 0x773f4688, 0x79d8ae59, 0x6af0972a, 0x64177ffb, + 0x4ca0e5cc, 0x42470d1d, 0x516f346e, 0x5f88dcbf, 0xee7e8d10, 0xe09965c1, + 0xf3b15cb2, 0xfd56b463, 0xd5e12e54, 0xdb06c685, 0xc82efff6, 0xc6c91727, + 0x9941cb98, 0x97a62349, 0x848e1a3a, 0x8a69f2eb, 0xa2de68dc, 0xac39800d, + 0xbf11b97e, 0xb1f651af, 0x078c1c61, 0x096bf4b0, 0x1a43cdc3, 0x14a42512, + 0x3c13bf25, 0x32f457f4, 0x21dc6e87, 0x2f3b8656, 0x70b35ae9, 0x7e54b238, + 0x6d7c8b4b, 0x639b639a, 0x4b2cf9ad, 0x45cb117c, 0x56e3280f, 0x5804c0de, + 0xe9f29171, 0xe71579a0, 0xf43d40d3, 0xfadaa802, 0xd26d3235, 0xdc8adae4, + 0xcfa2e397, 0xc1450b46, 0x9ecdd7f9, 0x902a3f28, 0x8302065b, 0x8de5ee8a, + 0xa55274bd, 0xabb59c6c, 0xb89da51f, 0xb67a4dce, 0x0f1838c2, 0x01ffd013, + 0x12d7e960, 0x1c3001b1, 0x34879b86, 0x3a607357, 0x29484a24, 0x27afa2f5, + 0x78277e4a, 0x76c0969b, 0x65e8afe8, 0x6b0f4739, 0x43b8dd0e, 0x4d5f35df, + 0x5e770cac, 0x5090e47d, 0xe166b5d2, 0xef815d03, 0xfca96470, 0xf24e8ca1, + 0xdaf91696, 0xd41efe47, 0xc736c734, 0xc9d12fe5, 0x9659f35a, 0x98be1b8b, + 0x8b9622f8, 0x8571ca29, 0xadc6501e, 0xa321b8cf, 0xb00981bc, 0xbeee696d, + 0x089424a3, 0x0673cc72, 0x155bf501, 0x1bbc1dd0, 0x330b87e7, 0x3dec6f36, + 0x2ec45645, 0x2023be94, 0x7fab622b, 0x714c8afa, 0x6264b389, 0x6c835b58, + 0x4434c16f, 0x4ad329be, 0x59fb10cd, 0x571cf81c, 0xe6eaa9b3, 0xe80d4162, + 0xfb257811, 0xf5c290c0, 0xdd750af7, 0xd392e226, 0xc0badb55, 0xce5d3384, + 0x91d5ef3b, 0x9f3207ea, 0x8c1a3e99, 0x82fdd648, 0xaa4a4c7f, 0xa4ada4ae, + 0xb7859ddd, 0xb962750c, 0x1e307184, 0x10d79955, 0x03ffa026, 0x0d1848f7, + 0x25afd2c0, 0x2b483a11, 0x38600362, 0x3687ebb3, 0x690f370c, 0x67e8dfdd, + 0x74c0e6ae, 0x7a270e7f, 0x52909448, 0x5c777c99, 0x4f5f45ea, 0x41b8ad3b, + 0xf04efc94, 0xfea91445, 0xed812d36, 0xe366c5e7, 0xcbd15fd0, 0xc536b701, + 0xd61e8e72, 0xd8f966a3, 0x8771ba1c, 0x899652cd, 0x9abe6bbe, 0x9459836f, + 0xbcee1958, 0xb209f189, 0xa121c8fa, 0xafc6202b, 0x19bc6de5, 0x175b8534, + 0x0473bc47, 0x0a945496, 0x2223cea1, 0x2cc42670, 0x3fec1f03, 0x310bf7d2, + 0x6e832b6d, 0x6064c3bc, 0x734cfacf, 0x7dab121e, 0x551c8829, 0x5bfb60f8, + 0x48d3598b, 0x4634b15a, 0xf7c2e0f5, 0xf9250824, 0xea0d3157, 0xe4ead986, + 0xcc5d43b1, 0xc2baab60, 0xd1929213, 0xdf757ac2, 0x80fda67d, 0x8e1a4eac, + 0x9d3277df, 0x93d59f0e, 0xbb620539, 0xb585ede8, 0xa6add49b, 0xa84a3c4a, + 0x11284946, 0x1fcfa197, 0x0ce798e4, 0x02007035, 0x2ab7ea02, 0x245002d3, + 0x37783ba0, 0x399fd371, 0x66170fce, 0x68f0e71f, 0x7bd8de6c, 0x753f36bd, + 0x5d88ac8a, 0x536f445b, 0x40477d28, 0x4ea095f9, 0xff56c456, 0xf1b12c87, + 0xe29915f4, 0xec7efd25, 0xc4c96712, 0xca2e8fc3, 0xd906b6b0, 0xd7e15e61, + 0x886982de, 0x868e6a0f, 0x95a6537c, 0x9b41bbad, 0xb3f6219a, 0xbd11c94b, + 0xae39f038, 0xa0de18e9, 0x16a45527, 0x1843bdf6, 0x0b6b8485, 0x058c6c54, + 0x2d3bf663, 0x23dc1eb2, 0x30f427c1, 0x3e13cf10, 0x619b13af, 0x6f7cfb7e, + 0x7c54c20d, 0x72b32adc, 0x5a04b0eb, 0x54e3583a, 0x47cb6149, 0x492c8998, + 0xf8dad837, 0xf63d30e6, 0xe5150995, 0xebf2e144, 0xc3457b73, 0xcda293a2, + 0xde8aaad1, 0xd06d4200, 0x8fe59ebf, 0x8102766e, 0x922a4f1d, 0x9ccda7cc, + 0xb47a3dfb, 0xba9dd52a, 0xa9b5ec59, 0xa7520488}, + {0x00000000, 0x3c60e308, 0x78c1c610, 0x44a12518, 0xf1838c20, 0xcde36f28, + 0x89424a30, 0xb522a938, 0x38761e01, 0x0416fd09, 0x40b7d811, 0x7cd73b19, + 0xc9f59221, 0xf5957129, 0xb1345431, 0x8d54b739, 0x70ec3c02, 0x4c8cdf0a, + 0x082dfa12, 0x344d191a, 0x816fb022, 0xbd0f532a, 0xf9ae7632, 0xc5ce953a, + 0x489a2203, 0x74fac10b, 0x305be413, 0x0c3b071b, 0xb919ae23, 0x85794d2b, + 0xc1d86833, 0xfdb88b3b, 0xe1d87804, 0xddb89b0c, 0x9919be14, 0xa5795d1c, + 0x105bf424, 0x2c3b172c, 0x689a3234, 0x54fad13c, 0xd9ae6605, 0xe5ce850d, + 0xa16fa015, 0x9d0f431d, 0x282dea25, 0x144d092d, 0x50ec2c35, 0x6c8ccf3d, + 0x91344406, 0xad54a70e, 0xe9f58216, 0xd595611e, 0x60b7c826, 0x5cd72b2e, + 0x18760e36, 0x2416ed3e, 0xa9425a07, 0x9522b90f, 0xd1839c17, 0xede37f1f, + 0x58c1d627, 0x64a1352f, 0x20001037, 0x1c60f33f, 0x18c1f649, 0x24a11541, + 0x60003059, 0x5c60d351, 0xe9427a69, 0xd5229961, 0x9183bc79, 0xade35f71, + 0x20b7e848, 0x1cd70b40, 0x58762e58, 0x6416cd50, 0xd1346468, 0xed548760, + 0xa9f5a278, 0x95954170, 0x682dca4b, 0x544d2943, 0x10ec0c5b, 0x2c8cef53, + 0x99ae466b, 0xa5cea563, 0xe16f807b, 0xdd0f6373, 0x505bd44a, 0x6c3b3742, + 0x289a125a, 0x14faf152, 0xa1d8586a, 0x9db8bb62, 0xd9199e7a, 0xe5797d72, + 0xf9198e4d, 0xc5796d45, 0x81d8485d, 0xbdb8ab55, 0x089a026d, 0x34fae165, + 0x705bc47d, 0x4c3b2775, 0xc16f904c, 0xfd0f7344, 0xb9ae565c, 0x85ceb554, + 0x30ec1c6c, 0x0c8cff64, 0x482dda7c, 0x744d3974, 0x89f5b24f, 0xb5955147, + 0xf134745f, 0xcd549757, 0x78763e6f, 0x4416dd67, 0x00b7f87f, 0x3cd71b77, + 0xb183ac4e, 0x8de34f46, 0xc9426a5e, 0xf5228956, 0x4000206e, 0x7c60c366, + 0x38c1e67e, 0x04a10576, 0x3183ec92, 0x0de30f9a, 0x49422a82, 0x7522c98a, + 0xc00060b2, 0xfc6083ba, 0xb8c1a6a2, 0x84a145aa, 0x09f5f293, 0x3595119b, + 0x71343483, 0x4d54d78b, 0xf8767eb3, 0xc4169dbb, 0x80b7b8a3, 0xbcd75bab, + 0x416fd090, 0x7d0f3398, 0x39ae1680, 0x05cef588, 0xb0ec5cb0, 0x8c8cbfb8, + 0xc82d9aa0, 0xf44d79a8, 0x7919ce91, 0x45792d99, 0x01d80881, 0x3db8eb89, + 0x889a42b1, 0xb4faa1b9, 0xf05b84a1, 0xcc3b67a9, 0xd05b9496, 0xec3b779e, + 0xa89a5286, 0x94fab18e, 0x21d818b6, 0x1db8fbbe, 0x5919dea6, 0x65793dae, + 0xe82d8a97, 0xd44d699f, 0x90ec4c87, 0xac8caf8f, 0x19ae06b7, 0x25cee5bf, + 0x616fc0a7, 0x5d0f23af, 0xa0b7a894, 0x9cd74b9c, 0xd8766e84, 0xe4168d8c, + 0x513424b4, 0x6d54c7bc, 0x29f5e2a4, 0x159501ac, 0x98c1b695, 0xa4a1559d, + 0xe0007085, 0xdc60938d, 0x69423ab5, 0x5522d9bd, 0x1183fca5, 0x2de31fad, + 0x29421adb, 0x1522f9d3, 0x5183dccb, 0x6de33fc3, 0xd8c196fb, 0xe4a175f3, + 0xa00050eb, 0x9c60b3e3, 0x113404da, 0x2d54e7d2, 0x69f5c2ca, 0x559521c2, + 0xe0b788fa, 0xdcd76bf2, 0x98764eea, 0xa416ade2, 0x59ae26d9, 0x65cec5d1, + 0x216fe0c9, 0x1d0f03c1, 0xa82daaf9, 0x944d49f1, 0xd0ec6ce9, 0xec8c8fe1, + 0x61d838d8, 0x5db8dbd0, 0x1919fec8, 0x25791dc0, 0x905bb4f8, 0xac3b57f0, + 0xe89a72e8, 0xd4fa91e0, 0xc89a62df, 0xf4fa81d7, 0xb05ba4cf, 0x8c3b47c7, + 0x3919eeff, 0x05790df7, 0x41d828ef, 0x7db8cbe7, 0xf0ec7cde, 0xcc8c9fd6, + 0x882dbace, 0xb44d59c6, 0x016ff0fe, 0x3d0f13f6, 0x79ae36ee, 0x45ced5e6, + 0xb8765edd, 0x8416bdd5, 0xc0b798cd, 0xfcd77bc5, 0x49f5d2fd, 0x759531f5, + 0x313414ed, 0x0d54f7e5, 0x800040dc, 0xbc60a3d4, 0xf8c186cc, 0xc4a165c4, + 0x7183ccfc, 0x4de32ff4, 0x09420aec, 0x3522e9e4}, + {0x00000000, 0x6307d924, 0xc60fb248, 0xa5086b6c, 0x576e62d1, 0x3469bbf5, + 0x9161d099, 0xf26609bd, 0xaedcc5a2, 0xcddb1c86, 0x68d377ea, 0x0bd4aece, + 0xf9b2a773, 0x9ab57e57, 0x3fbd153b, 0x5cbacc1f, 0x86c88d05, 0xe5cf5421, + 0x40c73f4d, 0x23c0e669, 0xd1a6efd4, 0xb2a136f0, 0x17a95d9c, 0x74ae84b8, + 0x281448a7, 0x4b139183, 0xee1bfaef, 0x8d1c23cb, 0x7f7a2a76, 0x1c7df352, + 0xb975983e, 0xda72411a, 0xd6e01c4b, 0xb5e7c56f, 0x10efae03, 0x73e87727, + 0x818e7e9a, 0xe289a7be, 0x4781ccd2, 0x248615f6, 0x783cd9e9, 0x1b3b00cd, + 0xbe336ba1, 0xdd34b285, 0x2f52bb38, 0x4c55621c, 0xe95d0970, 0x8a5ad054, + 0x5028914e, 0x332f486a, 0x96272306, 0xf520fa22, 0x0746f39f, 0x64412abb, + 0xc14941d7, 0xa24e98f3, 0xfef454ec, 0x9df38dc8, 0x38fbe6a4, 0x5bfc3f80, + 0xa99a363d, 0xca9def19, 0x6f958475, 0x0c925d51, 0x76b13ed7, 0x15b6e7f3, + 0xb0be8c9f, 0xd3b955bb, 0x21df5c06, 0x42d88522, 0xe7d0ee4e, 0x84d7376a, + 0xd86dfb75, 0xbb6a2251, 0x1e62493d, 0x7d659019, 0x8f0399a4, 0xec044080, + 0x490c2bec, 0x2a0bf2c8, 0xf079b3d2, 0x937e6af6, 0x3676019a, 0x5571d8be, + 0xa717d103, 0xc4100827, 0x6118634b, 0x021fba6f, 0x5ea57670, 0x3da2af54, + 0x98aac438, 0xfbad1d1c, 0x09cb14a1, 0x6acccd85, 0xcfc4a6e9, 0xacc37fcd, + 0xa051229c, 0xc356fbb8, 0x665e90d4, 0x055949f0, 0xf73f404d, 0x94389969, + 0x3130f205, 0x52372b21, 0x0e8de73e, 0x6d8a3e1a, 0xc8825576, 0xab858c52, + 0x59e385ef, 0x3ae45ccb, 0x9fec37a7, 0xfcebee83, 0x2699af99, 0x459e76bd, + 0xe0961dd1, 0x8391c4f5, 0x71f7cd48, 0x12f0146c, 0xb7f87f00, 0xd4ffa624, + 0x88456a3b, 0xeb42b31f, 0x4e4ad873, 0x2d4d0157, 0xdf2b08ea, 0xbc2cd1ce, + 0x1924baa2, 0x7a236386, 0xed627dae, 0x8e65a48a, 0x2b6dcfe6, 0x486a16c2, + 0xba0c1f7f, 0xd90bc65b, 0x7c03ad37, 0x1f047413, 0x43beb80c, 0x20b96128, + 0x85b10a44, 0xe6b6d360, 0x14d0dadd, 0x77d703f9, 0xd2df6895, 0xb1d8b1b1, + 0x6baaf0ab, 0x08ad298f, 0xada542e3, 0xcea29bc7, 0x3cc4927a, 0x5fc34b5e, + 0xfacb2032, 0x99ccf916, 0xc5763509, 0xa671ec2d, 0x03798741, 0x607e5e65, + 0x921857d8, 0xf11f8efc, 0x5417e590, 0x37103cb4, 0x3b8261e5, 0x5885b8c1, + 0xfd8dd3ad, 0x9e8a0a89, 0x6cec0334, 0x0febda10, 0xaae3b17c, 0xc9e46858, + 0x955ea447, 0xf6597d63, 0x5351160f, 0x3056cf2b, 0xc230c696, 0xa1371fb2, + 0x043f74de, 0x6738adfa, 0xbd4aece0, 0xde4d35c4, 0x7b455ea8, 0x1842878c, + 0xea248e31, 0x89235715, 0x2c2b3c79, 0x4f2ce55d, 0x13962942, 0x7091f066, + 0xd5999b0a, 0xb69e422e, 0x44f84b93, 0x27ff92b7, 0x82f7f9db, 0xe1f020ff, + 0x9bd34379, 0xf8d49a5d, 0x5ddcf131, 0x3edb2815, 0xccbd21a8, 0xafbaf88c, + 0x0ab293e0, 0x69b54ac4, 0x350f86db, 0x56085fff, 0xf3003493, 0x9007edb7, + 0x6261e40a, 0x01663d2e, 0xa46e5642, 0xc7698f66, 0x1d1bce7c, 0x7e1c1758, + 0xdb147c34, 0xb813a510, 0x4a75acad, 0x29727589, 0x8c7a1ee5, 0xef7dc7c1, + 0xb3c70bde, 0xd0c0d2fa, 0x75c8b996, 0x16cf60b2, 0xe4a9690f, 0x87aeb02b, + 0x22a6db47, 0x41a10263, 0x4d335f32, 0x2e348616, 0x8b3ced7a, 0xe83b345e, + 0x1a5d3de3, 0x795ae4c7, 0xdc528fab, 0xbf55568f, 0xe3ef9a90, 0x80e843b4, + 0x25e028d8, 0x46e7f1fc, 0xb481f841, 0xd7862165, 0x728e4a09, 0x1189932d, + 0xcbfbd237, 0xa8fc0b13, 0x0df4607f, 0x6ef3b95b, 0x9c95b0e6, 0xff9269c2, + 0x5a9a02ae, 0x399ddb8a, 0x65271795, 0x0620ceb1, 0xa328a5dd, 0xc02f7cf9, + 0x32497544, 0x514eac60, 0xf446c70c, 0x97411e28}, + {0x00000000, 0x01b5fd1d, 0x036bfa3a, 0x02de0727, 0x06d7f474, 0x07620969, + 0x05bc0e4e, 0x0409f353, 0x0dafe8e8, 0x0c1a15f5, 0x0ec412d2, 0x0f71efcf, + 0x0b781c9c, 0x0acde181, 0x0813e6a6, 0x09a61bbb, 0x1b5fd1d0, 0x1aea2ccd, + 0x18342bea, 0x1981d6f7, 0x1d8825a4, 0x1c3dd8b9, 0x1ee3df9e, 0x1f562283, + 0x16f03938, 0x1745c425, 0x159bc302, 0x142e3e1f, 0x1027cd4c, 0x11923051, + 0x134c3776, 0x12f9ca6b, 0x36bfa3a0, 0x370a5ebd, 0x35d4599a, 0x3461a487, + 0x306857d4, 0x31ddaac9, 0x3303adee, 0x32b650f3, 0x3b104b48, 0x3aa5b655, + 0x387bb172, 0x39ce4c6f, 0x3dc7bf3c, 0x3c724221, 0x3eac4506, 0x3f19b81b, + 0x2de07270, 0x2c558f6d, 0x2e8b884a, 0x2f3e7557, 0x2b378604, 0x2a827b19, + 0x285c7c3e, 0x29e98123, 0x204f9a98, 0x21fa6785, 0x232460a2, 0x22919dbf, + 0x26986eec, 0x272d93f1, 0x25f394d6, 0x244669cb, 0x6d7f4740, 0x6ccaba5d, + 0x6e14bd7a, 0x6fa14067, 0x6ba8b334, 0x6a1d4e29, 0x68c3490e, 0x6976b413, + 0x60d0afa8, 0x616552b5, 0x63bb5592, 0x620ea88f, 0x66075bdc, 0x67b2a6c1, + 0x656ca1e6, 0x64d95cfb, 0x76209690, 0x77956b8d, 0x754b6caa, 0x74fe91b7, + 0x70f762e4, 0x71429ff9, 0x739c98de, 0x722965c3, 0x7b8f7e78, 0x7a3a8365, + 0x78e48442, 0x7951795f, 0x7d588a0c, 0x7ced7711, 0x7e337036, 0x7f868d2b, + 0x5bc0e4e0, 0x5a7519fd, 0x58ab1eda, 0x591ee3c7, 0x5d171094, 0x5ca2ed89, + 0x5e7ceaae, 0x5fc917b3, 0x566f0c08, 0x57daf115, 0x5504f632, 0x54b10b2f, + 0x50b8f87c, 0x510d0561, 0x53d30246, 0x5266ff5b, 0x409f3530, 0x412ac82d, + 0x43f4cf0a, 0x42413217, 0x4648c144, 0x47fd3c59, 0x45233b7e, 0x4496c663, + 0x4d30ddd8, 0x4c8520c5, 0x4e5b27e2, 0x4feedaff, 0x4be729ac, 0x4a52d4b1, + 0x488cd396, 0x49392e8b, 0xdafe8e80, 0xdb4b739d, 0xd99574ba, 0xd82089a7, + 0xdc297af4, 0xdd9c87e9, 0xdf4280ce, 0xdef77dd3, 0xd7516668, 0xd6e49b75, + 0xd43a9c52, 0xd58f614f, 0xd186921c, 0xd0336f01, 0xd2ed6826, 0xd358953b, + 0xc1a15f50, 0xc014a24d, 0xc2caa56a, 0xc37f5877, 0xc776ab24, 0xc6c35639, + 0xc41d511e, 0xc5a8ac03, 0xcc0eb7b8, 0xcdbb4aa5, 0xcf654d82, 0xced0b09f, + 0xcad943cc, 0xcb6cbed1, 0xc9b2b9f6, 0xc80744eb, 0xec412d20, 0xedf4d03d, + 0xef2ad71a, 0xee9f2a07, 0xea96d954, 0xeb232449, 0xe9fd236e, 0xe848de73, + 0xe1eec5c8, 0xe05b38d5, 0xe2853ff2, 0xe330c2ef, 0xe73931bc, 0xe68ccca1, + 0xe452cb86, 0xe5e7369b, 0xf71efcf0, 0xf6ab01ed, 0xf47506ca, 0xf5c0fbd7, + 0xf1c90884, 0xf07cf599, 0xf2a2f2be, 0xf3170fa3, 0xfab11418, 0xfb04e905, + 0xf9daee22, 0xf86f133f, 0xfc66e06c, 0xfdd31d71, 0xff0d1a56, 0xfeb8e74b, + 0xb781c9c0, 0xb63434dd, 0xb4ea33fa, 0xb55fcee7, 0xb1563db4, 0xb0e3c0a9, + 0xb23dc78e, 0xb3883a93, 0xba2e2128, 0xbb9bdc35, 0xb945db12, 0xb8f0260f, + 0xbcf9d55c, 0xbd4c2841, 0xbf922f66, 0xbe27d27b, 0xacde1810, 0xad6be50d, + 0xafb5e22a, 0xae001f37, 0xaa09ec64, 0xabbc1179, 0xa962165e, 0xa8d7eb43, + 0xa171f0f8, 0xa0c40de5, 0xa21a0ac2, 0xa3aff7df, 0xa7a6048c, 0xa613f991, + 0xa4cdfeb6, 0xa57803ab, 0x813e6a60, 0x808b977d, 0x8255905a, 0x83e06d47, + 0x87e99e14, 0x865c6309, 0x8482642e, 0x85379933, 0x8c918288, 0x8d247f95, + 0x8ffa78b2, 0x8e4f85af, 0x8a4676fc, 0x8bf38be1, 0x892d8cc6, 0x889871db, + 0x9a61bbb0, 0x9bd446ad, 0x990a418a, 0x98bfbc97, 0x9cb64fc4, 0x9d03b2d9, + 0x9fddb5fe, 0x9e6848e3, 0x97ce5358, 0x967bae45, 0x94a5a962, 0x9510547f, + 0x9119a72c, 0x90ac5a31, 0x92725d16, 0x93c7a00b}, + {0x00000000, 0x6e8c1b41, 0xdd183682, 0xb3942dc3, 0x61416b45, 0x0fcd7004, + 0xbc595dc7, 0xd2d54686, 0xc282d68a, 0xac0ecdcb, 0x1f9ae008, 0x7116fb49, + 0xa3c3bdcf, 0xcd4fa68e, 0x7edb8b4d, 0x1057900c, 0x5e74ab55, 0x30f8b014, + 0x836c9dd7, 0xede08696, 0x3f35c010, 0x51b9db51, 0xe22df692, 0x8ca1edd3, + 0x9cf67ddf, 0xf27a669e, 0x41ee4b5d, 0x2f62501c, 0xfdb7169a, 0x933b0ddb, + 0x20af2018, 0x4e233b59, 0xbce956aa, 0xd2654deb, 0x61f16028, 0x0f7d7b69, + 0xdda83def, 0xb32426ae, 0x00b00b6d, 0x6e3c102c, 0x7e6b8020, 0x10e79b61, + 0xa373b6a2, 0xcdffade3, 0x1f2aeb65, 0x71a6f024, 0xc232dde7, 0xacbec6a6, + 0xe29dfdff, 0x8c11e6be, 0x3f85cb7d, 0x5109d03c, 0x83dc96ba, 0xed508dfb, + 0x5ec4a038, 0x3048bb79, 0x201f2b75, 0x4e933034, 0xfd071df7, 0x938b06b6, + 0x415e4030, 0x2fd25b71, 0x9c4676b2, 0xf2ca6df3, 0xa2a3ab15, 0xcc2fb054, + 0x7fbb9d97, 0x113786d6, 0xc3e2c050, 0xad6edb11, 0x1efaf6d2, 0x7076ed93, + 0x60217d9f, 0x0ead66de, 0xbd394b1d, 0xd3b5505c, 0x016016da, 0x6fec0d9b, + 0xdc782058, 0xb2f43b19, 0xfcd70040, 0x925b1b01, 0x21cf36c2, 0x4f432d83, + 0x9d966b05, 0xf31a7044, 0x408e5d87, 0x2e0246c6, 0x3e55d6ca, 0x50d9cd8b, + 0xe34de048, 0x8dc1fb09, 0x5f14bd8f, 0x3198a6ce, 0x820c8b0d, 0xec80904c, + 0x1e4afdbf, 0x70c6e6fe, 0xc352cb3d, 0xadded07c, 0x7f0b96fa, 0x11878dbb, + 0xa213a078, 0xcc9fbb39, 0xdcc82b35, 0xb2443074, 0x01d01db7, 0x6f5c06f6, + 0xbd894070, 0xd3055b31, 0x609176f2, 0x0e1d6db3, 0x403e56ea, 0x2eb24dab, + 0x9d266068, 0xf3aa7b29, 0x217f3daf, 0x4ff326ee, 0xfc670b2d, 0x92eb106c, + 0x82bc8060, 0xec309b21, 0x5fa4b6e2, 0x3128ada3, 0xe3fdeb25, 0x8d71f064, + 0x3ee5dda7, 0x5069c6e6, 0x9e36506b, 0xf0ba4b2a, 0x432e66e9, 0x2da27da8, + 0xff773b2e, 0x91fb206f, 0x226f0dac, 0x4ce316ed, 0x5cb486e1, 0x32389da0, + 0x81acb063, 0xef20ab22, 0x3df5eda4, 0x5379f6e5, 0xe0eddb26, 0x8e61c067, + 0xc042fb3e, 0xaecee07f, 0x1d5acdbc, 0x73d6d6fd, 0xa103907b, 0xcf8f8b3a, + 0x7c1ba6f9, 0x1297bdb8, 0x02c02db4, 0x6c4c36f5, 0xdfd81b36, 0xb1540077, + 0x638146f1, 0x0d0d5db0, 0xbe997073, 0xd0156b32, 0x22df06c1, 0x4c531d80, + 0xffc73043, 0x914b2b02, 0x439e6d84, 0x2d1276c5, 0x9e865b06, 0xf00a4047, + 0xe05dd04b, 0x8ed1cb0a, 0x3d45e6c9, 0x53c9fd88, 0x811cbb0e, 0xef90a04f, + 0x5c048d8c, 0x328896cd, 0x7cabad94, 0x1227b6d5, 0xa1b39b16, 0xcf3f8057, + 0x1deac6d1, 0x7366dd90, 0xc0f2f053, 0xae7eeb12, 0xbe297b1e, 0xd0a5605f, + 0x63314d9c, 0x0dbd56dd, 0xdf68105b, 0xb1e40b1a, 0x027026d9, 0x6cfc3d98, + 0x3c95fb7e, 0x5219e03f, 0xe18dcdfc, 0x8f01d6bd, 0x5dd4903b, 0x33588b7a, + 0x80cca6b9, 0xee40bdf8, 0xfe172df4, 0x909b36b5, 0x230f1b76, 0x4d830037, + 0x9f5646b1, 0xf1da5df0, 0x424e7033, 0x2cc26b72, 0x62e1502b, 0x0c6d4b6a, + 0xbff966a9, 0xd1757de8, 0x03a03b6e, 0x6d2c202f, 0xdeb80dec, 0xb03416ad, + 0xa06386a1, 0xceef9de0, 0x7d7bb023, 0x13f7ab62, 0xc122ede4, 0xafaef6a5, + 0x1c3adb66, 0x72b6c027, 0x807cadd4, 0xeef0b695, 0x5d649b56, 0x33e88017, + 0xe13dc691, 0x8fb1ddd0, 0x3c25f013, 0x52a9eb52, 0x42fe7b5e, 0x2c72601f, + 0x9fe64ddc, 0xf16a569d, 0x23bf101b, 0x4d330b5a, 0xfea72699, 0x902b3dd8, + 0xde080681, 0xb0841dc0, 0x03103003, 0x6d9c2b42, 0xbf496dc4, 0xd1c57685, + 0x62515b46, 0x0cdd4007, 0x1c8ad00b, 0x7206cb4a, 0xc192e689, 0xaf1efdc8, + 0x7dcbbb4e, 0x1347a00f, 0xa0d38dcc, 0xce5f968d}, + {0x00000000, 0xe71da697, 0x154a4b6f, 0xf257edf8, 0x2a9496de, 0xcd893049, + 0x3fdeddb1, 0xd8c37b26, 0x55292dbc, 0xb2348b2b, 0x406366d3, 0xa77ec044, + 0x7fbdbb62, 0x98a01df5, 0x6af7f00d, 0x8dea569a, 0xaa525b78, 0x4d4ffdef, + 0xbf181017, 0x5805b680, 0x80c6cda6, 0x67db6b31, 0x958c86c9, 0x7291205e, + 0xff7b76c4, 0x1866d053, 0xea313dab, 0x0d2c9b3c, 0xd5efe01a, 0x32f2468d, + 0xc0a5ab75, 0x27b80de2, 0x8fd5b0b1, 0x68c81626, 0x9a9ffbde, 0x7d825d49, + 0xa541266f, 0x425c80f8, 0xb00b6d00, 0x5716cb97, 0xdafc9d0d, 0x3de13b9a, + 0xcfb6d662, 0x28ab70f5, 0xf0680bd3, 0x1775ad44, 0xe52240bc, 0x023fe62b, + 0x2587ebc9, 0xc29a4d5e, 0x30cda0a6, 0xd7d00631, 0x0f137d17, 0xe80edb80, + 0x1a593678, 0xfd4490ef, 0x70aec675, 0x97b360e2, 0x65e48d1a, 0x82f92b8d, + 0x5a3a50ab, 0xbd27f63c, 0x4f701bc4, 0xa86dbd53, 0xc4da6723, 0x23c7c1b4, + 0xd1902c4c, 0x368d8adb, 0xee4ef1fd, 0x0953576a, 0xfb04ba92, 0x1c191c05, + 0x91f34a9f, 0x76eeec08, 0x84b901f0, 0x63a4a767, 0xbb67dc41, 0x5c7a7ad6, + 0xae2d972e, 0x493031b9, 0x6e883c5b, 0x89959acc, 0x7bc27734, 0x9cdfd1a3, + 0x441caa85, 0xa3010c12, 0x5156e1ea, 0xb64b477d, 0x3ba111e7, 0xdcbcb770, + 0x2eeb5a88, 0xc9f6fc1f, 0x11358739, 0xf62821ae, 0x047fcc56, 0xe3626ac1, + 0x4b0fd792, 0xac127105, 0x5e459cfd, 0xb9583a6a, 0x619b414c, 0x8686e7db, + 0x74d10a23, 0x93ccacb4, 0x1e26fa2e, 0xf93b5cb9, 0x0b6cb141, 0xec7117d6, + 0x34b26cf0, 0xd3afca67, 0x21f8279f, 0xc6e58108, 0xe15d8cea, 0x06402a7d, + 0xf417c785, 0x130a6112, 0xcbc91a34, 0x2cd4bca3, 0xde83515b, 0x399ef7cc, + 0xb474a156, 0x536907c1, 0xa13eea39, 0x46234cae, 0x9ee03788, 0x79fd911f, + 0x8baa7ce7, 0x6cb7da70, 0x52c5c807, 0xb5d86e90, 0x478f8368, 0xa09225ff, + 0x78515ed9, 0x9f4cf84e, 0x6d1b15b6, 0x8a06b321, 0x07ece5bb, 0xe0f1432c, + 0x12a6aed4, 0xf5bb0843, 0x2d787365, 0xca65d5f2, 0x3832380a, 0xdf2f9e9d, + 0xf897937f, 0x1f8a35e8, 0xedddd810, 0x0ac07e87, 0xd20305a1, 0x351ea336, + 0xc7494ece, 0x2054e859, 0xadbebec3, 0x4aa31854, 0xb8f4f5ac, 0x5fe9533b, + 0x872a281d, 0x60378e8a, 0x92606372, 0x757dc5e5, 0xdd1078b6, 0x3a0dde21, + 0xc85a33d9, 0x2f47954e, 0xf784ee68, 0x109948ff, 0xe2cea507, 0x05d30390, + 0x8839550a, 0x6f24f39d, 0x9d731e65, 0x7a6eb8f2, 0xa2adc3d4, 0x45b06543, + 0xb7e788bb, 0x50fa2e2c, 0x774223ce, 0x905f8559, 0x620868a1, 0x8515ce36, + 0x5dd6b510, 0xbacb1387, 0x489cfe7f, 0xaf8158e8, 0x226b0e72, 0xc576a8e5, + 0x3721451d, 0xd03ce38a, 0x08ff98ac, 0xefe23e3b, 0x1db5d3c3, 0xfaa87554, + 0x961faf24, 0x710209b3, 0x8355e44b, 0x644842dc, 0xbc8b39fa, 0x5b969f6d, + 0xa9c17295, 0x4edcd402, 0xc3368298, 0x242b240f, 0xd67cc9f7, 0x31616f60, + 0xe9a21446, 0x0ebfb2d1, 0xfce85f29, 0x1bf5f9be, 0x3c4df45c, 0xdb5052cb, + 0x2907bf33, 0xce1a19a4, 0x16d96282, 0xf1c4c415, 0x039329ed, 0xe48e8f7a, + 0x6964d9e0, 0x8e797f77, 0x7c2e928f, 0x9b333418, 0x43f04f3e, 0xa4ede9a9, + 0x56ba0451, 0xb1a7a2c6, 0x19ca1f95, 0xfed7b902, 0x0c8054fa, 0xeb9df26d, + 0x335e894b, 0xd4432fdc, 0x2614c224, 0xc10964b3, 0x4ce33229, 0xabfe94be, + 0x59a97946, 0xbeb4dfd1, 0x6677a4f7, 0x816a0260, 0x733def98, 0x9420490f, + 0xb39844ed, 0x5485e27a, 0xa6d20f82, 0x41cfa915, 0x990cd233, 0x7e1174a4, + 0x8c46995c, 0x6b5b3fcb, 0xe6b16951, 0x01accfc6, 0xf3fb223e, 0x14e684a9, + 0xcc25ff8f, 0x2b385918, 0xd96fb4e0, 0x3e721277}, + {0x00000000, 0xa58b900e, 0x9066265d, 0x35edb653, 0xfbbd4afb, 0x5e36daf5, + 0x6bdb6ca6, 0xce50fca8, 0x2c0b93b7, 0x898003b9, 0xbc6db5ea, 0x19e625e4, + 0xd7b6d94c, 0x723d4942, 0x47d0ff11, 0xe25b6f1f, 0x5817276e, 0xfd9cb760, + 0xc8710133, 0x6dfa913d, 0xa3aa6d95, 0x0621fd9b, 0x33cc4bc8, 0x9647dbc6, + 0x741cb4d9, 0xd19724d7, 0xe47a9284, 0x41f1028a, 0x8fa1fe22, 0x2a2a6e2c, + 0x1fc7d87f, 0xba4c4871, 0xb02e4edc, 0x15a5ded2, 0x20486881, 0x85c3f88f, + 0x4b930427, 0xee189429, 0xdbf5227a, 0x7e7eb274, 0x9c25dd6b, 0x39ae4d65, + 0x0c43fb36, 0xa9c86b38, 0x67989790, 0xc213079e, 0xf7feb1cd, 0x527521c3, + 0xe83969b2, 0x4db2f9bc, 0x785f4fef, 0xddd4dfe1, 0x13842349, 0xb60fb347, + 0x83e20514, 0x2669951a, 0xc432fa05, 0x61b96a0b, 0x5454dc58, 0xf1df4c56, + 0x3f8fb0fe, 0x9a0420f0, 0xafe996a3, 0x0a6206ad, 0xbb2d9bf9, 0x1ea60bf7, + 0x2b4bbda4, 0x8ec02daa, 0x4090d102, 0xe51b410c, 0xd0f6f75f, 0x757d6751, + 0x9726084e, 0x32ad9840, 0x07402e13, 0xa2cbbe1d, 0x6c9b42b5, 0xc910d2bb, + 0xfcfd64e8, 0x5976f4e6, 0xe33abc97, 0x46b12c99, 0x735c9aca, 0xd6d70ac4, + 0x1887f66c, 0xbd0c6662, 0x88e1d031, 0x2d6a403f, 0xcf312f20, 0x6ababf2e, + 0x5f57097d, 0xfadc9973, 0x348c65db, 0x9107f5d5, 0xa4ea4386, 0x0161d388, + 0x0b03d525, 0xae88452b, 0x9b65f378, 0x3eee6376, 0xf0be9fde, 0x55350fd0, + 0x60d8b983, 0xc553298d, 0x27084692, 0x8283d69c, 0xb76e60cf, 0x12e5f0c1, + 0xdcb50c69, 0x793e9c67, 0x4cd32a34, 0xe958ba3a, 0x5314f24b, 0xf69f6245, + 0xc372d416, 0x66f94418, 0xa8a9b8b0, 0x0d2228be, 0x38cf9eed, 0x9d440ee3, + 0x7f1f61fc, 0xda94f1f2, 0xef7947a1, 0x4af2d7af, 0x84a22b07, 0x2129bb09, + 0x14c40d5a, 0xb14f9d54, 0xad2a31b3, 0x08a1a1bd, 0x3d4c17ee, 0x98c787e0, + 0x56977b48, 0xf31ceb46, 0xc6f15d15, 0x637acd1b, 0x8121a204, 0x24aa320a, + 0x11478459, 0xb4cc1457, 0x7a9ce8ff, 0xdf1778f1, 0xeafacea2, 0x4f715eac, + 0xf53d16dd, 0x50b686d3, 0x655b3080, 0xc0d0a08e, 0x0e805c26, 0xab0bcc28, + 0x9ee67a7b, 0x3b6dea75, 0xd936856a, 0x7cbd1564, 0x4950a337, 0xecdb3339, + 0x228bcf91, 0x87005f9f, 0xb2ede9cc, 0x176679c2, 0x1d047f6f, 0xb88fef61, + 0x8d625932, 0x28e9c93c, 0xe6b93594, 0x4332a59a, 0x76df13c9, 0xd35483c7, + 0x310fecd8, 0x94847cd6, 0xa169ca85, 0x04e25a8b, 0xcab2a623, 0x6f39362d, + 0x5ad4807e, 0xff5f1070, 0x45135801, 0xe098c80f, 0xd5757e5c, 0x70feee52, + 0xbeae12fa, 0x1b2582f4, 0x2ec834a7, 0x8b43a4a9, 0x6918cbb6, 0xcc935bb8, + 0xf97eedeb, 0x5cf57de5, 0x92a5814d, 0x372e1143, 0x02c3a710, 0xa748371e, + 0x1607aa4a, 0xb38c3a44, 0x86618c17, 0x23ea1c19, 0xedbae0b1, 0x483170bf, + 0x7ddcc6ec, 0xd85756e2, 0x3a0c39fd, 0x9f87a9f3, 0xaa6a1fa0, 0x0fe18fae, + 0xc1b17306, 0x643ae308, 0x51d7555b, 0xf45cc555, 0x4e108d24, 0xeb9b1d2a, + 0xde76ab79, 0x7bfd3b77, 0xb5adc7df, 0x102657d1, 0x25cbe182, 0x8040718c, + 0x621b1e93, 0xc7908e9d, 0xf27d38ce, 0x57f6a8c0, 0x99a65468, 0x3c2dc466, + 0x09c07235, 0xac4be23b, 0xa629e496, 0x03a27498, 0x364fc2cb, 0x93c452c5, + 0x5d94ae6d, 0xf81f3e63, 0xcdf28830, 0x6879183e, 0x8a227721, 0x2fa9e72f, + 0x1a44517c, 0xbfcfc172, 0x719f3dda, 0xd414add4, 0xe1f91b87, 0x44728b89, + 0xfe3ec3f8, 0x5bb553f6, 0x6e58e5a5, 0xcbd375ab, 0x05838903, 0xa008190d, + 0x95e5af5e, 0x306e3f50, 0xd235504f, 0x77bec041, 0x42537612, 0xe7d8e61c, + 0x29881ab4, 0x8c038aba, 0xb9ee3ce9, 0x1c65ace7}}; local const z_word_t FAR crc_braid_big_table[][256] = { - {0x0000000000000000, 0x0e908ba500000000, 0x5d26669000000000, - 0x53b6ed3500000000, 0xfb4abdfb00000000, 0xf5da365e00000000, - 0xa66cdb6b00000000, 0xa8fc50ce00000000, 0xb7930b2c00000000, - 0xb903808900000000, 0xeab56dbc00000000, 0xe425e61900000000, - 0x4cd9b6d700000000, 0x42493d7200000000, 0x11ffd04700000000, - 0x1f6f5be200000000, 0x6e27175800000000, 0x60b79cfd00000000, - 0x330171c800000000, 0x3d91fa6d00000000, 0x956daaa300000000, - 0x9bfd210600000000, 0xc84bcc3300000000, 0xc6db479600000000, - 0xd9b41c7400000000, 0xd72497d100000000, 0x84927ae400000000, - 0x8a02f14100000000, 0x22fea18f00000000, 0x2c6e2a2a00000000, - 0x7fd8c71f00000000, 0x71484cba00000000, 0xdc4e2eb000000000, - 0xd2dea51500000000, 0x8168482000000000, 0x8ff8c38500000000, - 0x2704934b00000000, 0x299418ee00000000, 0x7a22f5db00000000, - 0x74b27e7e00000000, 0x6bdd259c00000000, 0x654dae3900000000, - 0x36fb430c00000000, 0x386bc8a900000000, 0x9097986700000000, - 0x9e0713c200000000, 0xcdb1fef700000000, 0xc321755200000000, - 0xb26939e800000000, 0xbcf9b24d00000000, 0xef4f5f7800000000, - 0xe1dfd4dd00000000, 0x4923841300000000, 0x47b30fb600000000, - 0x1405e28300000000, 0x1a95692600000000, 0x05fa32c400000000, - 0x0b6ab96100000000, 0x58dc545400000000, 0x564cdff100000000, - 0xfeb08f3f00000000, 0xf020049a00000000, 0xa396e9af00000000, - 0xad06620a00000000, 0xf99b2dbb00000000, 0xf70ba61e00000000, - 0xa4bd4b2b00000000, 0xaa2dc08e00000000, 0x02d1904000000000, - 0x0c411be500000000, 0x5ff7f6d000000000, 0x51677d7500000000, - 0x4e08269700000000, 0x4098ad3200000000, 0x132e400700000000, - 0x1dbecba200000000, 0xb5429b6c00000000, 0xbbd210c900000000, - 0xe864fdfc00000000, 0xe6f4765900000000, 0x97bc3ae300000000, - 0x992cb14600000000, 0xca9a5c7300000000, 0xc40ad7d600000000, - 0x6cf6871800000000, 0x62660cbd00000000, 0x31d0e18800000000, - 0x3f406a2d00000000, 0x202f31cf00000000, 0x2ebfba6a00000000, - 0x7d09575f00000000, 0x7399dcfa00000000, 0xdb658c3400000000, - 0xd5f5079100000000, 0x8643eaa400000000, 0x88d3610100000000, - 0x25d5030b00000000, 0x2b4588ae00000000, 0x78f3659b00000000, - 0x7663ee3e00000000, 0xde9fbef000000000, 0xd00f355500000000, - 0x83b9d86000000000, 0x8d2953c500000000, 0x9246082700000000, - 0x9cd6838200000000, 0xcf606eb700000000, 0xc1f0e51200000000, - 0x690cb5dc00000000, 0x679c3e7900000000, 0x342ad34c00000000, - 0x3aba58e900000000, 0x4bf2145300000000, 0x45629ff600000000, - 0x16d472c300000000, 0x1844f96600000000, 0xb0b8a9a800000000, - 0xbe28220d00000000, 0xed9ecf3800000000, 0xe30e449d00000000, - 0xfc611f7f00000000, 0xf2f194da00000000, 0xa14779ef00000000, - 0xafd7f24a00000000, 0x072ba28400000000, 0x09bb292100000000, - 0x5a0dc41400000000, 0x549d4fb100000000, 0xb3312aad00000000, - 0xbda1a10800000000, 0xee174c3d00000000, 0xe087c79800000000, - 0x487b975600000000, 0x46eb1cf300000000, 0x155df1c600000000, - 0x1bcd7a6300000000, 0x04a2218100000000, 0x0a32aa2400000000, - 0x5984471100000000, 0x5714ccb400000000, 0xffe89c7a00000000, - 0xf17817df00000000, 0xa2cefaea00000000, 0xac5e714f00000000, - 0xdd163df500000000, 0xd386b65000000000, 0x80305b6500000000, - 0x8ea0d0c000000000, 0x265c800e00000000, 0x28cc0bab00000000, - 0x7b7ae69e00000000, 0x75ea6d3b00000000, 0x6a8536d900000000, - 0x6415bd7c00000000, 0x37a3504900000000, 0x3933dbec00000000, - 0x91cf8b2200000000, 0x9f5f008700000000, 0xcce9edb200000000, - 0xc279661700000000, 0x6f7f041d00000000, 0x61ef8fb800000000, - 0x3259628d00000000, 0x3cc9e92800000000, 0x9435b9e600000000, - 0x9aa5324300000000, 0xc913df7600000000, 0xc78354d300000000, - 0xd8ec0f3100000000, 0xd67c849400000000, 0x85ca69a100000000, - 0x8b5ae20400000000, 0x23a6b2ca00000000, 0x2d36396f00000000, - 0x7e80d45a00000000, 0x70105fff00000000, 0x0158134500000000, - 0x0fc898e000000000, 0x5c7e75d500000000, 0x52eefe7000000000, - 0xfa12aebe00000000, 0xf482251b00000000, 0xa734c82e00000000, - 0xa9a4438b00000000, 0xb6cb186900000000, 0xb85b93cc00000000, - 0xebed7ef900000000, 0xe57df55c00000000, 0x4d81a59200000000, - 0x43112e3700000000, 0x10a7c30200000000, 0x1e3748a700000000, - 0x4aaa071600000000, 0x443a8cb300000000, 0x178c618600000000, - 0x191cea2300000000, 0xb1e0baed00000000, 0xbf70314800000000, - 0xecc6dc7d00000000, 0xe25657d800000000, 0xfd390c3a00000000, - 0xf3a9879f00000000, 0xa01f6aaa00000000, 0xae8fe10f00000000, - 0x0673b1c100000000, 0x08e33a6400000000, 0x5b55d75100000000, - 0x55c55cf400000000, 0x248d104e00000000, 0x2a1d9beb00000000, - 0x79ab76de00000000, 0x773bfd7b00000000, 0xdfc7adb500000000, - 0xd157261000000000, 0x82e1cb2500000000, 0x8c71408000000000, - 0x931e1b6200000000, 0x9d8e90c700000000, 0xce387df200000000, - 0xc0a8f65700000000, 0x6854a69900000000, 0x66c42d3c00000000, - 0x3572c00900000000, 0x3be24bac00000000, 0x96e429a600000000, - 0x9874a20300000000, 0xcbc24f3600000000, 0xc552c49300000000, - 0x6dae945d00000000, 0x633e1ff800000000, 0x3088f2cd00000000, - 0x3e18796800000000, 0x2177228a00000000, 0x2fe7a92f00000000, - 0x7c51441a00000000, 0x72c1cfbf00000000, 0xda3d9f7100000000, - 0xd4ad14d400000000, 0x871bf9e100000000, 0x898b724400000000, - 0xf8c33efe00000000, 0xf653b55b00000000, 0xa5e5586e00000000, - 0xab75d3cb00000000, 0x0389830500000000, 0x0d1908a000000000, - 0x5eafe59500000000, 0x503f6e3000000000, 0x4f5035d200000000, - 0x41c0be7700000000, 0x1276534200000000, 0x1ce6d8e700000000, - 0xb41a882900000000, 0xba8a038c00000000, 0xe93ceeb900000000, - 0xe7ac651c00000000}, - {0x0000000000000000, 0x97a61de700000000, 0x6f4b4a1500000000, - 0xf8ed57f200000000, 0xde96942a00000000, 0x493089cd00000000, - 0xb1ddde3f00000000, 0x267bc3d800000000, 0xbc2d295500000000, - 0x2b8b34b200000000, 0xd366634000000000, 0x44c07ea700000000, - 0x62bbbd7f00000000, 0xf51da09800000000, 0x0df0f76a00000000, - 0x9a56ea8d00000000, 0x785b52aa00000000, 0xeffd4f4d00000000, - 0x171018bf00000000, 0x80b6055800000000, 0xa6cdc68000000000, - 0x316bdb6700000000, 0xc9868c9500000000, 0x5e20917200000000, - 0xc4767bff00000000, 0x53d0661800000000, 0xab3d31ea00000000, - 0x3c9b2c0d00000000, 0x1ae0efd500000000, 0x8d46f23200000000, - 0x75aba5c000000000, 0xe20db82700000000, 0xb1b0d58f00000000, - 0x2616c86800000000, 0xdefb9f9a00000000, 0x495d827d00000000, - 0x6f2641a500000000, 0xf8805c4200000000, 0x006d0bb000000000, - 0x97cb165700000000, 0x0d9dfcda00000000, 0x9a3be13d00000000, - 0x62d6b6cf00000000, 0xf570ab2800000000, 0xd30b68f000000000, - 0x44ad751700000000, 0xbc4022e500000000, 0x2be63f0200000000, - 0xc9eb872500000000, 0x5e4d9ac200000000, 0xa6a0cd3000000000, - 0x3106d0d700000000, 0x177d130f00000000, 0x80db0ee800000000, - 0x7836591a00000000, 0xef9044fd00000000, 0x75c6ae7000000000, - 0xe260b39700000000, 0x1a8de46500000000, 0x8d2bf98200000000, - 0xab503a5a00000000, 0x3cf627bd00000000, 0xc41b704f00000000, - 0x53bd6da800000000, 0x2367dac400000000, 0xb4c1c72300000000, - 0x4c2c90d100000000, 0xdb8a8d3600000000, 0xfdf14eee00000000, - 0x6a57530900000000, 0x92ba04fb00000000, 0x051c191c00000000, - 0x9f4af39100000000, 0x08ecee7600000000, 0xf001b98400000000, - 0x67a7a46300000000, 0x41dc67bb00000000, 0xd67a7a5c00000000, - 0x2e972dae00000000, 0xb931304900000000, 0x5b3c886e00000000, - 0xcc9a958900000000, 0x3477c27b00000000, 0xa3d1df9c00000000, - 0x85aa1c4400000000, 0x120c01a300000000, 0xeae1565100000000, - 0x7d474bb600000000, 0xe711a13b00000000, 0x70b7bcdc00000000, - 0x885aeb2e00000000, 0x1ffcf6c900000000, 0x3987351100000000, - 0xae2128f600000000, 0x56cc7f0400000000, 0xc16a62e300000000, - 0x92d70f4b00000000, 0x057112ac00000000, 0xfd9c455e00000000, - 0x6a3a58b900000000, 0x4c419b6100000000, 0xdbe7868600000000, - 0x230ad17400000000, 0xb4accc9300000000, 0x2efa261e00000000, - 0xb95c3bf900000000, 0x41b16c0b00000000, 0xd61771ec00000000, - 0xf06cb23400000000, 0x67caafd300000000, 0x9f27f82100000000, - 0x0881e5c600000000, 0xea8c5de100000000, 0x7d2a400600000000, - 0x85c717f400000000, 0x12610a1300000000, 0x341ac9cb00000000, - 0xa3bcd42c00000000, 0x5b5183de00000000, 0xccf79e3900000000, - 0x56a174b400000000, 0xc107695300000000, 0x39ea3ea100000000, - 0xae4c234600000000, 0x8837e09e00000000, 0x1f91fd7900000000, - 0xe77caa8b00000000, 0x70dab76c00000000, 0x07c8c55200000000, - 0x906ed8b500000000, 0x68838f4700000000, 0xff2592a000000000, - 0xd95e517800000000, 0x4ef84c9f00000000, 0xb6151b6d00000000, - 0x21b3068a00000000, 0xbbe5ec0700000000, 0x2c43f1e000000000, - 0xd4aea61200000000, 0x4308bbf500000000, 0x6573782d00000000, - 0xf2d565ca00000000, 0x0a38323800000000, 0x9d9e2fdf00000000, - 0x7f9397f800000000, 0xe8358a1f00000000, 0x10d8dded00000000, - 0x877ec00a00000000, 0xa10503d200000000, 0x36a31e3500000000, - 0xce4e49c700000000, 0x59e8542000000000, 0xc3bebead00000000, - 0x5418a34a00000000, 0xacf5f4b800000000, 0x3b53e95f00000000, - 0x1d282a8700000000, 0x8a8e376000000000, 0x7263609200000000, - 0xe5c57d7500000000, 0xb67810dd00000000, 0x21de0d3a00000000, - 0xd9335ac800000000, 0x4e95472f00000000, 0x68ee84f700000000, - 0xff48991000000000, 0x07a5cee200000000, 0x9003d30500000000, - 0x0a55398800000000, 0x9df3246f00000000, 0x651e739d00000000, - 0xf2b86e7a00000000, 0xd4c3ada200000000, 0x4365b04500000000, - 0xbb88e7b700000000, 0x2c2efa5000000000, 0xce23427700000000, - 0x59855f9000000000, 0xa168086200000000, 0x36ce158500000000, - 0x10b5d65d00000000, 0x8713cbba00000000, 0x7ffe9c4800000000, - 0xe85881af00000000, 0x720e6b2200000000, 0xe5a876c500000000, - 0x1d45213700000000, 0x8ae33cd000000000, 0xac98ff0800000000, - 0x3b3ee2ef00000000, 0xc3d3b51d00000000, 0x5475a8fa00000000, - 0x24af1f9600000000, 0xb309027100000000, 0x4be4558300000000, - 0xdc42486400000000, 0xfa398bbc00000000, 0x6d9f965b00000000, - 0x9572c1a900000000, 0x02d4dc4e00000000, 0x988236c300000000, - 0x0f242b2400000000, 0xf7c97cd600000000, 0x606f613100000000, - 0x4614a2e900000000, 0xd1b2bf0e00000000, 0x295fe8fc00000000, - 0xbef9f51b00000000, 0x5cf44d3c00000000, 0xcb5250db00000000, - 0x33bf072900000000, 0xa4191ace00000000, 0x8262d91600000000, - 0x15c4c4f100000000, 0xed29930300000000, 0x7a8f8ee400000000, - 0xe0d9646900000000, 0x777f798e00000000, 0x8f922e7c00000000, - 0x1834339b00000000, 0x3e4ff04300000000, 0xa9e9eda400000000, - 0x5104ba5600000000, 0xc6a2a7b100000000, 0x951fca1900000000, - 0x02b9d7fe00000000, 0xfa54800c00000000, 0x6df29deb00000000, - 0x4b895e3300000000, 0xdc2f43d400000000, 0x24c2142600000000, - 0xb36409c100000000, 0x2932e34c00000000, 0xbe94feab00000000, - 0x4679a95900000000, 0xd1dfb4be00000000, 0xf7a4776600000000, - 0x60026a8100000000, 0x98ef3d7300000000, 0x0f49209400000000, - 0xed4498b300000000, 0x7ae2855400000000, 0x820fd2a600000000, - 0x15a9cf4100000000, 0x33d20c9900000000, 0xa474117e00000000, - 0x5c99468c00000000, 0xcb3f5b6b00000000, 0x5169b1e600000000, - 0xc6cfac0100000000, 0x3e22fbf300000000, 0xa984e61400000000, - 0x8fff25cc00000000, 0x1859382b00000000, 0xe0b46fd900000000, - 0x7712723e00000000}, - {0x0000000000000000, 0x411b8c6e00000000, 0x823618dd00000000, - 0xc32d94b300000000, 0x456b416100000000, 0x0470cd0f00000000, - 0xc75d59bc00000000, 0x8646d5d200000000, 0x8ad682c200000000, - 0xcbcd0eac00000000, 0x08e09a1f00000000, 0x49fb167100000000, - 0xcfbdc3a300000000, 0x8ea64fcd00000000, 0x4d8bdb7e00000000, - 0x0c90571000000000, 0x55ab745e00000000, 0x14b0f83000000000, - 0xd79d6c8300000000, 0x9686e0ed00000000, 0x10c0353f00000000, - 0x51dbb95100000000, 0x92f62de200000000, 0xd3eda18c00000000, - 0xdf7df69c00000000, 0x9e667af200000000, 0x5d4bee4100000000, - 0x1c50622f00000000, 0x9a16b7fd00000000, 0xdb0d3b9300000000, - 0x1820af2000000000, 0x593b234e00000000, 0xaa56e9bc00000000, - 0xeb4d65d200000000, 0x2860f16100000000, 0x697b7d0f00000000, - 0xef3da8dd00000000, 0xae2624b300000000, 0x6d0bb00000000000, - 0x2c103c6e00000000, 0x20806b7e00000000, 0x619be71000000000, - 0xa2b673a300000000, 0xe3adffcd00000000, 0x65eb2a1f00000000, - 0x24f0a67100000000, 0xe7dd32c200000000, 0xa6c6beac00000000, - 0xfffd9de200000000, 0xbee6118c00000000, 0x7dcb853f00000000, - 0x3cd0095100000000, 0xba96dc8300000000, 0xfb8d50ed00000000, - 0x38a0c45e00000000, 0x79bb483000000000, 0x752b1f2000000000, - 0x3430934e00000000, 0xf71d07fd00000000, 0xb6068b9300000000, - 0x30405e4100000000, 0x715bd22f00000000, 0xb276469c00000000, - 0xf36dcaf200000000, 0x15aba3a200000000, 0x54b02fcc00000000, - 0x979dbb7f00000000, 0xd686371100000000, 0x50c0e2c300000000, - 0x11db6ead00000000, 0xd2f6fa1e00000000, 0x93ed767000000000, - 0x9f7d216000000000, 0xde66ad0e00000000, 0x1d4b39bd00000000, - 0x5c50b5d300000000, 0xda16600100000000, 0x9b0dec6f00000000, - 0x582078dc00000000, 0x193bf4b200000000, 0x4000d7fc00000000, - 0x011b5b9200000000, 0xc236cf2100000000, 0x832d434f00000000, - 0x056b969d00000000, 0x44701af300000000, 0x875d8e4000000000, - 0xc646022e00000000, 0xcad6553e00000000, 0x8bcdd95000000000, - 0x48e04de300000000, 0x09fbc18d00000000, 0x8fbd145f00000000, - 0xcea6983100000000, 0x0d8b0c8200000000, 0x4c9080ec00000000, - 0xbffd4a1e00000000, 0xfee6c67000000000, 0x3dcb52c300000000, - 0x7cd0dead00000000, 0xfa960b7f00000000, 0xbb8d871100000000, - 0x78a013a200000000, 0x39bb9fcc00000000, 0x352bc8dc00000000, - 0x743044b200000000, 0xb71dd00100000000, 0xf6065c6f00000000, - 0x704089bd00000000, 0x315b05d300000000, 0xf276916000000000, - 0xb36d1d0e00000000, 0xea563e4000000000, 0xab4db22e00000000, - 0x6860269d00000000, 0x297baaf300000000, 0xaf3d7f2100000000, - 0xee26f34f00000000, 0x2d0b67fc00000000, 0x6c10eb9200000000, - 0x6080bc8200000000, 0x219b30ec00000000, 0xe2b6a45f00000000, - 0xa3ad283100000000, 0x25ebfde300000000, 0x64f0718d00000000, - 0xa7dde53e00000000, 0xe6c6695000000000, 0x6b50369e00000000, - 0x2a4bbaf000000000, 0xe9662e4300000000, 0xa87da22d00000000, - 0x2e3b77ff00000000, 0x6f20fb9100000000, 0xac0d6f2200000000, - 0xed16e34c00000000, 0xe186b45c00000000, 0xa09d383200000000, - 0x63b0ac8100000000, 0x22ab20ef00000000, 0xa4edf53d00000000, - 0xe5f6795300000000, 0x26dbede000000000, 0x67c0618e00000000, - 0x3efb42c000000000, 0x7fe0ceae00000000, 0xbccd5a1d00000000, - 0xfdd6d67300000000, 0x7b9003a100000000, 0x3a8b8fcf00000000, - 0xf9a61b7c00000000, 0xb8bd971200000000, 0xb42dc00200000000, - 0xf5364c6c00000000, 0x361bd8df00000000, 0x770054b100000000, - 0xf146816300000000, 0xb05d0d0d00000000, 0x737099be00000000, - 0x326b15d000000000, 0xc106df2200000000, 0x801d534c00000000, - 0x4330c7ff00000000, 0x022b4b9100000000, 0x846d9e4300000000, - 0xc576122d00000000, 0x065b869e00000000, 0x47400af000000000, - 0x4bd05de000000000, 0x0acbd18e00000000, 0xc9e6453d00000000, - 0x88fdc95300000000, 0x0ebb1c8100000000, 0x4fa090ef00000000, - 0x8c8d045c00000000, 0xcd96883200000000, 0x94adab7c00000000, - 0xd5b6271200000000, 0x169bb3a100000000, 0x57803fcf00000000, - 0xd1c6ea1d00000000, 0x90dd667300000000, 0x53f0f2c000000000, - 0x12eb7eae00000000, 0x1e7b29be00000000, 0x5f60a5d000000000, - 0x9c4d316300000000, 0xdd56bd0d00000000, 0x5b1068df00000000, - 0x1a0be4b100000000, 0xd926700200000000, 0x983dfc6c00000000, - 0x7efb953c00000000, 0x3fe0195200000000, 0xfccd8de100000000, - 0xbdd6018f00000000, 0x3b90d45d00000000, 0x7a8b583300000000, - 0xb9a6cc8000000000, 0xf8bd40ee00000000, 0xf42d17fe00000000, - 0xb5369b9000000000, 0x761b0f2300000000, 0x3700834d00000000, - 0xb146569f00000000, 0xf05ddaf100000000, 0x33704e4200000000, - 0x726bc22c00000000, 0x2b50e16200000000, 0x6a4b6d0c00000000, - 0xa966f9bf00000000, 0xe87d75d100000000, 0x6e3ba00300000000, - 0x2f202c6d00000000, 0xec0db8de00000000, 0xad1634b000000000, - 0xa18663a000000000, 0xe09defce00000000, 0x23b07b7d00000000, - 0x62abf71300000000, 0xe4ed22c100000000, 0xa5f6aeaf00000000, - 0x66db3a1c00000000, 0x27c0b67200000000, 0xd4ad7c8000000000, - 0x95b6f0ee00000000, 0x569b645d00000000, 0x1780e83300000000, - 0x91c63de100000000, 0xd0ddb18f00000000, 0x13f0253c00000000, - 0x52eba95200000000, 0x5e7bfe4200000000, 0x1f60722c00000000, - 0xdc4de69f00000000, 0x9d566af100000000, 0x1b10bf2300000000, - 0x5a0b334d00000000, 0x9926a7fe00000000, 0xd83d2b9000000000, - 0x810608de00000000, 0xc01d84b000000000, 0x0330100300000000, - 0x422b9c6d00000000, 0xc46d49bf00000000, 0x8576c5d100000000, - 0x465b516200000000, 0x0740dd0c00000000, 0x0bd08a1c00000000, - 0x4acb067200000000, 0x89e692c100000000, 0xc8fd1eaf00000000, - 0x4ebbcb7d00000000, 0x0fa0471300000000, 0xcc8dd3a000000000, - 0x8d965fce00000000}, - {0x0000000000000000, 0x1dfdb50100000000, 0x3afa6b0300000000, - 0x2707de0200000000, 0x74f4d70600000000, 0x6909620700000000, - 0x4e0ebc0500000000, 0x53f3090400000000, 0xe8e8af0d00000000, - 0xf5151a0c00000000, 0xd212c40e00000000, 0xcfef710f00000000, - 0x9c1c780b00000000, 0x81e1cd0a00000000, 0xa6e6130800000000, - 0xbb1ba60900000000, 0xd0d15f1b00000000, 0xcd2cea1a00000000, - 0xea2b341800000000, 0xf7d6811900000000, 0xa425881d00000000, - 0xb9d83d1c00000000, 0x9edfe31e00000000, 0x8322561f00000000, - 0x3839f01600000000, 0x25c4451700000000, 0x02c39b1500000000, - 0x1f3e2e1400000000, 0x4ccd271000000000, 0x5130921100000000, - 0x76374c1300000000, 0x6bcaf91200000000, 0xa0a3bf3600000000, - 0xbd5e0a3700000000, 0x9a59d43500000000, 0x87a4613400000000, - 0xd457683000000000, 0xc9aadd3100000000, 0xeead033300000000, - 0xf350b63200000000, 0x484b103b00000000, 0x55b6a53a00000000, - 0x72b17b3800000000, 0x6f4cce3900000000, 0x3cbfc73d00000000, - 0x2142723c00000000, 0x0645ac3e00000000, 0x1bb8193f00000000, - 0x7072e02d00000000, 0x6d8f552c00000000, 0x4a888b2e00000000, - 0x57753e2f00000000, 0x0486372b00000000, 0x197b822a00000000, - 0x3e7c5c2800000000, 0x2381e92900000000, 0x989a4f2000000000, - 0x8567fa2100000000, 0xa260242300000000, 0xbf9d912200000000, - 0xec6e982600000000, 0xf1932d2700000000, 0xd694f32500000000, - 0xcb69462400000000, 0x40477f6d00000000, 0x5dbaca6c00000000, - 0x7abd146e00000000, 0x6740a16f00000000, 0x34b3a86b00000000, - 0x294e1d6a00000000, 0x0e49c36800000000, 0x13b4766900000000, - 0xa8afd06000000000, 0xb552656100000000, 0x9255bb6300000000, - 0x8fa80e6200000000, 0xdc5b076600000000, 0xc1a6b26700000000, - 0xe6a16c6500000000, 0xfb5cd96400000000, 0x9096207600000000, - 0x8d6b957700000000, 0xaa6c4b7500000000, 0xb791fe7400000000, - 0xe462f77000000000, 0xf99f427100000000, 0xde989c7300000000, - 0xc365297200000000, 0x787e8f7b00000000, 0x65833a7a00000000, - 0x4284e47800000000, 0x5f79517900000000, 0x0c8a587d00000000, - 0x1177ed7c00000000, 0x3670337e00000000, 0x2b8d867f00000000, - 0xe0e4c05b00000000, 0xfd19755a00000000, 0xda1eab5800000000, - 0xc7e31e5900000000, 0x9410175d00000000, 0x89eda25c00000000, - 0xaeea7c5e00000000, 0xb317c95f00000000, 0x080c6f5600000000, - 0x15f1da5700000000, 0x32f6045500000000, 0x2f0bb15400000000, - 0x7cf8b85000000000, 0x61050d5100000000, 0x4602d35300000000, - 0x5bff665200000000, 0x30359f4000000000, 0x2dc82a4100000000, - 0x0acff44300000000, 0x1732414200000000, 0x44c1484600000000, - 0x593cfd4700000000, 0x7e3b234500000000, 0x63c6964400000000, - 0xd8dd304d00000000, 0xc520854c00000000, 0xe2275b4e00000000, - 0xffdaee4f00000000, 0xac29e74b00000000, 0xb1d4524a00000000, - 0x96d38c4800000000, 0x8b2e394900000000, 0x808efeda00000000, - 0x9d734bdb00000000, 0xba7495d900000000, 0xa78920d800000000, - 0xf47a29dc00000000, 0xe9879cdd00000000, 0xce8042df00000000, - 0xd37df7de00000000, 0x686651d700000000, 0x759be4d600000000, - 0x529c3ad400000000, 0x4f618fd500000000, 0x1c9286d100000000, - 0x016f33d000000000, 0x2668edd200000000, 0x3b9558d300000000, - 0x505fa1c100000000, 0x4da214c000000000, 0x6aa5cac200000000, - 0x77587fc300000000, 0x24ab76c700000000, 0x3956c3c600000000, - 0x1e511dc400000000, 0x03aca8c500000000, 0xb8b70ecc00000000, - 0xa54abbcd00000000, 0x824d65cf00000000, 0x9fb0d0ce00000000, - 0xcc43d9ca00000000, 0xd1be6ccb00000000, 0xf6b9b2c900000000, - 0xeb4407c800000000, 0x202d41ec00000000, 0x3dd0f4ed00000000, - 0x1ad72aef00000000, 0x072a9fee00000000, 0x54d996ea00000000, - 0x492423eb00000000, 0x6e23fde900000000, 0x73de48e800000000, - 0xc8c5eee100000000, 0xd5385be000000000, 0xf23f85e200000000, - 0xefc230e300000000, 0xbc3139e700000000, 0xa1cc8ce600000000, - 0x86cb52e400000000, 0x9b36e7e500000000, 0xf0fc1ef700000000, - 0xed01abf600000000, 0xca0675f400000000, 0xd7fbc0f500000000, - 0x8408c9f100000000, 0x99f57cf000000000, 0xbef2a2f200000000, - 0xa30f17f300000000, 0x1814b1fa00000000, 0x05e904fb00000000, - 0x22eedaf900000000, 0x3f136ff800000000, 0x6ce066fc00000000, - 0x711dd3fd00000000, 0x561a0dff00000000, 0x4be7b8fe00000000, - 0xc0c981b700000000, 0xdd3434b600000000, 0xfa33eab400000000, - 0xe7ce5fb500000000, 0xb43d56b100000000, 0xa9c0e3b000000000, - 0x8ec73db200000000, 0x933a88b300000000, 0x28212eba00000000, - 0x35dc9bbb00000000, 0x12db45b900000000, 0x0f26f0b800000000, - 0x5cd5f9bc00000000, 0x41284cbd00000000, 0x662f92bf00000000, - 0x7bd227be00000000, 0x1018deac00000000, 0x0de56bad00000000, - 0x2ae2b5af00000000, 0x371f00ae00000000, 0x64ec09aa00000000, - 0x7911bcab00000000, 0x5e1662a900000000, 0x43ebd7a800000000, - 0xf8f071a100000000, 0xe50dc4a000000000, 0xc20a1aa200000000, - 0xdff7afa300000000, 0x8c04a6a700000000, 0x91f913a600000000, - 0xb6fecda400000000, 0xab0378a500000000, 0x606a3e8100000000, - 0x7d978b8000000000, 0x5a90558200000000, 0x476de08300000000, - 0x149ee98700000000, 0x09635c8600000000, 0x2e64828400000000, - 0x3399378500000000, 0x8882918c00000000, 0x957f248d00000000, - 0xb278fa8f00000000, 0xaf854f8e00000000, 0xfc76468a00000000, - 0xe18bf38b00000000, 0xc68c2d8900000000, 0xdb71988800000000, - 0xb0bb619a00000000, 0xad46d49b00000000, 0x8a410a9900000000, - 0x97bcbf9800000000, 0xc44fb69c00000000, 0xd9b2039d00000000, - 0xfeb5dd9f00000000, 0xe348689e00000000, 0x5853ce9700000000, - 0x45ae7b9600000000, 0x62a9a59400000000, 0x7f54109500000000, - 0x2ca7199100000000, 0x315aac9000000000, 0x165d729200000000, - 0x0ba0c79300000000}, - {0x0000000000000000, 0x24d9076300000000, 0x48b20fc600000000, - 0x6c6b08a500000000, 0xd1626e5700000000, 0xf5bb693400000000, - 0x99d0619100000000, 0xbd0966f200000000, 0xa2c5dcae00000000, - 0x861cdbcd00000000, 0xea77d36800000000, 0xceaed40b00000000, - 0x73a7b2f900000000, 0x577eb59a00000000, 0x3b15bd3f00000000, - 0x1fccba5c00000000, 0x058dc88600000000, 0x2154cfe500000000, - 0x4d3fc74000000000, 0x69e6c02300000000, 0xd4efa6d100000000, - 0xf036a1b200000000, 0x9c5da91700000000, 0xb884ae7400000000, - 0xa748142800000000, 0x8391134b00000000, 0xeffa1bee00000000, - 0xcb231c8d00000000, 0x762a7a7f00000000, 0x52f37d1c00000000, - 0x3e9875b900000000, 0x1a4172da00000000, 0x4b1ce0d600000000, - 0x6fc5e7b500000000, 0x03aeef1000000000, 0x2777e87300000000, - 0x9a7e8e8100000000, 0xbea789e200000000, 0xd2cc814700000000, - 0xf615862400000000, 0xe9d93c7800000000, 0xcd003b1b00000000, - 0xa16b33be00000000, 0x85b234dd00000000, 0x38bb522f00000000, - 0x1c62554c00000000, 0x70095de900000000, 0x54d05a8a00000000, - 0x4e91285000000000, 0x6a482f3300000000, 0x0623279600000000, - 0x22fa20f500000000, 0x9ff3460700000000, 0xbb2a416400000000, - 0xd74149c100000000, 0xf3984ea200000000, 0xec54f4fe00000000, - 0xc88df39d00000000, 0xa4e6fb3800000000, 0x803ffc5b00000000, - 0x3d369aa900000000, 0x19ef9dca00000000, 0x7584956f00000000, - 0x515d920c00000000, 0xd73eb17600000000, 0xf3e7b61500000000, - 0x9f8cbeb000000000, 0xbb55b9d300000000, 0x065cdf2100000000, - 0x2285d84200000000, 0x4eeed0e700000000, 0x6a37d78400000000, - 0x75fb6dd800000000, 0x51226abb00000000, 0x3d49621e00000000, - 0x1990657d00000000, 0xa499038f00000000, 0x804004ec00000000, - 0xec2b0c4900000000, 0xc8f20b2a00000000, 0xd2b379f000000000, - 0xf66a7e9300000000, 0x9a01763600000000, 0xbed8715500000000, - 0x03d117a700000000, 0x270810c400000000, 0x4b63186100000000, - 0x6fba1f0200000000, 0x7076a55e00000000, 0x54afa23d00000000, - 0x38c4aa9800000000, 0x1c1dadfb00000000, 0xa114cb0900000000, - 0x85cdcc6a00000000, 0xe9a6c4cf00000000, 0xcd7fc3ac00000000, - 0x9c2251a000000000, 0xb8fb56c300000000, 0xd4905e6600000000, - 0xf049590500000000, 0x4d403ff700000000, 0x6999389400000000, - 0x05f2303100000000, 0x212b375200000000, 0x3ee78d0e00000000, - 0x1a3e8a6d00000000, 0x765582c800000000, 0x528c85ab00000000, - 0xef85e35900000000, 0xcb5ce43a00000000, 0xa737ec9f00000000, - 0x83eeebfc00000000, 0x99af992600000000, 0xbd769e4500000000, - 0xd11d96e000000000, 0xf5c4918300000000, 0x48cdf77100000000, - 0x6c14f01200000000, 0x007ff8b700000000, 0x24a6ffd400000000, - 0x3b6a458800000000, 0x1fb342eb00000000, 0x73d84a4e00000000, - 0x57014d2d00000000, 0xea082bdf00000000, 0xced12cbc00000000, - 0xa2ba241900000000, 0x8663237a00000000, 0xae7d62ed00000000, - 0x8aa4658e00000000, 0xe6cf6d2b00000000, 0xc2166a4800000000, - 0x7f1f0cba00000000, 0x5bc60bd900000000, 0x37ad037c00000000, - 0x1374041f00000000, 0x0cb8be4300000000, 0x2861b92000000000, - 0x440ab18500000000, 0x60d3b6e600000000, 0xdddad01400000000, - 0xf903d77700000000, 0x9568dfd200000000, 0xb1b1d8b100000000, - 0xabf0aa6b00000000, 0x8f29ad0800000000, 0xe342a5ad00000000, - 0xc79ba2ce00000000, 0x7a92c43c00000000, 0x5e4bc35f00000000, - 0x3220cbfa00000000, 0x16f9cc9900000000, 0x093576c500000000, - 0x2dec71a600000000, 0x4187790300000000, 0x655e7e6000000000, - 0xd857189200000000, 0xfc8e1ff100000000, 0x90e5175400000000, - 0xb43c103700000000, 0xe561823b00000000, 0xc1b8855800000000, - 0xadd38dfd00000000, 0x890a8a9e00000000, 0x3403ec6c00000000, - 0x10daeb0f00000000, 0x7cb1e3aa00000000, 0x5868e4c900000000, - 0x47a45e9500000000, 0x637d59f600000000, 0x0f16515300000000, - 0x2bcf563000000000, 0x96c630c200000000, 0xb21f37a100000000, - 0xde743f0400000000, 0xfaad386700000000, 0xe0ec4abd00000000, - 0xc4354dde00000000, 0xa85e457b00000000, 0x8c87421800000000, - 0x318e24ea00000000, 0x1557238900000000, 0x793c2b2c00000000, - 0x5de52c4f00000000, 0x4229961300000000, 0x66f0917000000000, - 0x0a9b99d500000000, 0x2e429eb600000000, 0x934bf84400000000, - 0xb792ff2700000000, 0xdbf9f78200000000, 0xff20f0e100000000, - 0x7943d39b00000000, 0x5d9ad4f800000000, 0x31f1dc5d00000000, - 0x1528db3e00000000, 0xa821bdcc00000000, 0x8cf8baaf00000000, - 0xe093b20a00000000, 0xc44ab56900000000, 0xdb860f3500000000, - 0xff5f085600000000, 0x933400f300000000, 0xb7ed079000000000, - 0x0ae4616200000000, 0x2e3d660100000000, 0x42566ea400000000, - 0x668f69c700000000, 0x7cce1b1d00000000, 0x58171c7e00000000, - 0x347c14db00000000, 0x10a513b800000000, 0xadac754a00000000, - 0x8975722900000000, 0xe51e7a8c00000000, 0xc1c77def00000000, - 0xde0bc7b300000000, 0xfad2c0d000000000, 0x96b9c87500000000, - 0xb260cf1600000000, 0x0f69a9e400000000, 0x2bb0ae8700000000, - 0x47dba62200000000, 0x6302a14100000000, 0x325f334d00000000, - 0x1686342e00000000, 0x7aed3c8b00000000, 0x5e343be800000000, - 0xe33d5d1a00000000, 0xc7e45a7900000000, 0xab8f52dc00000000, - 0x8f5655bf00000000, 0x909aefe300000000, 0xb443e88000000000, - 0xd828e02500000000, 0xfcf1e74600000000, 0x41f881b400000000, - 0x652186d700000000, 0x094a8e7200000000, 0x2d93891100000000, - 0x37d2fbcb00000000, 0x130bfca800000000, 0x7f60f40d00000000, - 0x5bb9f36e00000000, 0xe6b0959c00000000, 0xc26992ff00000000, - 0xae029a5a00000000, 0x8adb9d3900000000, 0x9517276500000000, - 0xb1ce200600000000, 0xdda528a300000000, 0xf97c2fc000000000, - 0x4475493200000000, 0x60ac4e5100000000, 0x0cc746f400000000, - 0x281e419700000000}, - {0x0000000000000000, 0x08e3603c00000000, 0x10c6c17800000000, - 0x1825a14400000000, 0x208c83f100000000, 0x286fe3cd00000000, - 0x304a428900000000, 0x38a922b500000000, 0x011e763800000000, - 0x09fd160400000000, 0x11d8b74000000000, 0x193bd77c00000000, - 0x2192f5c900000000, 0x297195f500000000, 0x315434b100000000, - 0x39b7548d00000000, 0x023cec7000000000, 0x0adf8c4c00000000, - 0x12fa2d0800000000, 0x1a194d3400000000, 0x22b06f8100000000, - 0x2a530fbd00000000, 0x3276aef900000000, 0x3a95cec500000000, - 0x03229a4800000000, 0x0bc1fa7400000000, 0x13e45b3000000000, - 0x1b073b0c00000000, 0x23ae19b900000000, 0x2b4d798500000000, - 0x3368d8c100000000, 0x3b8bb8fd00000000, 0x0478d8e100000000, - 0x0c9bb8dd00000000, 0x14be199900000000, 0x1c5d79a500000000, - 0x24f45b1000000000, 0x2c173b2c00000000, 0x34329a6800000000, - 0x3cd1fa5400000000, 0x0566aed900000000, 0x0d85cee500000000, - 0x15a06fa100000000, 0x1d430f9d00000000, 0x25ea2d2800000000, - 0x2d094d1400000000, 0x352cec5000000000, 0x3dcf8c6c00000000, - 0x0644349100000000, 0x0ea754ad00000000, 0x1682f5e900000000, - 0x1e6195d500000000, 0x26c8b76000000000, 0x2e2bd75c00000000, - 0x360e761800000000, 0x3eed162400000000, 0x075a42a900000000, - 0x0fb9229500000000, 0x179c83d100000000, 0x1f7fe3ed00000000, - 0x27d6c15800000000, 0x2f35a16400000000, 0x3710002000000000, - 0x3ff3601c00000000, 0x49f6c11800000000, 0x4115a12400000000, - 0x5930006000000000, 0x51d3605c00000000, 0x697a42e900000000, - 0x619922d500000000, 0x79bc839100000000, 0x715fe3ad00000000, - 0x48e8b72000000000, 0x400bd71c00000000, 0x582e765800000000, - 0x50cd166400000000, 0x686434d100000000, 0x608754ed00000000, - 0x78a2f5a900000000, 0x7041959500000000, 0x4bca2d6800000000, - 0x43294d5400000000, 0x5b0cec1000000000, 0x53ef8c2c00000000, - 0x6b46ae9900000000, 0x63a5cea500000000, 0x7b806fe100000000, - 0x73630fdd00000000, 0x4ad45b5000000000, 0x42373b6c00000000, - 0x5a129a2800000000, 0x52f1fa1400000000, 0x6a58d8a100000000, - 0x62bbb89d00000000, 0x7a9e19d900000000, 0x727d79e500000000, - 0x4d8e19f900000000, 0x456d79c500000000, 0x5d48d88100000000, - 0x55abb8bd00000000, 0x6d029a0800000000, 0x65e1fa3400000000, - 0x7dc45b7000000000, 0x75273b4c00000000, 0x4c906fc100000000, - 0x44730ffd00000000, 0x5c56aeb900000000, 0x54b5ce8500000000, - 0x6c1cec3000000000, 0x64ff8c0c00000000, 0x7cda2d4800000000, - 0x74394d7400000000, 0x4fb2f58900000000, 0x475195b500000000, - 0x5f7434f100000000, 0x579754cd00000000, 0x6f3e767800000000, - 0x67dd164400000000, 0x7ff8b70000000000, 0x771bd73c00000000, - 0x4eac83b100000000, 0x464fe38d00000000, 0x5e6a42c900000000, - 0x568922f500000000, 0x6e20004000000000, 0x66c3607c00000000, - 0x7ee6c13800000000, 0x7605a10400000000, 0x92ec833100000000, - 0x9a0fe30d00000000, 0x822a424900000000, 0x8ac9227500000000, - 0xb26000c000000000, 0xba8360fc00000000, 0xa2a6c1b800000000, - 0xaa45a18400000000, 0x93f2f50900000000, 0x9b11953500000000, - 0x8334347100000000, 0x8bd7544d00000000, 0xb37e76f800000000, - 0xbb9d16c400000000, 0xa3b8b78000000000, 0xab5bd7bc00000000, - 0x90d06f4100000000, 0x98330f7d00000000, 0x8016ae3900000000, - 0x88f5ce0500000000, 0xb05cecb000000000, 0xb8bf8c8c00000000, - 0xa09a2dc800000000, 0xa8794df400000000, 0x91ce197900000000, - 0x992d794500000000, 0x8108d80100000000, 0x89ebb83d00000000, - 0xb1429a8800000000, 0xb9a1fab400000000, 0xa1845bf000000000, - 0xa9673bcc00000000, 0x96945bd000000000, 0x9e773bec00000000, - 0x86529aa800000000, 0x8eb1fa9400000000, 0xb618d82100000000, - 0xbefbb81d00000000, 0xa6de195900000000, 0xae3d796500000000, - 0x978a2de800000000, 0x9f694dd400000000, 0x874cec9000000000, - 0x8faf8cac00000000, 0xb706ae1900000000, 0xbfe5ce2500000000, - 0xa7c06f6100000000, 0xaf230f5d00000000, 0x94a8b7a000000000, - 0x9c4bd79c00000000, 0x846e76d800000000, 0x8c8d16e400000000, - 0xb424345100000000, 0xbcc7546d00000000, 0xa4e2f52900000000, - 0xac01951500000000, 0x95b6c19800000000, 0x9d55a1a400000000, - 0x857000e000000000, 0x8d9360dc00000000, 0xb53a426900000000, - 0xbdd9225500000000, 0xa5fc831100000000, 0xad1fe32d00000000, - 0xdb1a422900000000, 0xd3f9221500000000, 0xcbdc835100000000, - 0xc33fe36d00000000, 0xfb96c1d800000000, 0xf375a1e400000000, - 0xeb5000a000000000, 0xe3b3609c00000000, 0xda04341100000000, - 0xd2e7542d00000000, 0xcac2f56900000000, 0xc221955500000000, - 0xfa88b7e000000000, 0xf26bd7dc00000000, 0xea4e769800000000, - 0xe2ad16a400000000, 0xd926ae5900000000, 0xd1c5ce6500000000, - 0xc9e06f2100000000, 0xc1030f1d00000000, 0xf9aa2da800000000, - 0xf1494d9400000000, 0xe96cecd000000000, 0xe18f8cec00000000, - 0xd838d86100000000, 0xd0dbb85d00000000, 0xc8fe191900000000, - 0xc01d792500000000, 0xf8b45b9000000000, 0xf0573bac00000000, - 0xe8729ae800000000, 0xe091fad400000000, 0xdf629ac800000000, - 0xd781faf400000000, 0xcfa45bb000000000, 0xc7473b8c00000000, - 0xffee193900000000, 0xf70d790500000000, 0xef28d84100000000, - 0xe7cbb87d00000000, 0xde7cecf000000000, 0xd69f8ccc00000000, - 0xceba2d8800000000, 0xc6594db400000000, 0xfef06f0100000000, - 0xf6130f3d00000000, 0xee36ae7900000000, 0xe6d5ce4500000000, - 0xdd5e76b800000000, 0xd5bd168400000000, 0xcd98b7c000000000, - 0xc57bd7fc00000000, 0xfdd2f54900000000, 0xf531957500000000, - 0xed14343100000000, 0xe5f7540d00000000, 0xdc40008000000000, - 0xd4a360bc00000000, 0xcc86c1f800000000, 0xc465a1c400000000, - 0xfccc837100000000, 0xf42fe34d00000000, 0xec0a420900000000, - 0xe4e9223500000000}, - {0x0000000000000000, 0xd1e8e70e00000000, 0xa2d1cf1d00000000, - 0x7339281300000000, 0x44a39f3b00000000, 0x954b783500000000, - 0xe672502600000000, 0x379ab72800000000, 0x88463f7700000000, - 0x59aed87900000000, 0x2a97f06a00000000, 0xfb7f176400000000, - 0xcce5a04c00000000, 0x1d0d474200000000, 0x6e346f5100000000, - 0xbfdc885f00000000, 0x108d7eee00000000, 0xc16599e000000000, - 0xb25cb1f300000000, 0x63b456fd00000000, 0x542ee1d500000000, - 0x85c606db00000000, 0xf6ff2ec800000000, 0x2717c9c600000000, - 0x98cb419900000000, 0x4923a69700000000, 0x3a1a8e8400000000, - 0xebf2698a00000000, 0xdc68dea200000000, 0x0d8039ac00000000, - 0x7eb911bf00000000, 0xaf51f6b100000000, 0x611c8c0700000000, - 0xb0f46b0900000000, 0xc3cd431a00000000, 0x1225a41400000000, - 0x25bf133c00000000, 0xf457f43200000000, 0x876edc2100000000, - 0x56863b2f00000000, 0xe95ab37000000000, 0x38b2547e00000000, - 0x4b8b7c6d00000000, 0x9a639b6300000000, 0xadf92c4b00000000, - 0x7c11cb4500000000, 0x0f28e35600000000, 0xdec0045800000000, - 0x7191f2e900000000, 0xa07915e700000000, 0xd3403df400000000, - 0x02a8dafa00000000, 0x35326dd200000000, 0xe4da8adc00000000, - 0x97e3a2cf00000000, 0x460b45c100000000, 0xf9d7cd9e00000000, - 0x283f2a9000000000, 0x5b06028300000000, 0x8aeee58d00000000, - 0xbd7452a500000000, 0x6c9cb5ab00000000, 0x1fa59db800000000, - 0xce4d7ab600000000, 0xc238180f00000000, 0x13d0ff0100000000, - 0x60e9d71200000000, 0xb101301c00000000, 0x869b873400000000, - 0x5773603a00000000, 0x244a482900000000, 0xf5a2af2700000000, - 0x4a7e277800000000, 0x9b96c07600000000, 0xe8afe86500000000, - 0x39470f6b00000000, 0x0eddb84300000000, 0xdf355f4d00000000, - 0xac0c775e00000000, 0x7de4905000000000, 0xd2b566e100000000, - 0x035d81ef00000000, 0x7064a9fc00000000, 0xa18c4ef200000000, - 0x9616f9da00000000, 0x47fe1ed400000000, 0x34c736c700000000, - 0xe52fd1c900000000, 0x5af3599600000000, 0x8b1bbe9800000000, - 0xf822968b00000000, 0x29ca718500000000, 0x1e50c6ad00000000, - 0xcfb821a300000000, 0xbc8109b000000000, 0x6d69eebe00000000, - 0xa324940800000000, 0x72cc730600000000, 0x01f55b1500000000, - 0xd01dbc1b00000000, 0xe7870b3300000000, 0x366fec3d00000000, - 0x4556c42e00000000, 0x94be232000000000, 0x2b62ab7f00000000, - 0xfa8a4c7100000000, 0x89b3646200000000, 0x585b836c00000000, - 0x6fc1344400000000, 0xbe29d34a00000000, 0xcd10fb5900000000, - 0x1cf81c5700000000, 0xb3a9eae600000000, 0x62410de800000000, - 0x117825fb00000000, 0xc090c2f500000000, 0xf70a75dd00000000, - 0x26e292d300000000, 0x55dbbac000000000, 0x84335dce00000000, - 0x3befd59100000000, 0xea07329f00000000, 0x993e1a8c00000000, - 0x48d6fd8200000000, 0x7f4c4aaa00000000, 0xaea4ada400000000, - 0xdd9d85b700000000, 0x0c7562b900000000, 0x8471301e00000000, - 0x5599d71000000000, 0x26a0ff0300000000, 0xf748180d00000000, - 0xc0d2af2500000000, 0x113a482b00000000, 0x6203603800000000, - 0xb3eb873600000000, 0x0c370f6900000000, 0xdddfe86700000000, - 0xaee6c07400000000, 0x7f0e277a00000000, 0x4894905200000000, - 0x997c775c00000000, 0xea455f4f00000000, 0x3badb84100000000, - 0x94fc4ef000000000, 0x4514a9fe00000000, 0x362d81ed00000000, - 0xe7c566e300000000, 0xd05fd1cb00000000, 0x01b736c500000000, - 0x728e1ed600000000, 0xa366f9d800000000, 0x1cba718700000000, - 0xcd52968900000000, 0xbe6bbe9a00000000, 0x6f83599400000000, - 0x5819eebc00000000, 0x89f109b200000000, 0xfac821a100000000, - 0x2b20c6af00000000, 0xe56dbc1900000000, 0x34855b1700000000, - 0x47bc730400000000, 0x9654940a00000000, 0xa1ce232200000000, - 0x7026c42c00000000, 0x031fec3f00000000, 0xd2f70b3100000000, - 0x6d2b836e00000000, 0xbcc3646000000000, 0xcffa4c7300000000, - 0x1e12ab7d00000000, 0x29881c5500000000, 0xf860fb5b00000000, - 0x8b59d34800000000, 0x5ab1344600000000, 0xf5e0c2f700000000, - 0x240825f900000000, 0x57310dea00000000, 0x86d9eae400000000, - 0xb1435dcc00000000, 0x60abbac200000000, 0x139292d100000000, - 0xc27a75df00000000, 0x7da6fd8000000000, 0xac4e1a8e00000000, - 0xdf77329d00000000, 0x0e9fd59300000000, 0x390562bb00000000, - 0xe8ed85b500000000, 0x9bd4ada600000000, 0x4a3c4aa800000000, - 0x4649281100000000, 0x97a1cf1f00000000, 0xe498e70c00000000, - 0x3570000200000000, 0x02eab72a00000000, 0xd302502400000000, - 0xa03b783700000000, 0x71d39f3900000000, 0xce0f176600000000, - 0x1fe7f06800000000, 0x6cded87b00000000, 0xbd363f7500000000, - 0x8aac885d00000000, 0x5b446f5300000000, 0x287d474000000000, - 0xf995a04e00000000, 0x56c456ff00000000, 0x872cb1f100000000, - 0xf41599e200000000, 0x25fd7eec00000000, 0x1267c9c400000000, - 0xc38f2eca00000000, 0xb0b606d900000000, 0x615ee1d700000000, - 0xde82698800000000, 0x0f6a8e8600000000, 0x7c53a69500000000, - 0xadbb419b00000000, 0x9a21f6b300000000, 0x4bc911bd00000000, - 0x38f039ae00000000, 0xe918dea000000000, 0x2755a41600000000, - 0xf6bd431800000000, 0x85846b0b00000000, 0x546c8c0500000000, - 0x63f63b2d00000000, 0xb21edc2300000000, 0xc127f43000000000, - 0x10cf133e00000000, 0xaf139b6100000000, 0x7efb7c6f00000000, - 0x0dc2547c00000000, 0xdc2ab37200000000, 0xebb0045a00000000, - 0x3a58e35400000000, 0x4961cb4700000000, 0x98892c4900000000, - 0x37d8daf800000000, 0xe6303df600000000, 0x950915e500000000, - 0x44e1f2eb00000000, 0x737b45c300000000, 0xa293a2cd00000000, - 0xd1aa8ade00000000, 0x00426dd000000000, 0xbf9ee58f00000000, - 0x6e76028100000000, 0x1d4f2a9200000000, 0xcca7cd9c00000000, - 0xfb3d7ab400000000, 0x2ad59dba00000000, 0x59ecb5a900000000, - 0x880452a700000000}, - {0x0000000000000000, 0xaa05daf100000000, 0x150dc53800000000, - 0xbf081fc900000000, 0x2a1a8a7100000000, 0x801f508000000000, - 0x3f174f4900000000, 0x951295b800000000, 0x543414e300000000, - 0xfe31ce1200000000, 0x4139d1db00000000, 0xeb3c0b2a00000000, - 0x7e2e9e9200000000, 0xd42b446300000000, 0x6b235baa00000000, - 0xc126815b00000000, 0xe96e591d00000000, 0x436b83ec00000000, - 0xfc639c2500000000, 0x566646d400000000, 0xc374d36c00000000, - 0x6971099d00000000, 0xd679165400000000, 0x7c7ccca500000000, - 0xbd5a4dfe00000000, 0x175f970f00000000, 0xa85788c600000000, - 0x0252523700000000, 0x9740c78f00000000, 0x3d451d7e00000000, - 0x824d02b700000000, 0x2848d84600000000, 0xd2ddb23a00000000, - 0x78d868cb00000000, 0xc7d0770200000000, 0x6dd5adf300000000, - 0xf8c7384b00000000, 0x52c2e2ba00000000, 0xedcafd7300000000, - 0x47cf278200000000, 0x86e9a6d900000000, 0x2cec7c2800000000, - 0x93e463e100000000, 0x39e1b91000000000, 0xacf32ca800000000, - 0x06f6f65900000000, 0xb9fee99000000000, 0x13fb336100000000, - 0x3bb3eb2700000000, 0x91b631d600000000, 0x2ebe2e1f00000000, - 0x84bbf4ee00000000, 0x11a9615600000000, 0xbbacbba700000000, - 0x04a4a46e00000000, 0xaea17e9f00000000, 0x6f87ffc400000000, - 0xc582253500000000, 0x7a8a3afc00000000, 0xd08fe00d00000000, - 0x459d75b500000000, 0xef98af4400000000, 0x5090b08d00000000, - 0xfa956a7c00000000, 0xa4bb657500000000, 0x0ebebf8400000000, - 0xb1b6a04d00000000, 0x1bb37abc00000000, 0x8ea1ef0400000000, - 0x24a435f500000000, 0x9bac2a3c00000000, 0x31a9f0cd00000000, - 0xf08f719600000000, 0x5a8aab6700000000, 0xe582b4ae00000000, - 0x4f876e5f00000000, 0xda95fbe700000000, 0x7090211600000000, - 0xcf983edf00000000, 0x659de42e00000000, 0x4dd53c6800000000, - 0xe7d0e69900000000, 0x58d8f95000000000, 0xf2dd23a100000000, - 0x67cfb61900000000, 0xcdca6ce800000000, 0x72c2732100000000, - 0xd8c7a9d000000000, 0x19e1288b00000000, 0xb3e4f27a00000000, - 0x0cecedb300000000, 0xa6e9374200000000, 0x33fba2fa00000000, - 0x99fe780b00000000, 0x26f667c200000000, 0x8cf3bd3300000000, - 0x7666d74f00000000, 0xdc630dbe00000000, 0x636b127700000000, - 0xc96ec88600000000, 0x5c7c5d3e00000000, 0xf67987cf00000000, - 0x4971980600000000, 0xe37442f700000000, 0x2252c3ac00000000, - 0x8857195d00000000, 0x375f069400000000, 0x9d5adc6500000000, - 0x084849dd00000000, 0xa24d932c00000000, 0x1d458ce500000000, - 0xb740561400000000, 0x9f088e5200000000, 0x350d54a300000000, - 0x8a054b6a00000000, 0x2000919b00000000, 0xb512042300000000, - 0x1f17ded200000000, 0xa01fc11b00000000, 0x0a1a1bea00000000, - 0xcb3c9ab100000000, 0x6139404000000000, 0xde315f8900000000, - 0x7434857800000000, 0xe12610c000000000, 0x4b23ca3100000000, - 0xf42bd5f800000000, 0x5e2e0f0900000000, 0x4877cbea00000000, - 0xe272111b00000000, 0x5d7a0ed200000000, 0xf77fd42300000000, - 0x626d419b00000000, 0xc8689b6a00000000, 0x776084a300000000, - 0xdd655e5200000000, 0x1c43df0900000000, 0xb64605f800000000, - 0x094e1a3100000000, 0xa34bc0c000000000, 0x3659557800000000, - 0x9c5c8f8900000000, 0x2354904000000000, 0x89514ab100000000, - 0xa11992f700000000, 0x0b1c480600000000, 0xb41457cf00000000, - 0x1e118d3e00000000, 0x8b03188600000000, 0x2106c27700000000, - 0x9e0eddbe00000000, 0x340b074f00000000, 0xf52d861400000000, - 0x5f285ce500000000, 0xe020432c00000000, 0x4a2599dd00000000, - 0xdf370c6500000000, 0x7532d69400000000, 0xca3ac95d00000000, - 0x603f13ac00000000, 0x9aaa79d000000000, 0x30afa32100000000, - 0x8fa7bce800000000, 0x25a2661900000000, 0xb0b0f3a100000000, - 0x1ab5295000000000, 0xa5bd369900000000, 0x0fb8ec6800000000, - 0xce9e6d3300000000, 0x649bb7c200000000, 0xdb93a80b00000000, - 0x719672fa00000000, 0xe484e74200000000, 0x4e813db300000000, - 0xf189227a00000000, 0x5b8cf88b00000000, 0x73c420cd00000000, - 0xd9c1fa3c00000000, 0x66c9e5f500000000, 0xcccc3f0400000000, - 0x59deaabc00000000, 0xf3db704d00000000, 0x4cd36f8400000000, - 0xe6d6b57500000000, 0x27f0342e00000000, 0x8df5eedf00000000, - 0x32fdf11600000000, 0x98f82be700000000, 0x0deabe5f00000000, - 0xa7ef64ae00000000, 0x18e77b6700000000, 0xb2e2a19600000000, - 0xecccae9f00000000, 0x46c9746e00000000, 0xf9c16ba700000000, - 0x53c4b15600000000, 0xc6d624ee00000000, 0x6cd3fe1f00000000, - 0xd3dbe1d600000000, 0x79de3b2700000000, 0xb8f8ba7c00000000, - 0x12fd608d00000000, 0xadf57f4400000000, 0x07f0a5b500000000, - 0x92e2300d00000000, 0x38e7eafc00000000, 0x87eff53500000000, - 0x2dea2fc400000000, 0x05a2f78200000000, 0xafa72d7300000000, - 0x10af32ba00000000, 0xbaaae84b00000000, 0x2fb87df300000000, - 0x85bda70200000000, 0x3ab5b8cb00000000, 0x90b0623a00000000, - 0x5196e36100000000, 0xfb93399000000000, 0x449b265900000000, - 0xee9efca800000000, 0x7b8c691000000000, 0xd189b3e100000000, - 0x6e81ac2800000000, 0xc48476d900000000, 0x3e111ca500000000, - 0x9414c65400000000, 0x2b1cd99d00000000, 0x8119036c00000000, - 0x140b96d400000000, 0xbe0e4c2500000000, 0x010653ec00000000, - 0xab03891d00000000, 0x6a25084600000000, 0xc020d2b700000000, - 0x7f28cd7e00000000, 0xd52d178f00000000, 0x403f823700000000, - 0xea3a58c600000000, 0x5532470f00000000, 0xff379dfe00000000, - 0xd77f45b800000000, 0x7d7a9f4900000000, 0xc272808000000000, - 0x68775a7100000000, 0xfd65cfc900000000, 0x5760153800000000, - 0xe8680af100000000, 0x426dd00000000000, 0x834b515b00000000, - 0x294e8baa00000000, 0x9646946300000000, 0x3c434e9200000000, - 0xa951db2a00000000, 0x035401db00000000, 0xbc5c1e1200000000, - 0x1659c4e300000000}}; + {0x0000000000000000, 0x0e908ba500000000, 0x5d26669000000000, + 0x53b6ed3500000000, 0xfb4abdfb00000000, 0xf5da365e00000000, + 0xa66cdb6b00000000, 0xa8fc50ce00000000, 0xb7930b2c00000000, + 0xb903808900000000, 0xeab56dbc00000000, 0xe425e61900000000, + 0x4cd9b6d700000000, 0x42493d7200000000, 0x11ffd04700000000, + 0x1f6f5be200000000, 0x6e27175800000000, 0x60b79cfd00000000, + 0x330171c800000000, 0x3d91fa6d00000000, 0x956daaa300000000, + 0x9bfd210600000000, 0xc84bcc3300000000, 0xc6db479600000000, + 0xd9b41c7400000000, 0xd72497d100000000, 0x84927ae400000000, + 0x8a02f14100000000, 0x22fea18f00000000, 0x2c6e2a2a00000000, + 0x7fd8c71f00000000, 0x71484cba00000000, 0xdc4e2eb000000000, + 0xd2dea51500000000, 0x8168482000000000, 0x8ff8c38500000000, + 0x2704934b00000000, 0x299418ee00000000, 0x7a22f5db00000000, + 0x74b27e7e00000000, 0x6bdd259c00000000, 0x654dae3900000000, + 0x36fb430c00000000, 0x386bc8a900000000, 0x9097986700000000, + 0x9e0713c200000000, 0xcdb1fef700000000, 0xc321755200000000, + 0xb26939e800000000, 0xbcf9b24d00000000, 0xef4f5f7800000000, + 0xe1dfd4dd00000000, 0x4923841300000000, 0x47b30fb600000000, + 0x1405e28300000000, 0x1a95692600000000, 0x05fa32c400000000, + 0x0b6ab96100000000, 0x58dc545400000000, 0x564cdff100000000, + 0xfeb08f3f00000000, 0xf020049a00000000, 0xa396e9af00000000, + 0xad06620a00000000, 0xf99b2dbb00000000, 0xf70ba61e00000000, + 0xa4bd4b2b00000000, 0xaa2dc08e00000000, 0x02d1904000000000, + 0x0c411be500000000, 0x5ff7f6d000000000, 0x51677d7500000000, + 0x4e08269700000000, 0x4098ad3200000000, 0x132e400700000000, + 0x1dbecba200000000, 0xb5429b6c00000000, 0xbbd210c900000000, + 0xe864fdfc00000000, 0xe6f4765900000000, 0x97bc3ae300000000, + 0x992cb14600000000, 0xca9a5c7300000000, 0xc40ad7d600000000, + 0x6cf6871800000000, 0x62660cbd00000000, 0x31d0e18800000000, + 0x3f406a2d00000000, 0x202f31cf00000000, 0x2ebfba6a00000000, + 0x7d09575f00000000, 0x7399dcfa00000000, 0xdb658c3400000000, + 0xd5f5079100000000, 0x8643eaa400000000, 0x88d3610100000000, + 0x25d5030b00000000, 0x2b4588ae00000000, 0x78f3659b00000000, + 0x7663ee3e00000000, 0xde9fbef000000000, 0xd00f355500000000, + 0x83b9d86000000000, 0x8d2953c500000000, 0x9246082700000000, + 0x9cd6838200000000, 0xcf606eb700000000, 0xc1f0e51200000000, + 0x690cb5dc00000000, 0x679c3e7900000000, 0x342ad34c00000000, + 0x3aba58e900000000, 0x4bf2145300000000, 0x45629ff600000000, + 0x16d472c300000000, 0x1844f96600000000, 0xb0b8a9a800000000, + 0xbe28220d00000000, 0xed9ecf3800000000, 0xe30e449d00000000, + 0xfc611f7f00000000, 0xf2f194da00000000, 0xa14779ef00000000, + 0xafd7f24a00000000, 0x072ba28400000000, 0x09bb292100000000, + 0x5a0dc41400000000, 0x549d4fb100000000, 0xb3312aad00000000, + 0xbda1a10800000000, 0xee174c3d00000000, 0xe087c79800000000, + 0x487b975600000000, 0x46eb1cf300000000, 0x155df1c600000000, + 0x1bcd7a6300000000, 0x04a2218100000000, 0x0a32aa2400000000, + 0x5984471100000000, 0x5714ccb400000000, 0xffe89c7a00000000, + 0xf17817df00000000, 0xa2cefaea00000000, 0xac5e714f00000000, + 0xdd163df500000000, 0xd386b65000000000, 0x80305b6500000000, + 0x8ea0d0c000000000, 0x265c800e00000000, 0x28cc0bab00000000, + 0x7b7ae69e00000000, 0x75ea6d3b00000000, 0x6a8536d900000000, + 0x6415bd7c00000000, 0x37a3504900000000, 0x3933dbec00000000, + 0x91cf8b2200000000, 0x9f5f008700000000, 0xcce9edb200000000, + 0xc279661700000000, 0x6f7f041d00000000, 0x61ef8fb800000000, + 0x3259628d00000000, 0x3cc9e92800000000, 0x9435b9e600000000, + 0x9aa5324300000000, 0xc913df7600000000, 0xc78354d300000000, + 0xd8ec0f3100000000, 0xd67c849400000000, 0x85ca69a100000000, + 0x8b5ae20400000000, 0x23a6b2ca00000000, 0x2d36396f00000000, + 0x7e80d45a00000000, 0x70105fff00000000, 0x0158134500000000, + 0x0fc898e000000000, 0x5c7e75d500000000, 0x52eefe7000000000, + 0xfa12aebe00000000, 0xf482251b00000000, 0xa734c82e00000000, + 0xa9a4438b00000000, 0xb6cb186900000000, 0xb85b93cc00000000, + 0xebed7ef900000000, 0xe57df55c00000000, 0x4d81a59200000000, + 0x43112e3700000000, 0x10a7c30200000000, 0x1e3748a700000000, + 0x4aaa071600000000, 0x443a8cb300000000, 0x178c618600000000, + 0x191cea2300000000, 0xb1e0baed00000000, 0xbf70314800000000, + 0xecc6dc7d00000000, 0xe25657d800000000, 0xfd390c3a00000000, + 0xf3a9879f00000000, 0xa01f6aaa00000000, 0xae8fe10f00000000, + 0x0673b1c100000000, 0x08e33a6400000000, 0x5b55d75100000000, + 0x55c55cf400000000, 0x248d104e00000000, 0x2a1d9beb00000000, + 0x79ab76de00000000, 0x773bfd7b00000000, 0xdfc7adb500000000, + 0xd157261000000000, 0x82e1cb2500000000, 0x8c71408000000000, + 0x931e1b6200000000, 0x9d8e90c700000000, 0xce387df200000000, + 0xc0a8f65700000000, 0x6854a69900000000, 0x66c42d3c00000000, + 0x3572c00900000000, 0x3be24bac00000000, 0x96e429a600000000, + 0x9874a20300000000, 0xcbc24f3600000000, 0xc552c49300000000, + 0x6dae945d00000000, 0x633e1ff800000000, 0x3088f2cd00000000, + 0x3e18796800000000, 0x2177228a00000000, 0x2fe7a92f00000000, + 0x7c51441a00000000, 0x72c1cfbf00000000, 0xda3d9f7100000000, + 0xd4ad14d400000000, 0x871bf9e100000000, 0x898b724400000000, + 0xf8c33efe00000000, 0xf653b55b00000000, 0xa5e5586e00000000, + 0xab75d3cb00000000, 0x0389830500000000, 0x0d1908a000000000, + 0x5eafe59500000000, 0x503f6e3000000000, 0x4f5035d200000000, + 0x41c0be7700000000, 0x1276534200000000, 0x1ce6d8e700000000, + 0xb41a882900000000, 0xba8a038c00000000, 0xe93ceeb900000000, + 0xe7ac651c00000000}, + {0x0000000000000000, 0x97a61de700000000, 0x6f4b4a1500000000, + 0xf8ed57f200000000, 0xde96942a00000000, 0x493089cd00000000, + 0xb1ddde3f00000000, 0x267bc3d800000000, 0xbc2d295500000000, + 0x2b8b34b200000000, 0xd366634000000000, 0x44c07ea700000000, + 0x62bbbd7f00000000, 0xf51da09800000000, 0x0df0f76a00000000, + 0x9a56ea8d00000000, 0x785b52aa00000000, 0xeffd4f4d00000000, + 0x171018bf00000000, 0x80b6055800000000, 0xa6cdc68000000000, + 0x316bdb6700000000, 0xc9868c9500000000, 0x5e20917200000000, + 0xc4767bff00000000, 0x53d0661800000000, 0xab3d31ea00000000, + 0x3c9b2c0d00000000, 0x1ae0efd500000000, 0x8d46f23200000000, + 0x75aba5c000000000, 0xe20db82700000000, 0xb1b0d58f00000000, + 0x2616c86800000000, 0xdefb9f9a00000000, 0x495d827d00000000, + 0x6f2641a500000000, 0xf8805c4200000000, 0x006d0bb000000000, + 0x97cb165700000000, 0x0d9dfcda00000000, 0x9a3be13d00000000, + 0x62d6b6cf00000000, 0xf570ab2800000000, 0xd30b68f000000000, + 0x44ad751700000000, 0xbc4022e500000000, 0x2be63f0200000000, + 0xc9eb872500000000, 0x5e4d9ac200000000, 0xa6a0cd3000000000, + 0x3106d0d700000000, 0x177d130f00000000, 0x80db0ee800000000, + 0x7836591a00000000, 0xef9044fd00000000, 0x75c6ae7000000000, + 0xe260b39700000000, 0x1a8de46500000000, 0x8d2bf98200000000, + 0xab503a5a00000000, 0x3cf627bd00000000, 0xc41b704f00000000, + 0x53bd6da800000000, 0x2367dac400000000, 0xb4c1c72300000000, + 0x4c2c90d100000000, 0xdb8a8d3600000000, 0xfdf14eee00000000, + 0x6a57530900000000, 0x92ba04fb00000000, 0x051c191c00000000, + 0x9f4af39100000000, 0x08ecee7600000000, 0xf001b98400000000, + 0x67a7a46300000000, 0x41dc67bb00000000, 0xd67a7a5c00000000, + 0x2e972dae00000000, 0xb931304900000000, 0x5b3c886e00000000, + 0xcc9a958900000000, 0x3477c27b00000000, 0xa3d1df9c00000000, + 0x85aa1c4400000000, 0x120c01a300000000, 0xeae1565100000000, + 0x7d474bb600000000, 0xe711a13b00000000, 0x70b7bcdc00000000, + 0x885aeb2e00000000, 0x1ffcf6c900000000, 0x3987351100000000, + 0xae2128f600000000, 0x56cc7f0400000000, 0xc16a62e300000000, + 0x92d70f4b00000000, 0x057112ac00000000, 0xfd9c455e00000000, + 0x6a3a58b900000000, 0x4c419b6100000000, 0xdbe7868600000000, + 0x230ad17400000000, 0xb4accc9300000000, 0x2efa261e00000000, + 0xb95c3bf900000000, 0x41b16c0b00000000, 0xd61771ec00000000, + 0xf06cb23400000000, 0x67caafd300000000, 0x9f27f82100000000, + 0x0881e5c600000000, 0xea8c5de100000000, 0x7d2a400600000000, + 0x85c717f400000000, 0x12610a1300000000, 0x341ac9cb00000000, + 0xa3bcd42c00000000, 0x5b5183de00000000, 0xccf79e3900000000, + 0x56a174b400000000, 0xc107695300000000, 0x39ea3ea100000000, + 0xae4c234600000000, 0x8837e09e00000000, 0x1f91fd7900000000, + 0xe77caa8b00000000, 0x70dab76c00000000, 0x07c8c55200000000, + 0x906ed8b500000000, 0x68838f4700000000, 0xff2592a000000000, + 0xd95e517800000000, 0x4ef84c9f00000000, 0xb6151b6d00000000, + 0x21b3068a00000000, 0xbbe5ec0700000000, 0x2c43f1e000000000, + 0xd4aea61200000000, 0x4308bbf500000000, 0x6573782d00000000, + 0xf2d565ca00000000, 0x0a38323800000000, 0x9d9e2fdf00000000, + 0x7f9397f800000000, 0xe8358a1f00000000, 0x10d8dded00000000, + 0x877ec00a00000000, 0xa10503d200000000, 0x36a31e3500000000, + 0xce4e49c700000000, 0x59e8542000000000, 0xc3bebead00000000, + 0x5418a34a00000000, 0xacf5f4b800000000, 0x3b53e95f00000000, + 0x1d282a8700000000, 0x8a8e376000000000, 0x7263609200000000, + 0xe5c57d7500000000, 0xb67810dd00000000, 0x21de0d3a00000000, + 0xd9335ac800000000, 0x4e95472f00000000, 0x68ee84f700000000, + 0xff48991000000000, 0x07a5cee200000000, 0x9003d30500000000, + 0x0a55398800000000, 0x9df3246f00000000, 0x651e739d00000000, + 0xf2b86e7a00000000, 0xd4c3ada200000000, 0x4365b04500000000, + 0xbb88e7b700000000, 0x2c2efa5000000000, 0xce23427700000000, + 0x59855f9000000000, 0xa168086200000000, 0x36ce158500000000, + 0x10b5d65d00000000, 0x8713cbba00000000, 0x7ffe9c4800000000, + 0xe85881af00000000, 0x720e6b2200000000, 0xe5a876c500000000, + 0x1d45213700000000, 0x8ae33cd000000000, 0xac98ff0800000000, + 0x3b3ee2ef00000000, 0xc3d3b51d00000000, 0x5475a8fa00000000, + 0x24af1f9600000000, 0xb309027100000000, 0x4be4558300000000, + 0xdc42486400000000, 0xfa398bbc00000000, 0x6d9f965b00000000, + 0x9572c1a900000000, 0x02d4dc4e00000000, 0x988236c300000000, + 0x0f242b2400000000, 0xf7c97cd600000000, 0x606f613100000000, + 0x4614a2e900000000, 0xd1b2bf0e00000000, 0x295fe8fc00000000, + 0xbef9f51b00000000, 0x5cf44d3c00000000, 0xcb5250db00000000, + 0x33bf072900000000, 0xa4191ace00000000, 0x8262d91600000000, + 0x15c4c4f100000000, 0xed29930300000000, 0x7a8f8ee400000000, + 0xe0d9646900000000, 0x777f798e00000000, 0x8f922e7c00000000, + 0x1834339b00000000, 0x3e4ff04300000000, 0xa9e9eda400000000, + 0x5104ba5600000000, 0xc6a2a7b100000000, 0x951fca1900000000, + 0x02b9d7fe00000000, 0xfa54800c00000000, 0x6df29deb00000000, + 0x4b895e3300000000, 0xdc2f43d400000000, 0x24c2142600000000, + 0xb36409c100000000, 0x2932e34c00000000, 0xbe94feab00000000, + 0x4679a95900000000, 0xd1dfb4be00000000, 0xf7a4776600000000, + 0x60026a8100000000, 0x98ef3d7300000000, 0x0f49209400000000, + 0xed4498b300000000, 0x7ae2855400000000, 0x820fd2a600000000, + 0x15a9cf4100000000, 0x33d20c9900000000, 0xa474117e00000000, + 0x5c99468c00000000, 0xcb3f5b6b00000000, 0x5169b1e600000000, + 0xc6cfac0100000000, 0x3e22fbf300000000, 0xa984e61400000000, + 0x8fff25cc00000000, 0x1859382b00000000, 0xe0b46fd900000000, + 0x7712723e00000000}, + {0x0000000000000000, 0x411b8c6e00000000, 0x823618dd00000000, + 0xc32d94b300000000, 0x456b416100000000, 0x0470cd0f00000000, + 0xc75d59bc00000000, 0x8646d5d200000000, 0x8ad682c200000000, + 0xcbcd0eac00000000, 0x08e09a1f00000000, 0x49fb167100000000, + 0xcfbdc3a300000000, 0x8ea64fcd00000000, 0x4d8bdb7e00000000, + 0x0c90571000000000, 0x55ab745e00000000, 0x14b0f83000000000, + 0xd79d6c8300000000, 0x9686e0ed00000000, 0x10c0353f00000000, + 0x51dbb95100000000, 0x92f62de200000000, 0xd3eda18c00000000, + 0xdf7df69c00000000, 0x9e667af200000000, 0x5d4bee4100000000, + 0x1c50622f00000000, 0x9a16b7fd00000000, 0xdb0d3b9300000000, + 0x1820af2000000000, 0x593b234e00000000, 0xaa56e9bc00000000, + 0xeb4d65d200000000, 0x2860f16100000000, 0x697b7d0f00000000, + 0xef3da8dd00000000, 0xae2624b300000000, 0x6d0bb00000000000, + 0x2c103c6e00000000, 0x20806b7e00000000, 0x619be71000000000, + 0xa2b673a300000000, 0xe3adffcd00000000, 0x65eb2a1f00000000, + 0x24f0a67100000000, 0xe7dd32c200000000, 0xa6c6beac00000000, + 0xfffd9de200000000, 0xbee6118c00000000, 0x7dcb853f00000000, + 0x3cd0095100000000, 0xba96dc8300000000, 0xfb8d50ed00000000, + 0x38a0c45e00000000, 0x79bb483000000000, 0x752b1f2000000000, + 0x3430934e00000000, 0xf71d07fd00000000, 0xb6068b9300000000, + 0x30405e4100000000, 0x715bd22f00000000, 0xb276469c00000000, + 0xf36dcaf200000000, 0x15aba3a200000000, 0x54b02fcc00000000, + 0x979dbb7f00000000, 0xd686371100000000, 0x50c0e2c300000000, + 0x11db6ead00000000, 0xd2f6fa1e00000000, 0x93ed767000000000, + 0x9f7d216000000000, 0xde66ad0e00000000, 0x1d4b39bd00000000, + 0x5c50b5d300000000, 0xda16600100000000, 0x9b0dec6f00000000, + 0x582078dc00000000, 0x193bf4b200000000, 0x4000d7fc00000000, + 0x011b5b9200000000, 0xc236cf2100000000, 0x832d434f00000000, + 0x056b969d00000000, 0x44701af300000000, 0x875d8e4000000000, + 0xc646022e00000000, 0xcad6553e00000000, 0x8bcdd95000000000, + 0x48e04de300000000, 0x09fbc18d00000000, 0x8fbd145f00000000, + 0xcea6983100000000, 0x0d8b0c8200000000, 0x4c9080ec00000000, + 0xbffd4a1e00000000, 0xfee6c67000000000, 0x3dcb52c300000000, + 0x7cd0dead00000000, 0xfa960b7f00000000, 0xbb8d871100000000, + 0x78a013a200000000, 0x39bb9fcc00000000, 0x352bc8dc00000000, + 0x743044b200000000, 0xb71dd00100000000, 0xf6065c6f00000000, + 0x704089bd00000000, 0x315b05d300000000, 0xf276916000000000, + 0xb36d1d0e00000000, 0xea563e4000000000, 0xab4db22e00000000, + 0x6860269d00000000, 0x297baaf300000000, 0xaf3d7f2100000000, + 0xee26f34f00000000, 0x2d0b67fc00000000, 0x6c10eb9200000000, + 0x6080bc8200000000, 0x219b30ec00000000, 0xe2b6a45f00000000, + 0xa3ad283100000000, 0x25ebfde300000000, 0x64f0718d00000000, + 0xa7dde53e00000000, 0xe6c6695000000000, 0x6b50369e00000000, + 0x2a4bbaf000000000, 0xe9662e4300000000, 0xa87da22d00000000, + 0x2e3b77ff00000000, 0x6f20fb9100000000, 0xac0d6f2200000000, + 0xed16e34c00000000, 0xe186b45c00000000, 0xa09d383200000000, + 0x63b0ac8100000000, 0x22ab20ef00000000, 0xa4edf53d00000000, + 0xe5f6795300000000, 0x26dbede000000000, 0x67c0618e00000000, + 0x3efb42c000000000, 0x7fe0ceae00000000, 0xbccd5a1d00000000, + 0xfdd6d67300000000, 0x7b9003a100000000, 0x3a8b8fcf00000000, + 0xf9a61b7c00000000, 0xb8bd971200000000, 0xb42dc00200000000, + 0xf5364c6c00000000, 0x361bd8df00000000, 0x770054b100000000, + 0xf146816300000000, 0xb05d0d0d00000000, 0x737099be00000000, + 0x326b15d000000000, 0xc106df2200000000, 0x801d534c00000000, + 0x4330c7ff00000000, 0x022b4b9100000000, 0x846d9e4300000000, + 0xc576122d00000000, 0x065b869e00000000, 0x47400af000000000, + 0x4bd05de000000000, 0x0acbd18e00000000, 0xc9e6453d00000000, + 0x88fdc95300000000, 0x0ebb1c8100000000, 0x4fa090ef00000000, + 0x8c8d045c00000000, 0xcd96883200000000, 0x94adab7c00000000, + 0xd5b6271200000000, 0x169bb3a100000000, 0x57803fcf00000000, + 0xd1c6ea1d00000000, 0x90dd667300000000, 0x53f0f2c000000000, + 0x12eb7eae00000000, 0x1e7b29be00000000, 0x5f60a5d000000000, + 0x9c4d316300000000, 0xdd56bd0d00000000, 0x5b1068df00000000, + 0x1a0be4b100000000, 0xd926700200000000, 0x983dfc6c00000000, + 0x7efb953c00000000, 0x3fe0195200000000, 0xfccd8de100000000, + 0xbdd6018f00000000, 0x3b90d45d00000000, 0x7a8b583300000000, + 0xb9a6cc8000000000, 0xf8bd40ee00000000, 0xf42d17fe00000000, + 0xb5369b9000000000, 0x761b0f2300000000, 0x3700834d00000000, + 0xb146569f00000000, 0xf05ddaf100000000, 0x33704e4200000000, + 0x726bc22c00000000, 0x2b50e16200000000, 0x6a4b6d0c00000000, + 0xa966f9bf00000000, 0xe87d75d100000000, 0x6e3ba00300000000, + 0x2f202c6d00000000, 0xec0db8de00000000, 0xad1634b000000000, + 0xa18663a000000000, 0xe09defce00000000, 0x23b07b7d00000000, + 0x62abf71300000000, 0xe4ed22c100000000, 0xa5f6aeaf00000000, + 0x66db3a1c00000000, 0x27c0b67200000000, 0xd4ad7c8000000000, + 0x95b6f0ee00000000, 0x569b645d00000000, 0x1780e83300000000, + 0x91c63de100000000, 0xd0ddb18f00000000, 0x13f0253c00000000, + 0x52eba95200000000, 0x5e7bfe4200000000, 0x1f60722c00000000, + 0xdc4de69f00000000, 0x9d566af100000000, 0x1b10bf2300000000, + 0x5a0b334d00000000, 0x9926a7fe00000000, 0xd83d2b9000000000, + 0x810608de00000000, 0xc01d84b000000000, 0x0330100300000000, + 0x422b9c6d00000000, 0xc46d49bf00000000, 0x8576c5d100000000, + 0x465b516200000000, 0x0740dd0c00000000, 0x0bd08a1c00000000, + 0x4acb067200000000, 0x89e692c100000000, 0xc8fd1eaf00000000, + 0x4ebbcb7d00000000, 0x0fa0471300000000, 0xcc8dd3a000000000, + 0x8d965fce00000000}, + {0x0000000000000000, 0x1dfdb50100000000, 0x3afa6b0300000000, + 0x2707de0200000000, 0x74f4d70600000000, 0x6909620700000000, + 0x4e0ebc0500000000, 0x53f3090400000000, 0xe8e8af0d00000000, + 0xf5151a0c00000000, 0xd212c40e00000000, 0xcfef710f00000000, + 0x9c1c780b00000000, 0x81e1cd0a00000000, 0xa6e6130800000000, + 0xbb1ba60900000000, 0xd0d15f1b00000000, 0xcd2cea1a00000000, + 0xea2b341800000000, 0xf7d6811900000000, 0xa425881d00000000, + 0xb9d83d1c00000000, 0x9edfe31e00000000, 0x8322561f00000000, + 0x3839f01600000000, 0x25c4451700000000, 0x02c39b1500000000, + 0x1f3e2e1400000000, 0x4ccd271000000000, 0x5130921100000000, + 0x76374c1300000000, 0x6bcaf91200000000, 0xa0a3bf3600000000, + 0xbd5e0a3700000000, 0x9a59d43500000000, 0x87a4613400000000, + 0xd457683000000000, 0xc9aadd3100000000, 0xeead033300000000, + 0xf350b63200000000, 0x484b103b00000000, 0x55b6a53a00000000, + 0x72b17b3800000000, 0x6f4cce3900000000, 0x3cbfc73d00000000, + 0x2142723c00000000, 0x0645ac3e00000000, 0x1bb8193f00000000, + 0x7072e02d00000000, 0x6d8f552c00000000, 0x4a888b2e00000000, + 0x57753e2f00000000, 0x0486372b00000000, 0x197b822a00000000, + 0x3e7c5c2800000000, 0x2381e92900000000, 0x989a4f2000000000, + 0x8567fa2100000000, 0xa260242300000000, 0xbf9d912200000000, + 0xec6e982600000000, 0xf1932d2700000000, 0xd694f32500000000, + 0xcb69462400000000, 0x40477f6d00000000, 0x5dbaca6c00000000, + 0x7abd146e00000000, 0x6740a16f00000000, 0x34b3a86b00000000, + 0x294e1d6a00000000, 0x0e49c36800000000, 0x13b4766900000000, + 0xa8afd06000000000, 0xb552656100000000, 0x9255bb6300000000, + 0x8fa80e6200000000, 0xdc5b076600000000, 0xc1a6b26700000000, + 0xe6a16c6500000000, 0xfb5cd96400000000, 0x9096207600000000, + 0x8d6b957700000000, 0xaa6c4b7500000000, 0xb791fe7400000000, + 0xe462f77000000000, 0xf99f427100000000, 0xde989c7300000000, + 0xc365297200000000, 0x787e8f7b00000000, 0x65833a7a00000000, + 0x4284e47800000000, 0x5f79517900000000, 0x0c8a587d00000000, + 0x1177ed7c00000000, 0x3670337e00000000, 0x2b8d867f00000000, + 0xe0e4c05b00000000, 0xfd19755a00000000, 0xda1eab5800000000, + 0xc7e31e5900000000, 0x9410175d00000000, 0x89eda25c00000000, + 0xaeea7c5e00000000, 0xb317c95f00000000, 0x080c6f5600000000, + 0x15f1da5700000000, 0x32f6045500000000, 0x2f0bb15400000000, + 0x7cf8b85000000000, 0x61050d5100000000, 0x4602d35300000000, + 0x5bff665200000000, 0x30359f4000000000, 0x2dc82a4100000000, + 0x0acff44300000000, 0x1732414200000000, 0x44c1484600000000, + 0x593cfd4700000000, 0x7e3b234500000000, 0x63c6964400000000, + 0xd8dd304d00000000, 0xc520854c00000000, 0xe2275b4e00000000, + 0xffdaee4f00000000, 0xac29e74b00000000, 0xb1d4524a00000000, + 0x96d38c4800000000, 0x8b2e394900000000, 0x808efeda00000000, + 0x9d734bdb00000000, 0xba7495d900000000, 0xa78920d800000000, + 0xf47a29dc00000000, 0xe9879cdd00000000, 0xce8042df00000000, + 0xd37df7de00000000, 0x686651d700000000, 0x759be4d600000000, + 0x529c3ad400000000, 0x4f618fd500000000, 0x1c9286d100000000, + 0x016f33d000000000, 0x2668edd200000000, 0x3b9558d300000000, + 0x505fa1c100000000, 0x4da214c000000000, 0x6aa5cac200000000, + 0x77587fc300000000, 0x24ab76c700000000, 0x3956c3c600000000, + 0x1e511dc400000000, 0x03aca8c500000000, 0xb8b70ecc00000000, + 0xa54abbcd00000000, 0x824d65cf00000000, 0x9fb0d0ce00000000, + 0xcc43d9ca00000000, 0xd1be6ccb00000000, 0xf6b9b2c900000000, + 0xeb4407c800000000, 0x202d41ec00000000, 0x3dd0f4ed00000000, + 0x1ad72aef00000000, 0x072a9fee00000000, 0x54d996ea00000000, + 0x492423eb00000000, 0x6e23fde900000000, 0x73de48e800000000, + 0xc8c5eee100000000, 0xd5385be000000000, 0xf23f85e200000000, + 0xefc230e300000000, 0xbc3139e700000000, 0xa1cc8ce600000000, + 0x86cb52e400000000, 0x9b36e7e500000000, 0xf0fc1ef700000000, + 0xed01abf600000000, 0xca0675f400000000, 0xd7fbc0f500000000, + 0x8408c9f100000000, 0x99f57cf000000000, 0xbef2a2f200000000, + 0xa30f17f300000000, 0x1814b1fa00000000, 0x05e904fb00000000, + 0x22eedaf900000000, 0x3f136ff800000000, 0x6ce066fc00000000, + 0x711dd3fd00000000, 0x561a0dff00000000, 0x4be7b8fe00000000, + 0xc0c981b700000000, 0xdd3434b600000000, 0xfa33eab400000000, + 0xe7ce5fb500000000, 0xb43d56b100000000, 0xa9c0e3b000000000, + 0x8ec73db200000000, 0x933a88b300000000, 0x28212eba00000000, + 0x35dc9bbb00000000, 0x12db45b900000000, 0x0f26f0b800000000, + 0x5cd5f9bc00000000, 0x41284cbd00000000, 0x662f92bf00000000, + 0x7bd227be00000000, 0x1018deac00000000, 0x0de56bad00000000, + 0x2ae2b5af00000000, 0x371f00ae00000000, 0x64ec09aa00000000, + 0x7911bcab00000000, 0x5e1662a900000000, 0x43ebd7a800000000, + 0xf8f071a100000000, 0xe50dc4a000000000, 0xc20a1aa200000000, + 0xdff7afa300000000, 0x8c04a6a700000000, 0x91f913a600000000, + 0xb6fecda400000000, 0xab0378a500000000, 0x606a3e8100000000, + 0x7d978b8000000000, 0x5a90558200000000, 0x476de08300000000, + 0x149ee98700000000, 0x09635c8600000000, 0x2e64828400000000, + 0x3399378500000000, 0x8882918c00000000, 0x957f248d00000000, + 0xb278fa8f00000000, 0xaf854f8e00000000, 0xfc76468a00000000, + 0xe18bf38b00000000, 0xc68c2d8900000000, 0xdb71988800000000, + 0xb0bb619a00000000, 0xad46d49b00000000, 0x8a410a9900000000, + 0x97bcbf9800000000, 0xc44fb69c00000000, 0xd9b2039d00000000, + 0xfeb5dd9f00000000, 0xe348689e00000000, 0x5853ce9700000000, + 0x45ae7b9600000000, 0x62a9a59400000000, 0x7f54109500000000, + 0x2ca7199100000000, 0x315aac9000000000, 0x165d729200000000, + 0x0ba0c79300000000}, + {0x0000000000000000, 0x24d9076300000000, 0x48b20fc600000000, + 0x6c6b08a500000000, 0xd1626e5700000000, 0xf5bb693400000000, + 0x99d0619100000000, 0xbd0966f200000000, 0xa2c5dcae00000000, + 0x861cdbcd00000000, 0xea77d36800000000, 0xceaed40b00000000, + 0x73a7b2f900000000, 0x577eb59a00000000, 0x3b15bd3f00000000, + 0x1fccba5c00000000, 0x058dc88600000000, 0x2154cfe500000000, + 0x4d3fc74000000000, 0x69e6c02300000000, 0xd4efa6d100000000, + 0xf036a1b200000000, 0x9c5da91700000000, 0xb884ae7400000000, + 0xa748142800000000, 0x8391134b00000000, 0xeffa1bee00000000, + 0xcb231c8d00000000, 0x762a7a7f00000000, 0x52f37d1c00000000, + 0x3e9875b900000000, 0x1a4172da00000000, 0x4b1ce0d600000000, + 0x6fc5e7b500000000, 0x03aeef1000000000, 0x2777e87300000000, + 0x9a7e8e8100000000, 0xbea789e200000000, 0xd2cc814700000000, + 0xf615862400000000, 0xe9d93c7800000000, 0xcd003b1b00000000, + 0xa16b33be00000000, 0x85b234dd00000000, 0x38bb522f00000000, + 0x1c62554c00000000, 0x70095de900000000, 0x54d05a8a00000000, + 0x4e91285000000000, 0x6a482f3300000000, 0x0623279600000000, + 0x22fa20f500000000, 0x9ff3460700000000, 0xbb2a416400000000, + 0xd74149c100000000, 0xf3984ea200000000, 0xec54f4fe00000000, + 0xc88df39d00000000, 0xa4e6fb3800000000, 0x803ffc5b00000000, + 0x3d369aa900000000, 0x19ef9dca00000000, 0x7584956f00000000, + 0x515d920c00000000, 0xd73eb17600000000, 0xf3e7b61500000000, + 0x9f8cbeb000000000, 0xbb55b9d300000000, 0x065cdf2100000000, + 0x2285d84200000000, 0x4eeed0e700000000, 0x6a37d78400000000, + 0x75fb6dd800000000, 0x51226abb00000000, 0x3d49621e00000000, + 0x1990657d00000000, 0xa499038f00000000, 0x804004ec00000000, + 0xec2b0c4900000000, 0xc8f20b2a00000000, 0xd2b379f000000000, + 0xf66a7e9300000000, 0x9a01763600000000, 0xbed8715500000000, + 0x03d117a700000000, 0x270810c400000000, 0x4b63186100000000, + 0x6fba1f0200000000, 0x7076a55e00000000, 0x54afa23d00000000, + 0x38c4aa9800000000, 0x1c1dadfb00000000, 0xa114cb0900000000, + 0x85cdcc6a00000000, 0xe9a6c4cf00000000, 0xcd7fc3ac00000000, + 0x9c2251a000000000, 0xb8fb56c300000000, 0xd4905e6600000000, + 0xf049590500000000, 0x4d403ff700000000, 0x6999389400000000, + 0x05f2303100000000, 0x212b375200000000, 0x3ee78d0e00000000, + 0x1a3e8a6d00000000, 0x765582c800000000, 0x528c85ab00000000, + 0xef85e35900000000, 0xcb5ce43a00000000, 0xa737ec9f00000000, + 0x83eeebfc00000000, 0x99af992600000000, 0xbd769e4500000000, + 0xd11d96e000000000, 0xf5c4918300000000, 0x48cdf77100000000, + 0x6c14f01200000000, 0x007ff8b700000000, 0x24a6ffd400000000, + 0x3b6a458800000000, 0x1fb342eb00000000, 0x73d84a4e00000000, + 0x57014d2d00000000, 0xea082bdf00000000, 0xced12cbc00000000, + 0xa2ba241900000000, 0x8663237a00000000, 0xae7d62ed00000000, + 0x8aa4658e00000000, 0xe6cf6d2b00000000, 0xc2166a4800000000, + 0x7f1f0cba00000000, 0x5bc60bd900000000, 0x37ad037c00000000, + 0x1374041f00000000, 0x0cb8be4300000000, 0x2861b92000000000, + 0x440ab18500000000, 0x60d3b6e600000000, 0xdddad01400000000, + 0xf903d77700000000, 0x9568dfd200000000, 0xb1b1d8b100000000, + 0xabf0aa6b00000000, 0x8f29ad0800000000, 0xe342a5ad00000000, + 0xc79ba2ce00000000, 0x7a92c43c00000000, 0x5e4bc35f00000000, + 0x3220cbfa00000000, 0x16f9cc9900000000, 0x093576c500000000, + 0x2dec71a600000000, 0x4187790300000000, 0x655e7e6000000000, + 0xd857189200000000, 0xfc8e1ff100000000, 0x90e5175400000000, + 0xb43c103700000000, 0xe561823b00000000, 0xc1b8855800000000, + 0xadd38dfd00000000, 0x890a8a9e00000000, 0x3403ec6c00000000, + 0x10daeb0f00000000, 0x7cb1e3aa00000000, 0x5868e4c900000000, + 0x47a45e9500000000, 0x637d59f600000000, 0x0f16515300000000, + 0x2bcf563000000000, 0x96c630c200000000, 0xb21f37a100000000, + 0xde743f0400000000, 0xfaad386700000000, 0xe0ec4abd00000000, + 0xc4354dde00000000, 0xa85e457b00000000, 0x8c87421800000000, + 0x318e24ea00000000, 0x1557238900000000, 0x793c2b2c00000000, + 0x5de52c4f00000000, 0x4229961300000000, 0x66f0917000000000, + 0x0a9b99d500000000, 0x2e429eb600000000, 0x934bf84400000000, + 0xb792ff2700000000, 0xdbf9f78200000000, 0xff20f0e100000000, + 0x7943d39b00000000, 0x5d9ad4f800000000, 0x31f1dc5d00000000, + 0x1528db3e00000000, 0xa821bdcc00000000, 0x8cf8baaf00000000, + 0xe093b20a00000000, 0xc44ab56900000000, 0xdb860f3500000000, + 0xff5f085600000000, 0x933400f300000000, 0xb7ed079000000000, + 0x0ae4616200000000, 0x2e3d660100000000, 0x42566ea400000000, + 0x668f69c700000000, 0x7cce1b1d00000000, 0x58171c7e00000000, + 0x347c14db00000000, 0x10a513b800000000, 0xadac754a00000000, + 0x8975722900000000, 0xe51e7a8c00000000, 0xc1c77def00000000, + 0xde0bc7b300000000, 0xfad2c0d000000000, 0x96b9c87500000000, + 0xb260cf1600000000, 0x0f69a9e400000000, 0x2bb0ae8700000000, + 0x47dba62200000000, 0x6302a14100000000, 0x325f334d00000000, + 0x1686342e00000000, 0x7aed3c8b00000000, 0x5e343be800000000, + 0xe33d5d1a00000000, 0xc7e45a7900000000, 0xab8f52dc00000000, + 0x8f5655bf00000000, 0x909aefe300000000, 0xb443e88000000000, + 0xd828e02500000000, 0xfcf1e74600000000, 0x41f881b400000000, + 0x652186d700000000, 0x094a8e7200000000, 0x2d93891100000000, + 0x37d2fbcb00000000, 0x130bfca800000000, 0x7f60f40d00000000, + 0x5bb9f36e00000000, 0xe6b0959c00000000, 0xc26992ff00000000, + 0xae029a5a00000000, 0x8adb9d3900000000, 0x9517276500000000, + 0xb1ce200600000000, 0xdda528a300000000, 0xf97c2fc000000000, + 0x4475493200000000, 0x60ac4e5100000000, 0x0cc746f400000000, + 0x281e419700000000}, + {0x0000000000000000, 0x08e3603c00000000, 0x10c6c17800000000, + 0x1825a14400000000, 0x208c83f100000000, 0x286fe3cd00000000, + 0x304a428900000000, 0x38a922b500000000, 0x011e763800000000, + 0x09fd160400000000, 0x11d8b74000000000, 0x193bd77c00000000, + 0x2192f5c900000000, 0x297195f500000000, 0x315434b100000000, + 0x39b7548d00000000, 0x023cec7000000000, 0x0adf8c4c00000000, + 0x12fa2d0800000000, 0x1a194d3400000000, 0x22b06f8100000000, + 0x2a530fbd00000000, 0x3276aef900000000, 0x3a95cec500000000, + 0x03229a4800000000, 0x0bc1fa7400000000, 0x13e45b3000000000, + 0x1b073b0c00000000, 0x23ae19b900000000, 0x2b4d798500000000, + 0x3368d8c100000000, 0x3b8bb8fd00000000, 0x0478d8e100000000, + 0x0c9bb8dd00000000, 0x14be199900000000, 0x1c5d79a500000000, + 0x24f45b1000000000, 0x2c173b2c00000000, 0x34329a6800000000, + 0x3cd1fa5400000000, 0x0566aed900000000, 0x0d85cee500000000, + 0x15a06fa100000000, 0x1d430f9d00000000, 0x25ea2d2800000000, + 0x2d094d1400000000, 0x352cec5000000000, 0x3dcf8c6c00000000, + 0x0644349100000000, 0x0ea754ad00000000, 0x1682f5e900000000, + 0x1e6195d500000000, 0x26c8b76000000000, 0x2e2bd75c00000000, + 0x360e761800000000, 0x3eed162400000000, 0x075a42a900000000, + 0x0fb9229500000000, 0x179c83d100000000, 0x1f7fe3ed00000000, + 0x27d6c15800000000, 0x2f35a16400000000, 0x3710002000000000, + 0x3ff3601c00000000, 0x49f6c11800000000, 0x4115a12400000000, + 0x5930006000000000, 0x51d3605c00000000, 0x697a42e900000000, + 0x619922d500000000, 0x79bc839100000000, 0x715fe3ad00000000, + 0x48e8b72000000000, 0x400bd71c00000000, 0x582e765800000000, + 0x50cd166400000000, 0x686434d100000000, 0x608754ed00000000, + 0x78a2f5a900000000, 0x7041959500000000, 0x4bca2d6800000000, + 0x43294d5400000000, 0x5b0cec1000000000, 0x53ef8c2c00000000, + 0x6b46ae9900000000, 0x63a5cea500000000, 0x7b806fe100000000, + 0x73630fdd00000000, 0x4ad45b5000000000, 0x42373b6c00000000, + 0x5a129a2800000000, 0x52f1fa1400000000, 0x6a58d8a100000000, + 0x62bbb89d00000000, 0x7a9e19d900000000, 0x727d79e500000000, + 0x4d8e19f900000000, 0x456d79c500000000, 0x5d48d88100000000, + 0x55abb8bd00000000, 0x6d029a0800000000, 0x65e1fa3400000000, + 0x7dc45b7000000000, 0x75273b4c00000000, 0x4c906fc100000000, + 0x44730ffd00000000, 0x5c56aeb900000000, 0x54b5ce8500000000, + 0x6c1cec3000000000, 0x64ff8c0c00000000, 0x7cda2d4800000000, + 0x74394d7400000000, 0x4fb2f58900000000, 0x475195b500000000, + 0x5f7434f100000000, 0x579754cd00000000, 0x6f3e767800000000, + 0x67dd164400000000, 0x7ff8b70000000000, 0x771bd73c00000000, + 0x4eac83b100000000, 0x464fe38d00000000, 0x5e6a42c900000000, + 0x568922f500000000, 0x6e20004000000000, 0x66c3607c00000000, + 0x7ee6c13800000000, 0x7605a10400000000, 0x92ec833100000000, + 0x9a0fe30d00000000, 0x822a424900000000, 0x8ac9227500000000, + 0xb26000c000000000, 0xba8360fc00000000, 0xa2a6c1b800000000, + 0xaa45a18400000000, 0x93f2f50900000000, 0x9b11953500000000, + 0x8334347100000000, 0x8bd7544d00000000, 0xb37e76f800000000, + 0xbb9d16c400000000, 0xa3b8b78000000000, 0xab5bd7bc00000000, + 0x90d06f4100000000, 0x98330f7d00000000, 0x8016ae3900000000, + 0x88f5ce0500000000, 0xb05cecb000000000, 0xb8bf8c8c00000000, + 0xa09a2dc800000000, 0xa8794df400000000, 0x91ce197900000000, + 0x992d794500000000, 0x8108d80100000000, 0x89ebb83d00000000, + 0xb1429a8800000000, 0xb9a1fab400000000, 0xa1845bf000000000, + 0xa9673bcc00000000, 0x96945bd000000000, 0x9e773bec00000000, + 0x86529aa800000000, 0x8eb1fa9400000000, 0xb618d82100000000, + 0xbefbb81d00000000, 0xa6de195900000000, 0xae3d796500000000, + 0x978a2de800000000, 0x9f694dd400000000, 0x874cec9000000000, + 0x8faf8cac00000000, 0xb706ae1900000000, 0xbfe5ce2500000000, + 0xa7c06f6100000000, 0xaf230f5d00000000, 0x94a8b7a000000000, + 0x9c4bd79c00000000, 0x846e76d800000000, 0x8c8d16e400000000, + 0xb424345100000000, 0xbcc7546d00000000, 0xa4e2f52900000000, + 0xac01951500000000, 0x95b6c19800000000, 0x9d55a1a400000000, + 0x857000e000000000, 0x8d9360dc00000000, 0xb53a426900000000, + 0xbdd9225500000000, 0xa5fc831100000000, 0xad1fe32d00000000, + 0xdb1a422900000000, 0xd3f9221500000000, 0xcbdc835100000000, + 0xc33fe36d00000000, 0xfb96c1d800000000, 0xf375a1e400000000, + 0xeb5000a000000000, 0xe3b3609c00000000, 0xda04341100000000, + 0xd2e7542d00000000, 0xcac2f56900000000, 0xc221955500000000, + 0xfa88b7e000000000, 0xf26bd7dc00000000, 0xea4e769800000000, + 0xe2ad16a400000000, 0xd926ae5900000000, 0xd1c5ce6500000000, + 0xc9e06f2100000000, 0xc1030f1d00000000, 0xf9aa2da800000000, + 0xf1494d9400000000, 0xe96cecd000000000, 0xe18f8cec00000000, + 0xd838d86100000000, 0xd0dbb85d00000000, 0xc8fe191900000000, + 0xc01d792500000000, 0xf8b45b9000000000, 0xf0573bac00000000, + 0xe8729ae800000000, 0xe091fad400000000, 0xdf629ac800000000, + 0xd781faf400000000, 0xcfa45bb000000000, 0xc7473b8c00000000, + 0xffee193900000000, 0xf70d790500000000, 0xef28d84100000000, + 0xe7cbb87d00000000, 0xde7cecf000000000, 0xd69f8ccc00000000, + 0xceba2d8800000000, 0xc6594db400000000, 0xfef06f0100000000, + 0xf6130f3d00000000, 0xee36ae7900000000, 0xe6d5ce4500000000, + 0xdd5e76b800000000, 0xd5bd168400000000, 0xcd98b7c000000000, + 0xc57bd7fc00000000, 0xfdd2f54900000000, 0xf531957500000000, + 0xed14343100000000, 0xe5f7540d00000000, 0xdc40008000000000, + 0xd4a360bc00000000, 0xcc86c1f800000000, 0xc465a1c400000000, + 0xfccc837100000000, 0xf42fe34d00000000, 0xec0a420900000000, + 0xe4e9223500000000}, + {0x0000000000000000, 0xd1e8e70e00000000, 0xa2d1cf1d00000000, + 0x7339281300000000, 0x44a39f3b00000000, 0x954b783500000000, + 0xe672502600000000, 0x379ab72800000000, 0x88463f7700000000, + 0x59aed87900000000, 0x2a97f06a00000000, 0xfb7f176400000000, + 0xcce5a04c00000000, 0x1d0d474200000000, 0x6e346f5100000000, + 0xbfdc885f00000000, 0x108d7eee00000000, 0xc16599e000000000, + 0xb25cb1f300000000, 0x63b456fd00000000, 0x542ee1d500000000, + 0x85c606db00000000, 0xf6ff2ec800000000, 0x2717c9c600000000, + 0x98cb419900000000, 0x4923a69700000000, 0x3a1a8e8400000000, + 0xebf2698a00000000, 0xdc68dea200000000, 0x0d8039ac00000000, + 0x7eb911bf00000000, 0xaf51f6b100000000, 0x611c8c0700000000, + 0xb0f46b0900000000, 0xc3cd431a00000000, 0x1225a41400000000, + 0x25bf133c00000000, 0xf457f43200000000, 0x876edc2100000000, + 0x56863b2f00000000, 0xe95ab37000000000, 0x38b2547e00000000, + 0x4b8b7c6d00000000, 0x9a639b6300000000, 0xadf92c4b00000000, + 0x7c11cb4500000000, 0x0f28e35600000000, 0xdec0045800000000, + 0x7191f2e900000000, 0xa07915e700000000, 0xd3403df400000000, + 0x02a8dafa00000000, 0x35326dd200000000, 0xe4da8adc00000000, + 0x97e3a2cf00000000, 0x460b45c100000000, 0xf9d7cd9e00000000, + 0x283f2a9000000000, 0x5b06028300000000, 0x8aeee58d00000000, + 0xbd7452a500000000, 0x6c9cb5ab00000000, 0x1fa59db800000000, + 0xce4d7ab600000000, 0xc238180f00000000, 0x13d0ff0100000000, + 0x60e9d71200000000, 0xb101301c00000000, 0x869b873400000000, + 0x5773603a00000000, 0x244a482900000000, 0xf5a2af2700000000, + 0x4a7e277800000000, 0x9b96c07600000000, 0xe8afe86500000000, + 0x39470f6b00000000, 0x0eddb84300000000, 0xdf355f4d00000000, + 0xac0c775e00000000, 0x7de4905000000000, 0xd2b566e100000000, + 0x035d81ef00000000, 0x7064a9fc00000000, 0xa18c4ef200000000, + 0x9616f9da00000000, 0x47fe1ed400000000, 0x34c736c700000000, + 0xe52fd1c900000000, 0x5af3599600000000, 0x8b1bbe9800000000, + 0xf822968b00000000, 0x29ca718500000000, 0x1e50c6ad00000000, + 0xcfb821a300000000, 0xbc8109b000000000, 0x6d69eebe00000000, + 0xa324940800000000, 0x72cc730600000000, 0x01f55b1500000000, + 0xd01dbc1b00000000, 0xe7870b3300000000, 0x366fec3d00000000, + 0x4556c42e00000000, 0x94be232000000000, 0x2b62ab7f00000000, + 0xfa8a4c7100000000, 0x89b3646200000000, 0x585b836c00000000, + 0x6fc1344400000000, 0xbe29d34a00000000, 0xcd10fb5900000000, + 0x1cf81c5700000000, 0xb3a9eae600000000, 0x62410de800000000, + 0x117825fb00000000, 0xc090c2f500000000, 0xf70a75dd00000000, + 0x26e292d300000000, 0x55dbbac000000000, 0x84335dce00000000, + 0x3befd59100000000, 0xea07329f00000000, 0x993e1a8c00000000, + 0x48d6fd8200000000, 0x7f4c4aaa00000000, 0xaea4ada400000000, + 0xdd9d85b700000000, 0x0c7562b900000000, 0x8471301e00000000, + 0x5599d71000000000, 0x26a0ff0300000000, 0xf748180d00000000, + 0xc0d2af2500000000, 0x113a482b00000000, 0x6203603800000000, + 0xb3eb873600000000, 0x0c370f6900000000, 0xdddfe86700000000, + 0xaee6c07400000000, 0x7f0e277a00000000, 0x4894905200000000, + 0x997c775c00000000, 0xea455f4f00000000, 0x3badb84100000000, + 0x94fc4ef000000000, 0x4514a9fe00000000, 0x362d81ed00000000, + 0xe7c566e300000000, 0xd05fd1cb00000000, 0x01b736c500000000, + 0x728e1ed600000000, 0xa366f9d800000000, 0x1cba718700000000, + 0xcd52968900000000, 0xbe6bbe9a00000000, 0x6f83599400000000, + 0x5819eebc00000000, 0x89f109b200000000, 0xfac821a100000000, + 0x2b20c6af00000000, 0xe56dbc1900000000, 0x34855b1700000000, + 0x47bc730400000000, 0x9654940a00000000, 0xa1ce232200000000, + 0x7026c42c00000000, 0x031fec3f00000000, 0xd2f70b3100000000, + 0x6d2b836e00000000, 0xbcc3646000000000, 0xcffa4c7300000000, + 0x1e12ab7d00000000, 0x29881c5500000000, 0xf860fb5b00000000, + 0x8b59d34800000000, 0x5ab1344600000000, 0xf5e0c2f700000000, + 0x240825f900000000, 0x57310dea00000000, 0x86d9eae400000000, + 0xb1435dcc00000000, 0x60abbac200000000, 0x139292d100000000, + 0xc27a75df00000000, 0x7da6fd8000000000, 0xac4e1a8e00000000, + 0xdf77329d00000000, 0x0e9fd59300000000, 0x390562bb00000000, + 0xe8ed85b500000000, 0x9bd4ada600000000, 0x4a3c4aa800000000, + 0x4649281100000000, 0x97a1cf1f00000000, 0xe498e70c00000000, + 0x3570000200000000, 0x02eab72a00000000, 0xd302502400000000, + 0xa03b783700000000, 0x71d39f3900000000, 0xce0f176600000000, + 0x1fe7f06800000000, 0x6cded87b00000000, 0xbd363f7500000000, + 0x8aac885d00000000, 0x5b446f5300000000, 0x287d474000000000, + 0xf995a04e00000000, 0x56c456ff00000000, 0x872cb1f100000000, + 0xf41599e200000000, 0x25fd7eec00000000, 0x1267c9c400000000, + 0xc38f2eca00000000, 0xb0b606d900000000, 0x615ee1d700000000, + 0xde82698800000000, 0x0f6a8e8600000000, 0x7c53a69500000000, + 0xadbb419b00000000, 0x9a21f6b300000000, 0x4bc911bd00000000, + 0x38f039ae00000000, 0xe918dea000000000, 0x2755a41600000000, + 0xf6bd431800000000, 0x85846b0b00000000, 0x546c8c0500000000, + 0x63f63b2d00000000, 0xb21edc2300000000, 0xc127f43000000000, + 0x10cf133e00000000, 0xaf139b6100000000, 0x7efb7c6f00000000, + 0x0dc2547c00000000, 0xdc2ab37200000000, 0xebb0045a00000000, + 0x3a58e35400000000, 0x4961cb4700000000, 0x98892c4900000000, + 0x37d8daf800000000, 0xe6303df600000000, 0x950915e500000000, + 0x44e1f2eb00000000, 0x737b45c300000000, 0xa293a2cd00000000, + 0xd1aa8ade00000000, 0x00426dd000000000, 0xbf9ee58f00000000, + 0x6e76028100000000, 0x1d4f2a9200000000, 0xcca7cd9c00000000, + 0xfb3d7ab400000000, 0x2ad59dba00000000, 0x59ecb5a900000000, + 0x880452a700000000}, + {0x0000000000000000, 0xaa05daf100000000, 0x150dc53800000000, + 0xbf081fc900000000, 0x2a1a8a7100000000, 0x801f508000000000, + 0x3f174f4900000000, 0x951295b800000000, 0x543414e300000000, + 0xfe31ce1200000000, 0x4139d1db00000000, 0xeb3c0b2a00000000, + 0x7e2e9e9200000000, 0xd42b446300000000, 0x6b235baa00000000, + 0xc126815b00000000, 0xe96e591d00000000, 0x436b83ec00000000, + 0xfc639c2500000000, 0x566646d400000000, 0xc374d36c00000000, + 0x6971099d00000000, 0xd679165400000000, 0x7c7ccca500000000, + 0xbd5a4dfe00000000, 0x175f970f00000000, 0xa85788c600000000, + 0x0252523700000000, 0x9740c78f00000000, 0x3d451d7e00000000, + 0x824d02b700000000, 0x2848d84600000000, 0xd2ddb23a00000000, + 0x78d868cb00000000, 0xc7d0770200000000, 0x6dd5adf300000000, + 0xf8c7384b00000000, 0x52c2e2ba00000000, 0xedcafd7300000000, + 0x47cf278200000000, 0x86e9a6d900000000, 0x2cec7c2800000000, + 0x93e463e100000000, 0x39e1b91000000000, 0xacf32ca800000000, + 0x06f6f65900000000, 0xb9fee99000000000, 0x13fb336100000000, + 0x3bb3eb2700000000, 0x91b631d600000000, 0x2ebe2e1f00000000, + 0x84bbf4ee00000000, 0x11a9615600000000, 0xbbacbba700000000, + 0x04a4a46e00000000, 0xaea17e9f00000000, 0x6f87ffc400000000, + 0xc582253500000000, 0x7a8a3afc00000000, 0xd08fe00d00000000, + 0x459d75b500000000, 0xef98af4400000000, 0x5090b08d00000000, + 0xfa956a7c00000000, 0xa4bb657500000000, 0x0ebebf8400000000, + 0xb1b6a04d00000000, 0x1bb37abc00000000, 0x8ea1ef0400000000, + 0x24a435f500000000, 0x9bac2a3c00000000, 0x31a9f0cd00000000, + 0xf08f719600000000, 0x5a8aab6700000000, 0xe582b4ae00000000, + 0x4f876e5f00000000, 0xda95fbe700000000, 0x7090211600000000, + 0xcf983edf00000000, 0x659de42e00000000, 0x4dd53c6800000000, + 0xe7d0e69900000000, 0x58d8f95000000000, 0xf2dd23a100000000, + 0x67cfb61900000000, 0xcdca6ce800000000, 0x72c2732100000000, + 0xd8c7a9d000000000, 0x19e1288b00000000, 0xb3e4f27a00000000, + 0x0cecedb300000000, 0xa6e9374200000000, 0x33fba2fa00000000, + 0x99fe780b00000000, 0x26f667c200000000, 0x8cf3bd3300000000, + 0x7666d74f00000000, 0xdc630dbe00000000, 0x636b127700000000, + 0xc96ec88600000000, 0x5c7c5d3e00000000, 0xf67987cf00000000, + 0x4971980600000000, 0xe37442f700000000, 0x2252c3ac00000000, + 0x8857195d00000000, 0x375f069400000000, 0x9d5adc6500000000, + 0x084849dd00000000, 0xa24d932c00000000, 0x1d458ce500000000, + 0xb740561400000000, 0x9f088e5200000000, 0x350d54a300000000, + 0x8a054b6a00000000, 0x2000919b00000000, 0xb512042300000000, + 0x1f17ded200000000, 0xa01fc11b00000000, 0x0a1a1bea00000000, + 0xcb3c9ab100000000, 0x6139404000000000, 0xde315f8900000000, + 0x7434857800000000, 0xe12610c000000000, 0x4b23ca3100000000, + 0xf42bd5f800000000, 0x5e2e0f0900000000, 0x4877cbea00000000, + 0xe272111b00000000, 0x5d7a0ed200000000, 0xf77fd42300000000, + 0x626d419b00000000, 0xc8689b6a00000000, 0x776084a300000000, + 0xdd655e5200000000, 0x1c43df0900000000, 0xb64605f800000000, + 0x094e1a3100000000, 0xa34bc0c000000000, 0x3659557800000000, + 0x9c5c8f8900000000, 0x2354904000000000, 0x89514ab100000000, + 0xa11992f700000000, 0x0b1c480600000000, 0xb41457cf00000000, + 0x1e118d3e00000000, 0x8b03188600000000, 0x2106c27700000000, + 0x9e0eddbe00000000, 0x340b074f00000000, 0xf52d861400000000, + 0x5f285ce500000000, 0xe020432c00000000, 0x4a2599dd00000000, + 0xdf370c6500000000, 0x7532d69400000000, 0xca3ac95d00000000, + 0x603f13ac00000000, 0x9aaa79d000000000, 0x30afa32100000000, + 0x8fa7bce800000000, 0x25a2661900000000, 0xb0b0f3a100000000, + 0x1ab5295000000000, 0xa5bd369900000000, 0x0fb8ec6800000000, + 0xce9e6d3300000000, 0x649bb7c200000000, 0xdb93a80b00000000, + 0x719672fa00000000, 0xe484e74200000000, 0x4e813db300000000, + 0xf189227a00000000, 0x5b8cf88b00000000, 0x73c420cd00000000, + 0xd9c1fa3c00000000, 0x66c9e5f500000000, 0xcccc3f0400000000, + 0x59deaabc00000000, 0xf3db704d00000000, 0x4cd36f8400000000, + 0xe6d6b57500000000, 0x27f0342e00000000, 0x8df5eedf00000000, + 0x32fdf11600000000, 0x98f82be700000000, 0x0deabe5f00000000, + 0xa7ef64ae00000000, 0x18e77b6700000000, 0xb2e2a19600000000, + 0xecccae9f00000000, 0x46c9746e00000000, 0xf9c16ba700000000, + 0x53c4b15600000000, 0xc6d624ee00000000, 0x6cd3fe1f00000000, + 0xd3dbe1d600000000, 0x79de3b2700000000, 0xb8f8ba7c00000000, + 0x12fd608d00000000, 0xadf57f4400000000, 0x07f0a5b500000000, + 0x92e2300d00000000, 0x38e7eafc00000000, 0x87eff53500000000, + 0x2dea2fc400000000, 0x05a2f78200000000, 0xafa72d7300000000, + 0x10af32ba00000000, 0xbaaae84b00000000, 0x2fb87df300000000, + 0x85bda70200000000, 0x3ab5b8cb00000000, 0x90b0623a00000000, + 0x5196e36100000000, 0xfb93399000000000, 0x449b265900000000, + 0xee9efca800000000, 0x7b8c691000000000, 0xd189b3e100000000, + 0x6e81ac2800000000, 0xc48476d900000000, 0x3e111ca500000000, + 0x9414c65400000000, 0x2b1cd99d00000000, 0x8119036c00000000, + 0x140b96d400000000, 0xbe0e4c2500000000, 0x010653ec00000000, + 0xab03891d00000000, 0x6a25084600000000, 0xc020d2b700000000, + 0x7f28cd7e00000000, 0xd52d178f00000000, 0x403f823700000000, + 0xea3a58c600000000, 0x5532470f00000000, 0xff379dfe00000000, + 0xd77f45b800000000, 0x7d7a9f4900000000, 0xc272808000000000, + 0x68775a7100000000, 0xfd65cfc900000000, 0x5760153800000000, + 0xe8680af100000000, 0x426dd00000000000, 0x834b515b00000000, + 0x294e8baa00000000, 0x9646946300000000, 0x3c434e9200000000, + 0xa951db2a00000000, 0x035401db00000000, 0xbc5c1e1200000000, + 0x1659c4e300000000}}; #else /* W == 4 */ local const z_crc_t FAR crc_braid_table[][256] = { - {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, - 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede, - 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab, - 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c, - 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1, - 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7, - 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e, - 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, - 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5, - 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472, - 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07, - 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, - 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa, - 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec, - 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, - 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0, - 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3, - 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, - 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, - 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975, - 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8, - 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde, - 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a, - 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c, - 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, - 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, - 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410, - 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649, - 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a, - 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c, - 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946, - 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, - 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, - 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857, - 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022, - 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, - 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758, - 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e, - 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, - 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b, - 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6, - 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401, - 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, - 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d, - 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073, - 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65, - 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f, - 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749, - 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a, - 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, - 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846, - 0x0d7139d7}, - {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, - 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f, - 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875, - 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536, - 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8, - 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43, - 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f, - 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, - 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a, - 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39, - 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523, - 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, - 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d, - 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6, - 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b, - 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0, - 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151, - 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, - 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, - 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a, - 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964, - 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef, - 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d, - 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6, - 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, - 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, - 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449, - 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645, - 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4, - 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f, - 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2, - 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, - 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, - 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a, - 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650, - 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, - 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded, - 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366, - 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, - 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc, - 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222, - 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61, - 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, - 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277, - 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558, - 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3, - 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e, - 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5, - 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74, - 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, - 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262, - 0x1c53e98a}, - {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, - 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40, - 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580, - 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7, - 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a, - 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37, - 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75, - 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, - 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5, - 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2, - 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02, - 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, - 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1, - 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c, - 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, - 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307, - 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486, - 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, - 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, - 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2, - 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f, - 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72, - 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8, - 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985, - 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, - 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, - 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454, - 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f, - 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e, - 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3, - 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915, - 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, - 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821, - 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a, - 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba, - 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, - 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560, - 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d, - 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, - 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3, - 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e, - 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509, - 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, - 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92, - 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb, - 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6, - 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50, - 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d, - 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc, - 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, - 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927, - 0x3f88e851}, - {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, - 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8, - 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0, - 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14, - 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7, - 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4, - 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe, - 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, - 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e, - 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa, - 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2, - 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, - 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab, - 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8, - 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d, - 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e, - 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7, - 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, - 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, - 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690, - 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933, - 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20, - 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf, - 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc, - 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, - 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, - 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca, - 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4, - 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd, - 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de, - 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb, - 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, - 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474, - 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a, - 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252, - 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, - 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55, - 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846, - 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, - 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4, - 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47, - 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3, - 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, - 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5, - 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49, - 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a, - 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f, - 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c, - 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305, - 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, - 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523, - 0x3dee8ca6}}; + {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, 0x7a59dd16, + 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede, 0xf4b3ba2c, 0x5adb2bbd, + 0xa722d3c8, 0x094a4259, 0x2082f6ab, 0x8eea673a, 0xe6273e9e, 0x484faf0f, + 0x61871bfd, 0xcfef8a6c, 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, + 0x9534a1d1, 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7, + 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e, 0x3ef7cf8f, + 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, 0x642ce432, 0xca4475a3, + 0xe38cc151, 0x4de450c0, 0xb01da8b5, 0x1e753924, 0x37bd8dd6, 0x99d51c47, + 0xf11845e3, 0x5f70d472, 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, + 0xa2892c07, 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, + 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa, 0x8016676b, + 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec, 0x7def9f1e, 0xd3870e8f, + 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, 0x74a5dd47, 0x895c2532, 0x2734b4a3, + 0x0efc0051, 0xa09491c0, 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, + 0x1c6884e3, 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, + 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, 0x46b3af5e, + 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975, 0xed70c100, 0x43185091, + 0x6ad0e463, 0xc4b875f2, 0x4a5212c8, 0xe43a8359, 0xcdf237ab, 0x639aa63a, + 0x9e635e4f, 0x300bcfde, 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, + 0x58c6967a, 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c, + 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, 0xd62cf140, + 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, 0xdb5dc897, 0x75355906, + 0x88cca173, 0x26a430e2, 0x0f6c8410, 0xa1041581, 0x2fee72bb, 0x8186e32a, + 0xa84e57d8, 0x0626c649, 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, + 0xbadad36a, 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c, + 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946, 0xe001f8d7, + 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, 0x4bc29689, 0xe5aa0718, + 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, + 0x38d109c6, 0x96b99857, 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, + 0x6b406022, 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, + 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758, 0x709ea6c9, + 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e, 0x8d675ebc, 0x230fcf2d, + 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, 0x5b4baffc, 0xa6b25789, 0x08dac618, + 0x211272ea, 0x8f7ae37b, 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, + 0xd5a1c8c6, 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401, + 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, 0x695ddde5, + 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d, 0x3386f658, 0x9dee67c9, + 0xb426d33b, 0x1a4e42aa, 0x65bc6073, 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, + 0xb18d2cf4, 0x1fe5bd65, 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, + 0x910fda5f, 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749, + 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a, 0xf9c283fb, + 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, 0x7728e4c1, 0xd9407550, + 0x24b98d25, 0x8ad11cb4, 0xa319a846, 0x0d7139d7}, + {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, 0x3387be8b, + 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f, 0x670f7d16, 0xdef4a6fe, + 0x45f5a9e4, 0xfc0e720c, 0xed731875, 0x5488c39d, 0x44629f4f, 0xfd9944a7, + 0xece42ede, 0x551ff536, 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, + 0x8beb53c8, 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43, + 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f, 0x99b854e7, + 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, 0x474cf219, 0xfeb729f1, + 0xefca4388, 0x56319860, 0xcd30977a, 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, + 0xcca7a1d1, 0x755c7a39, 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, + 0xee5d7523, 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, + 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d, 0x7300a095, + 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6, 0xe801af8f, 0x51fa7467, + 0x0572b7fa, 0xbc896c12, 0xadf4066b, 0x140fdd83, 0x8f0ed299, 0x36f50971, + 0x27886308, 0x9e73b8e0, 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, + 0x04e58151, 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, + 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, 0xda1127af, + 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a, 0xc8422080, 0x71b9fb68, + 0x60c49111, 0xd93f4af9, 0x8db78964, 0x344c528c, 0x253138f5, 0x9ccae31d, + 0x07cbec07, 0xbe3037ef, 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, + 0xaeda6b3d, 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6, + 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, 0xfa52a8a0, + 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, 0xe601412a, 0x5ffa9ac2, + 0xc4fb95d8, 0x7d004e30, 0x6c7d2449, 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, + 0x29888dad, 0x90735645, 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, + 0x0ae56ff4, 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f, + 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2, 0xd411c90a, + 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, 0xc642ce25, 0x7fb915cd, + 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, + 0x09cb02a2, 0xb030d94a, 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, + 0x2b31d650, 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, + 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded, 0xf4524605, + 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366, 0x6f53491f, 0xd6a892f7, + 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, + 0xa6865f34, 0x1f7d84dc, 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, + 0xc1892222, 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61, + 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, 0x5b1f1b93, + 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277, 0x85ebbd6d, 0x3c106685, + 0x2d6d0cfc, 0x9496d714, 0x0cb9b558, 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, + 0x86c5d03b, 0x3f3e0bd3, 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, + 0x6bb6c84e, 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5, + 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74, 0x7b5c949c, + 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, 0x2fd45701, 0x962f8ce9, + 0x0d2e83f3, 0xb4d5581b, 0xa5a83262, 0x1c53e98a}, + {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, 0x84a36e6d, + 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40, 0xd237da9b, 0x4f383bed, + 0x2af5912d, 0xb7fa705b, 0xcb9b5580, 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, + 0x87dcf8c1, 0x1ad319b7, 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, + 0x55eb225a, 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37, + 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75, 0xb1055d03, + 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, 0xfe3d66ee, 0x63328798, + 0x1f53a243, 0x825c4335, 0xe791e9f5, 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, + 0xabd644b4, 0x36d9a5c2, 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, + 0x53140f02, 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, + 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1, 0xdcb61687, + 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c, 0xb97bbc47, 0x24745d31, + 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, + 0x8a22a271, 0x172d4307, 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, + 0x3ea74486, 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, + 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, 0x719f7f6b, + 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2, 0x95710032, 0x087ee144, + 0x741fc49f, 0xe91025e9, 0xbf84911f, 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, + 0xa6281e04, 0x3b27ff72, 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, + 0x0b0177e8, 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985, + 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, 0x5d95c31e, + 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, 0x621d2b4f, 0xff12ca39, + 0x9adf60f9, 0x07d0818f, 0x7bb1a454, 0xe6be4522, 0xb02af1d4, 0x2d2510a2, + 0x51443579, 0xcc4bd40f, 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, + 0xe5c1d38e, 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3, + 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915, 0xaaf9e863, + 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, 0x4e17973a, 0xd318764c, + 0xaf795397, 0x3276b2e1, 0x57bb1821, 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, + 0x7d4e890c, 0xe041687a, 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, + 0x858cc2ba, 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, + 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560, 0x86f35416, + 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d, 0xe33efed6, 0x7e311fa0, + 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, 0xbeab3dc8, 0xdb669708, 0x4669767e, + 0x3a0853a5, 0xa707b2d3, 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, + 0xe83f893e, 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509, + 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, 0xc1b58ebf, + 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92, 0x8e8db552, 0x13825424, + 0x6fe371ff, 0xf2ec9089, 0x0fae60cb, 0x92a181bd, 0xeec0a466, 0x73cf4510, + 0x1602efd0, 0x8b0d0ea6, 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, + 0xdd99ba50, 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d, + 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc, 0xedbf32ca, + 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, 0xbb2b863c, 0x2624674a, + 0x43e9cd8a, 0xdee62cfc, 0xa2870927, 0x3f88e851}, + {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, 0x1d2fb313, + 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8, 0x3a5f6626, 0xe7c9bfa3, + 0x9abab9fb, 0x472c607e, 0xfae60cb0, 0x2770d535, 0xb407a6da, 0x69917f5f, + 0xd45b1391, 0x09cdca14, 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, + 0xee0475b7, 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4, + 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe, 0x0eb4273b, + 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, 0xe97d9898, 0x34eb411d, + 0x89212dd3, 0x54b7f456, 0x29c4f20e, 0xf4522b8b, 0x49984745, 0x940e9ec0, + 0x0779ed2f, 0xdaef34aa, 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, + 0xa79c32f2, 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, + 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab, 0x601b482e, + 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8, 0x1d684e76, 0xc0fe97f3, + 0xe78e42c6, 0x3a189b43, 0x87d2f78d, 0x5a442e08, 0x27372850, 0xfaa1f1d5, + 0x476b9d1b, 0x9afd449e, 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, + 0xc9335de7, 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, + 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, 0x2efae244, + 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690, 0xce4ab0c8, 0x13dc694d, + 0xae160583, 0x7380dc06, 0x54f00933, 0x8966d0b6, 0x34acbc78, 0xe93a65fd, + 0x944963a5, 0x49dfba20, 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, + 0xdaa8c9cf, 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc, + 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, 0xfdd81cfa, + 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, 0xc036905c, 0x1da049d9, + 0x60d34f81, 0xbd459604, 0x008ffaca, 0xdd19234f, 0xfa69f67a, 0x27ff2fff, + 0x9a354331, 0x47a39ab4, 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, + 0x146d83cd, 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de, + 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb, 0xf3a43c6e, + 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, 0x13146ee2, 0xce82b767, + 0x7348dba9, 0xaede022c, 0xd3ad0474, 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, + 0x4917bd8f, 0x9481640a, 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, + 0xe9f26252, 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, + 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55, 0x2086c2d0, + 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846, 0x5df5c488, 0x80631d0d, + 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, 0xa02dd872, 0xdd5ede2a, 0x00c807af, + 0xbd026b61, 0x6094b2e4, 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, + 0x875d0d47, 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3, + 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, 0xd493143e, + 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5, 0x335aab9d, 0xeecc7218, + 0x53061ed6, 0x8e90c753, 0xae99ff49, 0x730f26cc, 0xcec54a02, 0x13539387, + 0x6e2095df, 0xb3b64c5a, 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, + 0x94c6996f, 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c, + 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305, 0x07b1ea80, + 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, 0x20c13fb5, 0xfd57e630, + 0x8024e068, 0x5db239ed, 0xe0785523, 0x3dee8ca6}}; local const z_word_t FAR crc_braid_big_table[][256] = { - {0x00000000, 0x85d996dd, 0x4bb55c60, 0xce6ccabd, 0x966ab9c0, - 0x13b32f1d, 0xdddfe5a0, 0x5806737d, 0x6dd3035a, 0xe80a9587, - 0x26665f3a, 0xa3bfc9e7, 0xfbb9ba9a, 0x7e602c47, 0xb00ce6fa, - 0x35d57027, 0xdaa607b4, 0x5f7f9169, 0x91135bd4, 0x14cacd09, - 0x4cccbe74, 0xc91528a9, 0x0779e214, 0x82a074c9, 0xb77504ee, - 0x32ac9233, 0xfcc0588e, 0x7919ce53, 0x211fbd2e, 0xa4c62bf3, - 0x6aaae14e, 0xef737793, 0xf54b7eb3, 0x7092e86e, 0xbefe22d3, - 0x3b27b40e, 0x6321c773, 0xe6f851ae, 0x28949b13, 0xad4d0dce, - 0x98987de9, 0x1d41eb34, 0xd32d2189, 0x56f4b754, 0x0ef2c429, - 0x8b2b52f4, 0x45479849, 0xc09e0e94, 0x2fed7907, 0xaa34efda, - 0x64582567, 0xe181b3ba, 0xb987c0c7, 0x3c5e561a, 0xf2329ca7, - 0x77eb0a7a, 0x423e7a5d, 0xc7e7ec80, 0x098b263d, 0x8c52b0e0, - 0xd454c39d, 0x518d5540, 0x9fe19ffd, 0x1a380920, 0xab918dbd, - 0x2e481b60, 0xe024d1dd, 0x65fd4700, 0x3dfb347d, 0xb822a2a0, - 0x764e681d, 0xf397fec0, 0xc6428ee7, 0x439b183a, 0x8df7d287, - 0x082e445a, 0x50283727, 0xd5f1a1fa, 0x1b9d6b47, 0x9e44fd9a, - 0x71378a09, 0xf4ee1cd4, 0x3a82d669, 0xbf5b40b4, 0xe75d33c9, - 0x6284a514, 0xace86fa9, 0x2931f974, 0x1ce48953, 0x993d1f8e, - 0x5751d533, 0xd28843ee, 0x8a8e3093, 0x0f57a64e, 0xc13b6cf3, - 0x44e2fa2e, 0x5edaf30e, 0xdb0365d3, 0x156faf6e, 0x90b639b3, - 0xc8b04ace, 0x4d69dc13, 0x830516ae, 0x06dc8073, 0x3309f054, - 0xb6d06689, 0x78bcac34, 0xfd653ae9, 0xa5634994, 0x20badf49, - 0xeed615f4, 0x6b0f8329, 0x847cf4ba, 0x01a56267, 0xcfc9a8da, - 0x4a103e07, 0x12164d7a, 0x97cfdba7, 0x59a3111a, 0xdc7a87c7, - 0xe9aff7e0, 0x6c76613d, 0xa21aab80, 0x27c33d5d, 0x7fc54e20, - 0xfa1cd8fd, 0x34701240, 0xb1a9849d, 0x17256aa0, 0x92fcfc7d, - 0x5c9036c0, 0xd949a01d, 0x814fd360, 0x049645bd, 0xcafa8f00, - 0x4f2319dd, 0x7af669fa, 0xff2fff27, 0x3143359a, 0xb49aa347, - 0xec9cd03a, 0x694546e7, 0xa7298c5a, 0x22f01a87, 0xcd836d14, - 0x485afbc9, 0x86363174, 0x03efa7a9, 0x5be9d4d4, 0xde304209, - 0x105c88b4, 0x95851e69, 0xa0506e4e, 0x2589f893, 0xebe5322e, - 0x6e3ca4f3, 0x363ad78e, 0xb3e34153, 0x7d8f8bee, 0xf8561d33, - 0xe26e1413, 0x67b782ce, 0xa9db4873, 0x2c02deae, 0x7404add3, - 0xf1dd3b0e, 0x3fb1f1b3, 0xba68676e, 0x8fbd1749, 0x0a648194, - 0xc4084b29, 0x41d1ddf4, 0x19d7ae89, 0x9c0e3854, 0x5262f2e9, - 0xd7bb6434, 0x38c813a7, 0xbd11857a, 0x737d4fc7, 0xf6a4d91a, - 0xaea2aa67, 0x2b7b3cba, 0xe517f607, 0x60ce60da, 0x551b10fd, - 0xd0c28620, 0x1eae4c9d, 0x9b77da40, 0xc371a93d, 0x46a83fe0, - 0x88c4f55d, 0x0d1d6380, 0xbcb4e71d, 0x396d71c0, 0xf701bb7d, - 0x72d82da0, 0x2ade5edd, 0xaf07c800, 0x616b02bd, 0xe4b29460, - 0xd167e447, 0x54be729a, 0x9ad2b827, 0x1f0b2efa, 0x470d5d87, - 0xc2d4cb5a, 0x0cb801e7, 0x8961973a, 0x6612e0a9, 0xe3cb7674, - 0x2da7bcc9, 0xa87e2a14, 0xf0785969, 0x75a1cfb4, 0xbbcd0509, - 0x3e1493d4, 0x0bc1e3f3, 0x8e18752e, 0x4074bf93, 0xc5ad294e, - 0x9dab5a33, 0x1872ccee, 0xd61e0653, 0x53c7908e, 0x49ff99ae, - 0xcc260f73, 0x024ac5ce, 0x87935313, 0xdf95206e, 0x5a4cb6b3, - 0x94207c0e, 0x11f9ead3, 0x242c9af4, 0xa1f50c29, 0x6f99c694, - 0xea405049, 0xb2462334, 0x379fb5e9, 0xf9f37f54, 0x7c2ae989, - 0x93599e1a, 0x168008c7, 0xd8ecc27a, 0x5d3554a7, 0x053327da, - 0x80eab107, 0x4e867bba, 0xcb5fed67, 0xfe8a9d40, 0x7b530b9d, - 0xb53fc120, 0x30e657fd, 0x68e02480, 0xed39b25d, 0x235578e0, - 0xa68cee3d}, - {0x00000000, 0x76e10f9d, 0xadc46ee1, 0xdb25617c, 0x1b8fac19, - 0x6d6ea384, 0xb64bc2f8, 0xc0aacd65, 0x361e5933, 0x40ff56ae, - 0x9bda37d2, 0xed3b384f, 0x2d91f52a, 0x5b70fab7, 0x80559bcb, - 0xf6b49456, 0x6c3cb266, 0x1addbdfb, 0xc1f8dc87, 0xb719d31a, - 0x77b31e7f, 0x015211e2, 0xda77709e, 0xac967f03, 0x5a22eb55, - 0x2cc3e4c8, 0xf7e685b4, 0x81078a29, 0x41ad474c, 0x374c48d1, - 0xec6929ad, 0x9a882630, 0xd87864cd, 0xae996b50, 0x75bc0a2c, - 0x035d05b1, 0xc3f7c8d4, 0xb516c749, 0x6e33a635, 0x18d2a9a8, - 0xee663dfe, 0x98873263, 0x43a2531f, 0x35435c82, 0xf5e991e7, - 0x83089e7a, 0x582dff06, 0x2eccf09b, 0xb444d6ab, 0xc2a5d936, - 0x1980b84a, 0x6f61b7d7, 0xafcb7ab2, 0xd92a752f, 0x020f1453, - 0x74ee1bce, 0x825a8f98, 0xf4bb8005, 0x2f9ee179, 0x597feee4, - 0x99d52381, 0xef342c1c, 0x34114d60, 0x42f042fd, 0xf1f7b941, - 0x8716b6dc, 0x5c33d7a0, 0x2ad2d83d, 0xea781558, 0x9c991ac5, - 0x47bc7bb9, 0x315d7424, 0xc7e9e072, 0xb108efef, 0x6a2d8e93, - 0x1ccc810e, 0xdc664c6b, 0xaa8743f6, 0x71a2228a, 0x07432d17, - 0x9dcb0b27, 0xeb2a04ba, 0x300f65c6, 0x46ee6a5b, 0x8644a73e, - 0xf0a5a8a3, 0x2b80c9df, 0x5d61c642, 0xabd55214, 0xdd345d89, - 0x06113cf5, 0x70f03368, 0xb05afe0d, 0xc6bbf190, 0x1d9e90ec, - 0x6b7f9f71, 0x298fdd8c, 0x5f6ed211, 0x844bb36d, 0xf2aabcf0, - 0x32007195, 0x44e17e08, 0x9fc41f74, 0xe92510e9, 0x1f9184bf, - 0x69708b22, 0xb255ea5e, 0xc4b4e5c3, 0x041e28a6, 0x72ff273b, - 0xa9da4647, 0xdf3b49da, 0x45b36fea, 0x33526077, 0xe877010b, - 0x9e960e96, 0x5e3cc3f3, 0x28ddcc6e, 0xf3f8ad12, 0x8519a28f, - 0x73ad36d9, 0x054c3944, 0xde695838, 0xa88857a5, 0x68229ac0, - 0x1ec3955d, 0xc5e6f421, 0xb307fbbc, 0xe2ef7383, 0x940e7c1e, - 0x4f2b1d62, 0x39ca12ff, 0xf960df9a, 0x8f81d007, 0x54a4b17b, - 0x2245bee6, 0xd4f12ab0, 0xa210252d, 0x79354451, 0x0fd44bcc, - 0xcf7e86a9, 0xb99f8934, 0x62bae848, 0x145be7d5, 0x8ed3c1e5, - 0xf832ce78, 0x2317af04, 0x55f6a099, 0x955c6dfc, 0xe3bd6261, - 0x3898031d, 0x4e790c80, 0xb8cd98d6, 0xce2c974b, 0x1509f637, - 0x63e8f9aa, 0xa34234cf, 0xd5a33b52, 0x0e865a2e, 0x786755b3, - 0x3a97174e, 0x4c7618d3, 0x975379af, 0xe1b27632, 0x2118bb57, - 0x57f9b4ca, 0x8cdcd5b6, 0xfa3dda2b, 0x0c894e7d, 0x7a6841e0, - 0xa14d209c, 0xd7ac2f01, 0x1706e264, 0x61e7edf9, 0xbac28c85, - 0xcc238318, 0x56aba528, 0x204aaab5, 0xfb6fcbc9, 0x8d8ec454, - 0x4d240931, 0x3bc506ac, 0xe0e067d0, 0x9601684d, 0x60b5fc1b, - 0x1654f386, 0xcd7192fa, 0xbb909d67, 0x7b3a5002, 0x0ddb5f9f, - 0xd6fe3ee3, 0xa01f317e, 0x1318cac2, 0x65f9c55f, 0xbedca423, - 0xc83dabbe, 0x089766db, 0x7e766946, 0xa553083a, 0xd3b207a7, - 0x250693f1, 0x53e79c6c, 0x88c2fd10, 0xfe23f28d, 0x3e893fe8, - 0x48683075, 0x934d5109, 0xe5ac5e94, 0x7f2478a4, 0x09c57739, - 0xd2e01645, 0xa40119d8, 0x64abd4bd, 0x124adb20, 0xc96fba5c, - 0xbf8eb5c1, 0x493a2197, 0x3fdb2e0a, 0xe4fe4f76, 0x921f40eb, - 0x52b58d8e, 0x24548213, 0xff71e36f, 0x8990ecf2, 0xcb60ae0f, - 0xbd81a192, 0x66a4c0ee, 0x1045cf73, 0xd0ef0216, 0xa60e0d8b, - 0x7d2b6cf7, 0x0bca636a, 0xfd7ef73c, 0x8b9ff8a1, 0x50ba99dd, - 0x265b9640, 0xe6f15b25, 0x901054b8, 0x4b3535c4, 0x3dd43a59, - 0xa75c1c69, 0xd1bd13f4, 0x0a987288, 0x7c797d15, 0xbcd3b070, - 0xca32bfed, 0x1117de91, 0x67f6d10c, 0x9142455a, 0xe7a34ac7, - 0x3c862bbb, 0x4a672426, 0x8acde943, 0xfc2ce6de, 0x270987a2, - 0x51e8883f}, - {0x00000000, 0xe8dbfbb9, 0x91b186a8, 0x796a7d11, 0x63657c8a, - 0x8bbe8733, 0xf2d4fa22, 0x1a0f019b, 0x87cc89cf, 0x6f177276, - 0x167d0f67, 0xfea6f4de, 0xe4a9f545, 0x0c720efc, 0x751873ed, - 0x9dc38854, 0x4f9f6244, 0xa74499fd, 0xde2ee4ec, 0x36f51f55, - 0x2cfa1ece, 0xc421e577, 0xbd4b9866, 0x559063df, 0xc853eb8b, - 0x20881032, 0x59e26d23, 0xb139969a, 0xab369701, 0x43ed6cb8, - 0x3a8711a9, 0xd25cea10, 0x9e3ec588, 0x76e53e31, 0x0f8f4320, - 0xe754b899, 0xfd5bb902, 0x158042bb, 0x6cea3faa, 0x8431c413, - 0x19f24c47, 0xf129b7fe, 0x8843caef, 0x60983156, 0x7a9730cd, - 0x924ccb74, 0xeb26b665, 0x03fd4ddc, 0xd1a1a7cc, 0x397a5c75, - 0x40102164, 0xa8cbdadd, 0xb2c4db46, 0x5a1f20ff, 0x23755dee, - 0xcbaea657, 0x566d2e03, 0xbeb6d5ba, 0xc7dca8ab, 0x2f075312, - 0x35085289, 0xddd3a930, 0xa4b9d421, 0x4c622f98, 0x7d7bfbca, - 0x95a00073, 0xecca7d62, 0x041186db, 0x1e1e8740, 0xf6c57cf9, - 0x8faf01e8, 0x6774fa51, 0xfab77205, 0x126c89bc, 0x6b06f4ad, - 0x83dd0f14, 0x99d20e8f, 0x7109f536, 0x08638827, 0xe0b8739e, - 0x32e4998e, 0xda3f6237, 0xa3551f26, 0x4b8ee49f, 0x5181e504, - 0xb95a1ebd, 0xc03063ac, 0x28eb9815, 0xb5281041, 0x5df3ebf8, - 0x249996e9, 0xcc426d50, 0xd64d6ccb, 0x3e969772, 0x47fcea63, - 0xaf2711da, 0xe3453e42, 0x0b9ec5fb, 0x72f4b8ea, 0x9a2f4353, - 0x802042c8, 0x68fbb971, 0x1191c460, 0xf94a3fd9, 0x6489b78d, - 0x8c524c34, 0xf5383125, 0x1de3ca9c, 0x07eccb07, 0xef3730be, - 0x965d4daf, 0x7e86b616, 0xacda5c06, 0x4401a7bf, 0x3d6bdaae, - 0xd5b02117, 0xcfbf208c, 0x2764db35, 0x5e0ea624, 0xb6d55d9d, - 0x2b16d5c9, 0xc3cd2e70, 0xbaa75361, 0x527ca8d8, 0x4873a943, - 0xa0a852fa, 0xd9c22feb, 0x3119d452, 0xbbf0874e, 0x532b7cf7, - 0x2a4101e6, 0xc29afa5f, 0xd895fbc4, 0x304e007d, 0x49247d6c, - 0xa1ff86d5, 0x3c3c0e81, 0xd4e7f538, 0xad8d8829, 0x45567390, - 0x5f59720b, 0xb78289b2, 0xcee8f4a3, 0x26330f1a, 0xf46fe50a, - 0x1cb41eb3, 0x65de63a2, 0x8d05981b, 0x970a9980, 0x7fd16239, - 0x06bb1f28, 0xee60e491, 0x73a36cc5, 0x9b78977c, 0xe212ea6d, - 0x0ac911d4, 0x10c6104f, 0xf81debf6, 0x817796e7, 0x69ac6d5e, - 0x25ce42c6, 0xcd15b97f, 0xb47fc46e, 0x5ca43fd7, 0x46ab3e4c, - 0xae70c5f5, 0xd71ab8e4, 0x3fc1435d, 0xa202cb09, 0x4ad930b0, - 0x33b34da1, 0xdb68b618, 0xc167b783, 0x29bc4c3a, 0x50d6312b, - 0xb80dca92, 0x6a512082, 0x828adb3b, 0xfbe0a62a, 0x133b5d93, - 0x09345c08, 0xe1efa7b1, 0x9885daa0, 0x705e2119, 0xed9da94d, - 0x054652f4, 0x7c2c2fe5, 0x94f7d45c, 0x8ef8d5c7, 0x66232e7e, - 0x1f49536f, 0xf792a8d6, 0xc68b7c84, 0x2e50873d, 0x573afa2c, - 0xbfe10195, 0xa5ee000e, 0x4d35fbb7, 0x345f86a6, 0xdc847d1f, - 0x4147f54b, 0xa99c0ef2, 0xd0f673e3, 0x382d885a, 0x222289c1, - 0xcaf97278, 0xb3930f69, 0x5b48f4d0, 0x89141ec0, 0x61cfe579, - 0x18a59868, 0xf07e63d1, 0xea71624a, 0x02aa99f3, 0x7bc0e4e2, - 0x931b1f5b, 0x0ed8970f, 0xe6036cb6, 0x9f6911a7, 0x77b2ea1e, - 0x6dbdeb85, 0x8566103c, 0xfc0c6d2d, 0x14d79694, 0x58b5b90c, - 0xb06e42b5, 0xc9043fa4, 0x21dfc41d, 0x3bd0c586, 0xd30b3e3f, - 0xaa61432e, 0x42bab897, 0xdf7930c3, 0x37a2cb7a, 0x4ec8b66b, - 0xa6134dd2, 0xbc1c4c49, 0x54c7b7f0, 0x2dadcae1, 0xc5763158, - 0x172adb48, 0xfff120f1, 0x869b5de0, 0x6e40a659, 0x744fa7c2, - 0x9c945c7b, 0xe5fe216a, 0x0d25dad3, 0x90e65287, 0x783da93e, - 0x0157d42f, 0xe98c2f96, 0xf3832e0d, 0x1b58d5b4, 0x6232a8a5, - 0x8ae9531c}, - {0x00000000, 0x919168ae, 0x6325a087, 0xf2b4c829, 0x874c31d4, - 0x16dd597a, 0xe4699153, 0x75f8f9fd, 0x4f9f1373, 0xde0e7bdd, - 0x2cbab3f4, 0xbd2bdb5a, 0xc8d322a7, 0x59424a09, 0xabf68220, - 0x3a67ea8e, 0x9e3e27e6, 0x0faf4f48, 0xfd1b8761, 0x6c8aefcf, - 0x19721632, 0x88e37e9c, 0x7a57b6b5, 0xebc6de1b, 0xd1a13495, - 0x40305c3b, 0xb2849412, 0x2315fcbc, 0x56ed0541, 0xc77c6def, - 0x35c8a5c6, 0xa459cd68, 0x7d7b3f17, 0xecea57b9, 0x1e5e9f90, - 0x8fcff73e, 0xfa370ec3, 0x6ba6666d, 0x9912ae44, 0x0883c6ea, - 0x32e42c64, 0xa37544ca, 0x51c18ce3, 0xc050e44d, 0xb5a81db0, - 0x2439751e, 0xd68dbd37, 0x471cd599, 0xe34518f1, 0x72d4705f, - 0x8060b876, 0x11f1d0d8, 0x64092925, 0xf598418b, 0x072c89a2, - 0x96bde10c, 0xacda0b82, 0x3d4b632c, 0xcfffab05, 0x5e6ec3ab, - 0x2b963a56, 0xba0752f8, 0x48b39ad1, 0xd922f27f, 0xfaf67e2e, - 0x6b671680, 0x99d3dea9, 0x0842b607, 0x7dba4ffa, 0xec2b2754, - 0x1e9fef7d, 0x8f0e87d3, 0xb5696d5d, 0x24f805f3, 0xd64ccdda, - 0x47dda574, 0x32255c89, 0xa3b43427, 0x5100fc0e, 0xc09194a0, - 0x64c859c8, 0xf5593166, 0x07edf94f, 0x967c91e1, 0xe384681c, - 0x721500b2, 0x80a1c89b, 0x1130a035, 0x2b574abb, 0xbac62215, - 0x4872ea3c, 0xd9e38292, 0xac1b7b6f, 0x3d8a13c1, 0xcf3edbe8, - 0x5eafb346, 0x878d4139, 0x161c2997, 0xe4a8e1be, 0x75398910, - 0x00c170ed, 0x91501843, 0x63e4d06a, 0xf275b8c4, 0xc812524a, - 0x59833ae4, 0xab37f2cd, 0x3aa69a63, 0x4f5e639e, 0xdecf0b30, - 0x2c7bc319, 0xbdeaabb7, 0x19b366df, 0x88220e71, 0x7a96c658, - 0xeb07aef6, 0x9eff570b, 0x0f6e3fa5, 0xfddaf78c, 0x6c4b9f22, - 0x562c75ac, 0xc7bd1d02, 0x3509d52b, 0xa498bd85, 0xd1604478, - 0x40f12cd6, 0xb245e4ff, 0x23d48c51, 0xf4edfd5c, 0x657c95f2, - 0x97c85ddb, 0x06593575, 0x73a1cc88, 0xe230a426, 0x10846c0f, - 0x811504a1, 0xbb72ee2f, 0x2ae38681, 0xd8574ea8, 0x49c62606, - 0x3c3edffb, 0xadafb755, 0x5f1b7f7c, 0xce8a17d2, 0x6ad3daba, - 0xfb42b214, 0x09f67a3d, 0x98671293, 0xed9feb6e, 0x7c0e83c0, - 0x8eba4be9, 0x1f2b2347, 0x254cc9c9, 0xb4dda167, 0x4669694e, - 0xd7f801e0, 0xa200f81d, 0x339190b3, 0xc125589a, 0x50b43034, - 0x8996c24b, 0x1807aae5, 0xeab362cc, 0x7b220a62, 0x0edaf39f, - 0x9f4b9b31, 0x6dff5318, 0xfc6e3bb6, 0xc609d138, 0x5798b996, - 0xa52c71bf, 0x34bd1911, 0x4145e0ec, 0xd0d48842, 0x2260406b, - 0xb3f128c5, 0x17a8e5ad, 0x86398d03, 0x748d452a, 0xe51c2d84, - 0x90e4d479, 0x0175bcd7, 0xf3c174fe, 0x62501c50, 0x5837f6de, - 0xc9a69e70, 0x3b125659, 0xaa833ef7, 0xdf7bc70a, 0x4eeaafa4, - 0xbc5e678d, 0x2dcf0f23, 0x0e1b8372, 0x9f8aebdc, 0x6d3e23f5, - 0xfcaf4b5b, 0x8957b2a6, 0x18c6da08, 0xea721221, 0x7be37a8f, - 0x41849001, 0xd015f8af, 0x22a13086, 0xb3305828, 0xc6c8a1d5, - 0x5759c97b, 0xa5ed0152, 0x347c69fc, 0x9025a494, 0x01b4cc3a, - 0xf3000413, 0x62916cbd, 0x17699540, 0x86f8fdee, 0x744c35c7, - 0xe5dd5d69, 0xdfbab7e7, 0x4e2bdf49, 0xbc9f1760, 0x2d0e7fce, - 0x58f68633, 0xc967ee9d, 0x3bd326b4, 0xaa424e1a, 0x7360bc65, - 0xe2f1d4cb, 0x10451ce2, 0x81d4744c, 0xf42c8db1, 0x65bde51f, - 0x97092d36, 0x06984598, 0x3cffaf16, 0xad6ec7b8, 0x5fda0f91, - 0xce4b673f, 0xbbb39ec2, 0x2a22f66c, 0xd8963e45, 0x490756eb, - 0xed5e9b83, 0x7ccff32d, 0x8e7b3b04, 0x1fea53aa, 0x6a12aa57, - 0xfb83c2f9, 0x09370ad0, 0x98a6627e, 0xa2c188f0, 0x3350e05e, - 0xc1e42877, 0x507540d9, 0x258db924, 0xb41cd18a, 0x46a819a3, - 0xd739710d}}; + {0x00000000, 0x85d996dd, 0x4bb55c60, 0xce6ccabd, 0x966ab9c0, 0x13b32f1d, + 0xdddfe5a0, 0x5806737d, 0x6dd3035a, 0xe80a9587, 0x26665f3a, 0xa3bfc9e7, + 0xfbb9ba9a, 0x7e602c47, 0xb00ce6fa, 0x35d57027, 0xdaa607b4, 0x5f7f9169, + 0x91135bd4, 0x14cacd09, 0x4cccbe74, 0xc91528a9, 0x0779e214, 0x82a074c9, + 0xb77504ee, 0x32ac9233, 0xfcc0588e, 0x7919ce53, 0x211fbd2e, 0xa4c62bf3, + 0x6aaae14e, 0xef737793, 0xf54b7eb3, 0x7092e86e, 0xbefe22d3, 0x3b27b40e, + 0x6321c773, 0xe6f851ae, 0x28949b13, 0xad4d0dce, 0x98987de9, 0x1d41eb34, + 0xd32d2189, 0x56f4b754, 0x0ef2c429, 0x8b2b52f4, 0x45479849, 0xc09e0e94, + 0x2fed7907, 0xaa34efda, 0x64582567, 0xe181b3ba, 0xb987c0c7, 0x3c5e561a, + 0xf2329ca7, 0x77eb0a7a, 0x423e7a5d, 0xc7e7ec80, 0x098b263d, 0x8c52b0e0, + 0xd454c39d, 0x518d5540, 0x9fe19ffd, 0x1a380920, 0xab918dbd, 0x2e481b60, + 0xe024d1dd, 0x65fd4700, 0x3dfb347d, 0xb822a2a0, 0x764e681d, 0xf397fec0, + 0xc6428ee7, 0x439b183a, 0x8df7d287, 0x082e445a, 0x50283727, 0xd5f1a1fa, + 0x1b9d6b47, 0x9e44fd9a, 0x71378a09, 0xf4ee1cd4, 0x3a82d669, 0xbf5b40b4, + 0xe75d33c9, 0x6284a514, 0xace86fa9, 0x2931f974, 0x1ce48953, 0x993d1f8e, + 0x5751d533, 0xd28843ee, 0x8a8e3093, 0x0f57a64e, 0xc13b6cf3, 0x44e2fa2e, + 0x5edaf30e, 0xdb0365d3, 0x156faf6e, 0x90b639b3, 0xc8b04ace, 0x4d69dc13, + 0x830516ae, 0x06dc8073, 0x3309f054, 0xb6d06689, 0x78bcac34, 0xfd653ae9, + 0xa5634994, 0x20badf49, 0xeed615f4, 0x6b0f8329, 0x847cf4ba, 0x01a56267, + 0xcfc9a8da, 0x4a103e07, 0x12164d7a, 0x97cfdba7, 0x59a3111a, 0xdc7a87c7, + 0xe9aff7e0, 0x6c76613d, 0xa21aab80, 0x27c33d5d, 0x7fc54e20, 0xfa1cd8fd, + 0x34701240, 0xb1a9849d, 0x17256aa0, 0x92fcfc7d, 0x5c9036c0, 0xd949a01d, + 0x814fd360, 0x049645bd, 0xcafa8f00, 0x4f2319dd, 0x7af669fa, 0xff2fff27, + 0x3143359a, 0xb49aa347, 0xec9cd03a, 0x694546e7, 0xa7298c5a, 0x22f01a87, + 0xcd836d14, 0x485afbc9, 0x86363174, 0x03efa7a9, 0x5be9d4d4, 0xde304209, + 0x105c88b4, 0x95851e69, 0xa0506e4e, 0x2589f893, 0xebe5322e, 0x6e3ca4f3, + 0x363ad78e, 0xb3e34153, 0x7d8f8bee, 0xf8561d33, 0xe26e1413, 0x67b782ce, + 0xa9db4873, 0x2c02deae, 0x7404add3, 0xf1dd3b0e, 0x3fb1f1b3, 0xba68676e, + 0x8fbd1749, 0x0a648194, 0xc4084b29, 0x41d1ddf4, 0x19d7ae89, 0x9c0e3854, + 0x5262f2e9, 0xd7bb6434, 0x38c813a7, 0xbd11857a, 0x737d4fc7, 0xf6a4d91a, + 0xaea2aa67, 0x2b7b3cba, 0xe517f607, 0x60ce60da, 0x551b10fd, 0xd0c28620, + 0x1eae4c9d, 0x9b77da40, 0xc371a93d, 0x46a83fe0, 0x88c4f55d, 0x0d1d6380, + 0xbcb4e71d, 0x396d71c0, 0xf701bb7d, 0x72d82da0, 0x2ade5edd, 0xaf07c800, + 0x616b02bd, 0xe4b29460, 0xd167e447, 0x54be729a, 0x9ad2b827, 0x1f0b2efa, + 0x470d5d87, 0xc2d4cb5a, 0x0cb801e7, 0x8961973a, 0x6612e0a9, 0xe3cb7674, + 0x2da7bcc9, 0xa87e2a14, 0xf0785969, 0x75a1cfb4, 0xbbcd0509, 0x3e1493d4, + 0x0bc1e3f3, 0x8e18752e, 0x4074bf93, 0xc5ad294e, 0x9dab5a33, 0x1872ccee, + 0xd61e0653, 0x53c7908e, 0x49ff99ae, 0xcc260f73, 0x024ac5ce, 0x87935313, + 0xdf95206e, 0x5a4cb6b3, 0x94207c0e, 0x11f9ead3, 0x242c9af4, 0xa1f50c29, + 0x6f99c694, 0xea405049, 0xb2462334, 0x379fb5e9, 0xf9f37f54, 0x7c2ae989, + 0x93599e1a, 0x168008c7, 0xd8ecc27a, 0x5d3554a7, 0x053327da, 0x80eab107, + 0x4e867bba, 0xcb5fed67, 0xfe8a9d40, 0x7b530b9d, 0xb53fc120, 0x30e657fd, + 0x68e02480, 0xed39b25d, 0x235578e0, 0xa68cee3d}, + {0x00000000, 0x76e10f9d, 0xadc46ee1, 0xdb25617c, 0x1b8fac19, 0x6d6ea384, + 0xb64bc2f8, 0xc0aacd65, 0x361e5933, 0x40ff56ae, 0x9bda37d2, 0xed3b384f, + 0x2d91f52a, 0x5b70fab7, 0x80559bcb, 0xf6b49456, 0x6c3cb266, 0x1addbdfb, + 0xc1f8dc87, 0xb719d31a, 0x77b31e7f, 0x015211e2, 0xda77709e, 0xac967f03, + 0x5a22eb55, 0x2cc3e4c8, 0xf7e685b4, 0x81078a29, 0x41ad474c, 0x374c48d1, + 0xec6929ad, 0x9a882630, 0xd87864cd, 0xae996b50, 0x75bc0a2c, 0x035d05b1, + 0xc3f7c8d4, 0xb516c749, 0x6e33a635, 0x18d2a9a8, 0xee663dfe, 0x98873263, + 0x43a2531f, 0x35435c82, 0xf5e991e7, 0x83089e7a, 0x582dff06, 0x2eccf09b, + 0xb444d6ab, 0xc2a5d936, 0x1980b84a, 0x6f61b7d7, 0xafcb7ab2, 0xd92a752f, + 0x020f1453, 0x74ee1bce, 0x825a8f98, 0xf4bb8005, 0x2f9ee179, 0x597feee4, + 0x99d52381, 0xef342c1c, 0x34114d60, 0x42f042fd, 0xf1f7b941, 0x8716b6dc, + 0x5c33d7a0, 0x2ad2d83d, 0xea781558, 0x9c991ac5, 0x47bc7bb9, 0x315d7424, + 0xc7e9e072, 0xb108efef, 0x6a2d8e93, 0x1ccc810e, 0xdc664c6b, 0xaa8743f6, + 0x71a2228a, 0x07432d17, 0x9dcb0b27, 0xeb2a04ba, 0x300f65c6, 0x46ee6a5b, + 0x8644a73e, 0xf0a5a8a3, 0x2b80c9df, 0x5d61c642, 0xabd55214, 0xdd345d89, + 0x06113cf5, 0x70f03368, 0xb05afe0d, 0xc6bbf190, 0x1d9e90ec, 0x6b7f9f71, + 0x298fdd8c, 0x5f6ed211, 0x844bb36d, 0xf2aabcf0, 0x32007195, 0x44e17e08, + 0x9fc41f74, 0xe92510e9, 0x1f9184bf, 0x69708b22, 0xb255ea5e, 0xc4b4e5c3, + 0x041e28a6, 0x72ff273b, 0xa9da4647, 0xdf3b49da, 0x45b36fea, 0x33526077, + 0xe877010b, 0x9e960e96, 0x5e3cc3f3, 0x28ddcc6e, 0xf3f8ad12, 0x8519a28f, + 0x73ad36d9, 0x054c3944, 0xde695838, 0xa88857a5, 0x68229ac0, 0x1ec3955d, + 0xc5e6f421, 0xb307fbbc, 0xe2ef7383, 0x940e7c1e, 0x4f2b1d62, 0x39ca12ff, + 0xf960df9a, 0x8f81d007, 0x54a4b17b, 0x2245bee6, 0xd4f12ab0, 0xa210252d, + 0x79354451, 0x0fd44bcc, 0xcf7e86a9, 0xb99f8934, 0x62bae848, 0x145be7d5, + 0x8ed3c1e5, 0xf832ce78, 0x2317af04, 0x55f6a099, 0x955c6dfc, 0xe3bd6261, + 0x3898031d, 0x4e790c80, 0xb8cd98d6, 0xce2c974b, 0x1509f637, 0x63e8f9aa, + 0xa34234cf, 0xd5a33b52, 0x0e865a2e, 0x786755b3, 0x3a97174e, 0x4c7618d3, + 0x975379af, 0xe1b27632, 0x2118bb57, 0x57f9b4ca, 0x8cdcd5b6, 0xfa3dda2b, + 0x0c894e7d, 0x7a6841e0, 0xa14d209c, 0xd7ac2f01, 0x1706e264, 0x61e7edf9, + 0xbac28c85, 0xcc238318, 0x56aba528, 0x204aaab5, 0xfb6fcbc9, 0x8d8ec454, + 0x4d240931, 0x3bc506ac, 0xe0e067d0, 0x9601684d, 0x60b5fc1b, 0x1654f386, + 0xcd7192fa, 0xbb909d67, 0x7b3a5002, 0x0ddb5f9f, 0xd6fe3ee3, 0xa01f317e, + 0x1318cac2, 0x65f9c55f, 0xbedca423, 0xc83dabbe, 0x089766db, 0x7e766946, + 0xa553083a, 0xd3b207a7, 0x250693f1, 0x53e79c6c, 0x88c2fd10, 0xfe23f28d, + 0x3e893fe8, 0x48683075, 0x934d5109, 0xe5ac5e94, 0x7f2478a4, 0x09c57739, + 0xd2e01645, 0xa40119d8, 0x64abd4bd, 0x124adb20, 0xc96fba5c, 0xbf8eb5c1, + 0x493a2197, 0x3fdb2e0a, 0xe4fe4f76, 0x921f40eb, 0x52b58d8e, 0x24548213, + 0xff71e36f, 0x8990ecf2, 0xcb60ae0f, 0xbd81a192, 0x66a4c0ee, 0x1045cf73, + 0xd0ef0216, 0xa60e0d8b, 0x7d2b6cf7, 0x0bca636a, 0xfd7ef73c, 0x8b9ff8a1, + 0x50ba99dd, 0x265b9640, 0xe6f15b25, 0x901054b8, 0x4b3535c4, 0x3dd43a59, + 0xa75c1c69, 0xd1bd13f4, 0x0a987288, 0x7c797d15, 0xbcd3b070, 0xca32bfed, + 0x1117de91, 0x67f6d10c, 0x9142455a, 0xe7a34ac7, 0x3c862bbb, 0x4a672426, + 0x8acde943, 0xfc2ce6de, 0x270987a2, 0x51e8883f}, + {0x00000000, 0xe8dbfbb9, 0x91b186a8, 0x796a7d11, 0x63657c8a, 0x8bbe8733, + 0xf2d4fa22, 0x1a0f019b, 0x87cc89cf, 0x6f177276, 0x167d0f67, 0xfea6f4de, + 0xe4a9f545, 0x0c720efc, 0x751873ed, 0x9dc38854, 0x4f9f6244, 0xa74499fd, + 0xde2ee4ec, 0x36f51f55, 0x2cfa1ece, 0xc421e577, 0xbd4b9866, 0x559063df, + 0xc853eb8b, 0x20881032, 0x59e26d23, 0xb139969a, 0xab369701, 0x43ed6cb8, + 0x3a8711a9, 0xd25cea10, 0x9e3ec588, 0x76e53e31, 0x0f8f4320, 0xe754b899, + 0xfd5bb902, 0x158042bb, 0x6cea3faa, 0x8431c413, 0x19f24c47, 0xf129b7fe, + 0x8843caef, 0x60983156, 0x7a9730cd, 0x924ccb74, 0xeb26b665, 0x03fd4ddc, + 0xd1a1a7cc, 0x397a5c75, 0x40102164, 0xa8cbdadd, 0xb2c4db46, 0x5a1f20ff, + 0x23755dee, 0xcbaea657, 0x566d2e03, 0xbeb6d5ba, 0xc7dca8ab, 0x2f075312, + 0x35085289, 0xddd3a930, 0xa4b9d421, 0x4c622f98, 0x7d7bfbca, 0x95a00073, + 0xecca7d62, 0x041186db, 0x1e1e8740, 0xf6c57cf9, 0x8faf01e8, 0x6774fa51, + 0xfab77205, 0x126c89bc, 0x6b06f4ad, 0x83dd0f14, 0x99d20e8f, 0x7109f536, + 0x08638827, 0xe0b8739e, 0x32e4998e, 0xda3f6237, 0xa3551f26, 0x4b8ee49f, + 0x5181e504, 0xb95a1ebd, 0xc03063ac, 0x28eb9815, 0xb5281041, 0x5df3ebf8, + 0x249996e9, 0xcc426d50, 0xd64d6ccb, 0x3e969772, 0x47fcea63, 0xaf2711da, + 0xe3453e42, 0x0b9ec5fb, 0x72f4b8ea, 0x9a2f4353, 0x802042c8, 0x68fbb971, + 0x1191c460, 0xf94a3fd9, 0x6489b78d, 0x8c524c34, 0xf5383125, 0x1de3ca9c, + 0x07eccb07, 0xef3730be, 0x965d4daf, 0x7e86b616, 0xacda5c06, 0x4401a7bf, + 0x3d6bdaae, 0xd5b02117, 0xcfbf208c, 0x2764db35, 0x5e0ea624, 0xb6d55d9d, + 0x2b16d5c9, 0xc3cd2e70, 0xbaa75361, 0x527ca8d8, 0x4873a943, 0xa0a852fa, + 0xd9c22feb, 0x3119d452, 0xbbf0874e, 0x532b7cf7, 0x2a4101e6, 0xc29afa5f, + 0xd895fbc4, 0x304e007d, 0x49247d6c, 0xa1ff86d5, 0x3c3c0e81, 0xd4e7f538, + 0xad8d8829, 0x45567390, 0x5f59720b, 0xb78289b2, 0xcee8f4a3, 0x26330f1a, + 0xf46fe50a, 0x1cb41eb3, 0x65de63a2, 0x8d05981b, 0x970a9980, 0x7fd16239, + 0x06bb1f28, 0xee60e491, 0x73a36cc5, 0x9b78977c, 0xe212ea6d, 0x0ac911d4, + 0x10c6104f, 0xf81debf6, 0x817796e7, 0x69ac6d5e, 0x25ce42c6, 0xcd15b97f, + 0xb47fc46e, 0x5ca43fd7, 0x46ab3e4c, 0xae70c5f5, 0xd71ab8e4, 0x3fc1435d, + 0xa202cb09, 0x4ad930b0, 0x33b34da1, 0xdb68b618, 0xc167b783, 0x29bc4c3a, + 0x50d6312b, 0xb80dca92, 0x6a512082, 0x828adb3b, 0xfbe0a62a, 0x133b5d93, + 0x09345c08, 0xe1efa7b1, 0x9885daa0, 0x705e2119, 0xed9da94d, 0x054652f4, + 0x7c2c2fe5, 0x94f7d45c, 0x8ef8d5c7, 0x66232e7e, 0x1f49536f, 0xf792a8d6, + 0xc68b7c84, 0x2e50873d, 0x573afa2c, 0xbfe10195, 0xa5ee000e, 0x4d35fbb7, + 0x345f86a6, 0xdc847d1f, 0x4147f54b, 0xa99c0ef2, 0xd0f673e3, 0x382d885a, + 0x222289c1, 0xcaf97278, 0xb3930f69, 0x5b48f4d0, 0x89141ec0, 0x61cfe579, + 0x18a59868, 0xf07e63d1, 0xea71624a, 0x02aa99f3, 0x7bc0e4e2, 0x931b1f5b, + 0x0ed8970f, 0xe6036cb6, 0x9f6911a7, 0x77b2ea1e, 0x6dbdeb85, 0x8566103c, + 0xfc0c6d2d, 0x14d79694, 0x58b5b90c, 0xb06e42b5, 0xc9043fa4, 0x21dfc41d, + 0x3bd0c586, 0xd30b3e3f, 0xaa61432e, 0x42bab897, 0xdf7930c3, 0x37a2cb7a, + 0x4ec8b66b, 0xa6134dd2, 0xbc1c4c49, 0x54c7b7f0, 0x2dadcae1, 0xc5763158, + 0x172adb48, 0xfff120f1, 0x869b5de0, 0x6e40a659, 0x744fa7c2, 0x9c945c7b, + 0xe5fe216a, 0x0d25dad3, 0x90e65287, 0x783da93e, 0x0157d42f, 0xe98c2f96, + 0xf3832e0d, 0x1b58d5b4, 0x6232a8a5, 0x8ae9531c}, + {0x00000000, 0x919168ae, 0x6325a087, 0xf2b4c829, 0x874c31d4, 0x16dd597a, + 0xe4699153, 0x75f8f9fd, 0x4f9f1373, 0xde0e7bdd, 0x2cbab3f4, 0xbd2bdb5a, + 0xc8d322a7, 0x59424a09, 0xabf68220, 0x3a67ea8e, 0x9e3e27e6, 0x0faf4f48, + 0xfd1b8761, 0x6c8aefcf, 0x19721632, 0x88e37e9c, 0x7a57b6b5, 0xebc6de1b, + 0xd1a13495, 0x40305c3b, 0xb2849412, 0x2315fcbc, 0x56ed0541, 0xc77c6def, + 0x35c8a5c6, 0xa459cd68, 0x7d7b3f17, 0xecea57b9, 0x1e5e9f90, 0x8fcff73e, + 0xfa370ec3, 0x6ba6666d, 0x9912ae44, 0x0883c6ea, 0x32e42c64, 0xa37544ca, + 0x51c18ce3, 0xc050e44d, 0xb5a81db0, 0x2439751e, 0xd68dbd37, 0x471cd599, + 0xe34518f1, 0x72d4705f, 0x8060b876, 0x11f1d0d8, 0x64092925, 0xf598418b, + 0x072c89a2, 0x96bde10c, 0xacda0b82, 0x3d4b632c, 0xcfffab05, 0x5e6ec3ab, + 0x2b963a56, 0xba0752f8, 0x48b39ad1, 0xd922f27f, 0xfaf67e2e, 0x6b671680, + 0x99d3dea9, 0x0842b607, 0x7dba4ffa, 0xec2b2754, 0x1e9fef7d, 0x8f0e87d3, + 0xb5696d5d, 0x24f805f3, 0xd64ccdda, 0x47dda574, 0x32255c89, 0xa3b43427, + 0x5100fc0e, 0xc09194a0, 0x64c859c8, 0xf5593166, 0x07edf94f, 0x967c91e1, + 0xe384681c, 0x721500b2, 0x80a1c89b, 0x1130a035, 0x2b574abb, 0xbac62215, + 0x4872ea3c, 0xd9e38292, 0xac1b7b6f, 0x3d8a13c1, 0xcf3edbe8, 0x5eafb346, + 0x878d4139, 0x161c2997, 0xe4a8e1be, 0x75398910, 0x00c170ed, 0x91501843, + 0x63e4d06a, 0xf275b8c4, 0xc812524a, 0x59833ae4, 0xab37f2cd, 0x3aa69a63, + 0x4f5e639e, 0xdecf0b30, 0x2c7bc319, 0xbdeaabb7, 0x19b366df, 0x88220e71, + 0x7a96c658, 0xeb07aef6, 0x9eff570b, 0x0f6e3fa5, 0xfddaf78c, 0x6c4b9f22, + 0x562c75ac, 0xc7bd1d02, 0x3509d52b, 0xa498bd85, 0xd1604478, 0x40f12cd6, + 0xb245e4ff, 0x23d48c51, 0xf4edfd5c, 0x657c95f2, 0x97c85ddb, 0x06593575, + 0x73a1cc88, 0xe230a426, 0x10846c0f, 0x811504a1, 0xbb72ee2f, 0x2ae38681, + 0xd8574ea8, 0x49c62606, 0x3c3edffb, 0xadafb755, 0x5f1b7f7c, 0xce8a17d2, + 0x6ad3daba, 0xfb42b214, 0x09f67a3d, 0x98671293, 0xed9feb6e, 0x7c0e83c0, + 0x8eba4be9, 0x1f2b2347, 0x254cc9c9, 0xb4dda167, 0x4669694e, 0xd7f801e0, + 0xa200f81d, 0x339190b3, 0xc125589a, 0x50b43034, 0x8996c24b, 0x1807aae5, + 0xeab362cc, 0x7b220a62, 0x0edaf39f, 0x9f4b9b31, 0x6dff5318, 0xfc6e3bb6, + 0xc609d138, 0x5798b996, 0xa52c71bf, 0x34bd1911, 0x4145e0ec, 0xd0d48842, + 0x2260406b, 0xb3f128c5, 0x17a8e5ad, 0x86398d03, 0x748d452a, 0xe51c2d84, + 0x90e4d479, 0x0175bcd7, 0xf3c174fe, 0x62501c50, 0x5837f6de, 0xc9a69e70, + 0x3b125659, 0xaa833ef7, 0xdf7bc70a, 0x4eeaafa4, 0xbc5e678d, 0x2dcf0f23, + 0x0e1b8372, 0x9f8aebdc, 0x6d3e23f5, 0xfcaf4b5b, 0x8957b2a6, 0x18c6da08, + 0xea721221, 0x7be37a8f, 0x41849001, 0xd015f8af, 0x22a13086, 0xb3305828, + 0xc6c8a1d5, 0x5759c97b, 0xa5ed0152, 0x347c69fc, 0x9025a494, 0x01b4cc3a, + 0xf3000413, 0x62916cbd, 0x17699540, 0x86f8fdee, 0x744c35c7, 0xe5dd5d69, + 0xdfbab7e7, 0x4e2bdf49, 0xbc9f1760, 0x2d0e7fce, 0x58f68633, 0xc967ee9d, + 0x3bd326b4, 0xaa424e1a, 0x7360bc65, 0xe2f1d4cb, 0x10451ce2, 0x81d4744c, + 0xf42c8db1, 0x65bde51f, 0x97092d36, 0x06984598, 0x3cffaf16, 0xad6ec7b8, + 0x5fda0f91, 0xce4b673f, 0xbbb39ec2, 0x2a22f66c, 0xd8963e45, 0x490756eb, + 0xed5e9b83, 0x7ccff32d, 0x8e7b3b04, 0x1fea53aa, 0x6a12aa57, 0xfb83c2f9, + 0x09370ad0, 0x98a6627e, 0xa2c188f0, 0x3350e05e, 0xc1e42877, 0x507540d9, + 0x258db924, 0xb41cd18a, 0x46a819a3, 0xd739710d}}; #endif @@ -6363,1534 +5769,1390 @@ local const z_word_t FAR crc_braid_big_table[][256] = { #if W == 8 local const z_crc_t FAR crc_braid_table[][256] = { - {0x00000000, 0xaf449247, 0x85f822cf, 0x2abcb088, 0xd08143df, - 0x7fc5d198, 0x55796110, 0xfa3df357, 0x7a7381ff, 0xd53713b8, - 0xff8ba330, 0x50cf3177, 0xaaf2c220, 0x05b65067, 0x2f0ae0ef, - 0x804e72a8, 0xf4e703fe, 0x5ba391b9, 0x711f2131, 0xde5bb376, - 0x24664021, 0x8b22d266, 0xa19e62ee, 0x0edaf0a9, 0x8e948201, - 0x21d01046, 0x0b6ca0ce, 0xa4283289, 0x5e15c1de, 0xf1515399, - 0xdbede311, 0x74a97156, 0x32bf01bd, 0x9dfb93fa, 0xb7472372, - 0x1803b135, 0xe23e4262, 0x4d7ad025, 0x67c660ad, 0xc882f2ea, - 0x48cc8042, 0xe7881205, 0xcd34a28d, 0x627030ca, 0x984dc39d, - 0x370951da, 0x1db5e152, 0xb2f17315, 0xc6580243, 0x691c9004, - 0x43a0208c, 0xece4b2cb, 0x16d9419c, 0xb99dd3db, 0x93216353, - 0x3c65f114, 0xbc2b83bc, 0x136f11fb, 0x39d3a173, 0x96973334, - 0x6caac063, 0xc3ee5224, 0xe952e2ac, 0x461670eb, 0x657e037a, - 0xca3a913d, 0xe08621b5, 0x4fc2b3f2, 0xb5ff40a5, 0x1abbd2e2, - 0x3007626a, 0x9f43f02d, 0x1f0d8285, 0xb04910c2, 0x9af5a04a, - 0x35b1320d, 0xcf8cc15a, 0x60c8531d, 0x4a74e395, 0xe53071d2, - 0x91990084, 0x3edd92c3, 0x1461224b, 0xbb25b00c, 0x4118435b, - 0xee5cd11c, 0xc4e06194, 0x6ba4f3d3, 0xebea817b, 0x44ae133c, - 0x6e12a3b4, 0xc15631f3, 0x3b6bc2a4, 0x942f50e3, 0xbe93e06b, - 0x11d7722c, 0x57c102c7, 0xf8859080, 0xd2392008, 0x7d7db24f, - 0x87404118, 0x2804d35f, 0x02b863d7, 0xadfcf190, 0x2db28338, - 0x82f6117f, 0xa84aa1f7, 0x070e33b0, 0xfd33c0e7, 0x527752a0, - 0x78cbe228, 0xd78f706f, 0xa3260139, 0x0c62937e, 0x26de23f6, - 0x899ab1b1, 0x73a742e6, 0xdce3d0a1, 0xf65f6029, 0x591bf26e, - 0xd95580c6, 0x76111281, 0x5cada209, 0xf3e9304e, 0x09d4c319, - 0xa690515e, 0x8c2ce1d6, 0x23687391, 0xcafc06f4, 0x65b894b3, - 0x4f04243b, 0xe040b67c, 0x1a7d452b, 0xb539d76c, 0x9f8567e4, - 0x30c1f5a3, 0xb08f870b, 0x1fcb154c, 0x3577a5c4, 0x9a333783, - 0x600ec4d4, 0xcf4a5693, 0xe5f6e61b, 0x4ab2745c, 0x3e1b050a, - 0x915f974d, 0xbbe327c5, 0x14a7b582, 0xee9a46d5, 0x41ded492, - 0x6b62641a, 0xc426f65d, 0x446884f5, 0xeb2c16b2, 0xc190a63a, - 0x6ed4347d, 0x94e9c72a, 0x3bad556d, 0x1111e5e5, 0xbe5577a2, - 0xf8430749, 0x5707950e, 0x7dbb2586, 0xd2ffb7c1, 0x28c24496, - 0x8786d6d1, 0xad3a6659, 0x027ef41e, 0x823086b6, 0x2d7414f1, - 0x07c8a479, 0xa88c363e, 0x52b1c569, 0xfdf5572e, 0xd749e7a6, - 0x780d75e1, 0x0ca404b7, 0xa3e096f0, 0x895c2678, 0x2618b43f, - 0xdc254768, 0x7361d52f, 0x59dd65a7, 0xf699f7e0, 0x76d78548, - 0xd993170f, 0xf32fa787, 0x5c6b35c0, 0xa656c697, 0x091254d0, - 0x23aee458, 0x8cea761f, 0xaf82058e, 0x00c697c9, 0x2a7a2741, - 0x853eb506, 0x7f034651, 0xd047d416, 0xfafb649e, 0x55bff6d9, - 0xd5f18471, 0x7ab51636, 0x5009a6be, 0xff4d34f9, 0x0570c7ae, - 0xaa3455e9, 0x8088e561, 0x2fcc7726, 0x5b650670, 0xf4219437, - 0xde9d24bf, 0x71d9b6f8, 0x8be445af, 0x24a0d7e8, 0x0e1c6760, - 0xa158f527, 0x2116878f, 0x8e5215c8, 0xa4eea540, 0x0baa3707, - 0xf197c450, 0x5ed35617, 0x746fe69f, 0xdb2b74d8, 0x9d3d0433, - 0x32799674, 0x18c526fc, 0xb781b4bb, 0x4dbc47ec, 0xe2f8d5ab, - 0xc8446523, 0x6700f764, 0xe74e85cc, 0x480a178b, 0x62b6a703, - 0xcdf23544, 0x37cfc613, 0x988b5454, 0xb237e4dc, 0x1d73769b, - 0x69da07cd, 0xc69e958a, 0xec222502, 0x4366b745, 0xb95b4412, - 0x161fd655, 0x3ca366dd, 0x93e7f49a, 0x13a98632, 0xbced1475, - 0x9651a4fd, 0x391536ba, 0xc328c5ed, 0x6c6c57aa, 0x46d0e722, - 0xe9947565}, - {0x00000000, 0x4e890ba9, 0x9d121752, 0xd39b1cfb, 0xe15528e5, - 0xafdc234c, 0x7c473fb7, 0x32ce341e, 0x19db578b, 0x57525c22, - 0x84c940d9, 0xca404b70, 0xf88e7f6e, 0xb60774c7, 0x659c683c, - 0x2b156395, 0x33b6af16, 0x7d3fa4bf, 0xaea4b844, 0xe02db3ed, - 0xd2e387f3, 0x9c6a8c5a, 0x4ff190a1, 0x01789b08, 0x2a6df89d, - 0x64e4f334, 0xb77fefcf, 0xf9f6e466, 0xcb38d078, 0x85b1dbd1, - 0x562ac72a, 0x18a3cc83, 0x676d5e2c, 0x29e45585, 0xfa7f497e, - 0xb4f642d7, 0x863876c9, 0xc8b17d60, 0x1b2a619b, 0x55a36a32, - 0x7eb609a7, 0x303f020e, 0xe3a41ef5, 0xad2d155c, 0x9fe32142, - 0xd16a2aeb, 0x02f13610, 0x4c783db9, 0x54dbf13a, 0x1a52fa93, - 0xc9c9e668, 0x8740edc1, 0xb58ed9df, 0xfb07d276, 0x289cce8d, - 0x6615c524, 0x4d00a6b1, 0x0389ad18, 0xd012b1e3, 0x9e9bba4a, - 0xac558e54, 0xe2dc85fd, 0x31479906, 0x7fce92af, 0xcedabc58, - 0x8053b7f1, 0x53c8ab0a, 0x1d41a0a3, 0x2f8f94bd, 0x61069f14, - 0xb29d83ef, 0xfc148846, 0xd701ebd3, 0x9988e07a, 0x4a13fc81, - 0x049af728, 0x3654c336, 0x78ddc89f, 0xab46d464, 0xe5cfdfcd, - 0xfd6c134e, 0xb3e518e7, 0x607e041c, 0x2ef70fb5, 0x1c393bab, - 0x52b03002, 0x812b2cf9, 0xcfa22750, 0xe4b744c5, 0xaa3e4f6c, - 0x79a55397, 0x372c583e, 0x05e26c20, 0x4b6b6789, 0x98f07b72, - 0xd67970db, 0xa9b7e274, 0xe73ee9dd, 0x34a5f526, 0x7a2cfe8f, - 0x48e2ca91, 0x066bc138, 0xd5f0ddc3, 0x9b79d66a, 0xb06cb5ff, - 0xfee5be56, 0x2d7ea2ad, 0x63f7a904, 0x51399d1a, 0x1fb096b3, - 0xcc2b8a48, 0x82a281e1, 0x9a014d62, 0xd48846cb, 0x07135a30, - 0x499a5199, 0x7b546587, 0x35dd6e2e, 0xe64672d5, 0xa8cf797c, - 0x83da1ae9, 0xcd531140, 0x1ec80dbb, 0x50410612, 0x628f320c, - 0x2c0639a5, 0xff9d255e, 0xb1142ef7, 0x46c47ef1, 0x084d7558, - 0xdbd669a3, 0x955f620a, 0xa7915614, 0xe9185dbd, 0x3a834146, - 0x740a4aef, 0x5f1f297a, 0x119622d3, 0xc20d3e28, 0x8c843581, - 0xbe4a019f, 0xf0c30a36, 0x235816cd, 0x6dd11d64, 0x7572d1e7, - 0x3bfbda4e, 0xe860c6b5, 0xa6e9cd1c, 0x9427f902, 0xdaaef2ab, - 0x0935ee50, 0x47bce5f9, 0x6ca9866c, 0x22208dc5, 0xf1bb913e, - 0xbf329a97, 0x8dfcae89, 0xc375a520, 0x10eeb9db, 0x5e67b272, - 0x21a920dd, 0x6f202b74, 0xbcbb378f, 0xf2323c26, 0xc0fc0838, - 0x8e750391, 0x5dee1f6a, 0x136714c3, 0x38727756, 0x76fb7cff, - 0xa5606004, 0xebe96bad, 0xd9275fb3, 0x97ae541a, 0x443548e1, - 0x0abc4348, 0x121f8fcb, 0x5c968462, 0x8f0d9899, 0xc1849330, - 0xf34aa72e, 0xbdc3ac87, 0x6e58b07c, 0x20d1bbd5, 0x0bc4d840, - 0x454dd3e9, 0x96d6cf12, 0xd85fc4bb, 0xea91f0a5, 0xa418fb0c, - 0x7783e7f7, 0x390aec5e, 0x881ec2a9, 0xc697c900, 0x150cd5fb, - 0x5b85de52, 0x694bea4c, 0x27c2e1e5, 0xf459fd1e, 0xbad0f6b7, - 0x91c59522, 0xdf4c9e8b, 0x0cd78270, 0x425e89d9, 0x7090bdc7, - 0x3e19b66e, 0xed82aa95, 0xa30ba13c, 0xbba86dbf, 0xf5216616, - 0x26ba7aed, 0x68337144, 0x5afd455a, 0x14744ef3, 0xc7ef5208, - 0x896659a1, 0xa2733a34, 0xecfa319d, 0x3f612d66, 0x71e826cf, - 0x432612d1, 0x0daf1978, 0xde340583, 0x90bd0e2a, 0xef739c85, - 0xa1fa972c, 0x72618bd7, 0x3ce8807e, 0x0e26b460, 0x40afbfc9, - 0x9334a332, 0xddbda89b, 0xf6a8cb0e, 0xb821c0a7, 0x6bbadc5c, - 0x2533d7f5, 0x17fde3eb, 0x5974e842, 0x8aeff4b9, 0xc466ff10, - 0xdcc53393, 0x924c383a, 0x41d724c1, 0x0f5e2f68, 0x3d901b76, - 0x731910df, 0xa0820c24, 0xee0b078d, 0xc51e6418, 0x8b976fb1, - 0x580c734a, 0x168578e3, 0x244b4cfd, 0x6ac24754, 0xb9595baf, - 0xf7d05006}, - {0x00000000, 0x8d88fde2, 0xc060fd85, 0x4de80067, 0x5bb0fd4b, - 0xd63800a9, 0x9bd000ce, 0x1658fd2c, 0xb761fa96, 0x3ae90774, - 0x77010713, 0xfa89faf1, 0xecd107dd, 0x6159fa3f, 0x2cb1fa58, - 0xa13907ba, 0xb5b2f36d, 0x383a0e8f, 0x75d20ee8, 0xf85af30a, - 0xee020e26, 0x638af3c4, 0x2e62f3a3, 0xa3ea0e41, 0x02d309fb, - 0x8f5bf419, 0xc2b3f47e, 0x4f3b099c, 0x5963f4b0, 0xd4eb0952, - 0x99030935, 0x148bf4d7, 0xb014e09b, 0x3d9c1d79, 0x70741d1e, - 0xfdfce0fc, 0xeba41dd0, 0x662ce032, 0x2bc4e055, 0xa64c1db7, - 0x07751a0d, 0x8afde7ef, 0xc715e788, 0x4a9d1a6a, 0x5cc5e746, - 0xd14d1aa4, 0x9ca51ac3, 0x112de721, 0x05a613f6, 0x882eee14, - 0xc5c6ee73, 0x484e1391, 0x5e16eebd, 0xd39e135f, 0x9e761338, - 0x13feeeda, 0xb2c7e960, 0x3f4f1482, 0x72a714e5, 0xff2fe907, - 0xe977142b, 0x64ffe9c9, 0x2917e9ae, 0xa49f144c, 0xbb58c777, - 0x36d03a95, 0x7b383af2, 0xf6b0c710, 0xe0e83a3c, 0x6d60c7de, - 0x2088c7b9, 0xad003a5b, 0x0c393de1, 0x81b1c003, 0xcc59c064, - 0x41d13d86, 0x5789c0aa, 0xda013d48, 0x97e93d2f, 0x1a61c0cd, - 0x0eea341a, 0x8362c9f8, 0xce8ac99f, 0x4302347d, 0x555ac951, - 0xd8d234b3, 0x953a34d4, 0x18b2c936, 0xb98bce8c, 0x3403336e, - 0x79eb3309, 0xf463ceeb, 0xe23b33c7, 0x6fb3ce25, 0x225bce42, - 0xafd333a0, 0x0b4c27ec, 0x86c4da0e, 0xcb2cda69, 0x46a4278b, - 0x50fcdaa7, 0xdd742745, 0x909c2722, 0x1d14dac0, 0xbc2ddd7a, - 0x31a52098, 0x7c4d20ff, 0xf1c5dd1d, 0xe79d2031, 0x6a15ddd3, - 0x27fdddb4, 0xaa752056, 0xbefed481, 0x33762963, 0x7e9e2904, - 0xf316d4e6, 0xe54e29ca, 0x68c6d428, 0x252ed44f, 0xa8a629ad, - 0x099f2e17, 0x8417d3f5, 0xc9ffd392, 0x44772e70, 0x522fd35c, - 0xdfa72ebe, 0x924f2ed9, 0x1fc7d33b, 0xadc088af, 0x2048754d, - 0x6da0752a, 0xe02888c8, 0xf67075e4, 0x7bf88806, 0x36108861, - 0xbb987583, 0x1aa17239, 0x97298fdb, 0xdac18fbc, 0x5749725e, - 0x41118f72, 0xcc997290, 0x817172f7, 0x0cf98f15, 0x18727bc2, - 0x95fa8620, 0xd8128647, 0x559a7ba5, 0x43c28689, 0xce4a7b6b, - 0x83a27b0c, 0x0e2a86ee, 0xaf138154, 0x229b7cb6, 0x6f737cd1, - 0xe2fb8133, 0xf4a37c1f, 0x792b81fd, 0x34c3819a, 0xb94b7c78, - 0x1dd46834, 0x905c95d6, 0xddb495b1, 0x503c6853, 0x4664957f, - 0xcbec689d, 0x860468fa, 0x0b8c9518, 0xaab592a2, 0x273d6f40, - 0x6ad56f27, 0xe75d92c5, 0xf1056fe9, 0x7c8d920b, 0x3165926c, - 0xbced6f8e, 0xa8669b59, 0x25ee66bb, 0x680666dc, 0xe58e9b3e, - 0xf3d66612, 0x7e5e9bf0, 0x33b69b97, 0xbe3e6675, 0x1f0761cf, - 0x928f9c2d, 0xdf679c4a, 0x52ef61a8, 0x44b79c84, 0xc93f6166, - 0x84d76101, 0x095f9ce3, 0x16984fd8, 0x9b10b23a, 0xd6f8b25d, - 0x5b704fbf, 0x4d28b293, 0xc0a04f71, 0x8d484f16, 0x00c0b2f4, - 0xa1f9b54e, 0x2c7148ac, 0x619948cb, 0xec11b529, 0xfa494805, - 0x77c1b5e7, 0x3a29b580, 0xb7a14862, 0xa32abcb5, 0x2ea24157, - 0x634a4130, 0xeec2bcd2, 0xf89a41fe, 0x7512bc1c, 0x38fabc7b, - 0xb5724199, 0x144b4623, 0x99c3bbc1, 0xd42bbba6, 0x59a34644, - 0x4ffbbb68, 0xc273468a, 0x8f9b46ed, 0x0213bb0f, 0xa68caf43, - 0x2b0452a1, 0x66ec52c6, 0xeb64af24, 0xfd3c5208, 0x70b4afea, - 0x3d5caf8d, 0xb0d4526f, 0x11ed55d5, 0x9c65a837, 0xd18da850, - 0x5c0555b2, 0x4a5da89e, 0xc7d5557c, 0x8a3d551b, 0x07b5a8f9, - 0x133e5c2e, 0x9eb6a1cc, 0xd35ea1ab, 0x5ed65c49, 0x488ea165, - 0xc5065c87, 0x88ee5ce0, 0x0566a102, 0xa45fa6b8, 0x29d75b5a, - 0x643f5b3d, 0xe9b7a6df, 0xffef5bf3, 0x7267a611, 0x3f8fa676, - 0xb2075b94}, - {0x00000000, 0x80f0171f, 0xda91287f, 0x5a613f60, 0x6e5356bf, - 0xeea341a0, 0xb4c27ec0, 0x343269df, 0xdca6ad7e, 0x5c56ba61, - 0x06378501, 0x86c7921e, 0xb2f5fbc1, 0x3205ecde, 0x6864d3be, - 0xe894c4a1, 0x623c5cbd, 0xe2cc4ba2, 0xb8ad74c2, 0x385d63dd, - 0x0c6f0a02, 0x8c9f1d1d, 0xd6fe227d, 0x560e3562, 0xbe9af1c3, - 0x3e6ae6dc, 0x640bd9bc, 0xe4fbcea3, 0xd0c9a77c, 0x5039b063, - 0x0a588f03, 0x8aa8981c, 0xc478b97a, 0x4488ae65, 0x1ee99105, - 0x9e19861a, 0xaa2befc5, 0x2adbf8da, 0x70bac7ba, 0xf04ad0a5, - 0x18de1404, 0x982e031b, 0xc24f3c7b, 0x42bf2b64, 0x768d42bb, - 0xf67d55a4, 0xac1c6ac4, 0x2cec7ddb, 0xa644e5c7, 0x26b4f2d8, - 0x7cd5cdb8, 0xfc25daa7, 0xc817b378, 0x48e7a467, 0x12869b07, - 0x92768c18, 0x7ae248b9, 0xfa125fa6, 0xa07360c6, 0x208377d9, - 0x14b11e06, 0x94410919, 0xce203679, 0x4ed02166, 0x538074b5, - 0xd37063aa, 0x89115cca, 0x09e14bd5, 0x3dd3220a, 0xbd233515, - 0xe7420a75, 0x67b21d6a, 0x8f26d9cb, 0x0fd6ced4, 0x55b7f1b4, - 0xd547e6ab, 0xe1758f74, 0x6185986b, 0x3be4a70b, 0xbb14b014, - 0x31bc2808, 0xb14c3f17, 0xeb2d0077, 0x6bdd1768, 0x5fef7eb7, - 0xdf1f69a8, 0x857e56c8, 0x058e41d7, 0xed1a8576, 0x6dea9269, - 0x378bad09, 0xb77bba16, 0x8349d3c9, 0x03b9c4d6, 0x59d8fbb6, - 0xd928eca9, 0x97f8cdcf, 0x1708dad0, 0x4d69e5b0, 0xcd99f2af, - 0xf9ab9b70, 0x795b8c6f, 0x233ab30f, 0xa3caa410, 0x4b5e60b1, - 0xcbae77ae, 0x91cf48ce, 0x113f5fd1, 0x250d360e, 0xa5fd2111, - 0xff9c1e71, 0x7f6c096e, 0xf5c49172, 0x7534866d, 0x2f55b90d, - 0xafa5ae12, 0x9b97c7cd, 0x1b67d0d2, 0x4106efb2, 0xc1f6f8ad, - 0x29623c0c, 0xa9922b13, 0xf3f31473, 0x7303036c, 0x47316ab3, - 0xc7c17dac, 0x9da042cc, 0x1d5055d3, 0xa700e96a, 0x27f0fe75, - 0x7d91c115, 0xfd61d60a, 0xc953bfd5, 0x49a3a8ca, 0x13c297aa, - 0x933280b5, 0x7ba64414, 0xfb56530b, 0xa1376c6b, 0x21c77b74, - 0x15f512ab, 0x950505b4, 0xcf643ad4, 0x4f942dcb, 0xc53cb5d7, - 0x45cca2c8, 0x1fad9da8, 0x9f5d8ab7, 0xab6fe368, 0x2b9ff477, - 0x71fecb17, 0xf10edc08, 0x199a18a9, 0x996a0fb6, 0xc30b30d6, - 0x43fb27c9, 0x77c94e16, 0xf7395909, 0xad586669, 0x2da87176, - 0x63785010, 0xe388470f, 0xb9e9786f, 0x39196f70, 0x0d2b06af, - 0x8ddb11b0, 0xd7ba2ed0, 0x574a39cf, 0xbfdefd6e, 0x3f2eea71, - 0x654fd511, 0xe5bfc20e, 0xd18dabd1, 0x517dbcce, 0x0b1c83ae, - 0x8bec94b1, 0x01440cad, 0x81b41bb2, 0xdbd524d2, 0x5b2533cd, - 0x6f175a12, 0xefe74d0d, 0xb586726d, 0x35766572, 0xdde2a1d3, - 0x5d12b6cc, 0x077389ac, 0x87839eb3, 0xb3b1f76c, 0x3341e073, - 0x6920df13, 0xe9d0c80c, 0xf4809ddf, 0x74708ac0, 0x2e11b5a0, - 0xaee1a2bf, 0x9ad3cb60, 0x1a23dc7f, 0x4042e31f, 0xc0b2f400, - 0x282630a1, 0xa8d627be, 0xf2b718de, 0x72470fc1, 0x4675661e, - 0xc6857101, 0x9ce44e61, 0x1c14597e, 0x96bcc162, 0x164cd67d, - 0x4c2de91d, 0xccddfe02, 0xf8ef97dd, 0x781f80c2, 0x227ebfa2, - 0xa28ea8bd, 0x4a1a6c1c, 0xcaea7b03, 0x908b4463, 0x107b537c, - 0x24493aa3, 0xa4b92dbc, 0xfed812dc, 0x7e2805c3, 0x30f824a5, - 0xb00833ba, 0xea690cda, 0x6a991bc5, 0x5eab721a, 0xde5b6505, - 0x843a5a65, 0x04ca4d7a, 0xec5e89db, 0x6cae9ec4, 0x36cfa1a4, - 0xb63fb6bb, 0x820ddf64, 0x02fdc87b, 0x589cf71b, 0xd86ce004, - 0x52c47818, 0xd2346f07, 0x88555067, 0x08a54778, 0x3c972ea7, - 0xbc6739b8, 0xe60606d8, 0x66f611c7, 0x8e62d566, 0x0e92c279, - 0x54f3fd19, 0xd403ea06, 0xe03183d9, 0x60c194c6, 0x3aa0aba6, - 0xba50bcb9}, - {0x00000000, 0x9570d495, 0xf190af6b, 0x64e07bfe, 0x38505897, - 0xad208c02, 0xc9c0f7fc, 0x5cb02369, 0x70a0b12e, 0xe5d065bb, - 0x81301e45, 0x1440cad0, 0x48f0e9b9, 0xdd803d2c, 0xb96046d2, - 0x2c109247, 0xe141625c, 0x7431b6c9, 0x10d1cd37, 0x85a119a2, - 0xd9113acb, 0x4c61ee5e, 0x288195a0, 0xbdf14135, 0x91e1d372, - 0x049107e7, 0x60717c19, 0xf501a88c, 0xa9b18be5, 0x3cc15f70, - 0x5821248e, 0xcd51f01b, 0x19f3c2f9, 0x8c83166c, 0xe8636d92, - 0x7d13b907, 0x21a39a6e, 0xb4d34efb, 0xd0333505, 0x4543e190, - 0x695373d7, 0xfc23a742, 0x98c3dcbc, 0x0db30829, 0x51032b40, - 0xc473ffd5, 0xa093842b, 0x35e350be, 0xf8b2a0a5, 0x6dc27430, - 0x09220fce, 0x9c52db5b, 0xc0e2f832, 0x55922ca7, 0x31725759, - 0xa40283cc, 0x8812118b, 0x1d62c51e, 0x7982bee0, 0xecf26a75, - 0xb042491c, 0x25329d89, 0x41d2e677, 0xd4a232e2, 0x33e785f2, - 0xa6975167, 0xc2772a99, 0x5707fe0c, 0x0bb7dd65, 0x9ec709f0, - 0xfa27720e, 0x6f57a69b, 0x434734dc, 0xd637e049, 0xb2d79bb7, - 0x27a74f22, 0x7b176c4b, 0xee67b8de, 0x8a87c320, 0x1ff717b5, - 0xd2a6e7ae, 0x47d6333b, 0x233648c5, 0xb6469c50, 0xeaf6bf39, - 0x7f866bac, 0x1b661052, 0x8e16c4c7, 0xa2065680, 0x37768215, - 0x5396f9eb, 0xc6e62d7e, 0x9a560e17, 0x0f26da82, 0x6bc6a17c, - 0xfeb675e9, 0x2a14470b, 0xbf64939e, 0xdb84e860, 0x4ef43cf5, - 0x12441f9c, 0x8734cb09, 0xe3d4b0f7, 0x76a46462, 0x5ab4f625, - 0xcfc422b0, 0xab24594e, 0x3e548ddb, 0x62e4aeb2, 0xf7947a27, - 0x937401d9, 0x0604d54c, 0xcb552557, 0x5e25f1c2, 0x3ac58a3c, - 0xafb55ea9, 0xf3057dc0, 0x6675a955, 0x0295d2ab, 0x97e5063e, - 0xbbf59479, 0x2e8540ec, 0x4a653b12, 0xdf15ef87, 0x83a5ccee, - 0x16d5187b, 0x72356385, 0xe745b710, 0x67cf0be4, 0xf2bfdf71, - 0x965fa48f, 0x032f701a, 0x5f9f5373, 0xcaef87e6, 0xae0ffc18, - 0x3b7f288d, 0x176fbaca, 0x821f6e5f, 0xe6ff15a1, 0x738fc134, - 0x2f3fe25d, 0xba4f36c8, 0xdeaf4d36, 0x4bdf99a3, 0x868e69b8, - 0x13febd2d, 0x771ec6d3, 0xe26e1246, 0xbede312f, 0x2baee5ba, - 0x4f4e9e44, 0xda3e4ad1, 0xf62ed896, 0x635e0c03, 0x07be77fd, - 0x92cea368, 0xce7e8001, 0x5b0e5494, 0x3fee2f6a, 0xaa9efbff, - 0x7e3cc91d, 0xeb4c1d88, 0x8fac6676, 0x1adcb2e3, 0x466c918a, - 0xd31c451f, 0xb7fc3ee1, 0x228cea74, 0x0e9c7833, 0x9becaca6, - 0xff0cd758, 0x6a7c03cd, 0x36cc20a4, 0xa3bcf431, 0xc75c8fcf, - 0x522c5b5a, 0x9f7dab41, 0x0a0d7fd4, 0x6eed042a, 0xfb9dd0bf, - 0xa72df3d6, 0x325d2743, 0x56bd5cbd, 0xc3cd8828, 0xefdd1a6f, - 0x7aadcefa, 0x1e4db504, 0x8b3d6191, 0xd78d42f8, 0x42fd966d, - 0x261ded93, 0xb36d3906, 0x54288e16, 0xc1585a83, 0xa5b8217d, - 0x30c8f5e8, 0x6c78d681, 0xf9080214, 0x9de879ea, 0x0898ad7f, - 0x24883f38, 0xb1f8ebad, 0xd5189053, 0x406844c6, 0x1cd867af, - 0x89a8b33a, 0xed48c8c4, 0x78381c51, 0xb569ec4a, 0x201938df, - 0x44f94321, 0xd18997b4, 0x8d39b4dd, 0x18496048, 0x7ca91bb6, - 0xe9d9cf23, 0xc5c95d64, 0x50b989f1, 0x3459f20f, 0xa129269a, - 0xfd9905f3, 0x68e9d166, 0x0c09aa98, 0x99797e0d, 0x4ddb4cef, - 0xd8ab987a, 0xbc4be384, 0x293b3711, 0x758b1478, 0xe0fbc0ed, - 0x841bbb13, 0x116b6f86, 0x3d7bfdc1, 0xa80b2954, 0xcceb52aa, - 0x599b863f, 0x052ba556, 0x905b71c3, 0xf4bb0a3d, 0x61cbdea8, - 0xac9a2eb3, 0x39eafa26, 0x5d0a81d8, 0xc87a554d, 0x94ca7624, - 0x01baa2b1, 0x655ad94f, 0xf02a0dda, 0xdc3a9f9d, 0x494a4b08, - 0x2daa30f6, 0xb8dae463, 0xe46ac70a, 0x711a139f, 0x15fa6861, - 0x808abcf4}, - {0x00000000, 0xcf9e17c8, 0x444d29d1, 0x8bd33e19, 0x889a53a2, - 0x4704446a, 0xccd77a73, 0x03496dbb, 0xca45a105, 0x05dbb6cd, - 0x8e0888d4, 0x41969f1c, 0x42dff2a7, 0x8d41e56f, 0x0692db76, - 0xc90cccbe, 0x4ffa444b, 0x80645383, 0x0bb76d9a, 0xc4297a52, - 0xc76017e9, 0x08fe0021, 0x832d3e38, 0x4cb329f0, 0x85bfe54e, - 0x4a21f286, 0xc1f2cc9f, 0x0e6cdb57, 0x0d25b6ec, 0xc2bba124, - 0x49689f3d, 0x86f688f5, 0x9ff48896, 0x506a9f5e, 0xdbb9a147, - 0x1427b68f, 0x176edb34, 0xd8f0ccfc, 0x5323f2e5, 0x9cbde52d, - 0x55b12993, 0x9a2f3e5b, 0x11fc0042, 0xde62178a, 0xdd2b7a31, - 0x12b56df9, 0x996653e0, 0x56f84428, 0xd00eccdd, 0x1f90db15, - 0x9443e50c, 0x5bddf2c4, 0x58949f7f, 0x970a88b7, 0x1cd9b6ae, - 0xd347a166, 0x1a4b6dd8, 0xd5d57a10, 0x5e064409, 0x919853c1, - 0x92d13e7a, 0x5d4f29b2, 0xd69c17ab, 0x19020063, 0xe498176d, - 0x2b0600a5, 0xa0d53ebc, 0x6f4b2974, 0x6c0244cf, 0xa39c5307, - 0x284f6d1e, 0xe7d17ad6, 0x2eddb668, 0xe143a1a0, 0x6a909fb9, - 0xa50e8871, 0xa647e5ca, 0x69d9f202, 0xe20acc1b, 0x2d94dbd3, - 0xab625326, 0x64fc44ee, 0xef2f7af7, 0x20b16d3f, 0x23f80084, - 0xec66174c, 0x67b52955, 0xa82b3e9d, 0x6127f223, 0xaeb9e5eb, - 0x256adbf2, 0xeaf4cc3a, 0xe9bda181, 0x2623b649, 0xadf08850, - 0x626e9f98, 0x7b6c9ffb, 0xb4f28833, 0x3f21b62a, 0xf0bfa1e2, - 0xf3f6cc59, 0x3c68db91, 0xb7bbe588, 0x7825f240, 0xb1293efe, - 0x7eb72936, 0xf564172f, 0x3afa00e7, 0x39b36d5c, 0xf62d7a94, - 0x7dfe448d, 0xb2605345, 0x3496dbb0, 0xfb08cc78, 0x70dbf261, - 0xbf45e5a9, 0xbc0c8812, 0x73929fda, 0xf841a1c3, 0x37dfb60b, - 0xfed37ab5, 0x314d6d7d, 0xba9e5364, 0x750044ac, 0x76492917, - 0xb9d73edf, 0x320400c6, 0xfd9a170e, 0x1241289b, 0xdddf3f53, - 0x560c014a, 0x99921682, 0x9adb7b39, 0x55456cf1, 0xde9652e8, - 0x11084520, 0xd804899e, 0x179a9e56, 0x9c49a04f, 0x53d7b787, - 0x509eda3c, 0x9f00cdf4, 0x14d3f3ed, 0xdb4de425, 0x5dbb6cd0, - 0x92257b18, 0x19f64501, 0xd66852c9, 0xd5213f72, 0x1abf28ba, - 0x916c16a3, 0x5ef2016b, 0x97fecdd5, 0x5860da1d, 0xd3b3e404, - 0x1c2df3cc, 0x1f649e77, 0xd0fa89bf, 0x5b29b7a6, 0x94b7a06e, - 0x8db5a00d, 0x422bb7c5, 0xc9f889dc, 0x06669e14, 0x052ff3af, - 0xcab1e467, 0x4162da7e, 0x8efccdb6, 0x47f00108, 0x886e16c0, - 0x03bd28d9, 0xcc233f11, 0xcf6a52aa, 0x00f44562, 0x8b277b7b, - 0x44b96cb3, 0xc24fe446, 0x0dd1f38e, 0x8602cd97, 0x499cda5f, - 0x4ad5b7e4, 0x854ba02c, 0x0e989e35, 0xc10689fd, 0x080a4543, - 0xc794528b, 0x4c476c92, 0x83d97b5a, 0x809016e1, 0x4f0e0129, - 0xc4dd3f30, 0x0b4328f8, 0xf6d93ff6, 0x3947283e, 0xb2941627, - 0x7d0a01ef, 0x7e436c54, 0xb1dd7b9c, 0x3a0e4585, 0xf590524d, - 0x3c9c9ef3, 0xf302893b, 0x78d1b722, 0xb74fa0ea, 0xb406cd51, - 0x7b98da99, 0xf04be480, 0x3fd5f348, 0xb9237bbd, 0x76bd6c75, - 0xfd6e526c, 0x32f045a4, 0x31b9281f, 0xfe273fd7, 0x75f401ce, - 0xba6a1606, 0x7366dab8, 0xbcf8cd70, 0x372bf369, 0xf8b5e4a1, - 0xfbfc891a, 0x34629ed2, 0xbfb1a0cb, 0x702fb703, 0x692db760, - 0xa6b3a0a8, 0x2d609eb1, 0xe2fe8979, 0xe1b7e4c2, 0x2e29f30a, - 0xa5facd13, 0x6a64dadb, 0xa3681665, 0x6cf601ad, 0xe7253fb4, - 0x28bb287c, 0x2bf245c7, 0xe46c520f, 0x6fbf6c16, 0xa0217bde, - 0x26d7f32b, 0xe949e4e3, 0x629adafa, 0xad04cd32, 0xae4da089, - 0x61d3b741, 0xea008958, 0x259e9e90, 0xec92522e, 0x230c45e6, - 0xa8df7bff, 0x67416c37, 0x6408018c, 0xab961644, 0x2045285d, - 0xefdb3f95}, - {0x00000000, 0x24825136, 0x4904a26c, 0x6d86f35a, 0x920944d8, - 0xb68b15ee, 0xdb0de6b4, 0xff8fb782, 0xff638ff1, 0xdbe1dec7, - 0xb6672d9d, 0x92e57cab, 0x6d6acb29, 0x49e89a1f, 0x246e6945, - 0x00ec3873, 0x25b619a3, 0x01344895, 0x6cb2bbcf, 0x4830eaf9, - 0xb7bf5d7b, 0x933d0c4d, 0xfebbff17, 0xda39ae21, 0xdad59652, - 0xfe57c764, 0x93d1343e, 0xb7536508, 0x48dcd28a, 0x6c5e83bc, - 0x01d870e6, 0x255a21d0, 0x4b6c3346, 0x6fee6270, 0x0268912a, - 0x26eac01c, 0xd965779e, 0xfde726a8, 0x9061d5f2, 0xb4e384c4, - 0xb40fbcb7, 0x908ded81, 0xfd0b1edb, 0xd9894fed, 0x2606f86f, - 0x0284a959, 0x6f025a03, 0x4b800b35, 0x6eda2ae5, 0x4a587bd3, - 0x27de8889, 0x035cd9bf, 0xfcd36e3d, 0xd8513f0b, 0xb5d7cc51, - 0x91559d67, 0x91b9a514, 0xb53bf422, 0xd8bd0778, 0xfc3f564e, - 0x03b0e1cc, 0x2732b0fa, 0x4ab443a0, 0x6e361296, 0x96d8668c, - 0xb25a37ba, 0xdfdcc4e0, 0xfb5e95d6, 0x04d12254, 0x20537362, - 0x4dd58038, 0x6957d10e, 0x69bbe97d, 0x4d39b84b, 0x20bf4b11, - 0x043d1a27, 0xfbb2ada5, 0xdf30fc93, 0xb2b60fc9, 0x96345eff, - 0xb36e7f2f, 0x97ec2e19, 0xfa6add43, 0xdee88c75, 0x21673bf7, - 0x05e56ac1, 0x6863999b, 0x4ce1c8ad, 0x4c0df0de, 0x688fa1e8, - 0x050952b2, 0x218b0384, 0xde04b406, 0xfa86e530, 0x9700166a, - 0xb382475c, 0xddb455ca, 0xf93604fc, 0x94b0f7a6, 0xb032a690, - 0x4fbd1112, 0x6b3f4024, 0x06b9b37e, 0x223be248, 0x22d7da3b, - 0x06558b0d, 0x6bd37857, 0x4f512961, 0xb0de9ee3, 0x945ccfd5, - 0xf9da3c8f, 0xdd586db9, 0xf8024c69, 0xdc801d5f, 0xb106ee05, - 0x9584bf33, 0x6a0b08b1, 0x4e895987, 0x230faadd, 0x078dfbeb, - 0x0761c398, 0x23e392ae, 0x4e6561f4, 0x6ae730c2, 0x95688740, - 0xb1ead676, 0xdc6c252c, 0xf8ee741a, 0xf6c1cb59, 0xd2439a6f, - 0xbfc56935, 0x9b473803, 0x64c88f81, 0x404adeb7, 0x2dcc2ded, - 0x094e7cdb, 0x09a244a8, 0x2d20159e, 0x40a6e6c4, 0x6424b7f2, - 0x9bab0070, 0xbf295146, 0xd2afa21c, 0xf62df32a, 0xd377d2fa, - 0xf7f583cc, 0x9a737096, 0xbef121a0, 0x417e9622, 0x65fcc714, - 0x087a344e, 0x2cf86578, 0x2c145d0b, 0x08960c3d, 0x6510ff67, - 0x4192ae51, 0xbe1d19d3, 0x9a9f48e5, 0xf719bbbf, 0xd39bea89, - 0xbdadf81f, 0x992fa929, 0xf4a95a73, 0xd02b0b45, 0x2fa4bcc7, - 0x0b26edf1, 0x66a01eab, 0x42224f9d, 0x42ce77ee, 0x664c26d8, - 0x0bcad582, 0x2f4884b4, 0xd0c73336, 0xf4456200, 0x99c3915a, - 0xbd41c06c, 0x981be1bc, 0xbc99b08a, 0xd11f43d0, 0xf59d12e6, - 0x0a12a564, 0x2e90f452, 0x43160708, 0x6794563e, 0x67786e4d, - 0x43fa3f7b, 0x2e7ccc21, 0x0afe9d17, 0xf5712a95, 0xd1f37ba3, - 0xbc7588f9, 0x98f7d9cf, 0x6019add5, 0x449bfce3, 0x291d0fb9, - 0x0d9f5e8f, 0xf210e90d, 0xd692b83b, 0xbb144b61, 0x9f961a57, - 0x9f7a2224, 0xbbf87312, 0xd67e8048, 0xf2fcd17e, 0x0d7366fc, - 0x29f137ca, 0x4477c490, 0x60f595a6, 0x45afb476, 0x612de540, - 0x0cab161a, 0x2829472c, 0xd7a6f0ae, 0xf324a198, 0x9ea252c2, - 0xba2003f4, 0xbacc3b87, 0x9e4e6ab1, 0xf3c899eb, 0xd74ac8dd, - 0x28c57f5f, 0x0c472e69, 0x61c1dd33, 0x45438c05, 0x2b759e93, - 0x0ff7cfa5, 0x62713cff, 0x46f36dc9, 0xb97cda4b, 0x9dfe8b7d, - 0xf0787827, 0xd4fa2911, 0xd4161162, 0xf0944054, 0x9d12b30e, - 0xb990e238, 0x461f55ba, 0x629d048c, 0x0f1bf7d6, 0x2b99a6e0, - 0x0ec38730, 0x2a41d606, 0x47c7255c, 0x6345746a, 0x9ccac3e8, - 0xb84892de, 0xd5ce6184, 0xf14c30b2, 0xf1a008c1, 0xd52259f7, - 0xb8a4aaad, 0x9c26fb9b, 0x63a94c19, 0x472b1d2f, 0x2aadee75, - 0x0e2fbf43}, - {0x00000000, 0x36f290f3, 0x6de521e6, 0x5b17b115, 0xdbca43cc, - 0xed38d33f, 0xb62f622a, 0x80ddf2d9, 0x6ce581d9, 0x5a17112a, - 0x0100a03f, 0x37f230cc, 0xb72fc215, 0x81dd52e6, 0xdacae3f3, - 0xec387300, 0xd9cb03b2, 0xef399341, 0xb42e2254, 0x82dcb2a7, - 0x0201407e, 0x34f3d08d, 0x6fe46198, 0x5916f16b, 0xb52e826b, - 0x83dc1298, 0xd8cba38d, 0xee39337e, 0x6ee4c1a7, 0x58165154, - 0x0301e041, 0x35f370b2, 0x68e70125, 0x5e1591d6, 0x050220c3, - 0x33f0b030, 0xb32d42e9, 0x85dfd21a, 0xdec8630f, 0xe83af3fc, - 0x040280fc, 0x32f0100f, 0x69e7a11a, 0x5f1531e9, 0xdfc8c330, - 0xe93a53c3, 0xb22de2d6, 0x84df7225, 0xb12c0297, 0x87de9264, - 0xdcc92371, 0xea3bb382, 0x6ae6415b, 0x5c14d1a8, 0x070360bd, - 0x31f1f04e, 0xddc9834e, 0xeb3b13bd, 0xb02ca2a8, 0x86de325b, - 0x0603c082, 0x30f15071, 0x6be6e164, 0x5d147197, 0xd1ce024a, - 0xe73c92b9, 0xbc2b23ac, 0x8ad9b35f, 0x0a044186, 0x3cf6d175, - 0x67e16060, 0x5113f093, 0xbd2b8393, 0x8bd91360, 0xd0cea275, - 0xe63c3286, 0x66e1c05f, 0x501350ac, 0x0b04e1b9, 0x3df6714a, - 0x080501f8, 0x3ef7910b, 0x65e0201e, 0x5312b0ed, 0xd3cf4234, - 0xe53dd2c7, 0xbe2a63d2, 0x88d8f321, 0x64e08021, 0x521210d2, - 0x0905a1c7, 0x3ff73134, 0xbf2ac3ed, 0x89d8531e, 0xd2cfe20b, - 0xe43d72f8, 0xb929036f, 0x8fdb939c, 0xd4cc2289, 0xe23eb27a, - 0x62e340a3, 0x5411d050, 0x0f066145, 0x39f4f1b6, 0xd5cc82b6, - 0xe33e1245, 0xb829a350, 0x8edb33a3, 0x0e06c17a, 0x38f45189, - 0x63e3e09c, 0x5511706f, 0x60e200dd, 0x5610902e, 0x0d07213b, - 0x3bf5b1c8, 0xbb284311, 0x8ddad3e2, 0xd6cd62f7, 0xe03ff204, - 0x0c078104, 0x3af511f7, 0x61e2a0e2, 0x57103011, 0xd7cdc2c8, - 0xe13f523b, 0xba28e32e, 0x8cda73dd, 0x78ed02d5, 0x4e1f9226, - 0x15082333, 0x23fab3c0, 0xa3274119, 0x95d5d1ea, 0xcec260ff, - 0xf830f00c, 0x1408830c, 0x22fa13ff, 0x79eda2ea, 0x4f1f3219, - 0xcfc2c0c0, 0xf9305033, 0xa227e126, 0x94d571d5, 0xa1260167, - 0x97d49194, 0xccc32081, 0xfa31b072, 0x7aec42ab, 0x4c1ed258, - 0x1709634d, 0x21fbf3be, 0xcdc380be, 0xfb31104d, 0xa026a158, - 0x96d431ab, 0x1609c372, 0x20fb5381, 0x7bece294, 0x4d1e7267, - 0x100a03f0, 0x26f89303, 0x7def2216, 0x4b1db2e5, 0xcbc0403c, - 0xfd32d0cf, 0xa62561da, 0x90d7f129, 0x7cef8229, 0x4a1d12da, - 0x110aa3cf, 0x27f8333c, 0xa725c1e5, 0x91d75116, 0xcac0e003, - 0xfc3270f0, 0xc9c10042, 0xff3390b1, 0xa42421a4, 0x92d6b157, - 0x120b438e, 0x24f9d37d, 0x7fee6268, 0x491cf29b, 0xa524819b, - 0x93d61168, 0xc8c1a07d, 0xfe33308e, 0x7eeec257, 0x481c52a4, - 0x130be3b1, 0x25f97342, 0xa923009f, 0x9fd1906c, 0xc4c62179, - 0xf234b18a, 0x72e94353, 0x441bd3a0, 0x1f0c62b5, 0x29fef246, - 0xc5c68146, 0xf33411b5, 0xa823a0a0, 0x9ed13053, 0x1e0cc28a, - 0x28fe5279, 0x73e9e36c, 0x451b739f, 0x70e8032d, 0x461a93de, - 0x1d0d22cb, 0x2bffb238, 0xab2240e1, 0x9dd0d012, 0xc6c76107, - 0xf035f1f4, 0x1c0d82f4, 0x2aff1207, 0x71e8a312, 0x471a33e1, - 0xc7c7c138, 0xf13551cb, 0xaa22e0de, 0x9cd0702d, 0xc1c401ba, - 0xf7369149, 0xac21205c, 0x9ad3b0af, 0x1a0e4276, 0x2cfcd285, - 0x77eb6390, 0x4119f363, 0xad218063, 0x9bd31090, 0xc0c4a185, - 0xf6363176, 0x76ebc3af, 0x4019535c, 0x1b0ee249, 0x2dfc72ba, - 0x180f0208, 0x2efd92fb, 0x75ea23ee, 0x4318b31d, 0xc3c541c4, - 0xf537d137, 0xae206022, 0x98d2f0d1, 0x74ea83d1, 0x42181322, - 0x190fa237, 0x2ffd32c4, 0xaf20c01d, 0x99d250ee, 0xc2c5e1fb, - 0xf4377108}}; + {0x00000000, 0xaf449247, 0x85f822cf, 0x2abcb088, 0xd08143df, 0x7fc5d198, + 0x55796110, 0xfa3df357, 0x7a7381ff, 0xd53713b8, 0xff8ba330, 0x50cf3177, + 0xaaf2c220, 0x05b65067, 0x2f0ae0ef, 0x804e72a8, 0xf4e703fe, 0x5ba391b9, + 0x711f2131, 0xde5bb376, 0x24664021, 0x8b22d266, 0xa19e62ee, 0x0edaf0a9, + 0x8e948201, 0x21d01046, 0x0b6ca0ce, 0xa4283289, 0x5e15c1de, 0xf1515399, + 0xdbede311, 0x74a97156, 0x32bf01bd, 0x9dfb93fa, 0xb7472372, 0x1803b135, + 0xe23e4262, 0x4d7ad025, 0x67c660ad, 0xc882f2ea, 0x48cc8042, 0xe7881205, + 0xcd34a28d, 0x627030ca, 0x984dc39d, 0x370951da, 0x1db5e152, 0xb2f17315, + 0xc6580243, 0x691c9004, 0x43a0208c, 0xece4b2cb, 0x16d9419c, 0xb99dd3db, + 0x93216353, 0x3c65f114, 0xbc2b83bc, 0x136f11fb, 0x39d3a173, 0x96973334, + 0x6caac063, 0xc3ee5224, 0xe952e2ac, 0x461670eb, 0x657e037a, 0xca3a913d, + 0xe08621b5, 0x4fc2b3f2, 0xb5ff40a5, 0x1abbd2e2, 0x3007626a, 0x9f43f02d, + 0x1f0d8285, 0xb04910c2, 0x9af5a04a, 0x35b1320d, 0xcf8cc15a, 0x60c8531d, + 0x4a74e395, 0xe53071d2, 0x91990084, 0x3edd92c3, 0x1461224b, 0xbb25b00c, + 0x4118435b, 0xee5cd11c, 0xc4e06194, 0x6ba4f3d3, 0xebea817b, 0x44ae133c, + 0x6e12a3b4, 0xc15631f3, 0x3b6bc2a4, 0x942f50e3, 0xbe93e06b, 0x11d7722c, + 0x57c102c7, 0xf8859080, 0xd2392008, 0x7d7db24f, 0x87404118, 0x2804d35f, + 0x02b863d7, 0xadfcf190, 0x2db28338, 0x82f6117f, 0xa84aa1f7, 0x070e33b0, + 0xfd33c0e7, 0x527752a0, 0x78cbe228, 0xd78f706f, 0xa3260139, 0x0c62937e, + 0x26de23f6, 0x899ab1b1, 0x73a742e6, 0xdce3d0a1, 0xf65f6029, 0x591bf26e, + 0xd95580c6, 0x76111281, 0x5cada209, 0xf3e9304e, 0x09d4c319, 0xa690515e, + 0x8c2ce1d6, 0x23687391, 0xcafc06f4, 0x65b894b3, 0x4f04243b, 0xe040b67c, + 0x1a7d452b, 0xb539d76c, 0x9f8567e4, 0x30c1f5a3, 0xb08f870b, 0x1fcb154c, + 0x3577a5c4, 0x9a333783, 0x600ec4d4, 0xcf4a5693, 0xe5f6e61b, 0x4ab2745c, + 0x3e1b050a, 0x915f974d, 0xbbe327c5, 0x14a7b582, 0xee9a46d5, 0x41ded492, + 0x6b62641a, 0xc426f65d, 0x446884f5, 0xeb2c16b2, 0xc190a63a, 0x6ed4347d, + 0x94e9c72a, 0x3bad556d, 0x1111e5e5, 0xbe5577a2, 0xf8430749, 0x5707950e, + 0x7dbb2586, 0xd2ffb7c1, 0x28c24496, 0x8786d6d1, 0xad3a6659, 0x027ef41e, + 0x823086b6, 0x2d7414f1, 0x07c8a479, 0xa88c363e, 0x52b1c569, 0xfdf5572e, + 0xd749e7a6, 0x780d75e1, 0x0ca404b7, 0xa3e096f0, 0x895c2678, 0x2618b43f, + 0xdc254768, 0x7361d52f, 0x59dd65a7, 0xf699f7e0, 0x76d78548, 0xd993170f, + 0xf32fa787, 0x5c6b35c0, 0xa656c697, 0x091254d0, 0x23aee458, 0x8cea761f, + 0xaf82058e, 0x00c697c9, 0x2a7a2741, 0x853eb506, 0x7f034651, 0xd047d416, + 0xfafb649e, 0x55bff6d9, 0xd5f18471, 0x7ab51636, 0x5009a6be, 0xff4d34f9, + 0x0570c7ae, 0xaa3455e9, 0x8088e561, 0x2fcc7726, 0x5b650670, 0xf4219437, + 0xde9d24bf, 0x71d9b6f8, 0x8be445af, 0x24a0d7e8, 0x0e1c6760, 0xa158f527, + 0x2116878f, 0x8e5215c8, 0xa4eea540, 0x0baa3707, 0xf197c450, 0x5ed35617, + 0x746fe69f, 0xdb2b74d8, 0x9d3d0433, 0x32799674, 0x18c526fc, 0xb781b4bb, + 0x4dbc47ec, 0xe2f8d5ab, 0xc8446523, 0x6700f764, 0xe74e85cc, 0x480a178b, + 0x62b6a703, 0xcdf23544, 0x37cfc613, 0x988b5454, 0xb237e4dc, 0x1d73769b, + 0x69da07cd, 0xc69e958a, 0xec222502, 0x4366b745, 0xb95b4412, 0x161fd655, + 0x3ca366dd, 0x93e7f49a, 0x13a98632, 0xbced1475, 0x9651a4fd, 0x391536ba, + 0xc328c5ed, 0x6c6c57aa, 0x46d0e722, 0xe9947565}, + {0x00000000, 0x4e890ba9, 0x9d121752, 0xd39b1cfb, 0xe15528e5, 0xafdc234c, + 0x7c473fb7, 0x32ce341e, 0x19db578b, 0x57525c22, 0x84c940d9, 0xca404b70, + 0xf88e7f6e, 0xb60774c7, 0x659c683c, 0x2b156395, 0x33b6af16, 0x7d3fa4bf, + 0xaea4b844, 0xe02db3ed, 0xd2e387f3, 0x9c6a8c5a, 0x4ff190a1, 0x01789b08, + 0x2a6df89d, 0x64e4f334, 0xb77fefcf, 0xf9f6e466, 0xcb38d078, 0x85b1dbd1, + 0x562ac72a, 0x18a3cc83, 0x676d5e2c, 0x29e45585, 0xfa7f497e, 0xb4f642d7, + 0x863876c9, 0xc8b17d60, 0x1b2a619b, 0x55a36a32, 0x7eb609a7, 0x303f020e, + 0xe3a41ef5, 0xad2d155c, 0x9fe32142, 0xd16a2aeb, 0x02f13610, 0x4c783db9, + 0x54dbf13a, 0x1a52fa93, 0xc9c9e668, 0x8740edc1, 0xb58ed9df, 0xfb07d276, + 0x289cce8d, 0x6615c524, 0x4d00a6b1, 0x0389ad18, 0xd012b1e3, 0x9e9bba4a, + 0xac558e54, 0xe2dc85fd, 0x31479906, 0x7fce92af, 0xcedabc58, 0x8053b7f1, + 0x53c8ab0a, 0x1d41a0a3, 0x2f8f94bd, 0x61069f14, 0xb29d83ef, 0xfc148846, + 0xd701ebd3, 0x9988e07a, 0x4a13fc81, 0x049af728, 0x3654c336, 0x78ddc89f, + 0xab46d464, 0xe5cfdfcd, 0xfd6c134e, 0xb3e518e7, 0x607e041c, 0x2ef70fb5, + 0x1c393bab, 0x52b03002, 0x812b2cf9, 0xcfa22750, 0xe4b744c5, 0xaa3e4f6c, + 0x79a55397, 0x372c583e, 0x05e26c20, 0x4b6b6789, 0x98f07b72, 0xd67970db, + 0xa9b7e274, 0xe73ee9dd, 0x34a5f526, 0x7a2cfe8f, 0x48e2ca91, 0x066bc138, + 0xd5f0ddc3, 0x9b79d66a, 0xb06cb5ff, 0xfee5be56, 0x2d7ea2ad, 0x63f7a904, + 0x51399d1a, 0x1fb096b3, 0xcc2b8a48, 0x82a281e1, 0x9a014d62, 0xd48846cb, + 0x07135a30, 0x499a5199, 0x7b546587, 0x35dd6e2e, 0xe64672d5, 0xa8cf797c, + 0x83da1ae9, 0xcd531140, 0x1ec80dbb, 0x50410612, 0x628f320c, 0x2c0639a5, + 0xff9d255e, 0xb1142ef7, 0x46c47ef1, 0x084d7558, 0xdbd669a3, 0x955f620a, + 0xa7915614, 0xe9185dbd, 0x3a834146, 0x740a4aef, 0x5f1f297a, 0x119622d3, + 0xc20d3e28, 0x8c843581, 0xbe4a019f, 0xf0c30a36, 0x235816cd, 0x6dd11d64, + 0x7572d1e7, 0x3bfbda4e, 0xe860c6b5, 0xa6e9cd1c, 0x9427f902, 0xdaaef2ab, + 0x0935ee50, 0x47bce5f9, 0x6ca9866c, 0x22208dc5, 0xf1bb913e, 0xbf329a97, + 0x8dfcae89, 0xc375a520, 0x10eeb9db, 0x5e67b272, 0x21a920dd, 0x6f202b74, + 0xbcbb378f, 0xf2323c26, 0xc0fc0838, 0x8e750391, 0x5dee1f6a, 0x136714c3, + 0x38727756, 0x76fb7cff, 0xa5606004, 0xebe96bad, 0xd9275fb3, 0x97ae541a, + 0x443548e1, 0x0abc4348, 0x121f8fcb, 0x5c968462, 0x8f0d9899, 0xc1849330, + 0xf34aa72e, 0xbdc3ac87, 0x6e58b07c, 0x20d1bbd5, 0x0bc4d840, 0x454dd3e9, + 0x96d6cf12, 0xd85fc4bb, 0xea91f0a5, 0xa418fb0c, 0x7783e7f7, 0x390aec5e, + 0x881ec2a9, 0xc697c900, 0x150cd5fb, 0x5b85de52, 0x694bea4c, 0x27c2e1e5, + 0xf459fd1e, 0xbad0f6b7, 0x91c59522, 0xdf4c9e8b, 0x0cd78270, 0x425e89d9, + 0x7090bdc7, 0x3e19b66e, 0xed82aa95, 0xa30ba13c, 0xbba86dbf, 0xf5216616, + 0x26ba7aed, 0x68337144, 0x5afd455a, 0x14744ef3, 0xc7ef5208, 0x896659a1, + 0xa2733a34, 0xecfa319d, 0x3f612d66, 0x71e826cf, 0x432612d1, 0x0daf1978, + 0xde340583, 0x90bd0e2a, 0xef739c85, 0xa1fa972c, 0x72618bd7, 0x3ce8807e, + 0x0e26b460, 0x40afbfc9, 0x9334a332, 0xddbda89b, 0xf6a8cb0e, 0xb821c0a7, + 0x6bbadc5c, 0x2533d7f5, 0x17fde3eb, 0x5974e842, 0x8aeff4b9, 0xc466ff10, + 0xdcc53393, 0x924c383a, 0x41d724c1, 0x0f5e2f68, 0x3d901b76, 0x731910df, + 0xa0820c24, 0xee0b078d, 0xc51e6418, 0x8b976fb1, 0x580c734a, 0x168578e3, + 0x244b4cfd, 0x6ac24754, 0xb9595baf, 0xf7d05006}, + {0x00000000, 0x8d88fde2, 0xc060fd85, 0x4de80067, 0x5bb0fd4b, 0xd63800a9, + 0x9bd000ce, 0x1658fd2c, 0xb761fa96, 0x3ae90774, 0x77010713, 0xfa89faf1, + 0xecd107dd, 0x6159fa3f, 0x2cb1fa58, 0xa13907ba, 0xb5b2f36d, 0x383a0e8f, + 0x75d20ee8, 0xf85af30a, 0xee020e26, 0x638af3c4, 0x2e62f3a3, 0xa3ea0e41, + 0x02d309fb, 0x8f5bf419, 0xc2b3f47e, 0x4f3b099c, 0x5963f4b0, 0xd4eb0952, + 0x99030935, 0x148bf4d7, 0xb014e09b, 0x3d9c1d79, 0x70741d1e, 0xfdfce0fc, + 0xeba41dd0, 0x662ce032, 0x2bc4e055, 0xa64c1db7, 0x07751a0d, 0x8afde7ef, + 0xc715e788, 0x4a9d1a6a, 0x5cc5e746, 0xd14d1aa4, 0x9ca51ac3, 0x112de721, + 0x05a613f6, 0x882eee14, 0xc5c6ee73, 0x484e1391, 0x5e16eebd, 0xd39e135f, + 0x9e761338, 0x13feeeda, 0xb2c7e960, 0x3f4f1482, 0x72a714e5, 0xff2fe907, + 0xe977142b, 0x64ffe9c9, 0x2917e9ae, 0xa49f144c, 0xbb58c777, 0x36d03a95, + 0x7b383af2, 0xf6b0c710, 0xe0e83a3c, 0x6d60c7de, 0x2088c7b9, 0xad003a5b, + 0x0c393de1, 0x81b1c003, 0xcc59c064, 0x41d13d86, 0x5789c0aa, 0xda013d48, + 0x97e93d2f, 0x1a61c0cd, 0x0eea341a, 0x8362c9f8, 0xce8ac99f, 0x4302347d, + 0x555ac951, 0xd8d234b3, 0x953a34d4, 0x18b2c936, 0xb98bce8c, 0x3403336e, + 0x79eb3309, 0xf463ceeb, 0xe23b33c7, 0x6fb3ce25, 0x225bce42, 0xafd333a0, + 0x0b4c27ec, 0x86c4da0e, 0xcb2cda69, 0x46a4278b, 0x50fcdaa7, 0xdd742745, + 0x909c2722, 0x1d14dac0, 0xbc2ddd7a, 0x31a52098, 0x7c4d20ff, 0xf1c5dd1d, + 0xe79d2031, 0x6a15ddd3, 0x27fdddb4, 0xaa752056, 0xbefed481, 0x33762963, + 0x7e9e2904, 0xf316d4e6, 0xe54e29ca, 0x68c6d428, 0x252ed44f, 0xa8a629ad, + 0x099f2e17, 0x8417d3f5, 0xc9ffd392, 0x44772e70, 0x522fd35c, 0xdfa72ebe, + 0x924f2ed9, 0x1fc7d33b, 0xadc088af, 0x2048754d, 0x6da0752a, 0xe02888c8, + 0xf67075e4, 0x7bf88806, 0x36108861, 0xbb987583, 0x1aa17239, 0x97298fdb, + 0xdac18fbc, 0x5749725e, 0x41118f72, 0xcc997290, 0x817172f7, 0x0cf98f15, + 0x18727bc2, 0x95fa8620, 0xd8128647, 0x559a7ba5, 0x43c28689, 0xce4a7b6b, + 0x83a27b0c, 0x0e2a86ee, 0xaf138154, 0x229b7cb6, 0x6f737cd1, 0xe2fb8133, + 0xf4a37c1f, 0x792b81fd, 0x34c3819a, 0xb94b7c78, 0x1dd46834, 0x905c95d6, + 0xddb495b1, 0x503c6853, 0x4664957f, 0xcbec689d, 0x860468fa, 0x0b8c9518, + 0xaab592a2, 0x273d6f40, 0x6ad56f27, 0xe75d92c5, 0xf1056fe9, 0x7c8d920b, + 0x3165926c, 0xbced6f8e, 0xa8669b59, 0x25ee66bb, 0x680666dc, 0xe58e9b3e, + 0xf3d66612, 0x7e5e9bf0, 0x33b69b97, 0xbe3e6675, 0x1f0761cf, 0x928f9c2d, + 0xdf679c4a, 0x52ef61a8, 0x44b79c84, 0xc93f6166, 0x84d76101, 0x095f9ce3, + 0x16984fd8, 0x9b10b23a, 0xd6f8b25d, 0x5b704fbf, 0x4d28b293, 0xc0a04f71, + 0x8d484f16, 0x00c0b2f4, 0xa1f9b54e, 0x2c7148ac, 0x619948cb, 0xec11b529, + 0xfa494805, 0x77c1b5e7, 0x3a29b580, 0xb7a14862, 0xa32abcb5, 0x2ea24157, + 0x634a4130, 0xeec2bcd2, 0xf89a41fe, 0x7512bc1c, 0x38fabc7b, 0xb5724199, + 0x144b4623, 0x99c3bbc1, 0xd42bbba6, 0x59a34644, 0x4ffbbb68, 0xc273468a, + 0x8f9b46ed, 0x0213bb0f, 0xa68caf43, 0x2b0452a1, 0x66ec52c6, 0xeb64af24, + 0xfd3c5208, 0x70b4afea, 0x3d5caf8d, 0xb0d4526f, 0x11ed55d5, 0x9c65a837, + 0xd18da850, 0x5c0555b2, 0x4a5da89e, 0xc7d5557c, 0x8a3d551b, 0x07b5a8f9, + 0x133e5c2e, 0x9eb6a1cc, 0xd35ea1ab, 0x5ed65c49, 0x488ea165, 0xc5065c87, + 0x88ee5ce0, 0x0566a102, 0xa45fa6b8, 0x29d75b5a, 0x643f5b3d, 0xe9b7a6df, + 0xffef5bf3, 0x7267a611, 0x3f8fa676, 0xb2075b94}, + {0x00000000, 0x80f0171f, 0xda91287f, 0x5a613f60, 0x6e5356bf, 0xeea341a0, + 0xb4c27ec0, 0x343269df, 0xdca6ad7e, 0x5c56ba61, 0x06378501, 0x86c7921e, + 0xb2f5fbc1, 0x3205ecde, 0x6864d3be, 0xe894c4a1, 0x623c5cbd, 0xe2cc4ba2, + 0xb8ad74c2, 0x385d63dd, 0x0c6f0a02, 0x8c9f1d1d, 0xd6fe227d, 0x560e3562, + 0xbe9af1c3, 0x3e6ae6dc, 0x640bd9bc, 0xe4fbcea3, 0xd0c9a77c, 0x5039b063, + 0x0a588f03, 0x8aa8981c, 0xc478b97a, 0x4488ae65, 0x1ee99105, 0x9e19861a, + 0xaa2befc5, 0x2adbf8da, 0x70bac7ba, 0xf04ad0a5, 0x18de1404, 0x982e031b, + 0xc24f3c7b, 0x42bf2b64, 0x768d42bb, 0xf67d55a4, 0xac1c6ac4, 0x2cec7ddb, + 0xa644e5c7, 0x26b4f2d8, 0x7cd5cdb8, 0xfc25daa7, 0xc817b378, 0x48e7a467, + 0x12869b07, 0x92768c18, 0x7ae248b9, 0xfa125fa6, 0xa07360c6, 0x208377d9, + 0x14b11e06, 0x94410919, 0xce203679, 0x4ed02166, 0x538074b5, 0xd37063aa, + 0x89115cca, 0x09e14bd5, 0x3dd3220a, 0xbd233515, 0xe7420a75, 0x67b21d6a, + 0x8f26d9cb, 0x0fd6ced4, 0x55b7f1b4, 0xd547e6ab, 0xe1758f74, 0x6185986b, + 0x3be4a70b, 0xbb14b014, 0x31bc2808, 0xb14c3f17, 0xeb2d0077, 0x6bdd1768, + 0x5fef7eb7, 0xdf1f69a8, 0x857e56c8, 0x058e41d7, 0xed1a8576, 0x6dea9269, + 0x378bad09, 0xb77bba16, 0x8349d3c9, 0x03b9c4d6, 0x59d8fbb6, 0xd928eca9, + 0x97f8cdcf, 0x1708dad0, 0x4d69e5b0, 0xcd99f2af, 0xf9ab9b70, 0x795b8c6f, + 0x233ab30f, 0xa3caa410, 0x4b5e60b1, 0xcbae77ae, 0x91cf48ce, 0x113f5fd1, + 0x250d360e, 0xa5fd2111, 0xff9c1e71, 0x7f6c096e, 0xf5c49172, 0x7534866d, + 0x2f55b90d, 0xafa5ae12, 0x9b97c7cd, 0x1b67d0d2, 0x4106efb2, 0xc1f6f8ad, + 0x29623c0c, 0xa9922b13, 0xf3f31473, 0x7303036c, 0x47316ab3, 0xc7c17dac, + 0x9da042cc, 0x1d5055d3, 0xa700e96a, 0x27f0fe75, 0x7d91c115, 0xfd61d60a, + 0xc953bfd5, 0x49a3a8ca, 0x13c297aa, 0x933280b5, 0x7ba64414, 0xfb56530b, + 0xa1376c6b, 0x21c77b74, 0x15f512ab, 0x950505b4, 0xcf643ad4, 0x4f942dcb, + 0xc53cb5d7, 0x45cca2c8, 0x1fad9da8, 0x9f5d8ab7, 0xab6fe368, 0x2b9ff477, + 0x71fecb17, 0xf10edc08, 0x199a18a9, 0x996a0fb6, 0xc30b30d6, 0x43fb27c9, + 0x77c94e16, 0xf7395909, 0xad586669, 0x2da87176, 0x63785010, 0xe388470f, + 0xb9e9786f, 0x39196f70, 0x0d2b06af, 0x8ddb11b0, 0xd7ba2ed0, 0x574a39cf, + 0xbfdefd6e, 0x3f2eea71, 0x654fd511, 0xe5bfc20e, 0xd18dabd1, 0x517dbcce, + 0x0b1c83ae, 0x8bec94b1, 0x01440cad, 0x81b41bb2, 0xdbd524d2, 0x5b2533cd, + 0x6f175a12, 0xefe74d0d, 0xb586726d, 0x35766572, 0xdde2a1d3, 0x5d12b6cc, + 0x077389ac, 0x87839eb3, 0xb3b1f76c, 0x3341e073, 0x6920df13, 0xe9d0c80c, + 0xf4809ddf, 0x74708ac0, 0x2e11b5a0, 0xaee1a2bf, 0x9ad3cb60, 0x1a23dc7f, + 0x4042e31f, 0xc0b2f400, 0x282630a1, 0xa8d627be, 0xf2b718de, 0x72470fc1, + 0x4675661e, 0xc6857101, 0x9ce44e61, 0x1c14597e, 0x96bcc162, 0x164cd67d, + 0x4c2de91d, 0xccddfe02, 0xf8ef97dd, 0x781f80c2, 0x227ebfa2, 0xa28ea8bd, + 0x4a1a6c1c, 0xcaea7b03, 0x908b4463, 0x107b537c, 0x24493aa3, 0xa4b92dbc, + 0xfed812dc, 0x7e2805c3, 0x30f824a5, 0xb00833ba, 0xea690cda, 0x6a991bc5, + 0x5eab721a, 0xde5b6505, 0x843a5a65, 0x04ca4d7a, 0xec5e89db, 0x6cae9ec4, + 0x36cfa1a4, 0xb63fb6bb, 0x820ddf64, 0x02fdc87b, 0x589cf71b, 0xd86ce004, + 0x52c47818, 0xd2346f07, 0x88555067, 0x08a54778, 0x3c972ea7, 0xbc6739b8, + 0xe60606d8, 0x66f611c7, 0x8e62d566, 0x0e92c279, 0x54f3fd19, 0xd403ea06, + 0xe03183d9, 0x60c194c6, 0x3aa0aba6, 0xba50bcb9}, + {0x00000000, 0x9570d495, 0xf190af6b, 0x64e07bfe, 0x38505897, 0xad208c02, + 0xc9c0f7fc, 0x5cb02369, 0x70a0b12e, 0xe5d065bb, 0x81301e45, 0x1440cad0, + 0x48f0e9b9, 0xdd803d2c, 0xb96046d2, 0x2c109247, 0xe141625c, 0x7431b6c9, + 0x10d1cd37, 0x85a119a2, 0xd9113acb, 0x4c61ee5e, 0x288195a0, 0xbdf14135, + 0x91e1d372, 0x049107e7, 0x60717c19, 0xf501a88c, 0xa9b18be5, 0x3cc15f70, + 0x5821248e, 0xcd51f01b, 0x19f3c2f9, 0x8c83166c, 0xe8636d92, 0x7d13b907, + 0x21a39a6e, 0xb4d34efb, 0xd0333505, 0x4543e190, 0x695373d7, 0xfc23a742, + 0x98c3dcbc, 0x0db30829, 0x51032b40, 0xc473ffd5, 0xa093842b, 0x35e350be, + 0xf8b2a0a5, 0x6dc27430, 0x09220fce, 0x9c52db5b, 0xc0e2f832, 0x55922ca7, + 0x31725759, 0xa40283cc, 0x8812118b, 0x1d62c51e, 0x7982bee0, 0xecf26a75, + 0xb042491c, 0x25329d89, 0x41d2e677, 0xd4a232e2, 0x33e785f2, 0xa6975167, + 0xc2772a99, 0x5707fe0c, 0x0bb7dd65, 0x9ec709f0, 0xfa27720e, 0x6f57a69b, + 0x434734dc, 0xd637e049, 0xb2d79bb7, 0x27a74f22, 0x7b176c4b, 0xee67b8de, + 0x8a87c320, 0x1ff717b5, 0xd2a6e7ae, 0x47d6333b, 0x233648c5, 0xb6469c50, + 0xeaf6bf39, 0x7f866bac, 0x1b661052, 0x8e16c4c7, 0xa2065680, 0x37768215, + 0x5396f9eb, 0xc6e62d7e, 0x9a560e17, 0x0f26da82, 0x6bc6a17c, 0xfeb675e9, + 0x2a14470b, 0xbf64939e, 0xdb84e860, 0x4ef43cf5, 0x12441f9c, 0x8734cb09, + 0xe3d4b0f7, 0x76a46462, 0x5ab4f625, 0xcfc422b0, 0xab24594e, 0x3e548ddb, + 0x62e4aeb2, 0xf7947a27, 0x937401d9, 0x0604d54c, 0xcb552557, 0x5e25f1c2, + 0x3ac58a3c, 0xafb55ea9, 0xf3057dc0, 0x6675a955, 0x0295d2ab, 0x97e5063e, + 0xbbf59479, 0x2e8540ec, 0x4a653b12, 0xdf15ef87, 0x83a5ccee, 0x16d5187b, + 0x72356385, 0xe745b710, 0x67cf0be4, 0xf2bfdf71, 0x965fa48f, 0x032f701a, + 0x5f9f5373, 0xcaef87e6, 0xae0ffc18, 0x3b7f288d, 0x176fbaca, 0x821f6e5f, + 0xe6ff15a1, 0x738fc134, 0x2f3fe25d, 0xba4f36c8, 0xdeaf4d36, 0x4bdf99a3, + 0x868e69b8, 0x13febd2d, 0x771ec6d3, 0xe26e1246, 0xbede312f, 0x2baee5ba, + 0x4f4e9e44, 0xda3e4ad1, 0xf62ed896, 0x635e0c03, 0x07be77fd, 0x92cea368, + 0xce7e8001, 0x5b0e5494, 0x3fee2f6a, 0xaa9efbff, 0x7e3cc91d, 0xeb4c1d88, + 0x8fac6676, 0x1adcb2e3, 0x466c918a, 0xd31c451f, 0xb7fc3ee1, 0x228cea74, + 0x0e9c7833, 0x9becaca6, 0xff0cd758, 0x6a7c03cd, 0x36cc20a4, 0xa3bcf431, + 0xc75c8fcf, 0x522c5b5a, 0x9f7dab41, 0x0a0d7fd4, 0x6eed042a, 0xfb9dd0bf, + 0xa72df3d6, 0x325d2743, 0x56bd5cbd, 0xc3cd8828, 0xefdd1a6f, 0x7aadcefa, + 0x1e4db504, 0x8b3d6191, 0xd78d42f8, 0x42fd966d, 0x261ded93, 0xb36d3906, + 0x54288e16, 0xc1585a83, 0xa5b8217d, 0x30c8f5e8, 0x6c78d681, 0xf9080214, + 0x9de879ea, 0x0898ad7f, 0x24883f38, 0xb1f8ebad, 0xd5189053, 0x406844c6, + 0x1cd867af, 0x89a8b33a, 0xed48c8c4, 0x78381c51, 0xb569ec4a, 0x201938df, + 0x44f94321, 0xd18997b4, 0x8d39b4dd, 0x18496048, 0x7ca91bb6, 0xe9d9cf23, + 0xc5c95d64, 0x50b989f1, 0x3459f20f, 0xa129269a, 0xfd9905f3, 0x68e9d166, + 0x0c09aa98, 0x99797e0d, 0x4ddb4cef, 0xd8ab987a, 0xbc4be384, 0x293b3711, + 0x758b1478, 0xe0fbc0ed, 0x841bbb13, 0x116b6f86, 0x3d7bfdc1, 0xa80b2954, + 0xcceb52aa, 0x599b863f, 0x052ba556, 0x905b71c3, 0xf4bb0a3d, 0x61cbdea8, + 0xac9a2eb3, 0x39eafa26, 0x5d0a81d8, 0xc87a554d, 0x94ca7624, 0x01baa2b1, + 0x655ad94f, 0xf02a0dda, 0xdc3a9f9d, 0x494a4b08, 0x2daa30f6, 0xb8dae463, + 0xe46ac70a, 0x711a139f, 0x15fa6861, 0x808abcf4}, + {0x00000000, 0xcf9e17c8, 0x444d29d1, 0x8bd33e19, 0x889a53a2, 0x4704446a, + 0xccd77a73, 0x03496dbb, 0xca45a105, 0x05dbb6cd, 0x8e0888d4, 0x41969f1c, + 0x42dff2a7, 0x8d41e56f, 0x0692db76, 0xc90cccbe, 0x4ffa444b, 0x80645383, + 0x0bb76d9a, 0xc4297a52, 0xc76017e9, 0x08fe0021, 0x832d3e38, 0x4cb329f0, + 0x85bfe54e, 0x4a21f286, 0xc1f2cc9f, 0x0e6cdb57, 0x0d25b6ec, 0xc2bba124, + 0x49689f3d, 0x86f688f5, 0x9ff48896, 0x506a9f5e, 0xdbb9a147, 0x1427b68f, + 0x176edb34, 0xd8f0ccfc, 0x5323f2e5, 0x9cbde52d, 0x55b12993, 0x9a2f3e5b, + 0x11fc0042, 0xde62178a, 0xdd2b7a31, 0x12b56df9, 0x996653e0, 0x56f84428, + 0xd00eccdd, 0x1f90db15, 0x9443e50c, 0x5bddf2c4, 0x58949f7f, 0x970a88b7, + 0x1cd9b6ae, 0xd347a166, 0x1a4b6dd8, 0xd5d57a10, 0x5e064409, 0x919853c1, + 0x92d13e7a, 0x5d4f29b2, 0xd69c17ab, 0x19020063, 0xe498176d, 0x2b0600a5, + 0xa0d53ebc, 0x6f4b2974, 0x6c0244cf, 0xa39c5307, 0x284f6d1e, 0xe7d17ad6, + 0x2eddb668, 0xe143a1a0, 0x6a909fb9, 0xa50e8871, 0xa647e5ca, 0x69d9f202, + 0xe20acc1b, 0x2d94dbd3, 0xab625326, 0x64fc44ee, 0xef2f7af7, 0x20b16d3f, + 0x23f80084, 0xec66174c, 0x67b52955, 0xa82b3e9d, 0x6127f223, 0xaeb9e5eb, + 0x256adbf2, 0xeaf4cc3a, 0xe9bda181, 0x2623b649, 0xadf08850, 0x626e9f98, + 0x7b6c9ffb, 0xb4f28833, 0x3f21b62a, 0xf0bfa1e2, 0xf3f6cc59, 0x3c68db91, + 0xb7bbe588, 0x7825f240, 0xb1293efe, 0x7eb72936, 0xf564172f, 0x3afa00e7, + 0x39b36d5c, 0xf62d7a94, 0x7dfe448d, 0xb2605345, 0x3496dbb0, 0xfb08cc78, + 0x70dbf261, 0xbf45e5a9, 0xbc0c8812, 0x73929fda, 0xf841a1c3, 0x37dfb60b, + 0xfed37ab5, 0x314d6d7d, 0xba9e5364, 0x750044ac, 0x76492917, 0xb9d73edf, + 0x320400c6, 0xfd9a170e, 0x1241289b, 0xdddf3f53, 0x560c014a, 0x99921682, + 0x9adb7b39, 0x55456cf1, 0xde9652e8, 0x11084520, 0xd804899e, 0x179a9e56, + 0x9c49a04f, 0x53d7b787, 0x509eda3c, 0x9f00cdf4, 0x14d3f3ed, 0xdb4de425, + 0x5dbb6cd0, 0x92257b18, 0x19f64501, 0xd66852c9, 0xd5213f72, 0x1abf28ba, + 0x916c16a3, 0x5ef2016b, 0x97fecdd5, 0x5860da1d, 0xd3b3e404, 0x1c2df3cc, + 0x1f649e77, 0xd0fa89bf, 0x5b29b7a6, 0x94b7a06e, 0x8db5a00d, 0x422bb7c5, + 0xc9f889dc, 0x06669e14, 0x052ff3af, 0xcab1e467, 0x4162da7e, 0x8efccdb6, + 0x47f00108, 0x886e16c0, 0x03bd28d9, 0xcc233f11, 0xcf6a52aa, 0x00f44562, + 0x8b277b7b, 0x44b96cb3, 0xc24fe446, 0x0dd1f38e, 0x8602cd97, 0x499cda5f, + 0x4ad5b7e4, 0x854ba02c, 0x0e989e35, 0xc10689fd, 0x080a4543, 0xc794528b, + 0x4c476c92, 0x83d97b5a, 0x809016e1, 0x4f0e0129, 0xc4dd3f30, 0x0b4328f8, + 0xf6d93ff6, 0x3947283e, 0xb2941627, 0x7d0a01ef, 0x7e436c54, 0xb1dd7b9c, + 0x3a0e4585, 0xf590524d, 0x3c9c9ef3, 0xf302893b, 0x78d1b722, 0xb74fa0ea, + 0xb406cd51, 0x7b98da99, 0xf04be480, 0x3fd5f348, 0xb9237bbd, 0x76bd6c75, + 0xfd6e526c, 0x32f045a4, 0x31b9281f, 0xfe273fd7, 0x75f401ce, 0xba6a1606, + 0x7366dab8, 0xbcf8cd70, 0x372bf369, 0xf8b5e4a1, 0xfbfc891a, 0x34629ed2, + 0xbfb1a0cb, 0x702fb703, 0x692db760, 0xa6b3a0a8, 0x2d609eb1, 0xe2fe8979, + 0xe1b7e4c2, 0x2e29f30a, 0xa5facd13, 0x6a64dadb, 0xa3681665, 0x6cf601ad, + 0xe7253fb4, 0x28bb287c, 0x2bf245c7, 0xe46c520f, 0x6fbf6c16, 0xa0217bde, + 0x26d7f32b, 0xe949e4e3, 0x629adafa, 0xad04cd32, 0xae4da089, 0x61d3b741, + 0xea008958, 0x259e9e90, 0xec92522e, 0x230c45e6, 0xa8df7bff, 0x67416c37, + 0x6408018c, 0xab961644, 0x2045285d, 0xefdb3f95}, + {0x00000000, 0x24825136, 0x4904a26c, 0x6d86f35a, 0x920944d8, 0xb68b15ee, + 0xdb0de6b4, 0xff8fb782, 0xff638ff1, 0xdbe1dec7, 0xb6672d9d, 0x92e57cab, + 0x6d6acb29, 0x49e89a1f, 0x246e6945, 0x00ec3873, 0x25b619a3, 0x01344895, + 0x6cb2bbcf, 0x4830eaf9, 0xb7bf5d7b, 0x933d0c4d, 0xfebbff17, 0xda39ae21, + 0xdad59652, 0xfe57c764, 0x93d1343e, 0xb7536508, 0x48dcd28a, 0x6c5e83bc, + 0x01d870e6, 0x255a21d0, 0x4b6c3346, 0x6fee6270, 0x0268912a, 0x26eac01c, + 0xd965779e, 0xfde726a8, 0x9061d5f2, 0xb4e384c4, 0xb40fbcb7, 0x908ded81, + 0xfd0b1edb, 0xd9894fed, 0x2606f86f, 0x0284a959, 0x6f025a03, 0x4b800b35, + 0x6eda2ae5, 0x4a587bd3, 0x27de8889, 0x035cd9bf, 0xfcd36e3d, 0xd8513f0b, + 0xb5d7cc51, 0x91559d67, 0x91b9a514, 0xb53bf422, 0xd8bd0778, 0xfc3f564e, + 0x03b0e1cc, 0x2732b0fa, 0x4ab443a0, 0x6e361296, 0x96d8668c, 0xb25a37ba, + 0xdfdcc4e0, 0xfb5e95d6, 0x04d12254, 0x20537362, 0x4dd58038, 0x6957d10e, + 0x69bbe97d, 0x4d39b84b, 0x20bf4b11, 0x043d1a27, 0xfbb2ada5, 0xdf30fc93, + 0xb2b60fc9, 0x96345eff, 0xb36e7f2f, 0x97ec2e19, 0xfa6add43, 0xdee88c75, + 0x21673bf7, 0x05e56ac1, 0x6863999b, 0x4ce1c8ad, 0x4c0df0de, 0x688fa1e8, + 0x050952b2, 0x218b0384, 0xde04b406, 0xfa86e530, 0x9700166a, 0xb382475c, + 0xddb455ca, 0xf93604fc, 0x94b0f7a6, 0xb032a690, 0x4fbd1112, 0x6b3f4024, + 0x06b9b37e, 0x223be248, 0x22d7da3b, 0x06558b0d, 0x6bd37857, 0x4f512961, + 0xb0de9ee3, 0x945ccfd5, 0xf9da3c8f, 0xdd586db9, 0xf8024c69, 0xdc801d5f, + 0xb106ee05, 0x9584bf33, 0x6a0b08b1, 0x4e895987, 0x230faadd, 0x078dfbeb, + 0x0761c398, 0x23e392ae, 0x4e6561f4, 0x6ae730c2, 0x95688740, 0xb1ead676, + 0xdc6c252c, 0xf8ee741a, 0xf6c1cb59, 0xd2439a6f, 0xbfc56935, 0x9b473803, + 0x64c88f81, 0x404adeb7, 0x2dcc2ded, 0x094e7cdb, 0x09a244a8, 0x2d20159e, + 0x40a6e6c4, 0x6424b7f2, 0x9bab0070, 0xbf295146, 0xd2afa21c, 0xf62df32a, + 0xd377d2fa, 0xf7f583cc, 0x9a737096, 0xbef121a0, 0x417e9622, 0x65fcc714, + 0x087a344e, 0x2cf86578, 0x2c145d0b, 0x08960c3d, 0x6510ff67, 0x4192ae51, + 0xbe1d19d3, 0x9a9f48e5, 0xf719bbbf, 0xd39bea89, 0xbdadf81f, 0x992fa929, + 0xf4a95a73, 0xd02b0b45, 0x2fa4bcc7, 0x0b26edf1, 0x66a01eab, 0x42224f9d, + 0x42ce77ee, 0x664c26d8, 0x0bcad582, 0x2f4884b4, 0xd0c73336, 0xf4456200, + 0x99c3915a, 0xbd41c06c, 0x981be1bc, 0xbc99b08a, 0xd11f43d0, 0xf59d12e6, + 0x0a12a564, 0x2e90f452, 0x43160708, 0x6794563e, 0x67786e4d, 0x43fa3f7b, + 0x2e7ccc21, 0x0afe9d17, 0xf5712a95, 0xd1f37ba3, 0xbc7588f9, 0x98f7d9cf, + 0x6019add5, 0x449bfce3, 0x291d0fb9, 0x0d9f5e8f, 0xf210e90d, 0xd692b83b, + 0xbb144b61, 0x9f961a57, 0x9f7a2224, 0xbbf87312, 0xd67e8048, 0xf2fcd17e, + 0x0d7366fc, 0x29f137ca, 0x4477c490, 0x60f595a6, 0x45afb476, 0x612de540, + 0x0cab161a, 0x2829472c, 0xd7a6f0ae, 0xf324a198, 0x9ea252c2, 0xba2003f4, + 0xbacc3b87, 0x9e4e6ab1, 0xf3c899eb, 0xd74ac8dd, 0x28c57f5f, 0x0c472e69, + 0x61c1dd33, 0x45438c05, 0x2b759e93, 0x0ff7cfa5, 0x62713cff, 0x46f36dc9, + 0xb97cda4b, 0x9dfe8b7d, 0xf0787827, 0xd4fa2911, 0xd4161162, 0xf0944054, + 0x9d12b30e, 0xb990e238, 0x461f55ba, 0x629d048c, 0x0f1bf7d6, 0x2b99a6e0, + 0x0ec38730, 0x2a41d606, 0x47c7255c, 0x6345746a, 0x9ccac3e8, 0xb84892de, + 0xd5ce6184, 0xf14c30b2, 0xf1a008c1, 0xd52259f7, 0xb8a4aaad, 0x9c26fb9b, + 0x63a94c19, 0x472b1d2f, 0x2aadee75, 0x0e2fbf43}, + {0x00000000, 0x36f290f3, 0x6de521e6, 0x5b17b115, 0xdbca43cc, 0xed38d33f, + 0xb62f622a, 0x80ddf2d9, 0x6ce581d9, 0x5a17112a, 0x0100a03f, 0x37f230cc, + 0xb72fc215, 0x81dd52e6, 0xdacae3f3, 0xec387300, 0xd9cb03b2, 0xef399341, + 0xb42e2254, 0x82dcb2a7, 0x0201407e, 0x34f3d08d, 0x6fe46198, 0x5916f16b, + 0xb52e826b, 0x83dc1298, 0xd8cba38d, 0xee39337e, 0x6ee4c1a7, 0x58165154, + 0x0301e041, 0x35f370b2, 0x68e70125, 0x5e1591d6, 0x050220c3, 0x33f0b030, + 0xb32d42e9, 0x85dfd21a, 0xdec8630f, 0xe83af3fc, 0x040280fc, 0x32f0100f, + 0x69e7a11a, 0x5f1531e9, 0xdfc8c330, 0xe93a53c3, 0xb22de2d6, 0x84df7225, + 0xb12c0297, 0x87de9264, 0xdcc92371, 0xea3bb382, 0x6ae6415b, 0x5c14d1a8, + 0x070360bd, 0x31f1f04e, 0xddc9834e, 0xeb3b13bd, 0xb02ca2a8, 0x86de325b, + 0x0603c082, 0x30f15071, 0x6be6e164, 0x5d147197, 0xd1ce024a, 0xe73c92b9, + 0xbc2b23ac, 0x8ad9b35f, 0x0a044186, 0x3cf6d175, 0x67e16060, 0x5113f093, + 0xbd2b8393, 0x8bd91360, 0xd0cea275, 0xe63c3286, 0x66e1c05f, 0x501350ac, + 0x0b04e1b9, 0x3df6714a, 0x080501f8, 0x3ef7910b, 0x65e0201e, 0x5312b0ed, + 0xd3cf4234, 0xe53dd2c7, 0xbe2a63d2, 0x88d8f321, 0x64e08021, 0x521210d2, + 0x0905a1c7, 0x3ff73134, 0xbf2ac3ed, 0x89d8531e, 0xd2cfe20b, 0xe43d72f8, + 0xb929036f, 0x8fdb939c, 0xd4cc2289, 0xe23eb27a, 0x62e340a3, 0x5411d050, + 0x0f066145, 0x39f4f1b6, 0xd5cc82b6, 0xe33e1245, 0xb829a350, 0x8edb33a3, + 0x0e06c17a, 0x38f45189, 0x63e3e09c, 0x5511706f, 0x60e200dd, 0x5610902e, + 0x0d07213b, 0x3bf5b1c8, 0xbb284311, 0x8ddad3e2, 0xd6cd62f7, 0xe03ff204, + 0x0c078104, 0x3af511f7, 0x61e2a0e2, 0x57103011, 0xd7cdc2c8, 0xe13f523b, + 0xba28e32e, 0x8cda73dd, 0x78ed02d5, 0x4e1f9226, 0x15082333, 0x23fab3c0, + 0xa3274119, 0x95d5d1ea, 0xcec260ff, 0xf830f00c, 0x1408830c, 0x22fa13ff, + 0x79eda2ea, 0x4f1f3219, 0xcfc2c0c0, 0xf9305033, 0xa227e126, 0x94d571d5, + 0xa1260167, 0x97d49194, 0xccc32081, 0xfa31b072, 0x7aec42ab, 0x4c1ed258, + 0x1709634d, 0x21fbf3be, 0xcdc380be, 0xfb31104d, 0xa026a158, 0x96d431ab, + 0x1609c372, 0x20fb5381, 0x7bece294, 0x4d1e7267, 0x100a03f0, 0x26f89303, + 0x7def2216, 0x4b1db2e5, 0xcbc0403c, 0xfd32d0cf, 0xa62561da, 0x90d7f129, + 0x7cef8229, 0x4a1d12da, 0x110aa3cf, 0x27f8333c, 0xa725c1e5, 0x91d75116, + 0xcac0e003, 0xfc3270f0, 0xc9c10042, 0xff3390b1, 0xa42421a4, 0x92d6b157, + 0x120b438e, 0x24f9d37d, 0x7fee6268, 0x491cf29b, 0xa524819b, 0x93d61168, + 0xc8c1a07d, 0xfe33308e, 0x7eeec257, 0x481c52a4, 0x130be3b1, 0x25f97342, + 0xa923009f, 0x9fd1906c, 0xc4c62179, 0xf234b18a, 0x72e94353, 0x441bd3a0, + 0x1f0c62b5, 0x29fef246, 0xc5c68146, 0xf33411b5, 0xa823a0a0, 0x9ed13053, + 0x1e0cc28a, 0x28fe5279, 0x73e9e36c, 0x451b739f, 0x70e8032d, 0x461a93de, + 0x1d0d22cb, 0x2bffb238, 0xab2240e1, 0x9dd0d012, 0xc6c76107, 0xf035f1f4, + 0x1c0d82f4, 0x2aff1207, 0x71e8a312, 0x471a33e1, 0xc7c7c138, 0xf13551cb, + 0xaa22e0de, 0x9cd0702d, 0xc1c401ba, 0xf7369149, 0xac21205c, 0x9ad3b0af, + 0x1a0e4276, 0x2cfcd285, 0x77eb6390, 0x4119f363, 0xad218063, 0x9bd31090, + 0xc0c4a185, 0xf6363176, 0x76ebc3af, 0x4019535c, 0x1b0ee249, 0x2dfc72ba, + 0x180f0208, 0x2efd92fb, 0x75ea23ee, 0x4318b31d, 0xc3c541c4, 0xf537d137, + 0xae206022, 0x98d2f0d1, 0x74ea83d1, 0x42181322, 0x190fa237, 0x2ffd32c4, + 0xaf20c01d, 0x99d250ee, 0xc2c5e1fb, 0xf4377108}}; local const z_word_t FAR crc_braid_big_table[][256] = { - {0x0000000000000000, 0xf390f23600000000, 0xe621e56d00000000, - 0x15b1175b00000000, 0xcc43cadb00000000, 0x3fd338ed00000000, - 0x2a622fb600000000, 0xd9f2dd8000000000, 0xd981e56c00000000, - 0x2a11175a00000000, 0x3fa0000100000000, 0xcc30f23700000000, - 0x15c22fb700000000, 0xe652dd8100000000, 0xf3e3cada00000000, - 0x007338ec00000000, 0xb203cbd900000000, 0x419339ef00000000, - 0x54222eb400000000, 0xa7b2dc8200000000, 0x7e40010200000000, - 0x8dd0f33400000000, 0x9861e46f00000000, 0x6bf1165900000000, - 0x6b822eb500000000, 0x9812dc8300000000, 0x8da3cbd800000000, - 0x7e3339ee00000000, 0xa7c1e46e00000000, 0x5451165800000000, - 0x41e0010300000000, 0xb270f33500000000, 0x2501e76800000000, - 0xd691155e00000000, 0xc320020500000000, 0x30b0f03300000000, - 0xe9422db300000000, 0x1ad2df8500000000, 0x0f63c8de00000000, - 0xfcf33ae800000000, 0xfc80020400000000, 0x0f10f03200000000, - 0x1aa1e76900000000, 0xe931155f00000000, 0x30c3c8df00000000, - 0xc3533ae900000000, 0xd6e22db200000000, 0x2572df8400000000, - 0x97022cb100000000, 0x6492de8700000000, 0x7123c9dc00000000, - 0x82b33bea00000000, 0x5b41e66a00000000, 0xa8d1145c00000000, - 0xbd60030700000000, 0x4ef0f13100000000, 0x4e83c9dd00000000, - 0xbd133beb00000000, 0xa8a22cb000000000, 0x5b32de8600000000, - 0x82c0030600000000, 0x7150f13000000000, 0x64e1e66b00000000, - 0x9771145d00000000, 0x4a02ced100000000, 0xb9923ce700000000, - 0xac232bbc00000000, 0x5fb3d98a00000000, 0x8641040a00000000, - 0x75d1f63c00000000, 0x6060e16700000000, 0x93f0135100000000, - 0x93832bbd00000000, 0x6013d98b00000000, 0x75a2ced000000000, - 0x86323ce600000000, 0x5fc0e16600000000, 0xac50135000000000, - 0xb9e1040b00000000, 0x4a71f63d00000000, 0xf801050800000000, - 0x0b91f73e00000000, 0x1e20e06500000000, 0xedb0125300000000, - 0x3442cfd300000000, 0xc7d23de500000000, 0xd2632abe00000000, - 0x21f3d88800000000, 0x2180e06400000000, 0xd210125200000000, - 0xc7a1050900000000, 0x3431f73f00000000, 0xedc32abf00000000, - 0x1e53d88900000000, 0x0be2cfd200000000, 0xf8723de400000000, - 0x6f0329b900000000, 0x9c93db8f00000000, 0x8922ccd400000000, - 0x7ab23ee200000000, 0xa340e36200000000, 0x50d0115400000000, - 0x4561060f00000000, 0xb6f1f43900000000, 0xb682ccd500000000, - 0x45123ee300000000, 0x50a329b800000000, 0xa333db8e00000000, - 0x7ac1060e00000000, 0x8951f43800000000, 0x9ce0e36300000000, - 0x6f70115500000000, 0xdd00e26000000000, 0x2e90105600000000, - 0x3b21070d00000000, 0xc8b1f53b00000000, 0x114328bb00000000, - 0xe2d3da8d00000000, 0xf762cdd600000000, 0x04f23fe000000000, - 0x0481070c00000000, 0xf711f53a00000000, 0xe2a0e26100000000, - 0x1130105700000000, 0xc8c2cdd700000000, 0x3b523fe100000000, - 0x2ee328ba00000000, 0xdd73da8c00000000, 0xd502ed7800000000, - 0x26921f4e00000000, 0x3323081500000000, 0xc0b3fa2300000000, - 0x194127a300000000, 0xead1d59500000000, 0xff60c2ce00000000, - 0x0cf030f800000000, 0x0c83081400000000, 0xff13fa2200000000, - 0xeaa2ed7900000000, 0x19321f4f00000000, 0xc0c0c2cf00000000, - 0x335030f900000000, 0x26e127a200000000, 0xd571d59400000000, - 0x670126a100000000, 0x9491d49700000000, 0x8120c3cc00000000, - 0x72b031fa00000000, 0xab42ec7a00000000, 0x58d21e4c00000000, - 0x4d63091700000000, 0xbef3fb2100000000, 0xbe80c3cd00000000, - 0x4d1031fb00000000, 0x58a126a000000000, 0xab31d49600000000, - 0x72c3091600000000, 0x8153fb2000000000, 0x94e2ec7b00000000, - 0x67721e4d00000000, 0xf0030a1000000000, 0x0393f82600000000, - 0x1622ef7d00000000, 0xe5b21d4b00000000, 0x3c40c0cb00000000, - 0xcfd032fd00000000, 0xda6125a600000000, 0x29f1d79000000000, - 0x2982ef7c00000000, 0xda121d4a00000000, 0xcfa30a1100000000, - 0x3c33f82700000000, 0xe5c125a700000000, 0x1651d79100000000, - 0x03e0c0ca00000000, 0xf07032fc00000000, 0x4200c1c900000000, - 0xb19033ff00000000, 0xa42124a400000000, 0x57b1d69200000000, - 0x8e430b1200000000, 0x7dd3f92400000000, 0x6862ee7f00000000, - 0x9bf21c4900000000, 0x9b8124a500000000, 0x6811d69300000000, - 0x7da0c1c800000000, 0x8e3033fe00000000, 0x57c2ee7e00000000, - 0xa4521c4800000000, 0xb1e30b1300000000, 0x4273f92500000000, - 0x9f0023a900000000, 0x6c90d19f00000000, 0x7921c6c400000000, - 0x8ab134f200000000, 0x5343e97200000000, 0xa0d31b4400000000, - 0xb5620c1f00000000, 0x46f2fe2900000000, 0x4681c6c500000000, - 0xb51134f300000000, 0xa0a023a800000000, 0x5330d19e00000000, - 0x8ac20c1e00000000, 0x7952fe2800000000, 0x6ce3e97300000000, - 0x9f731b4500000000, 0x2d03e87000000000, 0xde931a4600000000, - 0xcb220d1d00000000, 0x38b2ff2b00000000, 0xe14022ab00000000, - 0x12d0d09d00000000, 0x0761c7c600000000, 0xf4f135f000000000, - 0xf4820d1c00000000, 0x0712ff2a00000000, 0x12a3e87100000000, - 0xe1331a4700000000, 0x38c1c7c700000000, 0xcb5135f100000000, - 0xdee022aa00000000, 0x2d70d09c00000000, 0xba01c4c100000000, - 0x499136f700000000, 0x5c2021ac00000000, 0xafb0d39a00000000, - 0x76420e1a00000000, 0x85d2fc2c00000000, 0x9063eb7700000000, - 0x63f3194100000000, 0x638021ad00000000, 0x9010d39b00000000, - 0x85a1c4c000000000, 0x763136f600000000, 0xafc3eb7600000000, - 0x5c53194000000000, 0x49e20e1b00000000, 0xba72fc2d00000000, - 0x08020f1800000000, 0xfb92fd2e00000000, 0xee23ea7500000000, - 0x1db3184300000000, 0xc441c5c300000000, 0x37d137f500000000, - 0x226020ae00000000, 0xd1f0d29800000000, 0xd183ea7400000000, - 0x2213184200000000, 0x37a20f1900000000, 0xc432fd2f00000000, - 0x1dc020af00000000, 0xee50d29900000000, 0xfbe1c5c200000000, - 0x087137f400000000}, - {0x0000000000000000, 0x3651822400000000, 0x6ca2044900000000, - 0x5af3866d00000000, 0xd844099200000000, 0xee158bb600000000, - 0xb4e60ddb00000000, 0x82b78fff00000000, 0xf18f63ff00000000, - 0xc7dee1db00000000, 0x9d2d67b600000000, 0xab7ce59200000000, - 0x29cb6a6d00000000, 0x1f9ae84900000000, 0x45696e2400000000, - 0x7338ec0000000000, 0xa319b62500000000, 0x9548340100000000, - 0xcfbbb26c00000000, 0xf9ea304800000000, 0x7b5dbfb700000000, - 0x4d0c3d9300000000, 0x17ffbbfe00000000, 0x21ae39da00000000, - 0x5296d5da00000000, 0x64c757fe00000000, 0x3e34d19300000000, - 0x086553b700000000, 0x8ad2dc4800000000, 0xbc835e6c00000000, - 0xe670d80100000000, 0xd0215a2500000000, 0x46336c4b00000000, - 0x7062ee6f00000000, 0x2a91680200000000, 0x1cc0ea2600000000, - 0x9e7765d900000000, 0xa826e7fd00000000, 0xf2d5619000000000, - 0xc484e3b400000000, 0xb7bc0fb400000000, 0x81ed8d9000000000, - 0xdb1e0bfd00000000, 0xed4f89d900000000, 0x6ff8062600000000, - 0x59a9840200000000, 0x035a026f00000000, 0x350b804b00000000, - 0xe52ada6e00000000, 0xd37b584a00000000, 0x8988de2700000000, - 0xbfd95c0300000000, 0x3d6ed3fc00000000, 0x0b3f51d800000000, - 0x51ccd7b500000000, 0x679d559100000000, 0x14a5b99100000000, - 0x22f43bb500000000, 0x7807bdd800000000, 0x4e563ffc00000000, - 0xcce1b00300000000, 0xfab0322700000000, 0xa043b44a00000000, - 0x9612366e00000000, 0x8c66d89600000000, 0xba375ab200000000, - 0xe0c4dcdf00000000, 0xd6955efb00000000, 0x5422d10400000000, - 0x6273532000000000, 0x3880d54d00000000, 0x0ed1576900000000, - 0x7de9bb6900000000, 0x4bb8394d00000000, 0x114bbf2000000000, - 0x271a3d0400000000, 0xa5adb2fb00000000, 0x93fc30df00000000, - 0xc90fb6b200000000, 0xff5e349600000000, 0x2f7f6eb300000000, - 0x192eec9700000000, 0x43dd6afa00000000, 0x758ce8de00000000, - 0xf73b672100000000, 0xc16ae50500000000, 0x9b99636800000000, - 0xadc8e14c00000000, 0xdef00d4c00000000, 0xe8a18f6800000000, - 0xb252090500000000, 0x84038b2100000000, 0x06b404de00000000, - 0x30e586fa00000000, 0x6a16009700000000, 0x5c4782b300000000, - 0xca55b4dd00000000, 0xfc0436f900000000, 0xa6f7b09400000000, - 0x90a632b000000000, 0x1211bd4f00000000, 0x24403f6b00000000, - 0x7eb3b90600000000, 0x48e23b2200000000, 0x3bdad72200000000, - 0x0d8b550600000000, 0x5778d36b00000000, 0x6129514f00000000, - 0xe39edeb000000000, 0xd5cf5c9400000000, 0x8f3cdaf900000000, - 0xb96d58dd00000000, 0x694c02f800000000, 0x5f1d80dc00000000, - 0x05ee06b100000000, 0x33bf849500000000, 0xb1080b6a00000000, - 0x8759894e00000000, 0xddaa0f2300000000, 0xebfb8d0700000000, - 0x98c3610700000000, 0xae92e32300000000, 0xf461654e00000000, - 0xc230e76a00000000, 0x4087689500000000, 0x76d6eab100000000, - 0x2c256cdc00000000, 0x1a74eef800000000, 0x59cbc1f600000000, - 0x6f9a43d200000000, 0x3569c5bf00000000, 0x0338479b00000000, - 0x818fc86400000000, 0xb7de4a4000000000, 0xed2dcc2d00000000, - 0xdb7c4e0900000000, 0xa844a20900000000, 0x9e15202d00000000, - 0xc4e6a64000000000, 0xf2b7246400000000, 0x7000ab9b00000000, - 0x465129bf00000000, 0x1ca2afd200000000, 0x2af32df600000000, - 0xfad277d300000000, 0xcc83f5f700000000, 0x9670739a00000000, - 0xa021f1be00000000, 0x22967e4100000000, 0x14c7fc6500000000, - 0x4e347a0800000000, 0x7865f82c00000000, 0x0b5d142c00000000, - 0x3d0c960800000000, 0x67ff106500000000, 0x51ae924100000000, - 0xd3191dbe00000000, 0xe5489f9a00000000, 0xbfbb19f700000000, - 0x89ea9bd300000000, 0x1ff8adbd00000000, 0x29a92f9900000000, - 0x735aa9f400000000, 0x450b2bd000000000, 0xc7bca42f00000000, - 0xf1ed260b00000000, 0xab1ea06600000000, 0x9d4f224200000000, - 0xee77ce4200000000, 0xd8264c6600000000, 0x82d5ca0b00000000, - 0xb484482f00000000, 0x3633c7d000000000, 0x006245f400000000, - 0x5a91c39900000000, 0x6cc041bd00000000, 0xbce11b9800000000, - 0x8ab099bc00000000, 0xd0431fd100000000, 0xe6129df500000000, - 0x64a5120a00000000, 0x52f4902e00000000, 0x0807164300000000, - 0x3e56946700000000, 0x4d6e786700000000, 0x7b3ffa4300000000, - 0x21cc7c2e00000000, 0x179dfe0a00000000, 0x952a71f500000000, - 0xa37bf3d100000000, 0xf98875bc00000000, 0xcfd9f79800000000, - 0xd5ad196000000000, 0xe3fc9b4400000000, 0xb90f1d2900000000, - 0x8f5e9f0d00000000, 0x0de910f200000000, 0x3bb892d600000000, - 0x614b14bb00000000, 0x571a969f00000000, 0x24227a9f00000000, - 0x1273f8bb00000000, 0x48807ed600000000, 0x7ed1fcf200000000, - 0xfc66730d00000000, 0xca37f12900000000, 0x90c4774400000000, - 0xa695f56000000000, 0x76b4af4500000000, 0x40e52d6100000000, - 0x1a16ab0c00000000, 0x2c47292800000000, 0xaef0a6d700000000, - 0x98a124f300000000, 0xc252a29e00000000, 0xf40320ba00000000, - 0x873bccba00000000, 0xb16a4e9e00000000, 0xeb99c8f300000000, - 0xddc84ad700000000, 0x5f7fc52800000000, 0x692e470c00000000, - 0x33ddc16100000000, 0x058c434500000000, 0x939e752b00000000, - 0xa5cff70f00000000, 0xff3c716200000000, 0xc96df34600000000, - 0x4bda7cb900000000, 0x7d8bfe9d00000000, 0x277878f000000000, - 0x1129fad400000000, 0x621116d400000000, 0x544094f000000000, - 0x0eb3129d00000000, 0x38e290b900000000, 0xba551f4600000000, - 0x8c049d6200000000, 0xd6f71b0f00000000, 0xe0a6992b00000000, - 0x3087c30e00000000, 0x06d6412a00000000, 0x5c25c74700000000, - 0x6a74456300000000, 0xe8c3ca9c00000000, 0xde9248b800000000, - 0x8461ced500000000, 0xb2304cf100000000, 0xc108a0f100000000, - 0xf75922d500000000, 0xadaaa4b800000000, 0x9bfb269c00000000, - 0x194ca96300000000, 0x2f1d2b4700000000, 0x75eead2a00000000, - 0x43bf2f0e00000000}, - {0x0000000000000000, 0xc8179ecf00000000, 0xd1294d4400000000, - 0x193ed38b00000000, 0xa2539a8800000000, 0x6a44044700000000, - 0x737ad7cc00000000, 0xbb6d490300000000, 0x05a145ca00000000, - 0xcdb6db0500000000, 0xd488088e00000000, 0x1c9f964100000000, - 0xa7f2df4200000000, 0x6fe5418d00000000, 0x76db920600000000, - 0xbecc0cc900000000, 0x4b44fa4f00000000, 0x8353648000000000, - 0x9a6db70b00000000, 0x527a29c400000000, 0xe91760c700000000, - 0x2100fe0800000000, 0x383e2d8300000000, 0xf029b34c00000000, - 0x4ee5bf8500000000, 0x86f2214a00000000, 0x9fccf2c100000000, - 0x57db6c0e00000000, 0xecb6250d00000000, 0x24a1bbc200000000, - 0x3d9f684900000000, 0xf588f68600000000, 0x9688f49f00000000, - 0x5e9f6a5000000000, 0x47a1b9db00000000, 0x8fb6271400000000, - 0x34db6e1700000000, 0xfcccf0d800000000, 0xe5f2235300000000, - 0x2de5bd9c00000000, 0x9329b15500000000, 0x5b3e2f9a00000000, - 0x4200fc1100000000, 0x8a1762de00000000, 0x317a2bdd00000000, - 0xf96db51200000000, 0xe053669900000000, 0x2844f85600000000, - 0xddcc0ed000000000, 0x15db901f00000000, 0x0ce5439400000000, - 0xc4f2dd5b00000000, 0x7f9f945800000000, 0xb7880a9700000000, - 0xaeb6d91c00000000, 0x66a147d300000000, 0xd86d4b1a00000000, - 0x107ad5d500000000, 0x0944065e00000000, 0xc153989100000000, - 0x7a3ed19200000000, 0xb2294f5d00000000, 0xab179cd600000000, - 0x6300021900000000, 0x6d1798e400000000, 0xa500062b00000000, - 0xbc3ed5a000000000, 0x74294b6f00000000, 0xcf44026c00000000, - 0x07539ca300000000, 0x1e6d4f2800000000, 0xd67ad1e700000000, - 0x68b6dd2e00000000, 0xa0a143e100000000, 0xb99f906a00000000, - 0x71880ea500000000, 0xcae547a600000000, 0x02f2d96900000000, - 0x1bcc0ae200000000, 0xd3db942d00000000, 0x265362ab00000000, - 0xee44fc6400000000, 0xf77a2fef00000000, 0x3f6db12000000000, - 0x8400f82300000000, 0x4c1766ec00000000, 0x5529b56700000000, - 0x9d3e2ba800000000, 0x23f2276100000000, 0xebe5b9ae00000000, - 0xf2db6a2500000000, 0x3accf4ea00000000, 0x81a1bde900000000, - 0x49b6232600000000, 0x5088f0ad00000000, 0x989f6e6200000000, - 0xfb9f6c7b00000000, 0x3388f2b400000000, 0x2ab6213f00000000, - 0xe2a1bff000000000, 0x59ccf6f300000000, 0x91db683c00000000, - 0x88e5bbb700000000, 0x40f2257800000000, 0xfe3e29b100000000, - 0x3629b77e00000000, 0x2f1764f500000000, 0xe700fa3a00000000, - 0x5c6db33900000000, 0x947a2df600000000, 0x8d44fe7d00000000, - 0x455360b200000000, 0xb0db963400000000, 0x78cc08fb00000000, - 0x61f2db7000000000, 0xa9e545bf00000000, 0x12880cbc00000000, - 0xda9f927300000000, 0xc3a141f800000000, 0x0bb6df3700000000, - 0xb57ad3fe00000000, 0x7d6d4d3100000000, 0x64539eba00000000, - 0xac44007500000000, 0x1729497600000000, 0xdf3ed7b900000000, - 0xc600043200000000, 0x0e179afd00000000, 0x9b28411200000000, - 0x533fdfdd00000000, 0x4a010c5600000000, 0x8216929900000000, - 0x397bdb9a00000000, 0xf16c455500000000, 0xe85296de00000000, - 0x2045081100000000, 0x9e8904d800000000, 0x569e9a1700000000, - 0x4fa0499c00000000, 0x87b7d75300000000, 0x3cda9e5000000000, - 0xf4cd009f00000000, 0xedf3d31400000000, 0x25e44ddb00000000, - 0xd06cbb5d00000000, 0x187b259200000000, 0x0145f61900000000, - 0xc95268d600000000, 0x723f21d500000000, 0xba28bf1a00000000, - 0xa3166c9100000000, 0x6b01f25e00000000, 0xd5cdfe9700000000, - 0x1dda605800000000, 0x04e4b3d300000000, 0xccf32d1c00000000, - 0x779e641f00000000, 0xbf89fad000000000, 0xa6b7295b00000000, - 0x6ea0b79400000000, 0x0da0b58d00000000, 0xc5b72b4200000000, - 0xdc89f8c900000000, 0x149e660600000000, 0xaff32f0500000000, - 0x67e4b1ca00000000, 0x7eda624100000000, 0xb6cdfc8e00000000, - 0x0801f04700000000, 0xc0166e8800000000, 0xd928bd0300000000, - 0x113f23cc00000000, 0xaa526acf00000000, 0x6245f40000000000, - 0x7b7b278b00000000, 0xb36cb94400000000, 0x46e44fc200000000, - 0x8ef3d10d00000000, 0x97cd028600000000, 0x5fda9c4900000000, - 0xe4b7d54a00000000, 0x2ca04b8500000000, 0x359e980e00000000, - 0xfd8906c100000000, 0x43450a0800000000, 0x8b5294c700000000, - 0x926c474c00000000, 0x5a7bd98300000000, 0xe116908000000000, - 0x29010e4f00000000, 0x303fddc400000000, 0xf828430b00000000, - 0xf63fd9f600000000, 0x3e28473900000000, 0x271694b200000000, - 0xef010a7d00000000, 0x546c437e00000000, 0x9c7bddb100000000, - 0x85450e3a00000000, 0x4d5290f500000000, 0xf39e9c3c00000000, - 0x3b8902f300000000, 0x22b7d17800000000, 0xeaa04fb700000000, - 0x51cd06b400000000, 0x99da987b00000000, 0x80e44bf000000000, - 0x48f3d53f00000000, 0xbd7b23b900000000, 0x756cbd7600000000, - 0x6c526efd00000000, 0xa445f03200000000, 0x1f28b93100000000, - 0xd73f27fe00000000, 0xce01f47500000000, 0x06166aba00000000, - 0xb8da667300000000, 0x70cdf8bc00000000, 0x69f32b3700000000, - 0xa1e4b5f800000000, 0x1a89fcfb00000000, 0xd29e623400000000, - 0xcba0b1bf00000000, 0x03b72f7000000000, 0x60b72d6900000000, - 0xa8a0b3a600000000, 0xb19e602d00000000, 0x7989fee200000000, - 0xc2e4b7e100000000, 0x0af3292e00000000, 0x13cdfaa500000000, - 0xdbda646a00000000, 0x651668a300000000, 0xad01f66c00000000, - 0xb43f25e700000000, 0x7c28bb2800000000, 0xc745f22b00000000, - 0x0f526ce400000000, 0x166cbf6f00000000, 0xde7b21a000000000, - 0x2bf3d72600000000, 0xe3e449e900000000, 0xfada9a6200000000, - 0x32cd04ad00000000, 0x89a04dae00000000, 0x41b7d36100000000, - 0x588900ea00000000, 0x909e9e2500000000, 0x2e5292ec00000000, - 0xe6450c2300000000, 0xff7bdfa800000000, 0x376c416700000000, - 0x8c01086400000000, 0x441696ab00000000, 0x5d28452000000000, - 0x953fdbef00000000}, - {0x0000000000000000, 0x95d4709500000000, 0x6baf90f100000000, - 0xfe7be06400000000, 0x9758503800000000, 0x028c20ad00000000, - 0xfcf7c0c900000000, 0x6923b05c00000000, 0x2eb1a07000000000, - 0xbb65d0e500000000, 0x451e308100000000, 0xd0ca401400000000, - 0xb9e9f04800000000, 0x2c3d80dd00000000, 0xd24660b900000000, - 0x4792102c00000000, 0x5c6241e100000000, 0xc9b6317400000000, - 0x37cdd11000000000, 0xa219a18500000000, 0xcb3a11d900000000, - 0x5eee614c00000000, 0xa095812800000000, 0x3541f1bd00000000, - 0x72d3e19100000000, 0xe707910400000000, 0x197c716000000000, - 0x8ca801f500000000, 0xe58bb1a900000000, 0x705fc13c00000000, - 0x8e24215800000000, 0x1bf051cd00000000, 0xf9c2f31900000000, - 0x6c16838c00000000, 0x926d63e800000000, 0x07b9137d00000000, - 0x6e9aa32100000000, 0xfb4ed3b400000000, 0x053533d000000000, - 0x90e1434500000000, 0xd773536900000000, 0x42a723fc00000000, - 0xbcdcc39800000000, 0x2908b30d00000000, 0x402b035100000000, - 0xd5ff73c400000000, 0x2b8493a000000000, 0xbe50e33500000000, - 0xa5a0b2f800000000, 0x3074c26d00000000, 0xce0f220900000000, - 0x5bdb529c00000000, 0x32f8e2c000000000, 0xa72c925500000000, - 0x5957723100000000, 0xcc8302a400000000, 0x8b11128800000000, - 0x1ec5621d00000000, 0xe0be827900000000, 0x756af2ec00000000, - 0x1c4942b000000000, 0x899d322500000000, 0x77e6d24100000000, - 0xe232a2d400000000, 0xf285e73300000000, 0x675197a600000000, - 0x992a77c200000000, 0x0cfe075700000000, 0x65ddb70b00000000, - 0xf009c79e00000000, 0x0e7227fa00000000, 0x9ba6576f00000000, - 0xdc34474300000000, 0x49e037d600000000, 0xb79bd7b200000000, - 0x224fa72700000000, 0x4b6c177b00000000, 0xdeb867ee00000000, - 0x20c3878a00000000, 0xb517f71f00000000, 0xaee7a6d200000000, - 0x3b33d64700000000, 0xc548362300000000, 0x509c46b600000000, - 0x39bff6ea00000000, 0xac6b867f00000000, 0x5210661b00000000, - 0xc7c4168e00000000, 0x805606a200000000, 0x1582763700000000, - 0xebf9965300000000, 0x7e2de6c600000000, 0x170e569a00000000, - 0x82da260f00000000, 0x7ca1c66b00000000, 0xe975b6fe00000000, - 0x0b47142a00000000, 0x9e9364bf00000000, 0x60e884db00000000, - 0xf53cf44e00000000, 0x9c1f441200000000, 0x09cb348700000000, - 0xf7b0d4e300000000, 0x6264a47600000000, 0x25f6b45a00000000, - 0xb022c4cf00000000, 0x4e5924ab00000000, 0xdb8d543e00000000, - 0xb2aee46200000000, 0x277a94f700000000, 0xd901749300000000, - 0x4cd5040600000000, 0x572555cb00000000, 0xc2f1255e00000000, - 0x3c8ac53a00000000, 0xa95eb5af00000000, 0xc07d05f300000000, - 0x55a9756600000000, 0xabd2950200000000, 0x3e06e59700000000, - 0x7994f5bb00000000, 0xec40852e00000000, 0x123b654a00000000, - 0x87ef15df00000000, 0xeecca58300000000, 0x7b18d51600000000, - 0x8563357200000000, 0x10b745e700000000, 0xe40bcf6700000000, - 0x71dfbff200000000, 0x8fa45f9600000000, 0x1a702f0300000000, - 0x73539f5f00000000, 0xe687efca00000000, 0x18fc0fae00000000, - 0x8d287f3b00000000, 0xcaba6f1700000000, 0x5f6e1f8200000000, - 0xa115ffe600000000, 0x34c18f7300000000, 0x5de23f2f00000000, - 0xc8364fba00000000, 0x364dafde00000000, 0xa399df4b00000000, - 0xb8698e8600000000, 0x2dbdfe1300000000, 0xd3c61e7700000000, - 0x46126ee200000000, 0x2f31debe00000000, 0xbae5ae2b00000000, - 0x449e4e4f00000000, 0xd14a3eda00000000, 0x96d82ef600000000, - 0x030c5e6300000000, 0xfd77be0700000000, 0x68a3ce9200000000, - 0x01807ece00000000, 0x94540e5b00000000, 0x6a2fee3f00000000, - 0xfffb9eaa00000000, 0x1dc93c7e00000000, 0x881d4ceb00000000, - 0x7666ac8f00000000, 0xe3b2dc1a00000000, 0x8a916c4600000000, - 0x1f451cd300000000, 0xe13efcb700000000, 0x74ea8c2200000000, - 0x33789c0e00000000, 0xa6acec9b00000000, 0x58d70cff00000000, - 0xcd037c6a00000000, 0xa420cc3600000000, 0x31f4bca300000000, - 0xcf8f5cc700000000, 0x5a5b2c5200000000, 0x41ab7d9f00000000, - 0xd47f0d0a00000000, 0x2a04ed6e00000000, 0xbfd09dfb00000000, - 0xd6f32da700000000, 0x43275d3200000000, 0xbd5cbd5600000000, - 0x2888cdc300000000, 0x6f1addef00000000, 0xfacead7a00000000, - 0x04b54d1e00000000, 0x91613d8b00000000, 0xf8428dd700000000, - 0x6d96fd4200000000, 0x93ed1d2600000000, 0x06396db300000000, - 0x168e285400000000, 0x835a58c100000000, 0x7d21b8a500000000, - 0xe8f5c83000000000, 0x81d6786c00000000, 0x140208f900000000, - 0xea79e89d00000000, 0x7fad980800000000, 0x383f882400000000, - 0xadebf8b100000000, 0x539018d500000000, 0xc644684000000000, - 0xaf67d81c00000000, 0x3ab3a88900000000, 0xc4c848ed00000000, - 0x511c387800000000, 0x4aec69b500000000, 0xdf38192000000000, - 0x2143f94400000000, 0xb49789d100000000, 0xddb4398d00000000, - 0x4860491800000000, 0xb61ba97c00000000, 0x23cfd9e900000000, - 0x645dc9c500000000, 0xf189b95000000000, 0x0ff2593400000000, - 0x9a2629a100000000, 0xf30599fd00000000, 0x66d1e96800000000, - 0x98aa090c00000000, 0x0d7e799900000000, 0xef4cdb4d00000000, - 0x7a98abd800000000, 0x84e34bbc00000000, 0x11373b2900000000, - 0x78148b7500000000, 0xedc0fbe000000000, 0x13bb1b8400000000, - 0x866f6b1100000000, 0xc1fd7b3d00000000, 0x54290ba800000000, - 0xaa52ebcc00000000, 0x3f869b5900000000, 0x56a52b0500000000, - 0xc3715b9000000000, 0x3d0abbf400000000, 0xa8decb6100000000, - 0xb32e9aac00000000, 0x26faea3900000000, 0xd8810a5d00000000, - 0x4d557ac800000000, 0x2476ca9400000000, 0xb1a2ba0100000000, - 0x4fd95a6500000000, 0xda0d2af000000000, 0x9d9f3adc00000000, - 0x084b4a4900000000, 0xf630aa2d00000000, 0x63e4dab800000000, - 0x0ac76ae400000000, 0x9f131a7100000000, 0x6168fa1500000000, - 0xf4bc8a8000000000}, - {0x0000000000000000, 0x1f17f08000000000, 0x7f2891da00000000, - 0x603f615a00000000, 0xbf56536e00000000, 0xa041a3ee00000000, - 0xc07ec2b400000000, 0xdf69323400000000, 0x7eada6dc00000000, - 0x61ba565c00000000, 0x0185370600000000, 0x1e92c78600000000, - 0xc1fbf5b200000000, 0xdeec053200000000, 0xbed3646800000000, - 0xa1c494e800000000, 0xbd5c3c6200000000, 0xa24bcce200000000, - 0xc274adb800000000, 0xdd635d3800000000, 0x020a6f0c00000000, - 0x1d1d9f8c00000000, 0x7d22fed600000000, 0x62350e5600000000, - 0xc3f19abe00000000, 0xdce66a3e00000000, 0xbcd90b6400000000, - 0xa3cefbe400000000, 0x7ca7c9d000000000, 0x63b0395000000000, - 0x038f580a00000000, 0x1c98a88a00000000, 0x7ab978c400000000, - 0x65ae884400000000, 0x0591e91e00000000, 0x1a86199e00000000, - 0xc5ef2baa00000000, 0xdaf8db2a00000000, 0xbac7ba7000000000, - 0xa5d04af000000000, 0x0414de1800000000, 0x1b032e9800000000, - 0x7b3c4fc200000000, 0x642bbf4200000000, 0xbb428d7600000000, - 0xa4557df600000000, 0xc46a1cac00000000, 0xdb7dec2c00000000, - 0xc7e544a600000000, 0xd8f2b42600000000, 0xb8cdd57c00000000, - 0xa7da25fc00000000, 0x78b317c800000000, 0x67a4e74800000000, - 0x079b861200000000, 0x188c769200000000, 0xb948e27a00000000, - 0xa65f12fa00000000, 0xc66073a000000000, 0xd977832000000000, - 0x061eb11400000000, 0x1909419400000000, 0x793620ce00000000, - 0x6621d04e00000000, 0xb574805300000000, 0xaa6370d300000000, - 0xca5c118900000000, 0xd54be10900000000, 0x0a22d33d00000000, - 0x153523bd00000000, 0x750a42e700000000, 0x6a1db26700000000, - 0xcbd9268f00000000, 0xd4ced60f00000000, 0xb4f1b75500000000, - 0xabe647d500000000, 0x748f75e100000000, 0x6b98856100000000, - 0x0ba7e43b00000000, 0x14b014bb00000000, 0x0828bc3100000000, - 0x173f4cb100000000, 0x77002deb00000000, 0x6817dd6b00000000, - 0xb77eef5f00000000, 0xa8691fdf00000000, 0xc8567e8500000000, - 0xd7418e0500000000, 0x76851aed00000000, 0x6992ea6d00000000, - 0x09ad8b3700000000, 0x16ba7bb700000000, 0xc9d3498300000000, - 0xd6c4b90300000000, 0xb6fbd85900000000, 0xa9ec28d900000000, - 0xcfcdf89700000000, 0xd0da081700000000, 0xb0e5694d00000000, - 0xaff299cd00000000, 0x709babf900000000, 0x6f8c5b7900000000, - 0x0fb33a2300000000, 0x10a4caa300000000, 0xb1605e4b00000000, - 0xae77aecb00000000, 0xce48cf9100000000, 0xd15f3f1100000000, - 0x0e360d2500000000, 0x1121fda500000000, 0x711e9cff00000000, - 0x6e096c7f00000000, 0x7291c4f500000000, 0x6d86347500000000, - 0x0db9552f00000000, 0x12aea5af00000000, 0xcdc7979b00000000, - 0xd2d0671b00000000, 0xb2ef064100000000, 0xadf8f6c100000000, - 0x0c3c622900000000, 0x132b92a900000000, 0x7314f3f300000000, - 0x6c03037300000000, 0xb36a314700000000, 0xac7dc1c700000000, - 0xcc42a09d00000000, 0xd355501d00000000, 0x6ae900a700000000, - 0x75fef02700000000, 0x15c1917d00000000, 0x0ad661fd00000000, - 0xd5bf53c900000000, 0xcaa8a34900000000, 0xaa97c21300000000, - 0xb580329300000000, 0x1444a67b00000000, 0x0b5356fb00000000, - 0x6b6c37a100000000, 0x747bc72100000000, 0xab12f51500000000, - 0xb405059500000000, 0xd43a64cf00000000, 0xcb2d944f00000000, - 0xd7b53cc500000000, 0xc8a2cc4500000000, 0xa89dad1f00000000, - 0xb78a5d9f00000000, 0x68e36fab00000000, 0x77f49f2b00000000, - 0x17cbfe7100000000, 0x08dc0ef100000000, 0xa9189a1900000000, - 0xb60f6a9900000000, 0xd6300bc300000000, 0xc927fb4300000000, - 0x164ec97700000000, 0x095939f700000000, 0x696658ad00000000, - 0x7671a82d00000000, 0x1050786300000000, 0x0f4788e300000000, - 0x6f78e9b900000000, 0x706f193900000000, 0xaf062b0d00000000, - 0xb011db8d00000000, 0xd02ebad700000000, 0xcf394a5700000000, - 0x6efddebf00000000, 0x71ea2e3f00000000, 0x11d54f6500000000, - 0x0ec2bfe500000000, 0xd1ab8dd100000000, 0xcebc7d5100000000, - 0xae831c0b00000000, 0xb194ec8b00000000, 0xad0c440100000000, - 0xb21bb48100000000, 0xd224d5db00000000, 0xcd33255b00000000, - 0x125a176f00000000, 0x0d4de7ef00000000, 0x6d7286b500000000, - 0x7265763500000000, 0xd3a1e2dd00000000, 0xccb6125d00000000, - 0xac89730700000000, 0xb39e838700000000, 0x6cf7b1b300000000, - 0x73e0413300000000, 0x13df206900000000, 0x0cc8d0e900000000, - 0xdf9d80f400000000, 0xc08a707400000000, 0xa0b5112e00000000, - 0xbfa2e1ae00000000, 0x60cbd39a00000000, 0x7fdc231a00000000, - 0x1fe3424000000000, 0x00f4b2c000000000, 0xa130262800000000, - 0xbe27d6a800000000, 0xde18b7f200000000, 0xc10f477200000000, - 0x1e66754600000000, 0x017185c600000000, 0x614ee49c00000000, - 0x7e59141c00000000, 0x62c1bc9600000000, 0x7dd64c1600000000, - 0x1de92d4c00000000, 0x02feddcc00000000, 0xdd97eff800000000, - 0xc2801f7800000000, 0xa2bf7e2200000000, 0xbda88ea200000000, - 0x1c6c1a4a00000000, 0x037beaca00000000, 0x63448b9000000000, - 0x7c537b1000000000, 0xa33a492400000000, 0xbc2db9a400000000, - 0xdc12d8fe00000000, 0xc305287e00000000, 0xa524f83000000000, - 0xba3308b000000000, 0xda0c69ea00000000, 0xc51b996a00000000, - 0x1a72ab5e00000000, 0x05655bde00000000, 0x655a3a8400000000, - 0x7a4dca0400000000, 0xdb895eec00000000, 0xc49eae6c00000000, - 0xa4a1cf3600000000, 0xbbb63fb600000000, 0x64df0d8200000000, - 0x7bc8fd0200000000, 0x1bf79c5800000000, 0x04e06cd800000000, - 0x1878c45200000000, 0x076f34d200000000, 0x6750558800000000, - 0x7847a50800000000, 0xa72e973c00000000, 0xb83967bc00000000, - 0xd80606e600000000, 0xc711f66600000000, 0x66d5628e00000000, - 0x79c2920e00000000, 0x19fdf35400000000, 0x06ea03d400000000, - 0xd98331e000000000, 0xc694c16000000000, 0xa6aba03a00000000, - 0xb9bc50ba00000000}, - {0x0000000000000000, 0xe2fd888d00000000, 0x85fd60c000000000, - 0x6700e84d00000000, 0x4bfdb05b00000000, 0xa90038d600000000, - 0xce00d09b00000000, 0x2cfd581600000000, 0x96fa61b700000000, - 0x7407e93a00000000, 0x1307017700000000, 0xf1fa89fa00000000, - 0xdd07d1ec00000000, 0x3ffa596100000000, 0x58fab12c00000000, - 0xba0739a100000000, 0x6df3b2b500000000, 0x8f0e3a3800000000, - 0xe80ed27500000000, 0x0af35af800000000, 0x260e02ee00000000, - 0xc4f38a6300000000, 0xa3f3622e00000000, 0x410eeaa300000000, - 0xfb09d30200000000, 0x19f45b8f00000000, 0x7ef4b3c200000000, - 0x9c093b4f00000000, 0xb0f4635900000000, 0x5209ebd400000000, - 0x3509039900000000, 0xd7f48b1400000000, 0x9be014b000000000, - 0x791d9c3d00000000, 0x1e1d747000000000, 0xfce0fcfd00000000, - 0xd01da4eb00000000, 0x32e02c6600000000, 0x55e0c42b00000000, - 0xb71d4ca600000000, 0x0d1a750700000000, 0xefe7fd8a00000000, - 0x88e715c700000000, 0x6a1a9d4a00000000, 0x46e7c55c00000000, - 0xa41a4dd100000000, 0xc31aa59c00000000, 0x21e72d1100000000, - 0xf613a60500000000, 0x14ee2e8800000000, 0x73eec6c500000000, - 0x91134e4800000000, 0xbdee165e00000000, 0x5f139ed300000000, - 0x3813769e00000000, 0xdaeefe1300000000, 0x60e9c7b200000000, - 0x82144f3f00000000, 0xe514a77200000000, 0x07e92fff00000000, - 0x2b1477e900000000, 0xc9e9ff6400000000, 0xaee9172900000000, - 0x4c149fa400000000, 0x77c758bb00000000, 0x953ad03600000000, - 0xf23a387b00000000, 0x10c7b0f600000000, 0x3c3ae8e000000000, - 0xdec7606d00000000, 0xb9c7882000000000, 0x5b3a00ad00000000, - 0xe13d390c00000000, 0x03c0b18100000000, 0x64c059cc00000000, - 0x863dd14100000000, 0xaac0895700000000, 0x483d01da00000000, - 0x2f3de99700000000, 0xcdc0611a00000000, 0x1a34ea0e00000000, - 0xf8c9628300000000, 0x9fc98ace00000000, 0x7d34024300000000, - 0x51c95a5500000000, 0xb334d2d800000000, 0xd4343a9500000000, - 0x36c9b21800000000, 0x8cce8bb900000000, 0x6e33033400000000, - 0x0933eb7900000000, 0xebce63f400000000, 0xc7333be200000000, - 0x25ceb36f00000000, 0x42ce5b2200000000, 0xa033d3af00000000, - 0xec274c0b00000000, 0x0edac48600000000, 0x69da2ccb00000000, - 0x8b27a44600000000, 0xa7dafc5000000000, 0x452774dd00000000, - 0x22279c9000000000, 0xc0da141d00000000, 0x7add2dbc00000000, - 0x9820a53100000000, 0xff204d7c00000000, 0x1dddc5f100000000, - 0x31209de700000000, 0xd3dd156a00000000, 0xb4ddfd2700000000, - 0x562075aa00000000, 0x81d4febe00000000, 0x6329763300000000, - 0x04299e7e00000000, 0xe6d416f300000000, 0xca294ee500000000, - 0x28d4c66800000000, 0x4fd42e2500000000, 0xad29a6a800000000, - 0x172e9f0900000000, 0xf5d3178400000000, 0x92d3ffc900000000, - 0x702e774400000000, 0x5cd32f5200000000, 0xbe2ea7df00000000, - 0xd92e4f9200000000, 0x3bd3c71f00000000, 0xaf88c0ad00000000, - 0x4d75482000000000, 0x2a75a06d00000000, 0xc88828e000000000, - 0xe47570f600000000, 0x0688f87b00000000, 0x6188103600000000, - 0x837598bb00000000, 0x3972a11a00000000, 0xdb8f299700000000, - 0xbc8fc1da00000000, 0x5e72495700000000, 0x728f114100000000, - 0x907299cc00000000, 0xf772718100000000, 0x158ff90c00000000, - 0xc27b721800000000, 0x2086fa9500000000, 0x478612d800000000, - 0xa57b9a5500000000, 0x8986c24300000000, 0x6b7b4ace00000000, - 0x0c7ba28300000000, 0xee862a0e00000000, 0x548113af00000000, - 0xb67c9b2200000000, 0xd17c736f00000000, 0x3381fbe200000000, - 0x1f7ca3f400000000, 0xfd812b7900000000, 0x9a81c33400000000, - 0x787c4bb900000000, 0x3468d41d00000000, 0xd6955c9000000000, - 0xb195b4dd00000000, 0x53683c5000000000, 0x7f95644600000000, - 0x9d68eccb00000000, 0xfa68048600000000, 0x18958c0b00000000, - 0xa292b5aa00000000, 0x406f3d2700000000, 0x276fd56a00000000, - 0xc5925de700000000, 0xe96f05f100000000, 0x0b928d7c00000000, - 0x6c92653100000000, 0x8e6fedbc00000000, 0x599b66a800000000, - 0xbb66ee2500000000, 0xdc66066800000000, 0x3e9b8ee500000000, - 0x1266d6f300000000, 0xf09b5e7e00000000, 0x979bb63300000000, - 0x75663ebe00000000, 0xcf61071f00000000, 0x2d9c8f9200000000, - 0x4a9c67df00000000, 0xa861ef5200000000, 0x849cb74400000000, - 0x66613fc900000000, 0x0161d78400000000, 0xe39c5f0900000000, - 0xd84f981600000000, 0x3ab2109b00000000, 0x5db2f8d600000000, - 0xbf4f705b00000000, 0x93b2284d00000000, 0x714fa0c000000000, - 0x164f488d00000000, 0xf4b2c00000000000, 0x4eb5f9a100000000, - 0xac48712c00000000, 0xcb48996100000000, 0x29b511ec00000000, - 0x054849fa00000000, 0xe7b5c17700000000, 0x80b5293a00000000, - 0x6248a1b700000000, 0xb5bc2aa300000000, 0x5741a22e00000000, - 0x30414a6300000000, 0xd2bcc2ee00000000, 0xfe419af800000000, - 0x1cbc127500000000, 0x7bbcfa3800000000, 0x994172b500000000, - 0x23464b1400000000, 0xc1bbc39900000000, 0xa6bb2bd400000000, - 0x4446a35900000000, 0x68bbfb4f00000000, 0x8a4673c200000000, - 0xed469b8f00000000, 0x0fbb130200000000, 0x43af8ca600000000, - 0xa152042b00000000, 0xc652ec6600000000, 0x24af64eb00000000, - 0x08523cfd00000000, 0xeaafb47000000000, 0x8daf5c3d00000000, - 0x6f52d4b000000000, 0xd555ed1100000000, 0x37a8659c00000000, - 0x50a88dd100000000, 0xb255055c00000000, 0x9ea85d4a00000000, - 0x7c55d5c700000000, 0x1b553d8a00000000, 0xf9a8b50700000000, - 0x2e5c3e1300000000, 0xcca1b69e00000000, 0xaba15ed300000000, - 0x495cd65e00000000, 0x65a18e4800000000, 0x875c06c500000000, - 0xe05cee8800000000, 0x02a1660500000000, 0xb8a65fa400000000, - 0x5a5bd72900000000, 0x3d5b3f6400000000, 0xdfa6b7e900000000, - 0xf35befff00000000, 0x11a6677200000000, 0x76a68f3f00000000, - 0x945b07b200000000}, - {0x0000000000000000, 0xa90b894e00000000, 0x5217129d00000000, - 0xfb1c9bd300000000, 0xe52855e100000000, 0x4c23dcaf00000000, - 0xb73f477c00000000, 0x1e34ce3200000000, 0x8b57db1900000000, - 0x225c525700000000, 0xd940c98400000000, 0x704b40ca00000000, - 0x6e7f8ef800000000, 0xc77407b600000000, 0x3c689c6500000000, - 0x9563152b00000000, 0x16afb63300000000, 0xbfa43f7d00000000, - 0x44b8a4ae00000000, 0xedb32de000000000, 0xf387e3d200000000, - 0x5a8c6a9c00000000, 0xa190f14f00000000, 0x089b780100000000, - 0x9df86d2a00000000, 0x34f3e46400000000, 0xcfef7fb700000000, - 0x66e4f6f900000000, 0x78d038cb00000000, 0xd1dbb18500000000, - 0x2ac72a5600000000, 0x83cca31800000000, 0x2c5e6d6700000000, - 0x8555e42900000000, 0x7e497ffa00000000, 0xd742f6b400000000, - 0xc976388600000000, 0x607db1c800000000, 0x9b612a1b00000000, - 0x326aa35500000000, 0xa709b67e00000000, 0x0e023f3000000000, - 0xf51ea4e300000000, 0x5c152dad00000000, 0x4221e39f00000000, - 0xeb2a6ad100000000, 0x1036f10200000000, 0xb93d784c00000000, - 0x3af1db5400000000, 0x93fa521a00000000, 0x68e6c9c900000000, - 0xc1ed408700000000, 0xdfd98eb500000000, 0x76d207fb00000000, - 0x8dce9c2800000000, 0x24c5156600000000, 0xb1a6004d00000000, - 0x18ad890300000000, 0xe3b112d000000000, 0x4aba9b9e00000000, - 0x548e55ac00000000, 0xfd85dce200000000, 0x0699473100000000, - 0xaf92ce7f00000000, 0x58bcdace00000000, 0xf1b7538000000000, - 0x0aabc85300000000, 0xa3a0411d00000000, 0xbd948f2f00000000, - 0x149f066100000000, 0xef839db200000000, 0x468814fc00000000, - 0xd3eb01d700000000, 0x7ae0889900000000, 0x81fc134a00000000, - 0x28f79a0400000000, 0x36c3543600000000, 0x9fc8dd7800000000, - 0x64d446ab00000000, 0xcddfcfe500000000, 0x4e136cfd00000000, - 0xe718e5b300000000, 0x1c047e6000000000, 0xb50ff72e00000000, - 0xab3b391c00000000, 0x0230b05200000000, 0xf92c2b8100000000, - 0x5027a2cf00000000, 0xc544b7e400000000, 0x6c4f3eaa00000000, - 0x9753a57900000000, 0x3e582c3700000000, 0x206ce20500000000, - 0x89676b4b00000000, 0x727bf09800000000, 0xdb7079d600000000, - 0x74e2b7a900000000, 0xdde93ee700000000, 0x26f5a53400000000, - 0x8ffe2c7a00000000, 0x91cae24800000000, 0x38c16b0600000000, - 0xc3ddf0d500000000, 0x6ad6799b00000000, 0xffb56cb000000000, - 0x56bee5fe00000000, 0xada27e2d00000000, 0x04a9f76300000000, - 0x1a9d395100000000, 0xb396b01f00000000, 0x488a2bcc00000000, - 0xe181a28200000000, 0x624d019a00000000, 0xcb4688d400000000, - 0x305a130700000000, 0x99519a4900000000, 0x8765547b00000000, - 0x2e6edd3500000000, 0xd57246e600000000, 0x7c79cfa800000000, - 0xe91ada8300000000, 0x401153cd00000000, 0xbb0dc81e00000000, - 0x1206415000000000, 0x0c328f6200000000, 0xa539062c00000000, - 0x5e259dff00000000, 0xf72e14b100000000, 0xf17ec44600000000, - 0x58754d0800000000, 0xa369d6db00000000, 0x0a625f9500000000, - 0x145691a700000000, 0xbd5d18e900000000, 0x4641833a00000000, - 0xef4a0a7400000000, 0x7a291f5f00000000, 0xd322961100000000, - 0x283e0dc200000000, 0x8135848c00000000, 0x9f014abe00000000, - 0x360ac3f000000000, 0xcd16582300000000, 0x641dd16d00000000, - 0xe7d1727500000000, 0x4edafb3b00000000, 0xb5c660e800000000, - 0x1ccde9a600000000, 0x02f9279400000000, 0xabf2aeda00000000, - 0x50ee350900000000, 0xf9e5bc4700000000, 0x6c86a96c00000000, - 0xc58d202200000000, 0x3e91bbf100000000, 0x979a32bf00000000, - 0x89aefc8d00000000, 0x20a575c300000000, 0xdbb9ee1000000000, - 0x72b2675e00000000, 0xdd20a92100000000, 0x742b206f00000000, - 0x8f37bbbc00000000, 0x263c32f200000000, 0x3808fcc000000000, - 0x9103758e00000000, 0x6a1fee5d00000000, 0xc314671300000000, - 0x5677723800000000, 0xff7cfb7600000000, 0x046060a500000000, - 0xad6be9eb00000000, 0xb35f27d900000000, 0x1a54ae9700000000, - 0xe148354400000000, 0x4843bc0a00000000, 0xcb8f1f1200000000, - 0x6284965c00000000, 0x99980d8f00000000, 0x309384c100000000, - 0x2ea74af300000000, 0x87acc3bd00000000, 0x7cb0586e00000000, - 0xd5bbd12000000000, 0x40d8c40b00000000, 0xe9d34d4500000000, - 0x12cfd69600000000, 0xbbc45fd800000000, 0xa5f091ea00000000, - 0x0cfb18a400000000, 0xf7e7837700000000, 0x5eec0a3900000000, - 0xa9c21e8800000000, 0x00c997c600000000, 0xfbd50c1500000000, - 0x52de855b00000000, 0x4cea4b6900000000, 0xe5e1c22700000000, - 0x1efd59f400000000, 0xb7f6d0ba00000000, 0x2295c59100000000, - 0x8b9e4cdf00000000, 0x7082d70c00000000, 0xd9895e4200000000, - 0xc7bd907000000000, 0x6eb6193e00000000, 0x95aa82ed00000000, - 0x3ca10ba300000000, 0xbf6da8bb00000000, 0x166621f500000000, - 0xed7aba2600000000, 0x4471336800000000, 0x5a45fd5a00000000, - 0xf34e741400000000, 0x0852efc700000000, 0xa159668900000000, - 0x343a73a200000000, 0x9d31faec00000000, 0x662d613f00000000, - 0xcf26e87100000000, 0xd112264300000000, 0x7819af0d00000000, - 0x830534de00000000, 0x2a0ebd9000000000, 0x859c73ef00000000, - 0x2c97faa100000000, 0xd78b617200000000, 0x7e80e83c00000000, - 0x60b4260e00000000, 0xc9bfaf4000000000, 0x32a3349300000000, - 0x9ba8bddd00000000, 0x0ecba8f600000000, 0xa7c021b800000000, - 0x5cdcba6b00000000, 0xf5d7332500000000, 0xebe3fd1700000000, - 0x42e8745900000000, 0xb9f4ef8a00000000, 0x10ff66c400000000, - 0x9333c5dc00000000, 0x3a384c9200000000, 0xc124d74100000000, - 0x682f5e0f00000000, 0x761b903d00000000, 0xdf10197300000000, - 0x240c82a000000000, 0x8d070bee00000000, 0x18641ec500000000, - 0xb16f978b00000000, 0x4a730c5800000000, 0xe378851600000000, - 0xfd4c4b2400000000, 0x5447c26a00000000, 0xaf5b59b900000000, - 0x0650d0f700000000}, - {0x0000000000000000, 0x479244af00000000, 0xcf22f88500000000, - 0x88b0bc2a00000000, 0xdf4381d000000000, 0x98d1c57f00000000, - 0x1061795500000000, 0x57f33dfa00000000, 0xff81737a00000000, - 0xb81337d500000000, 0x30a38bff00000000, 0x7731cf5000000000, - 0x20c2f2aa00000000, 0x6750b60500000000, 0xefe00a2f00000000, - 0xa8724e8000000000, 0xfe03e7f400000000, 0xb991a35b00000000, - 0x31211f7100000000, 0x76b35bde00000000, 0x2140662400000000, - 0x66d2228b00000000, 0xee629ea100000000, 0xa9f0da0e00000000, - 0x0182948e00000000, 0x4610d02100000000, 0xcea06c0b00000000, - 0x893228a400000000, 0xdec1155e00000000, 0x995351f100000000, - 0x11e3eddb00000000, 0x5671a97400000000, 0xbd01bf3200000000, - 0xfa93fb9d00000000, 0x722347b700000000, 0x35b1031800000000, - 0x62423ee200000000, 0x25d07a4d00000000, 0xad60c66700000000, - 0xeaf282c800000000, 0x4280cc4800000000, 0x051288e700000000, - 0x8da234cd00000000, 0xca30706200000000, 0x9dc34d9800000000, - 0xda51093700000000, 0x52e1b51d00000000, 0x1573f1b200000000, - 0x430258c600000000, 0x04901c6900000000, 0x8c20a04300000000, - 0xcbb2e4ec00000000, 0x9c41d91600000000, 0xdbd39db900000000, - 0x5363219300000000, 0x14f1653c00000000, 0xbc832bbc00000000, - 0xfb116f1300000000, 0x73a1d33900000000, 0x3433979600000000, - 0x63c0aa6c00000000, 0x2452eec300000000, 0xace252e900000000, - 0xeb70164600000000, 0x7a037e6500000000, 0x3d913aca00000000, - 0xb52186e000000000, 0xf2b3c24f00000000, 0xa540ffb500000000, - 0xe2d2bb1a00000000, 0x6a62073000000000, 0x2df0439f00000000, - 0x85820d1f00000000, 0xc21049b000000000, 0x4aa0f59a00000000, - 0x0d32b13500000000, 0x5ac18ccf00000000, 0x1d53c86000000000, - 0x95e3744a00000000, 0xd27130e500000000, 0x8400999100000000, - 0xc392dd3e00000000, 0x4b22611400000000, 0x0cb025bb00000000, - 0x5b43184100000000, 0x1cd15cee00000000, 0x9461e0c400000000, - 0xd3f3a46b00000000, 0x7b81eaeb00000000, 0x3c13ae4400000000, - 0xb4a3126e00000000, 0xf33156c100000000, 0xa4c26b3b00000000, - 0xe3502f9400000000, 0x6be093be00000000, 0x2c72d71100000000, - 0xc702c15700000000, 0x809085f800000000, 0x082039d200000000, - 0x4fb27d7d00000000, 0x1841408700000000, 0x5fd3042800000000, - 0xd763b80200000000, 0x90f1fcad00000000, 0x3883b22d00000000, - 0x7f11f68200000000, 0xf7a14aa800000000, 0xb0330e0700000000, - 0xe7c033fd00000000, 0xa052775200000000, 0x28e2cb7800000000, - 0x6f708fd700000000, 0x390126a300000000, 0x7e93620c00000000, - 0xf623de2600000000, 0xb1b19a8900000000, 0xe642a77300000000, - 0xa1d0e3dc00000000, 0x29605ff600000000, 0x6ef21b5900000000, - 0xc68055d900000000, 0x8112117600000000, 0x09a2ad5c00000000, - 0x4e30e9f300000000, 0x19c3d40900000000, 0x5e5190a600000000, - 0xd6e12c8c00000000, 0x9173682300000000, 0xf406fcca00000000, - 0xb394b86500000000, 0x3b24044f00000000, 0x7cb640e000000000, - 0x2b457d1a00000000, 0x6cd739b500000000, 0xe467859f00000000, - 0xa3f5c13000000000, 0x0b878fb000000000, 0x4c15cb1f00000000, - 0xc4a5773500000000, 0x8337339a00000000, 0xd4c40e6000000000, - 0x93564acf00000000, 0x1be6f6e500000000, 0x5c74b24a00000000, - 0x0a051b3e00000000, 0x4d975f9100000000, 0xc527e3bb00000000, - 0x82b5a71400000000, 0xd5469aee00000000, 0x92d4de4100000000, - 0x1a64626b00000000, 0x5df626c400000000, 0xf584684400000000, - 0xb2162ceb00000000, 0x3aa690c100000000, 0x7d34d46e00000000, - 0x2ac7e99400000000, 0x6d55ad3b00000000, 0xe5e5111100000000, - 0xa27755be00000000, 0x490743f800000000, 0x0e95075700000000, - 0x8625bb7d00000000, 0xc1b7ffd200000000, 0x9644c22800000000, - 0xd1d6868700000000, 0x59663aad00000000, 0x1ef47e0200000000, - 0xb686308200000000, 0xf114742d00000000, 0x79a4c80700000000, - 0x3e368ca800000000, 0x69c5b15200000000, 0x2e57f5fd00000000, - 0xa6e749d700000000, 0xe1750d7800000000, 0xb704a40c00000000, - 0xf096e0a300000000, 0x78265c8900000000, 0x3fb4182600000000, - 0x684725dc00000000, 0x2fd5617300000000, 0xa765dd5900000000, - 0xe0f799f600000000, 0x4885d77600000000, 0x0f1793d900000000, - 0x87a72ff300000000, 0xc0356b5c00000000, 0x97c656a600000000, - 0xd054120900000000, 0x58e4ae2300000000, 0x1f76ea8c00000000, - 0x8e0582af00000000, 0xc997c60000000000, 0x41277a2a00000000, - 0x06b53e8500000000, 0x5146037f00000000, 0x16d447d000000000, - 0x9e64fbfa00000000, 0xd9f6bf5500000000, 0x7184f1d500000000, - 0x3616b57a00000000, 0xbea6095000000000, 0xf9344dff00000000, - 0xaec7700500000000, 0xe95534aa00000000, 0x61e5888000000000, - 0x2677cc2f00000000, 0x7006655b00000000, 0x379421f400000000, - 0xbf249dde00000000, 0xf8b6d97100000000, 0xaf45e48b00000000, - 0xe8d7a02400000000, 0x60671c0e00000000, 0x27f558a100000000, - 0x8f87162100000000, 0xc815528e00000000, 0x40a5eea400000000, - 0x0737aa0b00000000, 0x50c497f100000000, 0x1756d35e00000000, - 0x9fe66f7400000000, 0xd8742bdb00000000, 0x33043d9d00000000, - 0x7496793200000000, 0xfc26c51800000000, 0xbbb481b700000000, - 0xec47bc4d00000000, 0xabd5f8e200000000, 0x236544c800000000, - 0x64f7006700000000, 0xcc854ee700000000, 0x8b170a4800000000, - 0x03a7b66200000000, 0x4435f2cd00000000, 0x13c6cf3700000000, - 0x54548b9800000000, 0xdce437b200000000, 0x9b76731d00000000, - 0xcd07da6900000000, 0x8a959ec600000000, 0x022522ec00000000, - 0x45b7664300000000, 0x12445bb900000000, 0x55d61f1600000000, - 0xdd66a33c00000000, 0x9af4e79300000000, 0x3286a91300000000, - 0x7514edbc00000000, 0xfda4519600000000, 0xba36153900000000, - 0xedc528c300000000, 0xaa576c6c00000000, 0x22e7d04600000000, - 0x657594e900000000}}; + {0x0000000000000000, 0xf390f23600000000, 0xe621e56d00000000, + 0x15b1175b00000000, 0xcc43cadb00000000, 0x3fd338ed00000000, + 0x2a622fb600000000, 0xd9f2dd8000000000, 0xd981e56c00000000, + 0x2a11175a00000000, 0x3fa0000100000000, 0xcc30f23700000000, + 0x15c22fb700000000, 0xe652dd8100000000, 0xf3e3cada00000000, + 0x007338ec00000000, 0xb203cbd900000000, 0x419339ef00000000, + 0x54222eb400000000, 0xa7b2dc8200000000, 0x7e40010200000000, + 0x8dd0f33400000000, 0x9861e46f00000000, 0x6bf1165900000000, + 0x6b822eb500000000, 0x9812dc8300000000, 0x8da3cbd800000000, + 0x7e3339ee00000000, 0xa7c1e46e00000000, 0x5451165800000000, + 0x41e0010300000000, 0xb270f33500000000, 0x2501e76800000000, + 0xd691155e00000000, 0xc320020500000000, 0x30b0f03300000000, + 0xe9422db300000000, 0x1ad2df8500000000, 0x0f63c8de00000000, + 0xfcf33ae800000000, 0xfc80020400000000, 0x0f10f03200000000, + 0x1aa1e76900000000, 0xe931155f00000000, 0x30c3c8df00000000, + 0xc3533ae900000000, 0xd6e22db200000000, 0x2572df8400000000, + 0x97022cb100000000, 0x6492de8700000000, 0x7123c9dc00000000, + 0x82b33bea00000000, 0x5b41e66a00000000, 0xa8d1145c00000000, + 0xbd60030700000000, 0x4ef0f13100000000, 0x4e83c9dd00000000, + 0xbd133beb00000000, 0xa8a22cb000000000, 0x5b32de8600000000, + 0x82c0030600000000, 0x7150f13000000000, 0x64e1e66b00000000, + 0x9771145d00000000, 0x4a02ced100000000, 0xb9923ce700000000, + 0xac232bbc00000000, 0x5fb3d98a00000000, 0x8641040a00000000, + 0x75d1f63c00000000, 0x6060e16700000000, 0x93f0135100000000, + 0x93832bbd00000000, 0x6013d98b00000000, 0x75a2ced000000000, + 0x86323ce600000000, 0x5fc0e16600000000, 0xac50135000000000, + 0xb9e1040b00000000, 0x4a71f63d00000000, 0xf801050800000000, + 0x0b91f73e00000000, 0x1e20e06500000000, 0xedb0125300000000, + 0x3442cfd300000000, 0xc7d23de500000000, 0xd2632abe00000000, + 0x21f3d88800000000, 0x2180e06400000000, 0xd210125200000000, + 0xc7a1050900000000, 0x3431f73f00000000, 0xedc32abf00000000, + 0x1e53d88900000000, 0x0be2cfd200000000, 0xf8723de400000000, + 0x6f0329b900000000, 0x9c93db8f00000000, 0x8922ccd400000000, + 0x7ab23ee200000000, 0xa340e36200000000, 0x50d0115400000000, + 0x4561060f00000000, 0xb6f1f43900000000, 0xb682ccd500000000, + 0x45123ee300000000, 0x50a329b800000000, 0xa333db8e00000000, + 0x7ac1060e00000000, 0x8951f43800000000, 0x9ce0e36300000000, + 0x6f70115500000000, 0xdd00e26000000000, 0x2e90105600000000, + 0x3b21070d00000000, 0xc8b1f53b00000000, 0x114328bb00000000, + 0xe2d3da8d00000000, 0xf762cdd600000000, 0x04f23fe000000000, + 0x0481070c00000000, 0xf711f53a00000000, 0xe2a0e26100000000, + 0x1130105700000000, 0xc8c2cdd700000000, 0x3b523fe100000000, + 0x2ee328ba00000000, 0xdd73da8c00000000, 0xd502ed7800000000, + 0x26921f4e00000000, 0x3323081500000000, 0xc0b3fa2300000000, + 0x194127a300000000, 0xead1d59500000000, 0xff60c2ce00000000, + 0x0cf030f800000000, 0x0c83081400000000, 0xff13fa2200000000, + 0xeaa2ed7900000000, 0x19321f4f00000000, 0xc0c0c2cf00000000, + 0x335030f900000000, 0x26e127a200000000, 0xd571d59400000000, + 0x670126a100000000, 0x9491d49700000000, 0x8120c3cc00000000, + 0x72b031fa00000000, 0xab42ec7a00000000, 0x58d21e4c00000000, + 0x4d63091700000000, 0xbef3fb2100000000, 0xbe80c3cd00000000, + 0x4d1031fb00000000, 0x58a126a000000000, 0xab31d49600000000, + 0x72c3091600000000, 0x8153fb2000000000, 0x94e2ec7b00000000, + 0x67721e4d00000000, 0xf0030a1000000000, 0x0393f82600000000, + 0x1622ef7d00000000, 0xe5b21d4b00000000, 0x3c40c0cb00000000, + 0xcfd032fd00000000, 0xda6125a600000000, 0x29f1d79000000000, + 0x2982ef7c00000000, 0xda121d4a00000000, 0xcfa30a1100000000, + 0x3c33f82700000000, 0xe5c125a700000000, 0x1651d79100000000, + 0x03e0c0ca00000000, 0xf07032fc00000000, 0x4200c1c900000000, + 0xb19033ff00000000, 0xa42124a400000000, 0x57b1d69200000000, + 0x8e430b1200000000, 0x7dd3f92400000000, 0x6862ee7f00000000, + 0x9bf21c4900000000, 0x9b8124a500000000, 0x6811d69300000000, + 0x7da0c1c800000000, 0x8e3033fe00000000, 0x57c2ee7e00000000, + 0xa4521c4800000000, 0xb1e30b1300000000, 0x4273f92500000000, + 0x9f0023a900000000, 0x6c90d19f00000000, 0x7921c6c400000000, + 0x8ab134f200000000, 0x5343e97200000000, 0xa0d31b4400000000, + 0xb5620c1f00000000, 0x46f2fe2900000000, 0x4681c6c500000000, + 0xb51134f300000000, 0xa0a023a800000000, 0x5330d19e00000000, + 0x8ac20c1e00000000, 0x7952fe2800000000, 0x6ce3e97300000000, + 0x9f731b4500000000, 0x2d03e87000000000, 0xde931a4600000000, + 0xcb220d1d00000000, 0x38b2ff2b00000000, 0xe14022ab00000000, + 0x12d0d09d00000000, 0x0761c7c600000000, 0xf4f135f000000000, + 0xf4820d1c00000000, 0x0712ff2a00000000, 0x12a3e87100000000, + 0xe1331a4700000000, 0x38c1c7c700000000, 0xcb5135f100000000, + 0xdee022aa00000000, 0x2d70d09c00000000, 0xba01c4c100000000, + 0x499136f700000000, 0x5c2021ac00000000, 0xafb0d39a00000000, + 0x76420e1a00000000, 0x85d2fc2c00000000, 0x9063eb7700000000, + 0x63f3194100000000, 0x638021ad00000000, 0x9010d39b00000000, + 0x85a1c4c000000000, 0x763136f600000000, 0xafc3eb7600000000, + 0x5c53194000000000, 0x49e20e1b00000000, 0xba72fc2d00000000, + 0x08020f1800000000, 0xfb92fd2e00000000, 0xee23ea7500000000, + 0x1db3184300000000, 0xc441c5c300000000, 0x37d137f500000000, + 0x226020ae00000000, 0xd1f0d29800000000, 0xd183ea7400000000, + 0x2213184200000000, 0x37a20f1900000000, 0xc432fd2f00000000, + 0x1dc020af00000000, 0xee50d29900000000, 0xfbe1c5c200000000, + 0x087137f400000000}, + {0x0000000000000000, 0x3651822400000000, 0x6ca2044900000000, + 0x5af3866d00000000, 0xd844099200000000, 0xee158bb600000000, + 0xb4e60ddb00000000, 0x82b78fff00000000, 0xf18f63ff00000000, + 0xc7dee1db00000000, 0x9d2d67b600000000, 0xab7ce59200000000, + 0x29cb6a6d00000000, 0x1f9ae84900000000, 0x45696e2400000000, + 0x7338ec0000000000, 0xa319b62500000000, 0x9548340100000000, + 0xcfbbb26c00000000, 0xf9ea304800000000, 0x7b5dbfb700000000, + 0x4d0c3d9300000000, 0x17ffbbfe00000000, 0x21ae39da00000000, + 0x5296d5da00000000, 0x64c757fe00000000, 0x3e34d19300000000, + 0x086553b700000000, 0x8ad2dc4800000000, 0xbc835e6c00000000, + 0xe670d80100000000, 0xd0215a2500000000, 0x46336c4b00000000, + 0x7062ee6f00000000, 0x2a91680200000000, 0x1cc0ea2600000000, + 0x9e7765d900000000, 0xa826e7fd00000000, 0xf2d5619000000000, + 0xc484e3b400000000, 0xb7bc0fb400000000, 0x81ed8d9000000000, + 0xdb1e0bfd00000000, 0xed4f89d900000000, 0x6ff8062600000000, + 0x59a9840200000000, 0x035a026f00000000, 0x350b804b00000000, + 0xe52ada6e00000000, 0xd37b584a00000000, 0x8988de2700000000, + 0xbfd95c0300000000, 0x3d6ed3fc00000000, 0x0b3f51d800000000, + 0x51ccd7b500000000, 0x679d559100000000, 0x14a5b99100000000, + 0x22f43bb500000000, 0x7807bdd800000000, 0x4e563ffc00000000, + 0xcce1b00300000000, 0xfab0322700000000, 0xa043b44a00000000, + 0x9612366e00000000, 0x8c66d89600000000, 0xba375ab200000000, + 0xe0c4dcdf00000000, 0xd6955efb00000000, 0x5422d10400000000, + 0x6273532000000000, 0x3880d54d00000000, 0x0ed1576900000000, + 0x7de9bb6900000000, 0x4bb8394d00000000, 0x114bbf2000000000, + 0x271a3d0400000000, 0xa5adb2fb00000000, 0x93fc30df00000000, + 0xc90fb6b200000000, 0xff5e349600000000, 0x2f7f6eb300000000, + 0x192eec9700000000, 0x43dd6afa00000000, 0x758ce8de00000000, + 0xf73b672100000000, 0xc16ae50500000000, 0x9b99636800000000, + 0xadc8e14c00000000, 0xdef00d4c00000000, 0xe8a18f6800000000, + 0xb252090500000000, 0x84038b2100000000, 0x06b404de00000000, + 0x30e586fa00000000, 0x6a16009700000000, 0x5c4782b300000000, + 0xca55b4dd00000000, 0xfc0436f900000000, 0xa6f7b09400000000, + 0x90a632b000000000, 0x1211bd4f00000000, 0x24403f6b00000000, + 0x7eb3b90600000000, 0x48e23b2200000000, 0x3bdad72200000000, + 0x0d8b550600000000, 0x5778d36b00000000, 0x6129514f00000000, + 0xe39edeb000000000, 0xd5cf5c9400000000, 0x8f3cdaf900000000, + 0xb96d58dd00000000, 0x694c02f800000000, 0x5f1d80dc00000000, + 0x05ee06b100000000, 0x33bf849500000000, 0xb1080b6a00000000, + 0x8759894e00000000, 0xddaa0f2300000000, 0xebfb8d0700000000, + 0x98c3610700000000, 0xae92e32300000000, 0xf461654e00000000, + 0xc230e76a00000000, 0x4087689500000000, 0x76d6eab100000000, + 0x2c256cdc00000000, 0x1a74eef800000000, 0x59cbc1f600000000, + 0x6f9a43d200000000, 0x3569c5bf00000000, 0x0338479b00000000, + 0x818fc86400000000, 0xb7de4a4000000000, 0xed2dcc2d00000000, + 0xdb7c4e0900000000, 0xa844a20900000000, 0x9e15202d00000000, + 0xc4e6a64000000000, 0xf2b7246400000000, 0x7000ab9b00000000, + 0x465129bf00000000, 0x1ca2afd200000000, 0x2af32df600000000, + 0xfad277d300000000, 0xcc83f5f700000000, 0x9670739a00000000, + 0xa021f1be00000000, 0x22967e4100000000, 0x14c7fc6500000000, + 0x4e347a0800000000, 0x7865f82c00000000, 0x0b5d142c00000000, + 0x3d0c960800000000, 0x67ff106500000000, 0x51ae924100000000, + 0xd3191dbe00000000, 0xe5489f9a00000000, 0xbfbb19f700000000, + 0x89ea9bd300000000, 0x1ff8adbd00000000, 0x29a92f9900000000, + 0x735aa9f400000000, 0x450b2bd000000000, 0xc7bca42f00000000, + 0xf1ed260b00000000, 0xab1ea06600000000, 0x9d4f224200000000, + 0xee77ce4200000000, 0xd8264c6600000000, 0x82d5ca0b00000000, + 0xb484482f00000000, 0x3633c7d000000000, 0x006245f400000000, + 0x5a91c39900000000, 0x6cc041bd00000000, 0xbce11b9800000000, + 0x8ab099bc00000000, 0xd0431fd100000000, 0xe6129df500000000, + 0x64a5120a00000000, 0x52f4902e00000000, 0x0807164300000000, + 0x3e56946700000000, 0x4d6e786700000000, 0x7b3ffa4300000000, + 0x21cc7c2e00000000, 0x179dfe0a00000000, 0x952a71f500000000, + 0xa37bf3d100000000, 0xf98875bc00000000, 0xcfd9f79800000000, + 0xd5ad196000000000, 0xe3fc9b4400000000, 0xb90f1d2900000000, + 0x8f5e9f0d00000000, 0x0de910f200000000, 0x3bb892d600000000, + 0x614b14bb00000000, 0x571a969f00000000, 0x24227a9f00000000, + 0x1273f8bb00000000, 0x48807ed600000000, 0x7ed1fcf200000000, + 0xfc66730d00000000, 0xca37f12900000000, 0x90c4774400000000, + 0xa695f56000000000, 0x76b4af4500000000, 0x40e52d6100000000, + 0x1a16ab0c00000000, 0x2c47292800000000, 0xaef0a6d700000000, + 0x98a124f300000000, 0xc252a29e00000000, 0xf40320ba00000000, + 0x873bccba00000000, 0xb16a4e9e00000000, 0xeb99c8f300000000, + 0xddc84ad700000000, 0x5f7fc52800000000, 0x692e470c00000000, + 0x33ddc16100000000, 0x058c434500000000, 0x939e752b00000000, + 0xa5cff70f00000000, 0xff3c716200000000, 0xc96df34600000000, + 0x4bda7cb900000000, 0x7d8bfe9d00000000, 0x277878f000000000, + 0x1129fad400000000, 0x621116d400000000, 0x544094f000000000, + 0x0eb3129d00000000, 0x38e290b900000000, 0xba551f4600000000, + 0x8c049d6200000000, 0xd6f71b0f00000000, 0xe0a6992b00000000, + 0x3087c30e00000000, 0x06d6412a00000000, 0x5c25c74700000000, + 0x6a74456300000000, 0xe8c3ca9c00000000, 0xde9248b800000000, + 0x8461ced500000000, 0xb2304cf100000000, 0xc108a0f100000000, + 0xf75922d500000000, 0xadaaa4b800000000, 0x9bfb269c00000000, + 0x194ca96300000000, 0x2f1d2b4700000000, 0x75eead2a00000000, + 0x43bf2f0e00000000}, + {0x0000000000000000, 0xc8179ecf00000000, 0xd1294d4400000000, + 0x193ed38b00000000, 0xa2539a8800000000, 0x6a44044700000000, + 0x737ad7cc00000000, 0xbb6d490300000000, 0x05a145ca00000000, + 0xcdb6db0500000000, 0xd488088e00000000, 0x1c9f964100000000, + 0xa7f2df4200000000, 0x6fe5418d00000000, 0x76db920600000000, + 0xbecc0cc900000000, 0x4b44fa4f00000000, 0x8353648000000000, + 0x9a6db70b00000000, 0x527a29c400000000, 0xe91760c700000000, + 0x2100fe0800000000, 0x383e2d8300000000, 0xf029b34c00000000, + 0x4ee5bf8500000000, 0x86f2214a00000000, 0x9fccf2c100000000, + 0x57db6c0e00000000, 0xecb6250d00000000, 0x24a1bbc200000000, + 0x3d9f684900000000, 0xf588f68600000000, 0x9688f49f00000000, + 0x5e9f6a5000000000, 0x47a1b9db00000000, 0x8fb6271400000000, + 0x34db6e1700000000, 0xfcccf0d800000000, 0xe5f2235300000000, + 0x2de5bd9c00000000, 0x9329b15500000000, 0x5b3e2f9a00000000, + 0x4200fc1100000000, 0x8a1762de00000000, 0x317a2bdd00000000, + 0xf96db51200000000, 0xe053669900000000, 0x2844f85600000000, + 0xddcc0ed000000000, 0x15db901f00000000, 0x0ce5439400000000, + 0xc4f2dd5b00000000, 0x7f9f945800000000, 0xb7880a9700000000, + 0xaeb6d91c00000000, 0x66a147d300000000, 0xd86d4b1a00000000, + 0x107ad5d500000000, 0x0944065e00000000, 0xc153989100000000, + 0x7a3ed19200000000, 0xb2294f5d00000000, 0xab179cd600000000, + 0x6300021900000000, 0x6d1798e400000000, 0xa500062b00000000, + 0xbc3ed5a000000000, 0x74294b6f00000000, 0xcf44026c00000000, + 0x07539ca300000000, 0x1e6d4f2800000000, 0xd67ad1e700000000, + 0x68b6dd2e00000000, 0xa0a143e100000000, 0xb99f906a00000000, + 0x71880ea500000000, 0xcae547a600000000, 0x02f2d96900000000, + 0x1bcc0ae200000000, 0xd3db942d00000000, 0x265362ab00000000, + 0xee44fc6400000000, 0xf77a2fef00000000, 0x3f6db12000000000, + 0x8400f82300000000, 0x4c1766ec00000000, 0x5529b56700000000, + 0x9d3e2ba800000000, 0x23f2276100000000, 0xebe5b9ae00000000, + 0xf2db6a2500000000, 0x3accf4ea00000000, 0x81a1bde900000000, + 0x49b6232600000000, 0x5088f0ad00000000, 0x989f6e6200000000, + 0xfb9f6c7b00000000, 0x3388f2b400000000, 0x2ab6213f00000000, + 0xe2a1bff000000000, 0x59ccf6f300000000, 0x91db683c00000000, + 0x88e5bbb700000000, 0x40f2257800000000, 0xfe3e29b100000000, + 0x3629b77e00000000, 0x2f1764f500000000, 0xe700fa3a00000000, + 0x5c6db33900000000, 0x947a2df600000000, 0x8d44fe7d00000000, + 0x455360b200000000, 0xb0db963400000000, 0x78cc08fb00000000, + 0x61f2db7000000000, 0xa9e545bf00000000, 0x12880cbc00000000, + 0xda9f927300000000, 0xc3a141f800000000, 0x0bb6df3700000000, + 0xb57ad3fe00000000, 0x7d6d4d3100000000, 0x64539eba00000000, + 0xac44007500000000, 0x1729497600000000, 0xdf3ed7b900000000, + 0xc600043200000000, 0x0e179afd00000000, 0x9b28411200000000, + 0x533fdfdd00000000, 0x4a010c5600000000, 0x8216929900000000, + 0x397bdb9a00000000, 0xf16c455500000000, 0xe85296de00000000, + 0x2045081100000000, 0x9e8904d800000000, 0x569e9a1700000000, + 0x4fa0499c00000000, 0x87b7d75300000000, 0x3cda9e5000000000, + 0xf4cd009f00000000, 0xedf3d31400000000, 0x25e44ddb00000000, + 0xd06cbb5d00000000, 0x187b259200000000, 0x0145f61900000000, + 0xc95268d600000000, 0x723f21d500000000, 0xba28bf1a00000000, + 0xa3166c9100000000, 0x6b01f25e00000000, 0xd5cdfe9700000000, + 0x1dda605800000000, 0x04e4b3d300000000, 0xccf32d1c00000000, + 0x779e641f00000000, 0xbf89fad000000000, 0xa6b7295b00000000, + 0x6ea0b79400000000, 0x0da0b58d00000000, 0xc5b72b4200000000, + 0xdc89f8c900000000, 0x149e660600000000, 0xaff32f0500000000, + 0x67e4b1ca00000000, 0x7eda624100000000, 0xb6cdfc8e00000000, + 0x0801f04700000000, 0xc0166e8800000000, 0xd928bd0300000000, + 0x113f23cc00000000, 0xaa526acf00000000, 0x6245f40000000000, + 0x7b7b278b00000000, 0xb36cb94400000000, 0x46e44fc200000000, + 0x8ef3d10d00000000, 0x97cd028600000000, 0x5fda9c4900000000, + 0xe4b7d54a00000000, 0x2ca04b8500000000, 0x359e980e00000000, + 0xfd8906c100000000, 0x43450a0800000000, 0x8b5294c700000000, + 0x926c474c00000000, 0x5a7bd98300000000, 0xe116908000000000, + 0x29010e4f00000000, 0x303fddc400000000, 0xf828430b00000000, + 0xf63fd9f600000000, 0x3e28473900000000, 0x271694b200000000, + 0xef010a7d00000000, 0x546c437e00000000, 0x9c7bddb100000000, + 0x85450e3a00000000, 0x4d5290f500000000, 0xf39e9c3c00000000, + 0x3b8902f300000000, 0x22b7d17800000000, 0xeaa04fb700000000, + 0x51cd06b400000000, 0x99da987b00000000, 0x80e44bf000000000, + 0x48f3d53f00000000, 0xbd7b23b900000000, 0x756cbd7600000000, + 0x6c526efd00000000, 0xa445f03200000000, 0x1f28b93100000000, + 0xd73f27fe00000000, 0xce01f47500000000, 0x06166aba00000000, + 0xb8da667300000000, 0x70cdf8bc00000000, 0x69f32b3700000000, + 0xa1e4b5f800000000, 0x1a89fcfb00000000, 0xd29e623400000000, + 0xcba0b1bf00000000, 0x03b72f7000000000, 0x60b72d6900000000, + 0xa8a0b3a600000000, 0xb19e602d00000000, 0x7989fee200000000, + 0xc2e4b7e100000000, 0x0af3292e00000000, 0x13cdfaa500000000, + 0xdbda646a00000000, 0x651668a300000000, 0xad01f66c00000000, + 0xb43f25e700000000, 0x7c28bb2800000000, 0xc745f22b00000000, + 0x0f526ce400000000, 0x166cbf6f00000000, 0xde7b21a000000000, + 0x2bf3d72600000000, 0xe3e449e900000000, 0xfada9a6200000000, + 0x32cd04ad00000000, 0x89a04dae00000000, 0x41b7d36100000000, + 0x588900ea00000000, 0x909e9e2500000000, 0x2e5292ec00000000, + 0xe6450c2300000000, 0xff7bdfa800000000, 0x376c416700000000, + 0x8c01086400000000, 0x441696ab00000000, 0x5d28452000000000, + 0x953fdbef00000000}, + {0x0000000000000000, 0x95d4709500000000, 0x6baf90f100000000, + 0xfe7be06400000000, 0x9758503800000000, 0x028c20ad00000000, + 0xfcf7c0c900000000, 0x6923b05c00000000, 0x2eb1a07000000000, + 0xbb65d0e500000000, 0x451e308100000000, 0xd0ca401400000000, + 0xb9e9f04800000000, 0x2c3d80dd00000000, 0xd24660b900000000, + 0x4792102c00000000, 0x5c6241e100000000, 0xc9b6317400000000, + 0x37cdd11000000000, 0xa219a18500000000, 0xcb3a11d900000000, + 0x5eee614c00000000, 0xa095812800000000, 0x3541f1bd00000000, + 0x72d3e19100000000, 0xe707910400000000, 0x197c716000000000, + 0x8ca801f500000000, 0xe58bb1a900000000, 0x705fc13c00000000, + 0x8e24215800000000, 0x1bf051cd00000000, 0xf9c2f31900000000, + 0x6c16838c00000000, 0x926d63e800000000, 0x07b9137d00000000, + 0x6e9aa32100000000, 0xfb4ed3b400000000, 0x053533d000000000, + 0x90e1434500000000, 0xd773536900000000, 0x42a723fc00000000, + 0xbcdcc39800000000, 0x2908b30d00000000, 0x402b035100000000, + 0xd5ff73c400000000, 0x2b8493a000000000, 0xbe50e33500000000, + 0xa5a0b2f800000000, 0x3074c26d00000000, 0xce0f220900000000, + 0x5bdb529c00000000, 0x32f8e2c000000000, 0xa72c925500000000, + 0x5957723100000000, 0xcc8302a400000000, 0x8b11128800000000, + 0x1ec5621d00000000, 0xe0be827900000000, 0x756af2ec00000000, + 0x1c4942b000000000, 0x899d322500000000, 0x77e6d24100000000, + 0xe232a2d400000000, 0xf285e73300000000, 0x675197a600000000, + 0x992a77c200000000, 0x0cfe075700000000, 0x65ddb70b00000000, + 0xf009c79e00000000, 0x0e7227fa00000000, 0x9ba6576f00000000, + 0xdc34474300000000, 0x49e037d600000000, 0xb79bd7b200000000, + 0x224fa72700000000, 0x4b6c177b00000000, 0xdeb867ee00000000, + 0x20c3878a00000000, 0xb517f71f00000000, 0xaee7a6d200000000, + 0x3b33d64700000000, 0xc548362300000000, 0x509c46b600000000, + 0x39bff6ea00000000, 0xac6b867f00000000, 0x5210661b00000000, + 0xc7c4168e00000000, 0x805606a200000000, 0x1582763700000000, + 0xebf9965300000000, 0x7e2de6c600000000, 0x170e569a00000000, + 0x82da260f00000000, 0x7ca1c66b00000000, 0xe975b6fe00000000, + 0x0b47142a00000000, 0x9e9364bf00000000, 0x60e884db00000000, + 0xf53cf44e00000000, 0x9c1f441200000000, 0x09cb348700000000, + 0xf7b0d4e300000000, 0x6264a47600000000, 0x25f6b45a00000000, + 0xb022c4cf00000000, 0x4e5924ab00000000, 0xdb8d543e00000000, + 0xb2aee46200000000, 0x277a94f700000000, 0xd901749300000000, + 0x4cd5040600000000, 0x572555cb00000000, 0xc2f1255e00000000, + 0x3c8ac53a00000000, 0xa95eb5af00000000, 0xc07d05f300000000, + 0x55a9756600000000, 0xabd2950200000000, 0x3e06e59700000000, + 0x7994f5bb00000000, 0xec40852e00000000, 0x123b654a00000000, + 0x87ef15df00000000, 0xeecca58300000000, 0x7b18d51600000000, + 0x8563357200000000, 0x10b745e700000000, 0xe40bcf6700000000, + 0x71dfbff200000000, 0x8fa45f9600000000, 0x1a702f0300000000, + 0x73539f5f00000000, 0xe687efca00000000, 0x18fc0fae00000000, + 0x8d287f3b00000000, 0xcaba6f1700000000, 0x5f6e1f8200000000, + 0xa115ffe600000000, 0x34c18f7300000000, 0x5de23f2f00000000, + 0xc8364fba00000000, 0x364dafde00000000, 0xa399df4b00000000, + 0xb8698e8600000000, 0x2dbdfe1300000000, 0xd3c61e7700000000, + 0x46126ee200000000, 0x2f31debe00000000, 0xbae5ae2b00000000, + 0x449e4e4f00000000, 0xd14a3eda00000000, 0x96d82ef600000000, + 0x030c5e6300000000, 0xfd77be0700000000, 0x68a3ce9200000000, + 0x01807ece00000000, 0x94540e5b00000000, 0x6a2fee3f00000000, + 0xfffb9eaa00000000, 0x1dc93c7e00000000, 0x881d4ceb00000000, + 0x7666ac8f00000000, 0xe3b2dc1a00000000, 0x8a916c4600000000, + 0x1f451cd300000000, 0xe13efcb700000000, 0x74ea8c2200000000, + 0x33789c0e00000000, 0xa6acec9b00000000, 0x58d70cff00000000, + 0xcd037c6a00000000, 0xa420cc3600000000, 0x31f4bca300000000, + 0xcf8f5cc700000000, 0x5a5b2c5200000000, 0x41ab7d9f00000000, + 0xd47f0d0a00000000, 0x2a04ed6e00000000, 0xbfd09dfb00000000, + 0xd6f32da700000000, 0x43275d3200000000, 0xbd5cbd5600000000, + 0x2888cdc300000000, 0x6f1addef00000000, 0xfacead7a00000000, + 0x04b54d1e00000000, 0x91613d8b00000000, 0xf8428dd700000000, + 0x6d96fd4200000000, 0x93ed1d2600000000, 0x06396db300000000, + 0x168e285400000000, 0x835a58c100000000, 0x7d21b8a500000000, + 0xe8f5c83000000000, 0x81d6786c00000000, 0x140208f900000000, + 0xea79e89d00000000, 0x7fad980800000000, 0x383f882400000000, + 0xadebf8b100000000, 0x539018d500000000, 0xc644684000000000, + 0xaf67d81c00000000, 0x3ab3a88900000000, 0xc4c848ed00000000, + 0x511c387800000000, 0x4aec69b500000000, 0xdf38192000000000, + 0x2143f94400000000, 0xb49789d100000000, 0xddb4398d00000000, + 0x4860491800000000, 0xb61ba97c00000000, 0x23cfd9e900000000, + 0x645dc9c500000000, 0xf189b95000000000, 0x0ff2593400000000, + 0x9a2629a100000000, 0xf30599fd00000000, 0x66d1e96800000000, + 0x98aa090c00000000, 0x0d7e799900000000, 0xef4cdb4d00000000, + 0x7a98abd800000000, 0x84e34bbc00000000, 0x11373b2900000000, + 0x78148b7500000000, 0xedc0fbe000000000, 0x13bb1b8400000000, + 0x866f6b1100000000, 0xc1fd7b3d00000000, 0x54290ba800000000, + 0xaa52ebcc00000000, 0x3f869b5900000000, 0x56a52b0500000000, + 0xc3715b9000000000, 0x3d0abbf400000000, 0xa8decb6100000000, + 0xb32e9aac00000000, 0x26faea3900000000, 0xd8810a5d00000000, + 0x4d557ac800000000, 0x2476ca9400000000, 0xb1a2ba0100000000, + 0x4fd95a6500000000, 0xda0d2af000000000, 0x9d9f3adc00000000, + 0x084b4a4900000000, 0xf630aa2d00000000, 0x63e4dab800000000, + 0x0ac76ae400000000, 0x9f131a7100000000, 0x6168fa1500000000, + 0xf4bc8a8000000000}, + {0x0000000000000000, 0x1f17f08000000000, 0x7f2891da00000000, + 0x603f615a00000000, 0xbf56536e00000000, 0xa041a3ee00000000, + 0xc07ec2b400000000, 0xdf69323400000000, 0x7eada6dc00000000, + 0x61ba565c00000000, 0x0185370600000000, 0x1e92c78600000000, + 0xc1fbf5b200000000, 0xdeec053200000000, 0xbed3646800000000, + 0xa1c494e800000000, 0xbd5c3c6200000000, 0xa24bcce200000000, + 0xc274adb800000000, 0xdd635d3800000000, 0x020a6f0c00000000, + 0x1d1d9f8c00000000, 0x7d22fed600000000, 0x62350e5600000000, + 0xc3f19abe00000000, 0xdce66a3e00000000, 0xbcd90b6400000000, + 0xa3cefbe400000000, 0x7ca7c9d000000000, 0x63b0395000000000, + 0x038f580a00000000, 0x1c98a88a00000000, 0x7ab978c400000000, + 0x65ae884400000000, 0x0591e91e00000000, 0x1a86199e00000000, + 0xc5ef2baa00000000, 0xdaf8db2a00000000, 0xbac7ba7000000000, + 0xa5d04af000000000, 0x0414de1800000000, 0x1b032e9800000000, + 0x7b3c4fc200000000, 0x642bbf4200000000, 0xbb428d7600000000, + 0xa4557df600000000, 0xc46a1cac00000000, 0xdb7dec2c00000000, + 0xc7e544a600000000, 0xd8f2b42600000000, 0xb8cdd57c00000000, + 0xa7da25fc00000000, 0x78b317c800000000, 0x67a4e74800000000, + 0x079b861200000000, 0x188c769200000000, 0xb948e27a00000000, + 0xa65f12fa00000000, 0xc66073a000000000, 0xd977832000000000, + 0x061eb11400000000, 0x1909419400000000, 0x793620ce00000000, + 0x6621d04e00000000, 0xb574805300000000, 0xaa6370d300000000, + 0xca5c118900000000, 0xd54be10900000000, 0x0a22d33d00000000, + 0x153523bd00000000, 0x750a42e700000000, 0x6a1db26700000000, + 0xcbd9268f00000000, 0xd4ced60f00000000, 0xb4f1b75500000000, + 0xabe647d500000000, 0x748f75e100000000, 0x6b98856100000000, + 0x0ba7e43b00000000, 0x14b014bb00000000, 0x0828bc3100000000, + 0x173f4cb100000000, 0x77002deb00000000, 0x6817dd6b00000000, + 0xb77eef5f00000000, 0xa8691fdf00000000, 0xc8567e8500000000, + 0xd7418e0500000000, 0x76851aed00000000, 0x6992ea6d00000000, + 0x09ad8b3700000000, 0x16ba7bb700000000, 0xc9d3498300000000, + 0xd6c4b90300000000, 0xb6fbd85900000000, 0xa9ec28d900000000, + 0xcfcdf89700000000, 0xd0da081700000000, 0xb0e5694d00000000, + 0xaff299cd00000000, 0x709babf900000000, 0x6f8c5b7900000000, + 0x0fb33a2300000000, 0x10a4caa300000000, 0xb1605e4b00000000, + 0xae77aecb00000000, 0xce48cf9100000000, 0xd15f3f1100000000, + 0x0e360d2500000000, 0x1121fda500000000, 0x711e9cff00000000, + 0x6e096c7f00000000, 0x7291c4f500000000, 0x6d86347500000000, + 0x0db9552f00000000, 0x12aea5af00000000, 0xcdc7979b00000000, + 0xd2d0671b00000000, 0xb2ef064100000000, 0xadf8f6c100000000, + 0x0c3c622900000000, 0x132b92a900000000, 0x7314f3f300000000, + 0x6c03037300000000, 0xb36a314700000000, 0xac7dc1c700000000, + 0xcc42a09d00000000, 0xd355501d00000000, 0x6ae900a700000000, + 0x75fef02700000000, 0x15c1917d00000000, 0x0ad661fd00000000, + 0xd5bf53c900000000, 0xcaa8a34900000000, 0xaa97c21300000000, + 0xb580329300000000, 0x1444a67b00000000, 0x0b5356fb00000000, + 0x6b6c37a100000000, 0x747bc72100000000, 0xab12f51500000000, + 0xb405059500000000, 0xd43a64cf00000000, 0xcb2d944f00000000, + 0xd7b53cc500000000, 0xc8a2cc4500000000, 0xa89dad1f00000000, + 0xb78a5d9f00000000, 0x68e36fab00000000, 0x77f49f2b00000000, + 0x17cbfe7100000000, 0x08dc0ef100000000, 0xa9189a1900000000, + 0xb60f6a9900000000, 0xd6300bc300000000, 0xc927fb4300000000, + 0x164ec97700000000, 0x095939f700000000, 0x696658ad00000000, + 0x7671a82d00000000, 0x1050786300000000, 0x0f4788e300000000, + 0x6f78e9b900000000, 0x706f193900000000, 0xaf062b0d00000000, + 0xb011db8d00000000, 0xd02ebad700000000, 0xcf394a5700000000, + 0x6efddebf00000000, 0x71ea2e3f00000000, 0x11d54f6500000000, + 0x0ec2bfe500000000, 0xd1ab8dd100000000, 0xcebc7d5100000000, + 0xae831c0b00000000, 0xb194ec8b00000000, 0xad0c440100000000, + 0xb21bb48100000000, 0xd224d5db00000000, 0xcd33255b00000000, + 0x125a176f00000000, 0x0d4de7ef00000000, 0x6d7286b500000000, + 0x7265763500000000, 0xd3a1e2dd00000000, 0xccb6125d00000000, + 0xac89730700000000, 0xb39e838700000000, 0x6cf7b1b300000000, + 0x73e0413300000000, 0x13df206900000000, 0x0cc8d0e900000000, + 0xdf9d80f400000000, 0xc08a707400000000, 0xa0b5112e00000000, + 0xbfa2e1ae00000000, 0x60cbd39a00000000, 0x7fdc231a00000000, + 0x1fe3424000000000, 0x00f4b2c000000000, 0xa130262800000000, + 0xbe27d6a800000000, 0xde18b7f200000000, 0xc10f477200000000, + 0x1e66754600000000, 0x017185c600000000, 0x614ee49c00000000, + 0x7e59141c00000000, 0x62c1bc9600000000, 0x7dd64c1600000000, + 0x1de92d4c00000000, 0x02feddcc00000000, 0xdd97eff800000000, + 0xc2801f7800000000, 0xa2bf7e2200000000, 0xbda88ea200000000, + 0x1c6c1a4a00000000, 0x037beaca00000000, 0x63448b9000000000, + 0x7c537b1000000000, 0xa33a492400000000, 0xbc2db9a400000000, + 0xdc12d8fe00000000, 0xc305287e00000000, 0xa524f83000000000, + 0xba3308b000000000, 0xda0c69ea00000000, 0xc51b996a00000000, + 0x1a72ab5e00000000, 0x05655bde00000000, 0x655a3a8400000000, + 0x7a4dca0400000000, 0xdb895eec00000000, 0xc49eae6c00000000, + 0xa4a1cf3600000000, 0xbbb63fb600000000, 0x64df0d8200000000, + 0x7bc8fd0200000000, 0x1bf79c5800000000, 0x04e06cd800000000, + 0x1878c45200000000, 0x076f34d200000000, 0x6750558800000000, + 0x7847a50800000000, 0xa72e973c00000000, 0xb83967bc00000000, + 0xd80606e600000000, 0xc711f66600000000, 0x66d5628e00000000, + 0x79c2920e00000000, 0x19fdf35400000000, 0x06ea03d400000000, + 0xd98331e000000000, 0xc694c16000000000, 0xa6aba03a00000000, + 0xb9bc50ba00000000}, + {0x0000000000000000, 0xe2fd888d00000000, 0x85fd60c000000000, + 0x6700e84d00000000, 0x4bfdb05b00000000, 0xa90038d600000000, + 0xce00d09b00000000, 0x2cfd581600000000, 0x96fa61b700000000, + 0x7407e93a00000000, 0x1307017700000000, 0xf1fa89fa00000000, + 0xdd07d1ec00000000, 0x3ffa596100000000, 0x58fab12c00000000, + 0xba0739a100000000, 0x6df3b2b500000000, 0x8f0e3a3800000000, + 0xe80ed27500000000, 0x0af35af800000000, 0x260e02ee00000000, + 0xc4f38a6300000000, 0xa3f3622e00000000, 0x410eeaa300000000, + 0xfb09d30200000000, 0x19f45b8f00000000, 0x7ef4b3c200000000, + 0x9c093b4f00000000, 0xb0f4635900000000, 0x5209ebd400000000, + 0x3509039900000000, 0xd7f48b1400000000, 0x9be014b000000000, + 0x791d9c3d00000000, 0x1e1d747000000000, 0xfce0fcfd00000000, + 0xd01da4eb00000000, 0x32e02c6600000000, 0x55e0c42b00000000, + 0xb71d4ca600000000, 0x0d1a750700000000, 0xefe7fd8a00000000, + 0x88e715c700000000, 0x6a1a9d4a00000000, 0x46e7c55c00000000, + 0xa41a4dd100000000, 0xc31aa59c00000000, 0x21e72d1100000000, + 0xf613a60500000000, 0x14ee2e8800000000, 0x73eec6c500000000, + 0x91134e4800000000, 0xbdee165e00000000, 0x5f139ed300000000, + 0x3813769e00000000, 0xdaeefe1300000000, 0x60e9c7b200000000, + 0x82144f3f00000000, 0xe514a77200000000, 0x07e92fff00000000, + 0x2b1477e900000000, 0xc9e9ff6400000000, 0xaee9172900000000, + 0x4c149fa400000000, 0x77c758bb00000000, 0x953ad03600000000, + 0xf23a387b00000000, 0x10c7b0f600000000, 0x3c3ae8e000000000, + 0xdec7606d00000000, 0xb9c7882000000000, 0x5b3a00ad00000000, + 0xe13d390c00000000, 0x03c0b18100000000, 0x64c059cc00000000, + 0x863dd14100000000, 0xaac0895700000000, 0x483d01da00000000, + 0x2f3de99700000000, 0xcdc0611a00000000, 0x1a34ea0e00000000, + 0xf8c9628300000000, 0x9fc98ace00000000, 0x7d34024300000000, + 0x51c95a5500000000, 0xb334d2d800000000, 0xd4343a9500000000, + 0x36c9b21800000000, 0x8cce8bb900000000, 0x6e33033400000000, + 0x0933eb7900000000, 0xebce63f400000000, 0xc7333be200000000, + 0x25ceb36f00000000, 0x42ce5b2200000000, 0xa033d3af00000000, + 0xec274c0b00000000, 0x0edac48600000000, 0x69da2ccb00000000, + 0x8b27a44600000000, 0xa7dafc5000000000, 0x452774dd00000000, + 0x22279c9000000000, 0xc0da141d00000000, 0x7add2dbc00000000, + 0x9820a53100000000, 0xff204d7c00000000, 0x1dddc5f100000000, + 0x31209de700000000, 0xd3dd156a00000000, 0xb4ddfd2700000000, + 0x562075aa00000000, 0x81d4febe00000000, 0x6329763300000000, + 0x04299e7e00000000, 0xe6d416f300000000, 0xca294ee500000000, + 0x28d4c66800000000, 0x4fd42e2500000000, 0xad29a6a800000000, + 0x172e9f0900000000, 0xf5d3178400000000, 0x92d3ffc900000000, + 0x702e774400000000, 0x5cd32f5200000000, 0xbe2ea7df00000000, + 0xd92e4f9200000000, 0x3bd3c71f00000000, 0xaf88c0ad00000000, + 0x4d75482000000000, 0x2a75a06d00000000, 0xc88828e000000000, + 0xe47570f600000000, 0x0688f87b00000000, 0x6188103600000000, + 0x837598bb00000000, 0x3972a11a00000000, 0xdb8f299700000000, + 0xbc8fc1da00000000, 0x5e72495700000000, 0x728f114100000000, + 0x907299cc00000000, 0xf772718100000000, 0x158ff90c00000000, + 0xc27b721800000000, 0x2086fa9500000000, 0x478612d800000000, + 0xa57b9a5500000000, 0x8986c24300000000, 0x6b7b4ace00000000, + 0x0c7ba28300000000, 0xee862a0e00000000, 0x548113af00000000, + 0xb67c9b2200000000, 0xd17c736f00000000, 0x3381fbe200000000, + 0x1f7ca3f400000000, 0xfd812b7900000000, 0x9a81c33400000000, + 0x787c4bb900000000, 0x3468d41d00000000, 0xd6955c9000000000, + 0xb195b4dd00000000, 0x53683c5000000000, 0x7f95644600000000, + 0x9d68eccb00000000, 0xfa68048600000000, 0x18958c0b00000000, + 0xa292b5aa00000000, 0x406f3d2700000000, 0x276fd56a00000000, + 0xc5925de700000000, 0xe96f05f100000000, 0x0b928d7c00000000, + 0x6c92653100000000, 0x8e6fedbc00000000, 0x599b66a800000000, + 0xbb66ee2500000000, 0xdc66066800000000, 0x3e9b8ee500000000, + 0x1266d6f300000000, 0xf09b5e7e00000000, 0x979bb63300000000, + 0x75663ebe00000000, 0xcf61071f00000000, 0x2d9c8f9200000000, + 0x4a9c67df00000000, 0xa861ef5200000000, 0x849cb74400000000, + 0x66613fc900000000, 0x0161d78400000000, 0xe39c5f0900000000, + 0xd84f981600000000, 0x3ab2109b00000000, 0x5db2f8d600000000, + 0xbf4f705b00000000, 0x93b2284d00000000, 0x714fa0c000000000, + 0x164f488d00000000, 0xf4b2c00000000000, 0x4eb5f9a100000000, + 0xac48712c00000000, 0xcb48996100000000, 0x29b511ec00000000, + 0x054849fa00000000, 0xe7b5c17700000000, 0x80b5293a00000000, + 0x6248a1b700000000, 0xb5bc2aa300000000, 0x5741a22e00000000, + 0x30414a6300000000, 0xd2bcc2ee00000000, 0xfe419af800000000, + 0x1cbc127500000000, 0x7bbcfa3800000000, 0x994172b500000000, + 0x23464b1400000000, 0xc1bbc39900000000, 0xa6bb2bd400000000, + 0x4446a35900000000, 0x68bbfb4f00000000, 0x8a4673c200000000, + 0xed469b8f00000000, 0x0fbb130200000000, 0x43af8ca600000000, + 0xa152042b00000000, 0xc652ec6600000000, 0x24af64eb00000000, + 0x08523cfd00000000, 0xeaafb47000000000, 0x8daf5c3d00000000, + 0x6f52d4b000000000, 0xd555ed1100000000, 0x37a8659c00000000, + 0x50a88dd100000000, 0xb255055c00000000, 0x9ea85d4a00000000, + 0x7c55d5c700000000, 0x1b553d8a00000000, 0xf9a8b50700000000, + 0x2e5c3e1300000000, 0xcca1b69e00000000, 0xaba15ed300000000, + 0x495cd65e00000000, 0x65a18e4800000000, 0x875c06c500000000, + 0xe05cee8800000000, 0x02a1660500000000, 0xb8a65fa400000000, + 0x5a5bd72900000000, 0x3d5b3f6400000000, 0xdfa6b7e900000000, + 0xf35befff00000000, 0x11a6677200000000, 0x76a68f3f00000000, + 0x945b07b200000000}, + {0x0000000000000000, 0xa90b894e00000000, 0x5217129d00000000, + 0xfb1c9bd300000000, 0xe52855e100000000, 0x4c23dcaf00000000, + 0xb73f477c00000000, 0x1e34ce3200000000, 0x8b57db1900000000, + 0x225c525700000000, 0xd940c98400000000, 0x704b40ca00000000, + 0x6e7f8ef800000000, 0xc77407b600000000, 0x3c689c6500000000, + 0x9563152b00000000, 0x16afb63300000000, 0xbfa43f7d00000000, + 0x44b8a4ae00000000, 0xedb32de000000000, 0xf387e3d200000000, + 0x5a8c6a9c00000000, 0xa190f14f00000000, 0x089b780100000000, + 0x9df86d2a00000000, 0x34f3e46400000000, 0xcfef7fb700000000, + 0x66e4f6f900000000, 0x78d038cb00000000, 0xd1dbb18500000000, + 0x2ac72a5600000000, 0x83cca31800000000, 0x2c5e6d6700000000, + 0x8555e42900000000, 0x7e497ffa00000000, 0xd742f6b400000000, + 0xc976388600000000, 0x607db1c800000000, 0x9b612a1b00000000, + 0x326aa35500000000, 0xa709b67e00000000, 0x0e023f3000000000, + 0xf51ea4e300000000, 0x5c152dad00000000, 0x4221e39f00000000, + 0xeb2a6ad100000000, 0x1036f10200000000, 0xb93d784c00000000, + 0x3af1db5400000000, 0x93fa521a00000000, 0x68e6c9c900000000, + 0xc1ed408700000000, 0xdfd98eb500000000, 0x76d207fb00000000, + 0x8dce9c2800000000, 0x24c5156600000000, 0xb1a6004d00000000, + 0x18ad890300000000, 0xe3b112d000000000, 0x4aba9b9e00000000, + 0x548e55ac00000000, 0xfd85dce200000000, 0x0699473100000000, + 0xaf92ce7f00000000, 0x58bcdace00000000, 0xf1b7538000000000, + 0x0aabc85300000000, 0xa3a0411d00000000, 0xbd948f2f00000000, + 0x149f066100000000, 0xef839db200000000, 0x468814fc00000000, + 0xd3eb01d700000000, 0x7ae0889900000000, 0x81fc134a00000000, + 0x28f79a0400000000, 0x36c3543600000000, 0x9fc8dd7800000000, + 0x64d446ab00000000, 0xcddfcfe500000000, 0x4e136cfd00000000, + 0xe718e5b300000000, 0x1c047e6000000000, 0xb50ff72e00000000, + 0xab3b391c00000000, 0x0230b05200000000, 0xf92c2b8100000000, + 0x5027a2cf00000000, 0xc544b7e400000000, 0x6c4f3eaa00000000, + 0x9753a57900000000, 0x3e582c3700000000, 0x206ce20500000000, + 0x89676b4b00000000, 0x727bf09800000000, 0xdb7079d600000000, + 0x74e2b7a900000000, 0xdde93ee700000000, 0x26f5a53400000000, + 0x8ffe2c7a00000000, 0x91cae24800000000, 0x38c16b0600000000, + 0xc3ddf0d500000000, 0x6ad6799b00000000, 0xffb56cb000000000, + 0x56bee5fe00000000, 0xada27e2d00000000, 0x04a9f76300000000, + 0x1a9d395100000000, 0xb396b01f00000000, 0x488a2bcc00000000, + 0xe181a28200000000, 0x624d019a00000000, 0xcb4688d400000000, + 0x305a130700000000, 0x99519a4900000000, 0x8765547b00000000, + 0x2e6edd3500000000, 0xd57246e600000000, 0x7c79cfa800000000, + 0xe91ada8300000000, 0x401153cd00000000, 0xbb0dc81e00000000, + 0x1206415000000000, 0x0c328f6200000000, 0xa539062c00000000, + 0x5e259dff00000000, 0xf72e14b100000000, 0xf17ec44600000000, + 0x58754d0800000000, 0xa369d6db00000000, 0x0a625f9500000000, + 0x145691a700000000, 0xbd5d18e900000000, 0x4641833a00000000, + 0xef4a0a7400000000, 0x7a291f5f00000000, 0xd322961100000000, + 0x283e0dc200000000, 0x8135848c00000000, 0x9f014abe00000000, + 0x360ac3f000000000, 0xcd16582300000000, 0x641dd16d00000000, + 0xe7d1727500000000, 0x4edafb3b00000000, 0xb5c660e800000000, + 0x1ccde9a600000000, 0x02f9279400000000, 0xabf2aeda00000000, + 0x50ee350900000000, 0xf9e5bc4700000000, 0x6c86a96c00000000, + 0xc58d202200000000, 0x3e91bbf100000000, 0x979a32bf00000000, + 0x89aefc8d00000000, 0x20a575c300000000, 0xdbb9ee1000000000, + 0x72b2675e00000000, 0xdd20a92100000000, 0x742b206f00000000, + 0x8f37bbbc00000000, 0x263c32f200000000, 0x3808fcc000000000, + 0x9103758e00000000, 0x6a1fee5d00000000, 0xc314671300000000, + 0x5677723800000000, 0xff7cfb7600000000, 0x046060a500000000, + 0xad6be9eb00000000, 0xb35f27d900000000, 0x1a54ae9700000000, + 0xe148354400000000, 0x4843bc0a00000000, 0xcb8f1f1200000000, + 0x6284965c00000000, 0x99980d8f00000000, 0x309384c100000000, + 0x2ea74af300000000, 0x87acc3bd00000000, 0x7cb0586e00000000, + 0xd5bbd12000000000, 0x40d8c40b00000000, 0xe9d34d4500000000, + 0x12cfd69600000000, 0xbbc45fd800000000, 0xa5f091ea00000000, + 0x0cfb18a400000000, 0xf7e7837700000000, 0x5eec0a3900000000, + 0xa9c21e8800000000, 0x00c997c600000000, 0xfbd50c1500000000, + 0x52de855b00000000, 0x4cea4b6900000000, 0xe5e1c22700000000, + 0x1efd59f400000000, 0xb7f6d0ba00000000, 0x2295c59100000000, + 0x8b9e4cdf00000000, 0x7082d70c00000000, 0xd9895e4200000000, + 0xc7bd907000000000, 0x6eb6193e00000000, 0x95aa82ed00000000, + 0x3ca10ba300000000, 0xbf6da8bb00000000, 0x166621f500000000, + 0xed7aba2600000000, 0x4471336800000000, 0x5a45fd5a00000000, + 0xf34e741400000000, 0x0852efc700000000, 0xa159668900000000, + 0x343a73a200000000, 0x9d31faec00000000, 0x662d613f00000000, + 0xcf26e87100000000, 0xd112264300000000, 0x7819af0d00000000, + 0x830534de00000000, 0x2a0ebd9000000000, 0x859c73ef00000000, + 0x2c97faa100000000, 0xd78b617200000000, 0x7e80e83c00000000, + 0x60b4260e00000000, 0xc9bfaf4000000000, 0x32a3349300000000, + 0x9ba8bddd00000000, 0x0ecba8f600000000, 0xa7c021b800000000, + 0x5cdcba6b00000000, 0xf5d7332500000000, 0xebe3fd1700000000, + 0x42e8745900000000, 0xb9f4ef8a00000000, 0x10ff66c400000000, + 0x9333c5dc00000000, 0x3a384c9200000000, 0xc124d74100000000, + 0x682f5e0f00000000, 0x761b903d00000000, 0xdf10197300000000, + 0x240c82a000000000, 0x8d070bee00000000, 0x18641ec500000000, + 0xb16f978b00000000, 0x4a730c5800000000, 0xe378851600000000, + 0xfd4c4b2400000000, 0x5447c26a00000000, 0xaf5b59b900000000, + 0x0650d0f700000000}, + {0x0000000000000000, 0x479244af00000000, 0xcf22f88500000000, + 0x88b0bc2a00000000, 0xdf4381d000000000, 0x98d1c57f00000000, + 0x1061795500000000, 0x57f33dfa00000000, 0xff81737a00000000, + 0xb81337d500000000, 0x30a38bff00000000, 0x7731cf5000000000, + 0x20c2f2aa00000000, 0x6750b60500000000, 0xefe00a2f00000000, + 0xa8724e8000000000, 0xfe03e7f400000000, 0xb991a35b00000000, + 0x31211f7100000000, 0x76b35bde00000000, 0x2140662400000000, + 0x66d2228b00000000, 0xee629ea100000000, 0xa9f0da0e00000000, + 0x0182948e00000000, 0x4610d02100000000, 0xcea06c0b00000000, + 0x893228a400000000, 0xdec1155e00000000, 0x995351f100000000, + 0x11e3eddb00000000, 0x5671a97400000000, 0xbd01bf3200000000, + 0xfa93fb9d00000000, 0x722347b700000000, 0x35b1031800000000, + 0x62423ee200000000, 0x25d07a4d00000000, 0xad60c66700000000, + 0xeaf282c800000000, 0x4280cc4800000000, 0x051288e700000000, + 0x8da234cd00000000, 0xca30706200000000, 0x9dc34d9800000000, + 0xda51093700000000, 0x52e1b51d00000000, 0x1573f1b200000000, + 0x430258c600000000, 0x04901c6900000000, 0x8c20a04300000000, + 0xcbb2e4ec00000000, 0x9c41d91600000000, 0xdbd39db900000000, + 0x5363219300000000, 0x14f1653c00000000, 0xbc832bbc00000000, + 0xfb116f1300000000, 0x73a1d33900000000, 0x3433979600000000, + 0x63c0aa6c00000000, 0x2452eec300000000, 0xace252e900000000, + 0xeb70164600000000, 0x7a037e6500000000, 0x3d913aca00000000, + 0xb52186e000000000, 0xf2b3c24f00000000, 0xa540ffb500000000, + 0xe2d2bb1a00000000, 0x6a62073000000000, 0x2df0439f00000000, + 0x85820d1f00000000, 0xc21049b000000000, 0x4aa0f59a00000000, + 0x0d32b13500000000, 0x5ac18ccf00000000, 0x1d53c86000000000, + 0x95e3744a00000000, 0xd27130e500000000, 0x8400999100000000, + 0xc392dd3e00000000, 0x4b22611400000000, 0x0cb025bb00000000, + 0x5b43184100000000, 0x1cd15cee00000000, 0x9461e0c400000000, + 0xd3f3a46b00000000, 0x7b81eaeb00000000, 0x3c13ae4400000000, + 0xb4a3126e00000000, 0xf33156c100000000, 0xa4c26b3b00000000, + 0xe3502f9400000000, 0x6be093be00000000, 0x2c72d71100000000, + 0xc702c15700000000, 0x809085f800000000, 0x082039d200000000, + 0x4fb27d7d00000000, 0x1841408700000000, 0x5fd3042800000000, + 0xd763b80200000000, 0x90f1fcad00000000, 0x3883b22d00000000, + 0x7f11f68200000000, 0xf7a14aa800000000, 0xb0330e0700000000, + 0xe7c033fd00000000, 0xa052775200000000, 0x28e2cb7800000000, + 0x6f708fd700000000, 0x390126a300000000, 0x7e93620c00000000, + 0xf623de2600000000, 0xb1b19a8900000000, 0xe642a77300000000, + 0xa1d0e3dc00000000, 0x29605ff600000000, 0x6ef21b5900000000, + 0xc68055d900000000, 0x8112117600000000, 0x09a2ad5c00000000, + 0x4e30e9f300000000, 0x19c3d40900000000, 0x5e5190a600000000, + 0xd6e12c8c00000000, 0x9173682300000000, 0xf406fcca00000000, + 0xb394b86500000000, 0x3b24044f00000000, 0x7cb640e000000000, + 0x2b457d1a00000000, 0x6cd739b500000000, 0xe467859f00000000, + 0xa3f5c13000000000, 0x0b878fb000000000, 0x4c15cb1f00000000, + 0xc4a5773500000000, 0x8337339a00000000, 0xd4c40e6000000000, + 0x93564acf00000000, 0x1be6f6e500000000, 0x5c74b24a00000000, + 0x0a051b3e00000000, 0x4d975f9100000000, 0xc527e3bb00000000, + 0x82b5a71400000000, 0xd5469aee00000000, 0x92d4de4100000000, + 0x1a64626b00000000, 0x5df626c400000000, 0xf584684400000000, + 0xb2162ceb00000000, 0x3aa690c100000000, 0x7d34d46e00000000, + 0x2ac7e99400000000, 0x6d55ad3b00000000, 0xe5e5111100000000, + 0xa27755be00000000, 0x490743f800000000, 0x0e95075700000000, + 0x8625bb7d00000000, 0xc1b7ffd200000000, 0x9644c22800000000, + 0xd1d6868700000000, 0x59663aad00000000, 0x1ef47e0200000000, + 0xb686308200000000, 0xf114742d00000000, 0x79a4c80700000000, + 0x3e368ca800000000, 0x69c5b15200000000, 0x2e57f5fd00000000, + 0xa6e749d700000000, 0xe1750d7800000000, 0xb704a40c00000000, + 0xf096e0a300000000, 0x78265c8900000000, 0x3fb4182600000000, + 0x684725dc00000000, 0x2fd5617300000000, 0xa765dd5900000000, + 0xe0f799f600000000, 0x4885d77600000000, 0x0f1793d900000000, + 0x87a72ff300000000, 0xc0356b5c00000000, 0x97c656a600000000, + 0xd054120900000000, 0x58e4ae2300000000, 0x1f76ea8c00000000, + 0x8e0582af00000000, 0xc997c60000000000, 0x41277a2a00000000, + 0x06b53e8500000000, 0x5146037f00000000, 0x16d447d000000000, + 0x9e64fbfa00000000, 0xd9f6bf5500000000, 0x7184f1d500000000, + 0x3616b57a00000000, 0xbea6095000000000, 0xf9344dff00000000, + 0xaec7700500000000, 0xe95534aa00000000, 0x61e5888000000000, + 0x2677cc2f00000000, 0x7006655b00000000, 0x379421f400000000, + 0xbf249dde00000000, 0xf8b6d97100000000, 0xaf45e48b00000000, + 0xe8d7a02400000000, 0x60671c0e00000000, 0x27f558a100000000, + 0x8f87162100000000, 0xc815528e00000000, 0x40a5eea400000000, + 0x0737aa0b00000000, 0x50c497f100000000, 0x1756d35e00000000, + 0x9fe66f7400000000, 0xd8742bdb00000000, 0x33043d9d00000000, + 0x7496793200000000, 0xfc26c51800000000, 0xbbb481b700000000, + 0xec47bc4d00000000, 0xabd5f8e200000000, 0x236544c800000000, + 0x64f7006700000000, 0xcc854ee700000000, 0x8b170a4800000000, + 0x03a7b66200000000, 0x4435f2cd00000000, 0x13c6cf3700000000, + 0x54548b9800000000, 0xdce437b200000000, 0x9b76731d00000000, + 0xcd07da6900000000, 0x8a959ec600000000, 0x022522ec00000000, + 0x45b7664300000000, 0x12445bb900000000, 0x55d61f1600000000, + 0xdd66a33c00000000, 0x9af4e79300000000, 0x3286a91300000000, + 0x7514edbc00000000, 0xfda4519600000000, 0xba36153900000000, + 0xedc528c300000000, 0xaa576c6c00000000, 0x22e7d04600000000, + 0x657594e900000000}}; #else /* W == 4 */ local const z_crc_t FAR crc_braid_table[][256] = { - {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59, - 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4, - 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67, - 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef, - 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97, - 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88, - 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687, - 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698, - 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0, - 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068, - 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb, - 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056, - 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016, - 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009, - 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028, - 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037, - 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a, - 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7, - 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054, - 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7, - 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af, - 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0, - 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4, - 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab, - 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3, - 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a, - 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9, - 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54, - 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09, - 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16, - 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37, - 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28, - 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e, - 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3, - 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40, - 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8, - 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0, - 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf, - 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6, - 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9, - 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1, - 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059, - 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca, - 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067, - 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031, - 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e, - 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f, - 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010, - 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d, - 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0, - 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073, - 0xd8ac6b35}, - {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2, - 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd, - 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696, - 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3, - 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f, - 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35, - 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5, - 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f, - 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673, - 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46, - 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d, - 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632, - 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28, - 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192, - 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c, - 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6, - 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0, - 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff, - 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4, - 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95, - 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9, - 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03, - 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7, - 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d, - 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151, - 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808, - 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343, - 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c, - 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a, - 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0, - 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e, - 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594, - 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6, - 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399, - 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2, - 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7, - 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb, - 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571, - 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289, - 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33, - 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f, - 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a, - 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461, - 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e, - 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c, - 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6, - 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918, - 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2, - 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484, - 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb, - 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0, - 0xa140efa8}, - {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706, - 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed, - 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289, - 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a, - 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214, - 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3, - 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3, - 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254, - 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a, - 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9, - 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad, - 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746, - 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060, - 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187, - 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef, - 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408, - 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e, - 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495, - 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1, - 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532, - 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c, - 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb, - 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb, - 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c, - 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42, - 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060, - 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04, - 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef, - 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99, - 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e, - 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16, - 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1, - 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7, - 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c, - 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38, - 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb, - 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5, - 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42, - 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62, - 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85, - 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb, - 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18, - 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c, - 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997, - 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1, - 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36, - 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e, - 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9, - 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf, - 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24, - 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040, - 0x917cd6a1}, - {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf, - 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd, - 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896, - 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9, - 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3, - 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f, - 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d, - 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1, - 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab, - 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4, - 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f, - 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d, - 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4, - 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978, - 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad, - 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621, - 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46, - 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854, - 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f, - 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a, - 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890, - 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c, - 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4, - 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238, - 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622, - 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab, - 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0, - 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2, - 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295, - 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19, - 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc, - 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140, - 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd, - 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf, - 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184, - 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb, - 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1, - 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d, - 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb, - 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257, - 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d, - 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22, - 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069, - 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b, - 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6, - 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a, - 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf, - 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33, - 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254, - 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146, - 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d, - 0x18ba364e}}; + {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59, 0x2b8ad01f, + 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4, 0x5715a03e, 0x32729b78, + 0xd3363deb, 0xb65106ad, 0x19f84b67, 0x7c9f7021, 0xe0c6ab25, 0x85a19063, + 0x2a08dda9, 0x4f6fe6ef, 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, + 0x7d1d7d97, 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88, + 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687, 0xb5551dc1, + 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698, 0x872786b9, 0xe240bdff, + 0x4de9f035, 0x288ecb73, 0xc9ca6de0, 0xacad56a6, 0x03041b6c, 0x6663202a, + 0xfa3afb2e, 0x9f5dc068, 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, + 0x7e1966fb, 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056, + 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016, 0x509f9b50, + 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009, 0xb1db3dc3, 0xd4bc0685, + 0xa82376a4, 0xcd444de2, 0x62ed0028, 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, + 0x2c00eb71, 0x4967d037, 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, + 0x9bd3e06a, 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7, + 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054, 0xa9a17b12, + 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7, 0x61e91b44, 0x048e2002, + 0xab276dc8, 0xce40568e, 0xb2df26af, 0xd7b81de9, 0x78115023, 0x1d766b65, + 0xfc32cdf6, 0x9955f6b0, 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, + 0x050c2db4, 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab, + 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3, 0x79935d95, + 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a, 0xa13f36a0, 0xc4580de6, + 0x251cab75, 0x407b9033, 0xefd2ddf9, 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, + 0x3ce4e012, 0x5983db54, 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, + 0x8b37eb09, 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16, + 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37, 0xb9457071, + 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28, 0x710d1027, 0x146a2b61, + 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e, 0x5a87c038, 0xf52e8df2, 0x9049b6b4, + 0xecd6c695, 0x89b1fdd3, 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, + 0x68f55b40, 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8, + 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0, 0x697756f6, + 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf, 0x8833f065, 0xed54cb23, + 0x5e09e03a, 0x3b6edb7c, 0x94c796b6, 0xf1a0adf0, 0x10e40b63, 0x75833025, + 0xda2a7def, 0xbf4d46a9, 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, + 0x8d3fddd1, 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059, + 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca, 0x5f8bed8c, + 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067, 0x6df976f4, 0x089e4db2, + 0xa7370078, 0xc2503b3e, 0x44f5b031, 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, + 0x0a185b68, 0x6f7f602e, 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, + 0x13e0100f, 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010, + 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d, 0x8fb9cb0b, + 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0, 0xf326bb2a, 0x9641806c, + 0x770526ff, 0x12621db9, 0xbdcb5073, 0xd8ac6b35}, + {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2, 0x3e8a8dba, + 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd, 0x7d151b74, 0xaaf79b2c, + 0xe0c91067, 0x372b903f, 0x947d1696, 0x439f96ce, 0x13423b0a, 0xc4a0bb52, + 0x67f63dfb, 0xb014bda3, 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, + 0x1ae3268f, 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35, + 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5, 0x85d2f0bd, + 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f, 0x2f256b91, 0xf8c7ebc9, + 0x5b916d60, 0x8c73ed38, 0xc64d6673, 0x11afe62b, 0xb2f96082, 0x651be0da, + 0x35c64d1e, 0xe224cd46, 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, + 0xa81a460d, 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632, + 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28, 0x9aea6c70, + 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192, 0xd0d4e73b, 0x07366763, + 0x44a9f1ad, 0x934b71f5, 0x301df75c, 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, + 0xd975fabe, 0x0e977ae6, 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, + 0xb722dac0, 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff, + 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4, 0x1dd541ec, + 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95, 0x82e497de, 0x55061786, + 0xf650912f, 0x21b21177, 0x622d87b9, 0xb5cf07e1, 0x16998148, 0xc17b0110, + 0x8b458a5b, 0x5ca70a03, 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, + 0x0c7aa7c7, 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d, + 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151, 0x4fe53109, + 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808, 0xeea5dea1, 0x39475ef9, + 0x7379d5b2, 0xa49b55ea, 0x07cdd343, 0xd02f531b, 0x93b0c5d5, 0x4452458d, + 0xe704c324, 0x30e6437c, 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, + 0x8953e35a, 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0, + 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e, 0x23a47876, + 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594, 0xbc95ae44, 0x6b772e1c, + 0xc821a8b5, 0x1fc328ed, 0x55fda3a6, 0x821f23fe, 0x2149a557, 0xf6ab250f, + 0xb534b3c1, 0x62d63399, 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, + 0x28e8b8d2, 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7, + 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb, 0x71940893, + 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571, 0x3baa83d8, 0xec480380, + 0xd7193478, 0x00fbb420, 0xa3ad3289, 0x744fb2d1, 0x3e71399a, 0xe993b9c2, + 0x4ac53f6b, 0x9d27bf33, 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, + 0x37d0241f, 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a, + 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461, 0x8e658439, + 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e, 0x24921f15, 0xf3709f4d, + 0x502619e4, 0x87c499bc, 0xf19d426c, 0x267fc234, 0x8529449d, 0x52cbc4c5, + 0x18f54f8e, 0xcf17cfd6, 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, + 0x8c885918, 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2, + 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484, 0xdc55f4dc, + 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb, 0x9fca6212, 0x4828e24a, + 0x02166901, 0xd5f4e959, 0x76a26ff0, 0xa140efa8}, + {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706, 0xe4fa61e7, + 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed, 0x1285c58f, 0xfdd7736e, + 0x1cf9790a, 0xf3abcfeb, 0x192d1289, 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, + 0x2b77379b, 0xc425817a, 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, + 0x39f2f214, 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3, + 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3, 0xb7c06552, + 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254, 0x4a17163c, 0xa545a0dd, + 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a, 0xaeed77db, 0x446baab9, 0xab391c58, + 0x73e5e428, 0x9cb752c9, 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, + 0x7d9958ad, 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746, + 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060, 0x55dfc681, + 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187, 0xb4f1cce5, 0x5ba37a04, + 0xaddcde6c, 0x428e688d, 0xa808b5ef, 0x475a030e, 0xa674096a, 0x4926bf8b, + 0xa3a062e9, 0x4cf2d408, 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, + 0x9f86fb7e, 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495, + 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1, 0x62518810, + 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532, 0xec631f56, 0x0331a9b7, + 0xe9b774d5, 0x06e5c234, 0xf09a665c, 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, + 0xfb32b15a, 0x146007bb, 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, + 0xccbcffcb, 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c, + 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42, 0x3ac35ba3, + 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060, 0xabbf8d02, 0x44ed3be3, + 0xa5c33187, 0x4a918766, 0xa0175a04, 0x4f45ece5, 0xb93a488d, 0x5668fe6c, + 0xbcee230e, 0x53bc95ef, 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, + 0x80c8ba99, 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e, + 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16, 0x7d1fc9f7, + 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1, 0xf32d5eb1, 0x1c7fe850, + 0xf6f93532, 0x19ab83d3, 0xf88589b7, 0x17d73f56, 0xfd51e234, 0x120354d5, + 0xe47cf0bd, 0x0b2e465c, 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, + 0xea004c38, 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb, + 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5, 0x258d1a44, + 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42, 0xc4a31020, 0x2bf1a6c1, + 0x14e696e1, 0xfbb42000, 0x1132fd62, 0xfe604b83, 0x1f4e41e7, 0xf01cf706, + 0x1a9a2a64, 0xf5c89c85, 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, + 0x081fefeb, 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18, + 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c, 0xdb6bc09d, + 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997, 0x26bcb3f3, 0xc9ee0512, + 0x2368d870, 0xcc3a6e91, 0x49a02ed1, 0xa6f29830, 0x4c744552, 0xa326f3b3, + 0x4208f9d7, 0xad5a4f36, 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, + 0x5b25eb5e, 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9, + 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf, 0x83f9132e, + 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24, 0x7586b746, 0x9ad401a7, + 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040, 0x917cd6a1}, + {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf, 0xf4aeec8c, + 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd, 0x322cdf59, 0xb58a141a, + 0x95186851, 0x12bea312, 0x4124f896, 0xc68233d5, 0x1751997d, 0x90f7523e, + 0xc36d09ba, 0x44cbc2f9, 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, + 0xf141d6e3, 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f, + 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d, 0x7d39697e, + 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1, 0xc8b37d64, 0x4f15b627, + 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab, 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, + 0x39f2ab87, 0xbe5460c4, 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, + 0x9ec61c8f, 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d, + 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4, 0xdae0aeb7, + 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978, 0xfa72d2fc, 0x7dd419bf, + 0xbb562a6a, 0x3cf0e129, 0x6f6abaad, 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, + 0x1c629d62, 0x9bc45621, 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, + 0x391fdb46, 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854, + 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f, 0x8c95cf5c, + 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a, 0x00ed70c1, 0x874bbb82, + 0xd4d1e006, 0x53772b45, 0x95f51890, 0x1253d3d3, 0x41c98857, 0xc66f4314, + 0xe6fd3f5f, 0x615bf41c, 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, + 0xb0885eb4, 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238, + 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622, 0x760a6d61, + 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab, 0x6eb05b2f, 0xe916906c, + 0xc984ec27, 0x4e222764, 0x1db87ce0, 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, + 0x88a014b1, 0x0f06dff2, 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, + 0xaddd5295, 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19, + 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc, 0x1857468f, + 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140, 0x942ff912, 0x13893251, + 0x401369d5, 0xc7b5a296, 0xe727dedd, 0x6081159e, 0x331b4e1a, 0xb4bd8559, + 0x723fb68c, 0xf5997dcf, 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, + 0xd50b0184, 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb, + 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1, 0xe2c8e4b2, + 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d, 0xc25a98f9, 0x45fc53ba, + 0xe7caae1c, 0x606c655f, 0x33f63edb, 0xb450f598, 0x94c289d3, 0x13644290, + 0x40fe1914, 0xc758d257, 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, + 0x72d2c64d, 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22, + 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069, 0xd0094b2a, + 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b, 0x65835f30, 0xe2259473, + 0xb1bfcff7, 0x361904b4, 0xc9699ce6, 0x4ecf57a5, 0x1d550c21, 0x9af3c762, + 0xba61bb29, 0x3dc7706a, 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, + 0xfb4543bf, 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33, + 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254, 0x2a96e917, + 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146, 0xec14dac2, 0x6bb21181, + 0x4b206dca, 0xcc86a689, 0x9f1cfd0d, 0x18ba364e}}; local const z_word_t FAR crc_braid_big_table[][256] = { - {0x00000000, 0x43cba687, 0xc7903cd4, 0x845b9a53, 0xcf270873, - 0x8cecaef4, 0x08b734a7, 0x4b7c9220, 0x9e4f10e6, 0xdd84b661, - 0x59df2c32, 0x1a148ab5, 0x51681895, 0x12a3be12, 0x96f82441, - 0xd53382c6, 0x7d995117, 0x3e52f790, 0xba096dc3, 0xf9c2cb44, - 0xb2be5964, 0xf175ffe3, 0x752e65b0, 0x36e5c337, 0xe3d641f1, - 0xa01de776, 0x24467d25, 0x678ddba2, 0x2cf14982, 0x6f3aef05, - 0xeb617556, 0xa8aad3d1, 0xfa32a32e, 0xb9f905a9, 0x3da29ffa, - 0x7e69397d, 0x3515ab5d, 0x76de0dda, 0xf2859789, 0xb14e310e, - 0x647db3c8, 0x27b6154f, 0xa3ed8f1c, 0xe026299b, 0xab5abbbb, - 0xe8911d3c, 0x6cca876f, 0x2f0121e8, 0x87abf239, 0xc46054be, - 0x403bceed, 0x03f0686a, 0x488cfa4a, 0x0b475ccd, 0x8f1cc69e, - 0xccd76019, 0x19e4e2df, 0x5a2f4458, 0xde74de0b, 0x9dbf788c, - 0xd6c3eaac, 0x95084c2b, 0x1153d678, 0x529870ff, 0xf465465d, - 0xb7aee0da, 0x33f57a89, 0x703edc0e, 0x3b424e2e, 0x7889e8a9, - 0xfcd272fa, 0xbf19d47d, 0x6a2a56bb, 0x29e1f03c, 0xadba6a6f, - 0xee71cce8, 0xa50d5ec8, 0xe6c6f84f, 0x629d621c, 0x2156c49b, - 0x89fc174a, 0xca37b1cd, 0x4e6c2b9e, 0x0da78d19, 0x46db1f39, - 0x0510b9be, 0x814b23ed, 0xc280856a, 0x17b307ac, 0x5478a12b, - 0xd0233b78, 0x93e89dff, 0xd8940fdf, 0x9b5fa958, 0x1f04330b, - 0x5ccf958c, 0x0e57e573, 0x4d9c43f4, 0xc9c7d9a7, 0x8a0c7f20, - 0xc170ed00, 0x82bb4b87, 0x06e0d1d4, 0x452b7753, 0x9018f595, - 0xd3d35312, 0x5788c941, 0x14436fc6, 0x5f3ffde6, 0x1cf45b61, - 0x98afc132, 0xdb6467b5, 0x73ceb464, 0x300512e3, 0xb45e88b0, - 0xf7952e37, 0xbce9bc17, 0xff221a90, 0x7b7980c3, 0x38b22644, - 0xed81a482, 0xae4a0205, 0x2a119856, 0x69da3ed1, 0x22a6acf1, - 0x616d0a76, 0xe5369025, 0xa6fd36a2, 0xe8cb8cba, 0xab002a3d, - 0x2f5bb06e, 0x6c9016e9, 0x27ec84c9, 0x6427224e, 0xe07cb81d, - 0xa3b71e9a, 0x76849c5c, 0x354f3adb, 0xb114a088, 0xf2df060f, - 0xb9a3942f, 0xfa6832a8, 0x7e33a8fb, 0x3df80e7c, 0x9552ddad, - 0xd6997b2a, 0x52c2e179, 0x110947fe, 0x5a75d5de, 0x19be7359, - 0x9de5e90a, 0xde2e4f8d, 0x0b1dcd4b, 0x48d66bcc, 0xcc8df19f, - 0x8f465718, 0xc43ac538, 0x87f163bf, 0x03aaf9ec, 0x40615f6b, - 0x12f92f94, 0x51328913, 0xd5691340, 0x96a2b5c7, 0xddde27e7, - 0x9e158160, 0x1a4e1b33, 0x5985bdb4, 0x8cb63f72, 0xcf7d99f5, - 0x4b2603a6, 0x08eda521, 0x43913701, 0x005a9186, 0x84010bd5, - 0xc7caad52, 0x6f607e83, 0x2cabd804, 0xa8f04257, 0xeb3be4d0, - 0xa04776f0, 0xe38cd077, 0x67d74a24, 0x241ceca3, 0xf12f6e65, - 0xb2e4c8e2, 0x36bf52b1, 0x7574f436, 0x3e086616, 0x7dc3c091, - 0xf9985ac2, 0xba53fc45, 0x1caecae7, 0x5f656c60, 0xdb3ef633, - 0x98f550b4, 0xd389c294, 0x90426413, 0x1419fe40, 0x57d258c7, - 0x82e1da01, 0xc12a7c86, 0x4571e6d5, 0x06ba4052, 0x4dc6d272, - 0x0e0d74f5, 0x8a56eea6, 0xc99d4821, 0x61379bf0, 0x22fc3d77, - 0xa6a7a724, 0xe56c01a3, 0xae109383, 0xeddb3504, 0x6980af57, - 0x2a4b09d0, 0xff788b16, 0xbcb32d91, 0x38e8b7c2, 0x7b231145, - 0x305f8365, 0x739425e2, 0xf7cfbfb1, 0xb4041936, 0xe69c69c9, - 0xa557cf4e, 0x210c551d, 0x62c7f39a, 0x29bb61ba, 0x6a70c73d, - 0xee2b5d6e, 0xade0fbe9, 0x78d3792f, 0x3b18dfa8, 0xbf4345fb, - 0xfc88e37c, 0xb7f4715c, 0xf43fd7db, 0x70644d88, 0x33afeb0f, - 0x9b0538de, 0xd8ce9e59, 0x5c95040a, 0x1f5ea28d, 0x542230ad, - 0x17e9962a, 0x93b20c79, 0xd079aafe, 0x054a2838, 0x46818ebf, - 0xc2da14ec, 0x8111b26b, 0xca6d204b, 0x89a686cc, 0x0dfd1c9f, - 0x4e36ba18}, - {0x00000000, 0xe1b652ef, 0x836bd405, 0x62dd86ea, 0x06d7a80b, - 0xe761fae4, 0x85bc7c0e, 0x640a2ee1, 0x0cae5117, 0xed1803f8, - 0x8fc58512, 0x6e73d7fd, 0x0a79f91c, 0xebcfabf3, 0x89122d19, - 0x68a47ff6, 0x185ca32e, 0xf9eaf1c1, 0x9b37772b, 0x7a8125c4, - 0x1e8b0b25, 0xff3d59ca, 0x9de0df20, 0x7c568dcf, 0x14f2f239, - 0xf544a0d6, 0x9799263c, 0x762f74d3, 0x12255a32, 0xf39308dd, - 0x914e8e37, 0x70f8dcd8, 0x30b8465d, 0xd10e14b2, 0xb3d39258, - 0x5265c0b7, 0x366fee56, 0xd7d9bcb9, 0xb5043a53, 0x54b268bc, - 0x3c16174a, 0xdda045a5, 0xbf7dc34f, 0x5ecb91a0, 0x3ac1bf41, - 0xdb77edae, 0xb9aa6b44, 0x581c39ab, 0x28e4e573, 0xc952b79c, - 0xab8f3176, 0x4a396399, 0x2e334d78, 0xcf851f97, 0xad58997d, - 0x4ceecb92, 0x244ab464, 0xc5fce68b, 0xa7216061, 0x4697328e, - 0x229d1c6f, 0xc32b4e80, 0xa1f6c86a, 0x40409a85, 0x60708dba, - 0x81c6df55, 0xe31b59bf, 0x02ad0b50, 0x66a725b1, 0x8711775e, - 0xe5ccf1b4, 0x047aa35b, 0x6cdedcad, 0x8d688e42, 0xefb508a8, - 0x0e035a47, 0x6a0974a6, 0x8bbf2649, 0xe962a0a3, 0x08d4f24c, - 0x782c2e94, 0x999a7c7b, 0xfb47fa91, 0x1af1a87e, 0x7efb869f, - 0x9f4dd470, 0xfd90529a, 0x1c260075, 0x74827f83, 0x95342d6c, - 0xf7e9ab86, 0x165ff969, 0x7255d788, 0x93e38567, 0xf13e038d, - 0x10885162, 0x50c8cbe7, 0xb17e9908, 0xd3a31fe2, 0x32154d0d, - 0x561f63ec, 0xb7a93103, 0xd574b7e9, 0x34c2e506, 0x5c669af0, - 0xbdd0c81f, 0xdf0d4ef5, 0x3ebb1c1a, 0x5ab132fb, 0xbb076014, - 0xd9dae6fe, 0x386cb411, 0x489468c9, 0xa9223a26, 0xcbffbccc, - 0x2a49ee23, 0x4e43c0c2, 0xaff5922d, 0xcd2814c7, 0x2c9e4628, - 0x443a39de, 0xa58c6b31, 0xc751eddb, 0x26e7bf34, 0x42ed91d5, - 0xa35bc33a, 0xc18645d0, 0x2030173f, 0x81e66bae, 0x60503941, - 0x028dbfab, 0xe33bed44, 0x8731c3a5, 0x6687914a, 0x045a17a0, - 0xe5ec454f, 0x8d483ab9, 0x6cfe6856, 0x0e23eebc, 0xef95bc53, - 0x8b9f92b2, 0x6a29c05d, 0x08f446b7, 0xe9421458, 0x99bac880, - 0x780c9a6f, 0x1ad11c85, 0xfb674e6a, 0x9f6d608b, 0x7edb3264, - 0x1c06b48e, 0xfdb0e661, 0x95149997, 0x74a2cb78, 0x167f4d92, - 0xf7c91f7d, 0x93c3319c, 0x72756373, 0x10a8e599, 0xf11eb776, - 0xb15e2df3, 0x50e87f1c, 0x3235f9f6, 0xd383ab19, 0xb78985f8, - 0x563fd717, 0x34e251fd, 0xd5540312, 0xbdf07ce4, 0x5c462e0b, - 0x3e9ba8e1, 0xdf2dfa0e, 0xbb27d4ef, 0x5a918600, 0x384c00ea, - 0xd9fa5205, 0xa9028edd, 0x48b4dc32, 0x2a695ad8, 0xcbdf0837, - 0xafd526d6, 0x4e637439, 0x2cbef2d3, 0xcd08a03c, 0xa5acdfca, - 0x441a8d25, 0x26c70bcf, 0xc7715920, 0xa37b77c1, 0x42cd252e, - 0x2010a3c4, 0xc1a6f12b, 0xe196e614, 0x0020b4fb, 0x62fd3211, - 0x834b60fe, 0xe7414e1f, 0x06f71cf0, 0x642a9a1a, 0x859cc8f5, - 0xed38b703, 0x0c8ee5ec, 0x6e536306, 0x8fe531e9, 0xebef1f08, - 0x0a594de7, 0x6884cb0d, 0x893299e2, 0xf9ca453a, 0x187c17d5, - 0x7aa1913f, 0x9b17c3d0, 0xff1ded31, 0x1eabbfde, 0x7c763934, - 0x9dc06bdb, 0xf564142d, 0x14d246c2, 0x760fc028, 0x97b992c7, - 0xf3b3bc26, 0x1205eec9, 0x70d86823, 0x916e3acc, 0xd12ea049, - 0x3098f2a6, 0x5245744c, 0xb3f326a3, 0xd7f90842, 0x364f5aad, - 0x5492dc47, 0xb5248ea8, 0xdd80f15e, 0x3c36a3b1, 0x5eeb255b, - 0xbf5d77b4, 0xdb575955, 0x3ae10bba, 0x583c8d50, 0xb98adfbf, - 0xc9720367, 0x28c45188, 0x4a19d762, 0xabaf858d, 0xcfa5ab6c, - 0x2e13f983, 0x4cce7f69, 0xad782d86, 0xc5dc5270, 0x246a009f, - 0x46b78675, 0xa701d49a, 0xc30bfa7b, 0x22bda894, 0x40602e7e, - 0xa1d67c91}, - {0x00000000, 0x5880e2d7, 0xf106b474, 0xa98656a3, 0xe20d68e9, - 0xba8d8a3e, 0x130bdc9d, 0x4b8b3e4a, 0x851da109, 0xdd9d43de, - 0x741b157d, 0x2c9bf7aa, 0x6710c9e0, 0x3f902b37, 0x96167d94, - 0xce969f43, 0x0a3b4213, 0x52bba0c4, 0xfb3df667, 0xa3bd14b0, - 0xe8362afa, 0xb0b6c82d, 0x19309e8e, 0x41b07c59, 0x8f26e31a, - 0xd7a601cd, 0x7e20576e, 0x26a0b5b9, 0x6d2b8bf3, 0x35ab6924, - 0x9c2d3f87, 0xc4addd50, 0x14768426, 0x4cf666f1, 0xe5703052, - 0xbdf0d285, 0xf67beccf, 0xaefb0e18, 0x077d58bb, 0x5ffdba6c, - 0x916b252f, 0xc9ebc7f8, 0x606d915b, 0x38ed738c, 0x73664dc6, - 0x2be6af11, 0x8260f9b2, 0xdae01b65, 0x1e4dc635, 0x46cd24e2, - 0xef4b7241, 0xb7cb9096, 0xfc40aedc, 0xa4c04c0b, 0x0d461aa8, - 0x55c6f87f, 0x9b50673c, 0xc3d085eb, 0x6a56d348, 0x32d6319f, - 0x795d0fd5, 0x21dded02, 0x885bbba1, 0xd0db5976, 0x28ec084d, - 0x706cea9a, 0xd9eabc39, 0x816a5eee, 0xcae160a4, 0x92618273, - 0x3be7d4d0, 0x63673607, 0xadf1a944, 0xf5714b93, 0x5cf71d30, - 0x0477ffe7, 0x4ffcc1ad, 0x177c237a, 0xbefa75d9, 0xe67a970e, - 0x22d74a5e, 0x7a57a889, 0xd3d1fe2a, 0x8b511cfd, 0xc0da22b7, - 0x985ac060, 0x31dc96c3, 0x695c7414, 0xa7caeb57, 0xff4a0980, - 0x56cc5f23, 0x0e4cbdf4, 0x45c783be, 0x1d476169, 0xb4c137ca, - 0xec41d51d, 0x3c9a8c6b, 0x641a6ebc, 0xcd9c381f, 0x951cdac8, - 0xde97e482, 0x86170655, 0x2f9150f6, 0x7711b221, 0xb9872d62, - 0xe107cfb5, 0x48819916, 0x10017bc1, 0x5b8a458b, 0x030aa75c, - 0xaa8cf1ff, 0xf20c1328, 0x36a1ce78, 0x6e212caf, 0xc7a77a0c, - 0x9f2798db, 0xd4aca691, 0x8c2c4446, 0x25aa12e5, 0x7d2af032, - 0xb3bc6f71, 0xeb3c8da6, 0x42badb05, 0x1a3a39d2, 0x51b10798, - 0x0931e54f, 0xa0b7b3ec, 0xf837513b, 0x50d8119a, 0x0858f34d, - 0xa1dea5ee, 0xf95e4739, 0xb2d57973, 0xea559ba4, 0x43d3cd07, - 0x1b532fd0, 0xd5c5b093, 0x8d455244, 0x24c304e7, 0x7c43e630, - 0x37c8d87a, 0x6f483aad, 0xc6ce6c0e, 0x9e4e8ed9, 0x5ae35389, - 0x0263b15e, 0xabe5e7fd, 0xf365052a, 0xb8ee3b60, 0xe06ed9b7, - 0x49e88f14, 0x11686dc3, 0xdffef280, 0x877e1057, 0x2ef846f4, - 0x7678a423, 0x3df39a69, 0x657378be, 0xccf52e1d, 0x9475ccca, - 0x44ae95bc, 0x1c2e776b, 0xb5a821c8, 0xed28c31f, 0xa6a3fd55, - 0xfe231f82, 0x57a54921, 0x0f25abf6, 0xc1b334b5, 0x9933d662, - 0x30b580c1, 0x68356216, 0x23be5c5c, 0x7b3ebe8b, 0xd2b8e828, - 0x8a380aff, 0x4e95d7af, 0x16153578, 0xbf9363db, 0xe713810c, - 0xac98bf46, 0xf4185d91, 0x5d9e0b32, 0x051ee9e5, 0xcb8876a6, - 0x93089471, 0x3a8ec2d2, 0x620e2005, 0x29851e4f, 0x7105fc98, - 0xd883aa3b, 0x800348ec, 0x783419d7, 0x20b4fb00, 0x8932ada3, - 0xd1b24f74, 0x9a39713e, 0xc2b993e9, 0x6b3fc54a, 0x33bf279d, - 0xfd29b8de, 0xa5a95a09, 0x0c2f0caa, 0x54afee7d, 0x1f24d037, - 0x47a432e0, 0xee226443, 0xb6a28694, 0x720f5bc4, 0x2a8fb913, - 0x8309efb0, 0xdb890d67, 0x9002332d, 0xc882d1fa, 0x61048759, - 0x3984658e, 0xf712facd, 0xaf92181a, 0x06144eb9, 0x5e94ac6e, - 0x151f9224, 0x4d9f70f3, 0xe4192650, 0xbc99c487, 0x6c429df1, - 0x34c27f26, 0x9d442985, 0xc5c4cb52, 0x8e4ff518, 0xd6cf17cf, - 0x7f49416c, 0x27c9a3bb, 0xe95f3cf8, 0xb1dfde2f, 0x1859888c, - 0x40d96a5b, 0x0b525411, 0x53d2b6c6, 0xfa54e065, 0xa2d402b2, - 0x6679dfe2, 0x3ef93d35, 0x977f6b96, 0xcfff8941, 0x8474b70b, - 0xdcf455dc, 0x7572037f, 0x2df2e1a8, 0xe3647eeb, 0xbbe49c3c, - 0x1262ca9f, 0x4ae22848, 0x01691602, 0x59e9f4d5, 0xf06fa276, - 0xa8ef40a1}, - {0x00000000, 0x463b6765, 0x8c76ceca, 0xca4da9af, 0x59ebed4e, - 0x1fd08a2b, 0xd59d2384, 0x93a644e1, 0xb2d6db9d, 0xf4edbcf8, - 0x3ea01557, 0x789b7232, 0xeb3d36d3, 0xad0651b6, 0x674bf819, - 0x21709f7c, 0x25abc6e0, 0x6390a185, 0xa9dd082a, 0xefe66f4f, - 0x7c402bae, 0x3a7b4ccb, 0xf036e564, 0xb60d8201, 0x977d1d7d, - 0xd1467a18, 0x1b0bd3b7, 0x5d30b4d2, 0xce96f033, 0x88ad9756, - 0x42e03ef9, 0x04db599c, 0x0b50fc1a, 0x4d6b9b7f, 0x872632d0, - 0xc11d55b5, 0x52bb1154, 0x14807631, 0xdecddf9e, 0x98f6b8fb, - 0xb9862787, 0xffbd40e2, 0x35f0e94d, 0x73cb8e28, 0xe06dcac9, - 0xa656adac, 0x6c1b0403, 0x2a206366, 0x2efb3afa, 0x68c05d9f, - 0xa28df430, 0xe4b69355, 0x7710d7b4, 0x312bb0d1, 0xfb66197e, - 0xbd5d7e1b, 0x9c2de167, 0xda168602, 0x105b2fad, 0x566048c8, - 0xc5c60c29, 0x83fd6b4c, 0x49b0c2e3, 0x0f8ba586, 0x16a0f835, - 0x509b9f50, 0x9ad636ff, 0xdced519a, 0x4f4b157b, 0x0970721e, - 0xc33ddbb1, 0x8506bcd4, 0xa47623a8, 0xe24d44cd, 0x2800ed62, - 0x6e3b8a07, 0xfd9dcee6, 0xbba6a983, 0x71eb002c, 0x37d06749, - 0x330b3ed5, 0x753059b0, 0xbf7df01f, 0xf946977a, 0x6ae0d39b, - 0x2cdbb4fe, 0xe6961d51, 0xa0ad7a34, 0x81dde548, 0xc7e6822d, - 0x0dab2b82, 0x4b904ce7, 0xd8360806, 0x9e0d6f63, 0x5440c6cc, - 0x127ba1a9, 0x1df0042f, 0x5bcb634a, 0x9186cae5, 0xd7bdad80, - 0x441be961, 0x02208e04, 0xc86d27ab, 0x8e5640ce, 0xaf26dfb2, - 0xe91db8d7, 0x23501178, 0x656b761d, 0xf6cd32fc, 0xb0f65599, - 0x7abbfc36, 0x3c809b53, 0x385bc2cf, 0x7e60a5aa, 0xb42d0c05, - 0xf2166b60, 0x61b02f81, 0x278b48e4, 0xedc6e14b, 0xabfd862e, - 0x8a8d1952, 0xccb67e37, 0x06fbd798, 0x40c0b0fd, 0xd366f41c, - 0x955d9379, 0x5f103ad6, 0x192b5db3, 0x2c40f16b, 0x6a7b960e, - 0xa0363fa1, 0xe60d58c4, 0x75ab1c25, 0x33907b40, 0xf9ddd2ef, - 0xbfe6b58a, 0x9e962af6, 0xd8ad4d93, 0x12e0e43c, 0x54db8359, - 0xc77dc7b8, 0x8146a0dd, 0x4b0b0972, 0x0d306e17, 0x09eb378b, - 0x4fd050ee, 0x859df941, 0xc3a69e24, 0x5000dac5, 0x163bbda0, - 0xdc76140f, 0x9a4d736a, 0xbb3dec16, 0xfd068b73, 0x374b22dc, - 0x717045b9, 0xe2d60158, 0xa4ed663d, 0x6ea0cf92, 0x289ba8f7, - 0x27100d71, 0x612b6a14, 0xab66c3bb, 0xed5da4de, 0x7efbe03f, - 0x38c0875a, 0xf28d2ef5, 0xb4b64990, 0x95c6d6ec, 0xd3fdb189, - 0x19b01826, 0x5f8b7f43, 0xcc2d3ba2, 0x8a165cc7, 0x405bf568, - 0x0660920d, 0x02bbcb91, 0x4480acf4, 0x8ecd055b, 0xc8f6623e, - 0x5b5026df, 0x1d6b41ba, 0xd726e815, 0x911d8f70, 0xb06d100c, - 0xf6567769, 0x3c1bdec6, 0x7a20b9a3, 0xe986fd42, 0xafbd9a27, - 0x65f03388, 0x23cb54ed, 0x3ae0095e, 0x7cdb6e3b, 0xb696c794, - 0xf0ada0f1, 0x630be410, 0x25308375, 0xef7d2ada, 0xa9464dbf, - 0x8836d2c3, 0xce0db5a6, 0x04401c09, 0x427b7b6c, 0xd1dd3f8d, - 0x97e658e8, 0x5dabf147, 0x1b909622, 0x1f4bcfbe, 0x5970a8db, - 0x933d0174, 0xd5066611, 0x46a022f0, 0x009b4595, 0xcad6ec3a, - 0x8ced8b5f, 0xad9d1423, 0xeba67346, 0x21ebdae9, 0x67d0bd8c, - 0xf476f96d, 0xb24d9e08, 0x780037a7, 0x3e3b50c2, 0x31b0f544, - 0x778b9221, 0xbdc63b8e, 0xfbfd5ceb, 0x685b180a, 0x2e607f6f, - 0xe42dd6c0, 0xa216b1a5, 0x83662ed9, 0xc55d49bc, 0x0f10e013, - 0x492b8776, 0xda8dc397, 0x9cb6a4f2, 0x56fb0d5d, 0x10c06a38, - 0x141b33a4, 0x522054c1, 0x986dfd6e, 0xde569a0b, 0x4df0deea, - 0x0bcbb98f, 0xc1861020, 0x87bd7745, 0xa6cde839, 0xe0f68f5c, - 0x2abb26f3, 0x6c804196, 0xff260577, 0xb91d6212, 0x7350cbbd, - 0x356bacd8}}; + {0x00000000, 0x43cba687, 0xc7903cd4, 0x845b9a53, 0xcf270873, 0x8cecaef4, + 0x08b734a7, 0x4b7c9220, 0x9e4f10e6, 0xdd84b661, 0x59df2c32, 0x1a148ab5, + 0x51681895, 0x12a3be12, 0x96f82441, 0xd53382c6, 0x7d995117, 0x3e52f790, + 0xba096dc3, 0xf9c2cb44, 0xb2be5964, 0xf175ffe3, 0x752e65b0, 0x36e5c337, + 0xe3d641f1, 0xa01de776, 0x24467d25, 0x678ddba2, 0x2cf14982, 0x6f3aef05, + 0xeb617556, 0xa8aad3d1, 0xfa32a32e, 0xb9f905a9, 0x3da29ffa, 0x7e69397d, + 0x3515ab5d, 0x76de0dda, 0xf2859789, 0xb14e310e, 0x647db3c8, 0x27b6154f, + 0xa3ed8f1c, 0xe026299b, 0xab5abbbb, 0xe8911d3c, 0x6cca876f, 0x2f0121e8, + 0x87abf239, 0xc46054be, 0x403bceed, 0x03f0686a, 0x488cfa4a, 0x0b475ccd, + 0x8f1cc69e, 0xccd76019, 0x19e4e2df, 0x5a2f4458, 0xde74de0b, 0x9dbf788c, + 0xd6c3eaac, 0x95084c2b, 0x1153d678, 0x529870ff, 0xf465465d, 0xb7aee0da, + 0x33f57a89, 0x703edc0e, 0x3b424e2e, 0x7889e8a9, 0xfcd272fa, 0xbf19d47d, + 0x6a2a56bb, 0x29e1f03c, 0xadba6a6f, 0xee71cce8, 0xa50d5ec8, 0xe6c6f84f, + 0x629d621c, 0x2156c49b, 0x89fc174a, 0xca37b1cd, 0x4e6c2b9e, 0x0da78d19, + 0x46db1f39, 0x0510b9be, 0x814b23ed, 0xc280856a, 0x17b307ac, 0x5478a12b, + 0xd0233b78, 0x93e89dff, 0xd8940fdf, 0x9b5fa958, 0x1f04330b, 0x5ccf958c, + 0x0e57e573, 0x4d9c43f4, 0xc9c7d9a7, 0x8a0c7f20, 0xc170ed00, 0x82bb4b87, + 0x06e0d1d4, 0x452b7753, 0x9018f595, 0xd3d35312, 0x5788c941, 0x14436fc6, + 0x5f3ffde6, 0x1cf45b61, 0x98afc132, 0xdb6467b5, 0x73ceb464, 0x300512e3, + 0xb45e88b0, 0xf7952e37, 0xbce9bc17, 0xff221a90, 0x7b7980c3, 0x38b22644, + 0xed81a482, 0xae4a0205, 0x2a119856, 0x69da3ed1, 0x22a6acf1, 0x616d0a76, + 0xe5369025, 0xa6fd36a2, 0xe8cb8cba, 0xab002a3d, 0x2f5bb06e, 0x6c9016e9, + 0x27ec84c9, 0x6427224e, 0xe07cb81d, 0xa3b71e9a, 0x76849c5c, 0x354f3adb, + 0xb114a088, 0xf2df060f, 0xb9a3942f, 0xfa6832a8, 0x7e33a8fb, 0x3df80e7c, + 0x9552ddad, 0xd6997b2a, 0x52c2e179, 0x110947fe, 0x5a75d5de, 0x19be7359, + 0x9de5e90a, 0xde2e4f8d, 0x0b1dcd4b, 0x48d66bcc, 0xcc8df19f, 0x8f465718, + 0xc43ac538, 0x87f163bf, 0x03aaf9ec, 0x40615f6b, 0x12f92f94, 0x51328913, + 0xd5691340, 0x96a2b5c7, 0xddde27e7, 0x9e158160, 0x1a4e1b33, 0x5985bdb4, + 0x8cb63f72, 0xcf7d99f5, 0x4b2603a6, 0x08eda521, 0x43913701, 0x005a9186, + 0x84010bd5, 0xc7caad52, 0x6f607e83, 0x2cabd804, 0xa8f04257, 0xeb3be4d0, + 0xa04776f0, 0xe38cd077, 0x67d74a24, 0x241ceca3, 0xf12f6e65, 0xb2e4c8e2, + 0x36bf52b1, 0x7574f436, 0x3e086616, 0x7dc3c091, 0xf9985ac2, 0xba53fc45, + 0x1caecae7, 0x5f656c60, 0xdb3ef633, 0x98f550b4, 0xd389c294, 0x90426413, + 0x1419fe40, 0x57d258c7, 0x82e1da01, 0xc12a7c86, 0x4571e6d5, 0x06ba4052, + 0x4dc6d272, 0x0e0d74f5, 0x8a56eea6, 0xc99d4821, 0x61379bf0, 0x22fc3d77, + 0xa6a7a724, 0xe56c01a3, 0xae109383, 0xeddb3504, 0x6980af57, 0x2a4b09d0, + 0xff788b16, 0xbcb32d91, 0x38e8b7c2, 0x7b231145, 0x305f8365, 0x739425e2, + 0xf7cfbfb1, 0xb4041936, 0xe69c69c9, 0xa557cf4e, 0x210c551d, 0x62c7f39a, + 0x29bb61ba, 0x6a70c73d, 0xee2b5d6e, 0xade0fbe9, 0x78d3792f, 0x3b18dfa8, + 0xbf4345fb, 0xfc88e37c, 0xb7f4715c, 0xf43fd7db, 0x70644d88, 0x33afeb0f, + 0x9b0538de, 0xd8ce9e59, 0x5c95040a, 0x1f5ea28d, 0x542230ad, 0x17e9962a, + 0x93b20c79, 0xd079aafe, 0x054a2838, 0x46818ebf, 0xc2da14ec, 0x8111b26b, + 0xca6d204b, 0x89a686cc, 0x0dfd1c9f, 0x4e36ba18}, + {0x00000000, 0xe1b652ef, 0x836bd405, 0x62dd86ea, 0x06d7a80b, 0xe761fae4, + 0x85bc7c0e, 0x640a2ee1, 0x0cae5117, 0xed1803f8, 0x8fc58512, 0x6e73d7fd, + 0x0a79f91c, 0xebcfabf3, 0x89122d19, 0x68a47ff6, 0x185ca32e, 0xf9eaf1c1, + 0x9b37772b, 0x7a8125c4, 0x1e8b0b25, 0xff3d59ca, 0x9de0df20, 0x7c568dcf, + 0x14f2f239, 0xf544a0d6, 0x9799263c, 0x762f74d3, 0x12255a32, 0xf39308dd, + 0x914e8e37, 0x70f8dcd8, 0x30b8465d, 0xd10e14b2, 0xb3d39258, 0x5265c0b7, + 0x366fee56, 0xd7d9bcb9, 0xb5043a53, 0x54b268bc, 0x3c16174a, 0xdda045a5, + 0xbf7dc34f, 0x5ecb91a0, 0x3ac1bf41, 0xdb77edae, 0xb9aa6b44, 0x581c39ab, + 0x28e4e573, 0xc952b79c, 0xab8f3176, 0x4a396399, 0x2e334d78, 0xcf851f97, + 0xad58997d, 0x4ceecb92, 0x244ab464, 0xc5fce68b, 0xa7216061, 0x4697328e, + 0x229d1c6f, 0xc32b4e80, 0xa1f6c86a, 0x40409a85, 0x60708dba, 0x81c6df55, + 0xe31b59bf, 0x02ad0b50, 0x66a725b1, 0x8711775e, 0xe5ccf1b4, 0x047aa35b, + 0x6cdedcad, 0x8d688e42, 0xefb508a8, 0x0e035a47, 0x6a0974a6, 0x8bbf2649, + 0xe962a0a3, 0x08d4f24c, 0x782c2e94, 0x999a7c7b, 0xfb47fa91, 0x1af1a87e, + 0x7efb869f, 0x9f4dd470, 0xfd90529a, 0x1c260075, 0x74827f83, 0x95342d6c, + 0xf7e9ab86, 0x165ff969, 0x7255d788, 0x93e38567, 0xf13e038d, 0x10885162, + 0x50c8cbe7, 0xb17e9908, 0xd3a31fe2, 0x32154d0d, 0x561f63ec, 0xb7a93103, + 0xd574b7e9, 0x34c2e506, 0x5c669af0, 0xbdd0c81f, 0xdf0d4ef5, 0x3ebb1c1a, + 0x5ab132fb, 0xbb076014, 0xd9dae6fe, 0x386cb411, 0x489468c9, 0xa9223a26, + 0xcbffbccc, 0x2a49ee23, 0x4e43c0c2, 0xaff5922d, 0xcd2814c7, 0x2c9e4628, + 0x443a39de, 0xa58c6b31, 0xc751eddb, 0x26e7bf34, 0x42ed91d5, 0xa35bc33a, + 0xc18645d0, 0x2030173f, 0x81e66bae, 0x60503941, 0x028dbfab, 0xe33bed44, + 0x8731c3a5, 0x6687914a, 0x045a17a0, 0xe5ec454f, 0x8d483ab9, 0x6cfe6856, + 0x0e23eebc, 0xef95bc53, 0x8b9f92b2, 0x6a29c05d, 0x08f446b7, 0xe9421458, + 0x99bac880, 0x780c9a6f, 0x1ad11c85, 0xfb674e6a, 0x9f6d608b, 0x7edb3264, + 0x1c06b48e, 0xfdb0e661, 0x95149997, 0x74a2cb78, 0x167f4d92, 0xf7c91f7d, + 0x93c3319c, 0x72756373, 0x10a8e599, 0xf11eb776, 0xb15e2df3, 0x50e87f1c, + 0x3235f9f6, 0xd383ab19, 0xb78985f8, 0x563fd717, 0x34e251fd, 0xd5540312, + 0xbdf07ce4, 0x5c462e0b, 0x3e9ba8e1, 0xdf2dfa0e, 0xbb27d4ef, 0x5a918600, + 0x384c00ea, 0xd9fa5205, 0xa9028edd, 0x48b4dc32, 0x2a695ad8, 0xcbdf0837, + 0xafd526d6, 0x4e637439, 0x2cbef2d3, 0xcd08a03c, 0xa5acdfca, 0x441a8d25, + 0x26c70bcf, 0xc7715920, 0xa37b77c1, 0x42cd252e, 0x2010a3c4, 0xc1a6f12b, + 0xe196e614, 0x0020b4fb, 0x62fd3211, 0x834b60fe, 0xe7414e1f, 0x06f71cf0, + 0x642a9a1a, 0x859cc8f5, 0xed38b703, 0x0c8ee5ec, 0x6e536306, 0x8fe531e9, + 0xebef1f08, 0x0a594de7, 0x6884cb0d, 0x893299e2, 0xf9ca453a, 0x187c17d5, + 0x7aa1913f, 0x9b17c3d0, 0xff1ded31, 0x1eabbfde, 0x7c763934, 0x9dc06bdb, + 0xf564142d, 0x14d246c2, 0x760fc028, 0x97b992c7, 0xf3b3bc26, 0x1205eec9, + 0x70d86823, 0x916e3acc, 0xd12ea049, 0x3098f2a6, 0x5245744c, 0xb3f326a3, + 0xd7f90842, 0x364f5aad, 0x5492dc47, 0xb5248ea8, 0xdd80f15e, 0x3c36a3b1, + 0x5eeb255b, 0xbf5d77b4, 0xdb575955, 0x3ae10bba, 0x583c8d50, 0xb98adfbf, + 0xc9720367, 0x28c45188, 0x4a19d762, 0xabaf858d, 0xcfa5ab6c, 0x2e13f983, + 0x4cce7f69, 0xad782d86, 0xc5dc5270, 0x246a009f, 0x46b78675, 0xa701d49a, + 0xc30bfa7b, 0x22bda894, 0x40602e7e, 0xa1d67c91}, + {0x00000000, 0x5880e2d7, 0xf106b474, 0xa98656a3, 0xe20d68e9, 0xba8d8a3e, + 0x130bdc9d, 0x4b8b3e4a, 0x851da109, 0xdd9d43de, 0x741b157d, 0x2c9bf7aa, + 0x6710c9e0, 0x3f902b37, 0x96167d94, 0xce969f43, 0x0a3b4213, 0x52bba0c4, + 0xfb3df667, 0xa3bd14b0, 0xe8362afa, 0xb0b6c82d, 0x19309e8e, 0x41b07c59, + 0x8f26e31a, 0xd7a601cd, 0x7e20576e, 0x26a0b5b9, 0x6d2b8bf3, 0x35ab6924, + 0x9c2d3f87, 0xc4addd50, 0x14768426, 0x4cf666f1, 0xe5703052, 0xbdf0d285, + 0xf67beccf, 0xaefb0e18, 0x077d58bb, 0x5ffdba6c, 0x916b252f, 0xc9ebc7f8, + 0x606d915b, 0x38ed738c, 0x73664dc6, 0x2be6af11, 0x8260f9b2, 0xdae01b65, + 0x1e4dc635, 0x46cd24e2, 0xef4b7241, 0xb7cb9096, 0xfc40aedc, 0xa4c04c0b, + 0x0d461aa8, 0x55c6f87f, 0x9b50673c, 0xc3d085eb, 0x6a56d348, 0x32d6319f, + 0x795d0fd5, 0x21dded02, 0x885bbba1, 0xd0db5976, 0x28ec084d, 0x706cea9a, + 0xd9eabc39, 0x816a5eee, 0xcae160a4, 0x92618273, 0x3be7d4d0, 0x63673607, + 0xadf1a944, 0xf5714b93, 0x5cf71d30, 0x0477ffe7, 0x4ffcc1ad, 0x177c237a, + 0xbefa75d9, 0xe67a970e, 0x22d74a5e, 0x7a57a889, 0xd3d1fe2a, 0x8b511cfd, + 0xc0da22b7, 0x985ac060, 0x31dc96c3, 0x695c7414, 0xa7caeb57, 0xff4a0980, + 0x56cc5f23, 0x0e4cbdf4, 0x45c783be, 0x1d476169, 0xb4c137ca, 0xec41d51d, + 0x3c9a8c6b, 0x641a6ebc, 0xcd9c381f, 0x951cdac8, 0xde97e482, 0x86170655, + 0x2f9150f6, 0x7711b221, 0xb9872d62, 0xe107cfb5, 0x48819916, 0x10017bc1, + 0x5b8a458b, 0x030aa75c, 0xaa8cf1ff, 0xf20c1328, 0x36a1ce78, 0x6e212caf, + 0xc7a77a0c, 0x9f2798db, 0xd4aca691, 0x8c2c4446, 0x25aa12e5, 0x7d2af032, + 0xb3bc6f71, 0xeb3c8da6, 0x42badb05, 0x1a3a39d2, 0x51b10798, 0x0931e54f, + 0xa0b7b3ec, 0xf837513b, 0x50d8119a, 0x0858f34d, 0xa1dea5ee, 0xf95e4739, + 0xb2d57973, 0xea559ba4, 0x43d3cd07, 0x1b532fd0, 0xd5c5b093, 0x8d455244, + 0x24c304e7, 0x7c43e630, 0x37c8d87a, 0x6f483aad, 0xc6ce6c0e, 0x9e4e8ed9, + 0x5ae35389, 0x0263b15e, 0xabe5e7fd, 0xf365052a, 0xb8ee3b60, 0xe06ed9b7, + 0x49e88f14, 0x11686dc3, 0xdffef280, 0x877e1057, 0x2ef846f4, 0x7678a423, + 0x3df39a69, 0x657378be, 0xccf52e1d, 0x9475ccca, 0x44ae95bc, 0x1c2e776b, + 0xb5a821c8, 0xed28c31f, 0xa6a3fd55, 0xfe231f82, 0x57a54921, 0x0f25abf6, + 0xc1b334b5, 0x9933d662, 0x30b580c1, 0x68356216, 0x23be5c5c, 0x7b3ebe8b, + 0xd2b8e828, 0x8a380aff, 0x4e95d7af, 0x16153578, 0xbf9363db, 0xe713810c, + 0xac98bf46, 0xf4185d91, 0x5d9e0b32, 0x051ee9e5, 0xcb8876a6, 0x93089471, + 0x3a8ec2d2, 0x620e2005, 0x29851e4f, 0x7105fc98, 0xd883aa3b, 0x800348ec, + 0x783419d7, 0x20b4fb00, 0x8932ada3, 0xd1b24f74, 0x9a39713e, 0xc2b993e9, + 0x6b3fc54a, 0x33bf279d, 0xfd29b8de, 0xa5a95a09, 0x0c2f0caa, 0x54afee7d, + 0x1f24d037, 0x47a432e0, 0xee226443, 0xb6a28694, 0x720f5bc4, 0x2a8fb913, + 0x8309efb0, 0xdb890d67, 0x9002332d, 0xc882d1fa, 0x61048759, 0x3984658e, + 0xf712facd, 0xaf92181a, 0x06144eb9, 0x5e94ac6e, 0x151f9224, 0x4d9f70f3, + 0xe4192650, 0xbc99c487, 0x6c429df1, 0x34c27f26, 0x9d442985, 0xc5c4cb52, + 0x8e4ff518, 0xd6cf17cf, 0x7f49416c, 0x27c9a3bb, 0xe95f3cf8, 0xb1dfde2f, + 0x1859888c, 0x40d96a5b, 0x0b525411, 0x53d2b6c6, 0xfa54e065, 0xa2d402b2, + 0x6679dfe2, 0x3ef93d35, 0x977f6b96, 0xcfff8941, 0x8474b70b, 0xdcf455dc, + 0x7572037f, 0x2df2e1a8, 0xe3647eeb, 0xbbe49c3c, 0x1262ca9f, 0x4ae22848, + 0x01691602, 0x59e9f4d5, 0xf06fa276, 0xa8ef40a1}, + {0x00000000, 0x463b6765, 0x8c76ceca, 0xca4da9af, 0x59ebed4e, 0x1fd08a2b, + 0xd59d2384, 0x93a644e1, 0xb2d6db9d, 0xf4edbcf8, 0x3ea01557, 0x789b7232, + 0xeb3d36d3, 0xad0651b6, 0x674bf819, 0x21709f7c, 0x25abc6e0, 0x6390a185, + 0xa9dd082a, 0xefe66f4f, 0x7c402bae, 0x3a7b4ccb, 0xf036e564, 0xb60d8201, + 0x977d1d7d, 0xd1467a18, 0x1b0bd3b7, 0x5d30b4d2, 0xce96f033, 0x88ad9756, + 0x42e03ef9, 0x04db599c, 0x0b50fc1a, 0x4d6b9b7f, 0x872632d0, 0xc11d55b5, + 0x52bb1154, 0x14807631, 0xdecddf9e, 0x98f6b8fb, 0xb9862787, 0xffbd40e2, + 0x35f0e94d, 0x73cb8e28, 0xe06dcac9, 0xa656adac, 0x6c1b0403, 0x2a206366, + 0x2efb3afa, 0x68c05d9f, 0xa28df430, 0xe4b69355, 0x7710d7b4, 0x312bb0d1, + 0xfb66197e, 0xbd5d7e1b, 0x9c2de167, 0xda168602, 0x105b2fad, 0x566048c8, + 0xc5c60c29, 0x83fd6b4c, 0x49b0c2e3, 0x0f8ba586, 0x16a0f835, 0x509b9f50, + 0x9ad636ff, 0xdced519a, 0x4f4b157b, 0x0970721e, 0xc33ddbb1, 0x8506bcd4, + 0xa47623a8, 0xe24d44cd, 0x2800ed62, 0x6e3b8a07, 0xfd9dcee6, 0xbba6a983, + 0x71eb002c, 0x37d06749, 0x330b3ed5, 0x753059b0, 0xbf7df01f, 0xf946977a, + 0x6ae0d39b, 0x2cdbb4fe, 0xe6961d51, 0xa0ad7a34, 0x81dde548, 0xc7e6822d, + 0x0dab2b82, 0x4b904ce7, 0xd8360806, 0x9e0d6f63, 0x5440c6cc, 0x127ba1a9, + 0x1df0042f, 0x5bcb634a, 0x9186cae5, 0xd7bdad80, 0x441be961, 0x02208e04, + 0xc86d27ab, 0x8e5640ce, 0xaf26dfb2, 0xe91db8d7, 0x23501178, 0x656b761d, + 0xf6cd32fc, 0xb0f65599, 0x7abbfc36, 0x3c809b53, 0x385bc2cf, 0x7e60a5aa, + 0xb42d0c05, 0xf2166b60, 0x61b02f81, 0x278b48e4, 0xedc6e14b, 0xabfd862e, + 0x8a8d1952, 0xccb67e37, 0x06fbd798, 0x40c0b0fd, 0xd366f41c, 0x955d9379, + 0x5f103ad6, 0x192b5db3, 0x2c40f16b, 0x6a7b960e, 0xa0363fa1, 0xe60d58c4, + 0x75ab1c25, 0x33907b40, 0xf9ddd2ef, 0xbfe6b58a, 0x9e962af6, 0xd8ad4d93, + 0x12e0e43c, 0x54db8359, 0xc77dc7b8, 0x8146a0dd, 0x4b0b0972, 0x0d306e17, + 0x09eb378b, 0x4fd050ee, 0x859df941, 0xc3a69e24, 0x5000dac5, 0x163bbda0, + 0xdc76140f, 0x9a4d736a, 0xbb3dec16, 0xfd068b73, 0x374b22dc, 0x717045b9, + 0xe2d60158, 0xa4ed663d, 0x6ea0cf92, 0x289ba8f7, 0x27100d71, 0x612b6a14, + 0xab66c3bb, 0xed5da4de, 0x7efbe03f, 0x38c0875a, 0xf28d2ef5, 0xb4b64990, + 0x95c6d6ec, 0xd3fdb189, 0x19b01826, 0x5f8b7f43, 0xcc2d3ba2, 0x8a165cc7, + 0x405bf568, 0x0660920d, 0x02bbcb91, 0x4480acf4, 0x8ecd055b, 0xc8f6623e, + 0x5b5026df, 0x1d6b41ba, 0xd726e815, 0x911d8f70, 0xb06d100c, 0xf6567769, + 0x3c1bdec6, 0x7a20b9a3, 0xe986fd42, 0xafbd9a27, 0x65f03388, 0x23cb54ed, + 0x3ae0095e, 0x7cdb6e3b, 0xb696c794, 0xf0ada0f1, 0x630be410, 0x25308375, + 0xef7d2ada, 0xa9464dbf, 0x8836d2c3, 0xce0db5a6, 0x04401c09, 0x427b7b6c, + 0xd1dd3f8d, 0x97e658e8, 0x5dabf147, 0x1b909622, 0x1f4bcfbe, 0x5970a8db, + 0x933d0174, 0xd5066611, 0x46a022f0, 0x009b4595, 0xcad6ec3a, 0x8ced8b5f, + 0xad9d1423, 0xeba67346, 0x21ebdae9, 0x67d0bd8c, 0xf476f96d, 0xb24d9e08, + 0x780037a7, 0x3e3b50c2, 0x31b0f544, 0x778b9221, 0xbdc63b8e, 0xfbfd5ceb, + 0x685b180a, 0x2e607f6f, 0xe42dd6c0, 0xa216b1a5, 0x83662ed9, 0xc55d49bc, + 0x0f10e013, 0x492b8776, 0xda8dc397, 0x9cb6a4f2, 0x56fb0d5d, 0x10c06a38, + 0x141b33a4, 0x522054c1, 0x986dfd6e, 0xde569a0b, 0x4df0deea, 0x0bcbb98f, + 0xc1861020, 0x87bd7745, 0xa6cde839, 0xe0f68f5c, 0x2abb26f3, 0x6c804196, + 0xff260577, 0xb91d6212, 0x7350cbbd, 0x356bacd8}}; #endif @@ -7901,1534 +7163,1390 @@ local const z_word_t FAR crc_braid_big_table[][256] = { #if W == 8 local const z_crc_t FAR crc_braid_table[][256] = { - {0x00000000, 0x3db1ecdc, 0x7b63d9b8, 0x46d23564, 0xf6c7b370, - 0xcb765fac, 0x8da46ac8, 0xb0158614, 0x36fe60a1, 0x0b4f8c7d, - 0x4d9db919, 0x702c55c5, 0xc039d3d1, 0xfd883f0d, 0xbb5a0a69, - 0x86ebe6b5, 0x6dfcc142, 0x504d2d9e, 0x169f18fa, 0x2b2ef426, - 0x9b3b7232, 0xa68a9eee, 0xe058ab8a, 0xdde94756, 0x5b02a1e3, - 0x66b34d3f, 0x2061785b, 0x1dd09487, 0xadc51293, 0x9074fe4f, - 0xd6a6cb2b, 0xeb1727f7, 0xdbf98284, 0xe6486e58, 0xa09a5b3c, - 0x9d2bb7e0, 0x2d3e31f4, 0x108fdd28, 0x565de84c, 0x6bec0490, - 0xed07e225, 0xd0b60ef9, 0x96643b9d, 0xabd5d741, 0x1bc05155, - 0x2671bd89, 0x60a388ed, 0x5d126431, 0xb60543c6, 0x8bb4af1a, - 0xcd669a7e, 0xf0d776a2, 0x40c2f0b6, 0x7d731c6a, 0x3ba1290e, - 0x0610c5d2, 0x80fb2367, 0xbd4acfbb, 0xfb98fadf, 0xc6291603, - 0x763c9017, 0x4b8d7ccb, 0x0d5f49af, 0x30eea573, 0x6c820349, - 0x5133ef95, 0x17e1daf1, 0x2a50362d, 0x9a45b039, 0xa7f45ce5, - 0xe1266981, 0xdc97855d, 0x5a7c63e8, 0x67cd8f34, 0x211fba50, - 0x1cae568c, 0xacbbd098, 0x910a3c44, 0xd7d80920, 0xea69e5fc, - 0x017ec20b, 0x3ccf2ed7, 0x7a1d1bb3, 0x47acf76f, 0xf7b9717b, - 0xca089da7, 0x8cdaa8c3, 0xb16b441f, 0x3780a2aa, 0x0a314e76, - 0x4ce37b12, 0x715297ce, 0xc14711da, 0xfcf6fd06, 0xba24c862, - 0x879524be, 0xb77b81cd, 0x8aca6d11, 0xcc185875, 0xf1a9b4a9, - 0x41bc32bd, 0x7c0dde61, 0x3adfeb05, 0x076e07d9, 0x8185e16c, - 0xbc340db0, 0xfae638d4, 0xc757d408, 0x7742521c, 0x4af3bec0, - 0x0c218ba4, 0x31906778, 0xda87408f, 0xe736ac53, 0xa1e49937, - 0x9c5575eb, 0x2c40f3ff, 0x11f11f23, 0x57232a47, 0x6a92c69b, - 0xec79202e, 0xd1c8ccf2, 0x971af996, 0xaaab154a, 0x1abe935e, - 0x270f7f82, 0x61dd4ae6, 0x5c6ca63a, 0xd9040692, 0xe4b5ea4e, - 0xa267df2a, 0x9fd633f6, 0x2fc3b5e2, 0x1272593e, 0x54a06c5a, - 0x69118086, 0xeffa6633, 0xd24b8aef, 0x9499bf8b, 0xa9285357, - 0x193dd543, 0x248c399f, 0x625e0cfb, 0x5fefe027, 0xb4f8c7d0, - 0x89492b0c, 0xcf9b1e68, 0xf22af2b4, 0x423f74a0, 0x7f8e987c, - 0x395cad18, 0x04ed41c4, 0x8206a771, 0xbfb74bad, 0xf9657ec9, - 0xc4d49215, 0x74c11401, 0x4970f8dd, 0x0fa2cdb9, 0x32132165, - 0x02fd8416, 0x3f4c68ca, 0x799e5dae, 0x442fb172, 0xf43a3766, - 0xc98bdbba, 0x8f59eede, 0xb2e80202, 0x3403e4b7, 0x09b2086b, - 0x4f603d0f, 0x72d1d1d3, 0xc2c457c7, 0xff75bb1b, 0xb9a78e7f, - 0x841662a3, 0x6f014554, 0x52b0a988, 0x14629cec, 0x29d37030, - 0x99c6f624, 0xa4771af8, 0xe2a52f9c, 0xdf14c340, 0x59ff25f5, - 0x644ec929, 0x229cfc4d, 0x1f2d1091, 0xaf389685, 0x92897a59, - 0xd45b4f3d, 0xe9eaa3e1, 0xb58605db, 0x8837e907, 0xcee5dc63, - 0xf35430bf, 0x4341b6ab, 0x7ef05a77, 0x38226f13, 0x059383cf, - 0x8378657a, 0xbec989a6, 0xf81bbcc2, 0xc5aa501e, 0x75bfd60a, - 0x480e3ad6, 0x0edc0fb2, 0x336de36e, 0xd87ac499, 0xe5cb2845, - 0xa3191d21, 0x9ea8f1fd, 0x2ebd77e9, 0x130c9b35, 0x55deae51, - 0x686f428d, 0xee84a438, 0xd33548e4, 0x95e77d80, 0xa856915c, - 0x18431748, 0x25f2fb94, 0x6320cef0, 0x5e91222c, 0x6e7f875f, - 0x53ce6b83, 0x151c5ee7, 0x28adb23b, 0x98b8342f, 0xa509d8f3, - 0xe3dbed97, 0xde6a014b, 0x5881e7fe, 0x65300b22, 0x23e23e46, - 0x1e53d29a, 0xae46548e, 0x93f7b852, 0xd5258d36, 0xe89461ea, - 0x0383461d, 0x3e32aac1, 0x78e09fa5, 0x45517379, 0xf544f56d, - 0xc8f519b1, 0x8e272cd5, 0xb396c009, 0x357d26bc, 0x08ccca60, - 0x4e1eff04, 0x73af13d8, 0xc3ba95cc, 0xfe0b7910, 0xb8d94c74, - 0x8568a0a8}, - {0x00000000, 0x69790b65, 0xd2f216ca, 0xbb8b1daf, 0x7e952bd5, - 0x17ec20b0, 0xac673d1f, 0xc51e367a, 0xfd2a57aa, 0x94535ccf, - 0x2fd84160, 0x46a14a05, 0x83bf7c7f, 0xeac6771a, 0x514d6ab5, - 0x383461d0, 0x2125a915, 0x485ca270, 0xf3d7bfdf, 0x9aaeb4ba, - 0x5fb082c0, 0x36c989a5, 0x8d42940a, 0xe43b9f6f, 0xdc0ffebf, - 0xb576f5da, 0x0efde875, 0x6784e310, 0xa29ad56a, 0xcbe3de0f, - 0x7068c3a0, 0x1911c8c5, 0x424b522a, 0x2b32594f, 0x90b944e0, - 0xf9c04f85, 0x3cde79ff, 0x55a7729a, 0xee2c6f35, 0x87556450, - 0xbf610580, 0xd6180ee5, 0x6d93134a, 0x04ea182f, 0xc1f42e55, - 0xa88d2530, 0x1306389f, 0x7a7f33fa, 0x636efb3f, 0x0a17f05a, - 0xb19cedf5, 0xd8e5e690, 0x1dfbd0ea, 0x7482db8f, 0xcf09c620, - 0xa670cd45, 0x9e44ac95, 0xf73da7f0, 0x4cb6ba5f, 0x25cfb13a, - 0xe0d18740, 0x89a88c25, 0x3223918a, 0x5b5a9aef, 0x8496a454, - 0xedefaf31, 0x5664b29e, 0x3f1db9fb, 0xfa038f81, 0x937a84e4, - 0x28f1994b, 0x4188922e, 0x79bcf3fe, 0x10c5f89b, 0xab4ee534, - 0xc237ee51, 0x0729d82b, 0x6e50d34e, 0xd5dbcee1, 0xbca2c584, - 0xa5b30d41, 0xccca0624, 0x77411b8b, 0x1e3810ee, 0xdb262694, - 0xb25f2df1, 0x09d4305e, 0x60ad3b3b, 0x58995aeb, 0x31e0518e, - 0x8a6b4c21, 0xe3124744, 0x260c713e, 0x4f757a5b, 0xf4fe67f4, - 0x9d876c91, 0xc6ddf67e, 0xafa4fd1b, 0x142fe0b4, 0x7d56ebd1, - 0xb848ddab, 0xd131d6ce, 0x6abacb61, 0x03c3c004, 0x3bf7a1d4, - 0x528eaab1, 0xe905b71e, 0x807cbc7b, 0x45628a01, 0x2c1b8164, - 0x97909ccb, 0xfee997ae, 0xe7f85f6b, 0x8e81540e, 0x350a49a1, - 0x5c7342c4, 0x996d74be, 0xf0147fdb, 0x4b9f6274, 0x22e66911, - 0x1ad208c1, 0x73ab03a4, 0xc8201e0b, 0xa159156e, 0x64472314, - 0x0d3e2871, 0xb6b535de, 0xdfcc3ebb, 0xd25c4ee9, 0xbb25458c, - 0x00ae5823, 0x69d75346, 0xacc9653c, 0xc5b06e59, 0x7e3b73f6, - 0x17427893, 0x2f761943, 0x460f1226, 0xfd840f89, 0x94fd04ec, - 0x51e33296, 0x389a39f3, 0x8311245c, 0xea682f39, 0xf379e7fc, - 0x9a00ec99, 0x218bf136, 0x48f2fa53, 0x8deccc29, 0xe495c74c, - 0x5f1edae3, 0x3667d186, 0x0e53b056, 0x672abb33, 0xdca1a69c, - 0xb5d8adf9, 0x70c69b83, 0x19bf90e6, 0xa2348d49, 0xcb4d862c, - 0x90171cc3, 0xf96e17a6, 0x42e50a09, 0x2b9c016c, 0xee823716, - 0x87fb3c73, 0x3c7021dc, 0x55092ab9, 0x6d3d4b69, 0x0444400c, - 0xbfcf5da3, 0xd6b656c6, 0x13a860bc, 0x7ad16bd9, 0xc15a7676, - 0xa8237d13, 0xb132b5d6, 0xd84bbeb3, 0x63c0a31c, 0x0ab9a879, - 0xcfa79e03, 0xa6de9566, 0x1d5588c9, 0x742c83ac, 0x4c18e27c, - 0x2561e919, 0x9eeaf4b6, 0xf793ffd3, 0x328dc9a9, 0x5bf4c2cc, - 0xe07fdf63, 0x8906d406, 0x56caeabd, 0x3fb3e1d8, 0x8438fc77, - 0xed41f712, 0x285fc168, 0x4126ca0d, 0xfaadd7a2, 0x93d4dcc7, - 0xabe0bd17, 0xc299b672, 0x7912abdd, 0x106ba0b8, 0xd57596c2, - 0xbc0c9da7, 0x07878008, 0x6efe8b6d, 0x77ef43a8, 0x1e9648cd, - 0xa51d5562, 0xcc645e07, 0x097a687d, 0x60036318, 0xdb887eb7, - 0xb2f175d2, 0x8ac51402, 0xe3bc1f67, 0x583702c8, 0x314e09ad, - 0xf4503fd7, 0x9d2934b2, 0x26a2291d, 0x4fdb2278, 0x1481b897, - 0x7df8b3f2, 0xc673ae5d, 0xaf0aa538, 0x6a149342, 0x036d9827, - 0xb8e68588, 0xd19f8eed, 0xe9abef3d, 0x80d2e458, 0x3b59f9f7, - 0x5220f292, 0x973ec4e8, 0xfe47cf8d, 0x45ccd222, 0x2cb5d947, - 0x35a41182, 0x5cdd1ae7, 0xe7560748, 0x8e2f0c2d, 0x4b313a57, - 0x22483132, 0x99c32c9d, 0xf0ba27f8, 0xc88e4628, 0xa1f74d4d, - 0x1a7c50e2, 0x73055b87, 0xb61b6dfd, 0xdf626698, 0x64e97b37, - 0x0d907052}, - {0x00000000, 0x7fc99b93, 0xff933726, 0x805aacb5, 0x2457680d, - 0x5b9ef39e, 0xdbc45f2b, 0xa40dc4b8, 0x48aed01a, 0x37674b89, - 0xb73de73c, 0xc8f47caf, 0x6cf9b817, 0x13302384, 0x936a8f31, - 0xeca314a2, 0x915da034, 0xee943ba7, 0x6ece9712, 0x11070c81, - 0xb50ac839, 0xcac353aa, 0x4a99ff1f, 0x3550648c, 0xd9f3702e, - 0xa63aebbd, 0x26604708, 0x59a9dc9b, 0xfda41823, 0x826d83b0, - 0x02372f05, 0x7dfeb496, 0xf9ca4629, 0x8603ddba, 0x0659710f, - 0x7990ea9c, 0xdd9d2e24, 0xa254b5b7, 0x220e1902, 0x5dc78291, - 0xb1649633, 0xcead0da0, 0x4ef7a115, 0x313e3a86, 0x9533fe3e, - 0xeafa65ad, 0x6aa0c918, 0x1569528b, 0x6897e61d, 0x175e7d8e, - 0x9704d13b, 0xe8cd4aa8, 0x4cc08e10, 0x33091583, 0xb353b936, - 0xcc9a22a5, 0x20393607, 0x5ff0ad94, 0xdfaa0121, 0xa0639ab2, - 0x046e5e0a, 0x7ba7c599, 0xfbfd692c, 0x8434f2bf, 0x28e58a13, - 0x572c1180, 0xd776bd35, 0xa8bf26a6, 0x0cb2e21e, 0x737b798d, - 0xf321d538, 0x8ce84eab, 0x604b5a09, 0x1f82c19a, 0x9fd86d2f, - 0xe011f6bc, 0x441c3204, 0x3bd5a997, 0xbb8f0522, 0xc4469eb1, - 0xb9b82a27, 0xc671b1b4, 0x462b1d01, 0x39e28692, 0x9def422a, - 0xe226d9b9, 0x627c750c, 0x1db5ee9f, 0xf116fa3d, 0x8edf61ae, - 0x0e85cd1b, 0x714c5688, 0xd5419230, 0xaa8809a3, 0x2ad2a516, - 0x551b3e85, 0xd12fcc3a, 0xaee657a9, 0x2ebcfb1c, 0x5175608f, - 0xf578a437, 0x8ab13fa4, 0x0aeb9311, 0x75220882, 0x99811c20, - 0xe64887b3, 0x66122b06, 0x19dbb095, 0xbdd6742d, 0xc21fefbe, - 0x4245430b, 0x3d8cd898, 0x40726c0e, 0x3fbbf79d, 0xbfe15b28, - 0xc028c0bb, 0x64250403, 0x1bec9f90, 0x9bb63325, 0xe47fa8b6, - 0x08dcbc14, 0x77152787, 0xf74f8b32, 0x888610a1, 0x2c8bd419, - 0x53424f8a, 0xd318e33f, 0xacd178ac, 0x51cb1426, 0x2e028fb5, - 0xae582300, 0xd191b893, 0x759c7c2b, 0x0a55e7b8, 0x8a0f4b0d, - 0xf5c6d09e, 0x1965c43c, 0x66ac5faf, 0xe6f6f31a, 0x993f6889, - 0x3d32ac31, 0x42fb37a2, 0xc2a19b17, 0xbd680084, 0xc096b412, - 0xbf5f2f81, 0x3f058334, 0x40cc18a7, 0xe4c1dc1f, 0x9b08478c, - 0x1b52eb39, 0x649b70aa, 0x88386408, 0xf7f1ff9b, 0x77ab532e, - 0x0862c8bd, 0xac6f0c05, 0xd3a69796, 0x53fc3b23, 0x2c35a0b0, - 0xa801520f, 0xd7c8c99c, 0x57926529, 0x285bfeba, 0x8c563a02, - 0xf39fa191, 0x73c50d24, 0x0c0c96b7, 0xe0af8215, 0x9f661986, - 0x1f3cb533, 0x60f52ea0, 0xc4f8ea18, 0xbb31718b, 0x3b6bdd3e, - 0x44a246ad, 0x395cf23b, 0x469569a8, 0xc6cfc51d, 0xb9065e8e, - 0x1d0b9a36, 0x62c201a5, 0xe298ad10, 0x9d513683, 0x71f22221, - 0x0e3bb9b2, 0x8e611507, 0xf1a88e94, 0x55a54a2c, 0x2a6cd1bf, - 0xaa367d0a, 0xd5ffe699, 0x792e9e35, 0x06e705a6, 0x86bda913, - 0xf9743280, 0x5d79f638, 0x22b06dab, 0xa2eac11e, 0xdd235a8d, - 0x31804e2f, 0x4e49d5bc, 0xce137909, 0xb1dae29a, 0x15d72622, - 0x6a1ebdb1, 0xea441104, 0x958d8a97, 0xe8733e01, 0x97baa592, - 0x17e00927, 0x682992b4, 0xcc24560c, 0xb3edcd9f, 0x33b7612a, - 0x4c7efab9, 0xa0ddee1b, 0xdf147588, 0x5f4ed93d, 0x208742ae, - 0x848a8616, 0xfb431d85, 0x7b19b130, 0x04d02aa3, 0x80e4d81c, - 0xff2d438f, 0x7f77ef3a, 0x00be74a9, 0xa4b3b011, 0xdb7a2b82, - 0x5b208737, 0x24e91ca4, 0xc84a0806, 0xb7839395, 0x37d93f20, - 0x4810a4b3, 0xec1d600b, 0x93d4fb98, 0x138e572d, 0x6c47ccbe, - 0x11b97828, 0x6e70e3bb, 0xee2a4f0e, 0x91e3d49d, 0x35ee1025, - 0x4a278bb6, 0xca7d2703, 0xb5b4bc90, 0x5917a832, 0x26de33a1, - 0xa6849f14, 0xd94d0487, 0x7d40c03f, 0x02895bac, 0x82d3f719, - 0xfd1a6c8a}, - {0x00000000, 0xa396284c, 0x9c5d56d9, 0x3fcb7e95, 0xe3cbabf3, - 0x405d83bf, 0x7f96fd2a, 0xdc00d566, 0x1ce651a7, 0xbf7079eb, - 0x80bb077e, 0x232d2f32, 0xff2dfa54, 0x5cbbd218, 0x6370ac8d, - 0xc0e684c1, 0x39cca34e, 0x9a5a8b02, 0xa591f597, 0x0607dddb, - 0xda0708bd, 0x799120f1, 0x465a5e64, 0xe5cc7628, 0x252af2e9, - 0x86bcdaa5, 0xb977a430, 0x1ae18c7c, 0xc6e1591a, 0x65777156, - 0x5abc0fc3, 0xf92a278f, 0x7399469c, 0xd00f6ed0, 0xefc41045, - 0x4c523809, 0x9052ed6f, 0x33c4c523, 0x0c0fbbb6, 0xaf9993fa, - 0x6f7f173b, 0xcce93f77, 0xf32241e2, 0x50b469ae, 0x8cb4bcc8, - 0x2f229484, 0x10e9ea11, 0xb37fc25d, 0x4a55e5d2, 0xe9c3cd9e, - 0xd608b30b, 0x759e9b47, 0xa99e4e21, 0x0a08666d, 0x35c318f8, - 0x965530b4, 0x56b3b475, 0xf5259c39, 0xcaeee2ac, 0x6978cae0, - 0xb5781f86, 0x16ee37ca, 0x2925495f, 0x8ab36113, 0xe7328d38, - 0x44a4a574, 0x7b6fdbe1, 0xd8f9f3ad, 0x04f926cb, 0xa76f0e87, - 0x98a47012, 0x3b32585e, 0xfbd4dc9f, 0x5842f4d3, 0x67898a46, - 0xc41fa20a, 0x181f776c, 0xbb895f20, 0x844221b5, 0x27d409f9, - 0xdefe2e76, 0x7d68063a, 0x42a378af, 0xe13550e3, 0x3d358585, - 0x9ea3adc9, 0xa168d35c, 0x02fefb10, 0xc2187fd1, 0x618e579d, - 0x5e452908, 0xfdd30144, 0x21d3d422, 0x8245fc6e, 0xbd8e82fb, - 0x1e18aab7, 0x94abcba4, 0x373de3e8, 0x08f69d7d, 0xab60b531, - 0x77606057, 0xd4f6481b, 0xeb3d368e, 0x48ab1ec2, 0x884d9a03, - 0x2bdbb24f, 0x1410ccda, 0xb786e496, 0x6b8631f0, 0xc81019bc, - 0xf7db6729, 0x544d4f65, 0xad6768ea, 0x0ef140a6, 0x313a3e33, - 0x92ac167f, 0x4eacc319, 0xed3aeb55, 0xd2f195c0, 0x7167bd8c, - 0xb181394d, 0x12171101, 0x2ddc6f94, 0x8e4a47d8, 0x524a92be, - 0xf1dcbaf2, 0xce17c467, 0x6d81ec2b, 0x15141c31, 0xb682347d, - 0x89494ae8, 0x2adf62a4, 0xf6dfb7c2, 0x55499f8e, 0x6a82e11b, - 0xc914c957, 0x09f24d96, 0xaa6465da, 0x95af1b4f, 0x36393303, - 0xea39e665, 0x49afce29, 0x7664b0bc, 0xd5f298f0, 0x2cd8bf7f, - 0x8f4e9733, 0xb085e9a6, 0x1313c1ea, 0xcf13148c, 0x6c853cc0, - 0x534e4255, 0xf0d86a19, 0x303eeed8, 0x93a8c694, 0xac63b801, - 0x0ff5904d, 0xd3f5452b, 0x70636d67, 0x4fa813f2, 0xec3e3bbe, - 0x668d5aad, 0xc51b72e1, 0xfad00c74, 0x59462438, 0x8546f15e, - 0x26d0d912, 0x191ba787, 0xba8d8fcb, 0x7a6b0b0a, 0xd9fd2346, - 0xe6365dd3, 0x45a0759f, 0x99a0a0f9, 0x3a3688b5, 0x05fdf620, - 0xa66bde6c, 0x5f41f9e3, 0xfcd7d1af, 0xc31caf3a, 0x608a8776, - 0xbc8a5210, 0x1f1c7a5c, 0x20d704c9, 0x83412c85, 0x43a7a844, - 0xe0318008, 0xdffafe9d, 0x7c6cd6d1, 0xa06c03b7, 0x03fa2bfb, - 0x3c31556e, 0x9fa77d22, 0xf2269109, 0x51b0b945, 0x6e7bc7d0, - 0xcdedef9c, 0x11ed3afa, 0xb27b12b6, 0x8db06c23, 0x2e26446f, - 0xeec0c0ae, 0x4d56e8e2, 0x729d9677, 0xd10bbe3b, 0x0d0b6b5d, - 0xae9d4311, 0x91563d84, 0x32c015c8, 0xcbea3247, 0x687c1a0b, - 0x57b7649e, 0xf4214cd2, 0x282199b4, 0x8bb7b1f8, 0xb47ccf6d, - 0x17eae721, 0xd70c63e0, 0x749a4bac, 0x4b513539, 0xe8c71d75, - 0x34c7c813, 0x9751e05f, 0xa89a9eca, 0x0b0cb686, 0x81bfd795, - 0x2229ffd9, 0x1de2814c, 0xbe74a900, 0x62747c66, 0xc1e2542a, - 0xfe292abf, 0x5dbf02f3, 0x9d598632, 0x3ecfae7e, 0x0104d0eb, - 0xa292f8a7, 0x7e922dc1, 0xdd04058d, 0xe2cf7b18, 0x41595354, - 0xb87374db, 0x1be55c97, 0x242e2202, 0x87b80a4e, 0x5bb8df28, - 0xf82ef764, 0xc7e589f1, 0x6473a1bd, 0xa495257c, 0x07030d30, - 0x38c873a5, 0x9b5e5be9, 0x475e8e8f, 0xe4c8a6c3, 0xdb03d856, - 0x7895f01a}, - {0x00000000, 0x2a283862, 0x545070c4, 0x7e7848a6, 0xa8a0e188, - 0x8288d9ea, 0xfcf0914c, 0xd6d8a92e, 0x8a30c551, 0xa018fd33, - 0xde60b595, 0xf4488df7, 0x229024d9, 0x08b81cbb, 0x76c0541d, - 0x5ce86c7f, 0xcf108ce3, 0xe538b481, 0x9b40fc27, 0xb168c445, - 0x67b06d6b, 0x4d985509, 0x33e01daf, 0x19c825cd, 0x452049b2, - 0x6f0871d0, 0x11703976, 0x3b580114, 0xed80a83a, 0xc7a89058, - 0xb9d0d8fe, 0x93f8e09c, 0x45501f87, 0x6f7827e5, 0x11006f43, - 0x3b285721, 0xedf0fe0f, 0xc7d8c66d, 0xb9a08ecb, 0x9388b6a9, - 0xcf60dad6, 0xe548e2b4, 0x9b30aa12, 0xb1189270, 0x67c03b5e, - 0x4de8033c, 0x33904b9a, 0x19b873f8, 0x8a409364, 0xa068ab06, - 0xde10e3a0, 0xf438dbc2, 0x22e072ec, 0x08c84a8e, 0x76b00228, - 0x5c983a4a, 0x00705635, 0x2a586e57, 0x542026f1, 0x7e081e93, - 0xa8d0b7bd, 0x82f88fdf, 0xfc80c779, 0xd6a8ff1b, 0x8aa03f0e, - 0xa088076c, 0xdef04fca, 0xf4d877a8, 0x2200de86, 0x0828e6e4, - 0x7650ae42, 0x5c789620, 0x0090fa5f, 0x2ab8c23d, 0x54c08a9b, - 0x7ee8b2f9, 0xa8301bd7, 0x821823b5, 0xfc606b13, 0xd6485371, - 0x45b0b3ed, 0x6f988b8f, 0x11e0c329, 0x3bc8fb4b, 0xed105265, - 0xc7386a07, 0xb94022a1, 0x93681ac3, 0xcf8076bc, 0xe5a84ede, - 0x9bd00678, 0xb1f83e1a, 0x67209734, 0x4d08af56, 0x3370e7f0, - 0x1958df92, 0xcff02089, 0xe5d818eb, 0x9ba0504d, 0xb188682f, - 0x6750c101, 0x4d78f963, 0x3300b1c5, 0x192889a7, 0x45c0e5d8, - 0x6fe8ddba, 0x1190951c, 0x3bb8ad7e, 0xed600450, 0xc7483c32, - 0xb9307494, 0x93184cf6, 0x00e0ac6a, 0x2ac89408, 0x54b0dcae, - 0x7e98e4cc, 0xa8404de2, 0x82687580, 0xfc103d26, 0xd6380544, - 0x8ad0693b, 0xa0f85159, 0xde8019ff, 0xf4a8219d, 0x227088b3, - 0x0858b0d1, 0x7620f877, 0x5c08c015, 0xce31785d, 0xe419403f, - 0x9a610899, 0xb04930fb, 0x669199d5, 0x4cb9a1b7, 0x32c1e911, - 0x18e9d173, 0x4401bd0c, 0x6e29856e, 0x1051cdc8, 0x3a79f5aa, - 0xeca15c84, 0xc68964e6, 0xb8f12c40, 0x92d91422, 0x0121f4be, - 0x2b09ccdc, 0x5571847a, 0x7f59bc18, 0xa9811536, 0x83a92d54, - 0xfdd165f2, 0xd7f95d90, 0x8b1131ef, 0xa139098d, 0xdf41412b, - 0xf5697949, 0x23b1d067, 0x0999e805, 0x77e1a0a3, 0x5dc998c1, - 0x8b6167da, 0xa1495fb8, 0xdf31171e, 0xf5192f7c, 0x23c18652, - 0x09e9be30, 0x7791f696, 0x5db9cef4, 0x0151a28b, 0x2b799ae9, - 0x5501d24f, 0x7f29ea2d, 0xa9f14303, 0x83d97b61, 0xfda133c7, - 0xd7890ba5, 0x4471eb39, 0x6e59d35b, 0x10219bfd, 0x3a09a39f, - 0xecd10ab1, 0xc6f932d3, 0xb8817a75, 0x92a94217, 0xce412e68, - 0xe469160a, 0x9a115eac, 0xb03966ce, 0x66e1cfe0, 0x4cc9f782, - 0x32b1bf24, 0x18998746, 0x44914753, 0x6eb97f31, 0x10c13797, - 0x3ae90ff5, 0xec31a6db, 0xc6199eb9, 0xb861d61f, 0x9249ee7d, - 0xcea18202, 0xe489ba60, 0x9af1f2c6, 0xb0d9caa4, 0x6601638a, - 0x4c295be8, 0x3251134e, 0x18792b2c, 0x8b81cbb0, 0xa1a9f3d2, - 0xdfd1bb74, 0xf5f98316, 0x23212a38, 0x0909125a, 0x77715afc, - 0x5d59629e, 0x01b10ee1, 0x2b993683, 0x55e17e25, 0x7fc94647, - 0xa911ef69, 0x8339d70b, 0xfd419fad, 0xd769a7cf, 0x01c158d4, - 0x2be960b6, 0x55912810, 0x7fb91072, 0xa961b95c, 0x8349813e, - 0xfd31c998, 0xd719f1fa, 0x8bf19d85, 0xa1d9a5e7, 0xdfa1ed41, - 0xf589d523, 0x23517c0d, 0x0979446f, 0x77010cc9, 0x5d2934ab, - 0xced1d437, 0xe4f9ec55, 0x9a81a4f3, 0xb0a99c91, 0x667135bf, - 0x4c590ddd, 0x3221457b, 0x18097d19, 0x44e11166, 0x6ec92904, - 0x10b161a2, 0x3a9959c0, 0xec41f0ee, 0xc669c88c, 0xb811802a, - 0x9239b848}, - {0x00000000, 0x4713f6fb, 0x8e27edf6, 0xc9341b0d, 0xc73eddad, - 0x802d2b56, 0x4919305b, 0x0e0ac6a0, 0x550cbd1b, 0x121f4be0, - 0xdb2b50ed, 0x9c38a616, 0x923260b6, 0xd521964d, 0x1c158d40, - 0x5b067bbb, 0xaa197a36, 0xed0a8ccd, 0x243e97c0, 0x632d613b, - 0x6d27a79b, 0x2a345160, 0xe3004a6d, 0xa413bc96, 0xff15c72d, - 0xb80631d6, 0x71322adb, 0x3621dc20, 0x382b1a80, 0x7f38ec7b, - 0xb60cf776, 0xf11f018d, 0x8f43f22d, 0xc85004d6, 0x01641fdb, - 0x4677e920, 0x487d2f80, 0x0f6ed97b, 0xc65ac276, 0x8149348d, - 0xda4f4f36, 0x9d5cb9cd, 0x5468a2c0, 0x137b543b, 0x1d71929b, - 0x5a626460, 0x93567f6d, 0xd4458996, 0x255a881b, 0x62497ee0, - 0xab7d65ed, 0xec6e9316, 0xe26455b6, 0xa577a34d, 0x6c43b840, - 0x2b504ebb, 0x70563500, 0x3745c3fb, 0xfe71d8f6, 0xb9622e0d, - 0xb768e8ad, 0xf07b1e56, 0x394f055b, 0x7e5cf3a0, 0xc5f6e21b, - 0x82e514e0, 0x4bd10fed, 0x0cc2f916, 0x02c83fb6, 0x45dbc94d, - 0x8cefd240, 0xcbfc24bb, 0x90fa5f00, 0xd7e9a9fb, 0x1eddb2f6, - 0x59ce440d, 0x57c482ad, 0x10d77456, 0xd9e36f5b, 0x9ef099a0, - 0x6fef982d, 0x28fc6ed6, 0xe1c875db, 0xa6db8320, 0xa8d14580, - 0xefc2b37b, 0x26f6a876, 0x61e55e8d, 0x3ae32536, 0x7df0d3cd, - 0xb4c4c8c0, 0xf3d73e3b, 0xfdddf89b, 0xbace0e60, 0x73fa156d, - 0x34e9e396, 0x4ab51036, 0x0da6e6cd, 0xc492fdc0, 0x83810b3b, - 0x8d8bcd9b, 0xca983b60, 0x03ac206d, 0x44bfd696, 0x1fb9ad2d, - 0x58aa5bd6, 0x919e40db, 0xd68db620, 0xd8877080, 0x9f94867b, - 0x56a09d76, 0x11b36b8d, 0xe0ac6a00, 0xa7bf9cfb, 0x6e8b87f6, - 0x2998710d, 0x2792b7ad, 0x60814156, 0xa9b55a5b, 0xeea6aca0, - 0xb5a0d71b, 0xf2b321e0, 0x3b873aed, 0x7c94cc16, 0x729e0ab6, - 0x358dfc4d, 0xfcb9e740, 0xbbaa11bb, 0x509cc277, 0x178f348c, - 0xdebb2f81, 0x99a8d97a, 0x97a21fda, 0xd0b1e921, 0x1985f22c, - 0x5e9604d7, 0x05907f6c, 0x42838997, 0x8bb7929a, 0xcca46461, - 0xc2aea2c1, 0x85bd543a, 0x4c894f37, 0x0b9ab9cc, 0xfa85b841, - 0xbd964eba, 0x74a255b7, 0x33b1a34c, 0x3dbb65ec, 0x7aa89317, - 0xb39c881a, 0xf48f7ee1, 0xaf89055a, 0xe89af3a1, 0x21aee8ac, - 0x66bd1e57, 0x68b7d8f7, 0x2fa42e0c, 0xe6903501, 0xa183c3fa, - 0xdfdf305a, 0x98ccc6a1, 0x51f8ddac, 0x16eb2b57, 0x18e1edf7, - 0x5ff21b0c, 0x96c60001, 0xd1d5f6fa, 0x8ad38d41, 0xcdc07bba, - 0x04f460b7, 0x43e7964c, 0x4ded50ec, 0x0afea617, 0xc3cabd1a, - 0x84d94be1, 0x75c64a6c, 0x32d5bc97, 0xfbe1a79a, 0xbcf25161, - 0xb2f897c1, 0xf5eb613a, 0x3cdf7a37, 0x7bcc8ccc, 0x20caf777, - 0x67d9018c, 0xaeed1a81, 0xe9feec7a, 0xe7f42ada, 0xa0e7dc21, - 0x69d3c72c, 0x2ec031d7, 0x956a206c, 0xd279d697, 0x1b4dcd9a, - 0x5c5e3b61, 0x5254fdc1, 0x15470b3a, 0xdc731037, 0x9b60e6cc, - 0xc0669d77, 0x87756b8c, 0x4e417081, 0x0952867a, 0x075840da, - 0x404bb621, 0x897fad2c, 0xce6c5bd7, 0x3f735a5a, 0x7860aca1, - 0xb154b7ac, 0xf6474157, 0xf84d87f7, 0xbf5e710c, 0x766a6a01, - 0x31799cfa, 0x6a7fe741, 0x2d6c11ba, 0xe4580ab7, 0xa34bfc4c, - 0xad413aec, 0xea52cc17, 0x2366d71a, 0x647521e1, 0x1a29d241, - 0x5d3a24ba, 0x940e3fb7, 0xd31dc94c, 0xdd170fec, 0x9a04f917, - 0x5330e21a, 0x142314e1, 0x4f256f5a, 0x083699a1, 0xc10282ac, - 0x86117457, 0x881bb2f7, 0xcf08440c, 0x063c5f01, 0x412fa9fa, - 0xb030a877, 0xf7235e8c, 0x3e174581, 0x7904b37a, 0x770e75da, - 0x301d8321, 0xf929982c, 0xbe3a6ed7, 0xe53c156c, 0xa22fe397, - 0x6b1bf89a, 0x2c080e61, 0x2202c8c1, 0x65113e3a, 0xac252537, - 0xeb36d3cc}, - {0x00000000, 0xa13984ee, 0x99020f9d, 0x383b8b73, 0xe975197b, - 0x484c9d95, 0x707716e6, 0xd14e9208, 0x099b34b7, 0xa8a2b059, - 0x90993b2a, 0x31a0bfc4, 0xe0ee2dcc, 0x41d7a922, 0x79ec2251, - 0xd8d5a6bf, 0x1336696e, 0xb20fed80, 0x8a3466f3, 0x2b0de21d, - 0xfa437015, 0x5b7af4fb, 0x63417f88, 0xc278fb66, 0x1aad5dd9, - 0xbb94d937, 0x83af5244, 0x2296d6aa, 0xf3d844a2, 0x52e1c04c, - 0x6ada4b3f, 0xcbe3cfd1, 0x266cd2dc, 0x87555632, 0xbf6edd41, - 0x1e5759af, 0xcf19cba7, 0x6e204f49, 0x561bc43a, 0xf72240d4, - 0x2ff7e66b, 0x8ece6285, 0xb6f5e9f6, 0x17cc6d18, 0xc682ff10, - 0x67bb7bfe, 0x5f80f08d, 0xfeb97463, 0x355abbb2, 0x94633f5c, - 0xac58b42f, 0x0d6130c1, 0xdc2fa2c9, 0x7d162627, 0x452dad54, - 0xe41429ba, 0x3cc18f05, 0x9df80beb, 0xa5c38098, 0x04fa0476, - 0xd5b4967e, 0x748d1290, 0x4cb699e3, 0xed8f1d0d, 0x4cd9a5b8, - 0xede02156, 0xd5dbaa25, 0x74e22ecb, 0xa5acbcc3, 0x0495382d, - 0x3caeb35e, 0x9d9737b0, 0x4542910f, 0xe47b15e1, 0xdc409e92, - 0x7d791a7c, 0xac378874, 0x0d0e0c9a, 0x353587e9, 0x940c0307, - 0x5fefccd6, 0xfed64838, 0xc6edc34b, 0x67d447a5, 0xb69ad5ad, - 0x17a35143, 0x2f98da30, 0x8ea15ede, 0x5674f861, 0xf74d7c8f, - 0xcf76f7fc, 0x6e4f7312, 0xbf01e11a, 0x1e3865f4, 0x2603ee87, - 0x873a6a69, 0x6ab57764, 0xcb8cf38a, 0xf3b778f9, 0x528efc17, - 0x83c06e1f, 0x22f9eaf1, 0x1ac26182, 0xbbfbe56c, 0x632e43d3, - 0xc217c73d, 0xfa2c4c4e, 0x5b15c8a0, 0x8a5b5aa8, 0x2b62de46, - 0x13595535, 0xb260d1db, 0x79831e0a, 0xd8ba9ae4, 0xe0811197, - 0x41b89579, 0x90f60771, 0x31cf839f, 0x09f408ec, 0xa8cd8c02, - 0x70182abd, 0xd121ae53, 0xe91a2520, 0x4823a1ce, 0x996d33c6, - 0x3854b728, 0x006f3c5b, 0xa156b8b5, 0x99b34b70, 0x388acf9e, - 0x00b144ed, 0xa188c003, 0x70c6520b, 0xd1ffd6e5, 0xe9c45d96, - 0x48fdd978, 0x90287fc7, 0x3111fb29, 0x092a705a, 0xa813f4b4, - 0x795d66bc, 0xd864e252, 0xe05f6921, 0x4166edcf, 0x8a85221e, - 0x2bbca6f0, 0x13872d83, 0xb2bea96d, 0x63f03b65, 0xc2c9bf8b, - 0xfaf234f8, 0x5bcbb016, 0x831e16a9, 0x22279247, 0x1a1c1934, - 0xbb259dda, 0x6a6b0fd2, 0xcb528b3c, 0xf369004f, 0x525084a1, - 0xbfdf99ac, 0x1ee61d42, 0x26dd9631, 0x87e412df, 0x56aa80d7, - 0xf7930439, 0xcfa88f4a, 0x6e910ba4, 0xb644ad1b, 0x177d29f5, - 0x2f46a286, 0x8e7f2668, 0x5f31b460, 0xfe08308e, 0xc633bbfd, - 0x670a3f13, 0xace9f0c2, 0x0dd0742c, 0x35ebff5f, 0x94d27bb1, - 0x459ce9b9, 0xe4a56d57, 0xdc9ee624, 0x7da762ca, 0xa572c475, - 0x044b409b, 0x3c70cbe8, 0x9d494f06, 0x4c07dd0e, 0xed3e59e0, - 0xd505d293, 0x743c567d, 0xd56aeec8, 0x74536a26, 0x4c68e155, - 0xed5165bb, 0x3c1ff7b3, 0x9d26735d, 0xa51df82e, 0x04247cc0, - 0xdcf1da7f, 0x7dc85e91, 0x45f3d5e2, 0xe4ca510c, 0x3584c304, - 0x94bd47ea, 0xac86cc99, 0x0dbf4877, 0xc65c87a6, 0x67650348, - 0x5f5e883b, 0xfe670cd5, 0x2f299edd, 0x8e101a33, 0xb62b9140, - 0x171215ae, 0xcfc7b311, 0x6efe37ff, 0x56c5bc8c, 0xf7fc3862, - 0x26b2aa6a, 0x878b2e84, 0xbfb0a5f7, 0x1e892119, 0xf3063c14, - 0x523fb8fa, 0x6a043389, 0xcb3db767, 0x1a73256f, 0xbb4aa181, - 0x83712af2, 0x2248ae1c, 0xfa9d08a3, 0x5ba48c4d, 0x639f073e, - 0xc2a683d0, 0x13e811d8, 0xb2d19536, 0x8aea1e45, 0x2bd39aab, - 0xe030557a, 0x4109d194, 0x79325ae7, 0xd80bde09, 0x09454c01, - 0xa87cc8ef, 0x9047439c, 0x317ec772, 0xe9ab61cd, 0x4892e523, - 0x70a96e50, 0xd190eabe, 0x00de78b6, 0xa1e7fc58, 0x99dc772b, - 0x38e5f3c5}, - {0x00000000, 0xe81790a1, 0x0b5e2703, 0xe349b7a2, 0x16bc4e06, - 0xfeabdea7, 0x1de26905, 0xf5f5f9a4, 0x2d789c0c, 0xc56f0cad, - 0x2626bb0f, 0xce312bae, 0x3bc4d20a, 0xd3d342ab, 0x309af509, - 0xd88d65a8, 0x5af13818, 0xb2e6a8b9, 0x51af1f1b, 0xb9b88fba, - 0x4c4d761e, 0xa45ae6bf, 0x4713511d, 0xaf04c1bc, 0x7789a414, - 0x9f9e34b5, 0x7cd78317, 0x94c013b6, 0x6135ea12, 0x89227ab3, - 0x6a6bcd11, 0x827c5db0, 0xb5e27030, 0x5df5e091, 0xbebc5733, - 0x56abc792, 0xa35e3e36, 0x4b49ae97, 0xa8001935, 0x40178994, - 0x989aec3c, 0x708d7c9d, 0x93c4cb3f, 0x7bd35b9e, 0x8e26a23a, - 0x6631329b, 0x85788539, 0x6d6f1598, 0xef134828, 0x0704d889, - 0xe44d6f2b, 0x0c5aff8a, 0xf9af062e, 0x11b8968f, 0xf2f1212d, - 0x1ae6b18c, 0xc26bd424, 0x2a7c4485, 0xc935f327, 0x21226386, - 0xd4d79a22, 0x3cc00a83, 0xdf89bd21, 0x379e2d80, 0xb0b5e621, - 0x58a27680, 0xbbebc122, 0x53fc5183, 0xa609a827, 0x4e1e3886, - 0xad578f24, 0x45401f85, 0x9dcd7a2d, 0x75daea8c, 0x96935d2e, - 0x7e84cd8f, 0x8b71342b, 0x6366a48a, 0x802f1328, 0x68388389, - 0xea44de39, 0x02534e98, 0xe11af93a, 0x090d699b, 0xfcf8903f, - 0x14ef009e, 0xf7a6b73c, 0x1fb1279d, 0xc73c4235, 0x2f2bd294, - 0xcc626536, 0x2475f597, 0xd1800c33, 0x39979c92, 0xdade2b30, - 0x32c9bb91, 0x05579611, 0xed4006b0, 0x0e09b112, 0xe61e21b3, - 0x13ebd817, 0xfbfc48b6, 0x18b5ff14, 0xf0a26fb5, 0x282f0a1d, - 0xc0389abc, 0x23712d1e, 0xcb66bdbf, 0x3e93441b, 0xd684d4ba, - 0x35cd6318, 0xdddaf3b9, 0x5fa6ae09, 0xb7b13ea8, 0x54f8890a, - 0xbcef19ab, 0x491ae00f, 0xa10d70ae, 0x4244c70c, 0xaa5357ad, - 0x72de3205, 0x9ac9a2a4, 0x79801506, 0x919785a7, 0x64627c03, - 0x8c75eca2, 0x6f3c5b00, 0x872bcba1, 0xba1aca03, 0x520d5aa2, - 0xb144ed00, 0x59537da1, 0xaca68405, 0x44b114a4, 0xa7f8a306, - 0x4fef33a7, 0x9762560f, 0x7f75c6ae, 0x9c3c710c, 0x742be1ad, - 0x81de1809, 0x69c988a8, 0x8a803f0a, 0x6297afab, 0xe0ebf21b, - 0x08fc62ba, 0xebb5d518, 0x03a245b9, 0xf657bc1d, 0x1e402cbc, - 0xfd099b1e, 0x151e0bbf, 0xcd936e17, 0x2584feb6, 0xc6cd4914, - 0x2edad9b5, 0xdb2f2011, 0x3338b0b0, 0xd0710712, 0x386697b3, - 0x0ff8ba33, 0xe7ef2a92, 0x04a69d30, 0xecb10d91, 0x1944f435, - 0xf1536494, 0x121ad336, 0xfa0d4397, 0x2280263f, 0xca97b69e, - 0x29de013c, 0xc1c9919d, 0x343c6839, 0xdc2bf898, 0x3f624f3a, - 0xd775df9b, 0x5509822b, 0xbd1e128a, 0x5e57a528, 0xb6403589, - 0x43b5cc2d, 0xaba25c8c, 0x48ebeb2e, 0xa0fc7b8f, 0x78711e27, - 0x90668e86, 0x732f3924, 0x9b38a985, 0x6ecd5021, 0x86dac080, - 0x65937722, 0x8d84e783, 0x0aaf2c22, 0xe2b8bc83, 0x01f10b21, - 0xe9e69b80, 0x1c136224, 0xf404f285, 0x174d4527, 0xff5ad586, - 0x27d7b02e, 0xcfc0208f, 0x2c89972d, 0xc49e078c, 0x316bfe28, - 0xd97c6e89, 0x3a35d92b, 0xd222498a, 0x505e143a, 0xb849849b, - 0x5b003339, 0xb317a398, 0x46e25a3c, 0xaef5ca9d, 0x4dbc7d3f, - 0xa5abed9e, 0x7d268836, 0x95311897, 0x7678af35, 0x9e6f3f94, - 0x6b9ac630, 0x838d5691, 0x60c4e133, 0x88d37192, 0xbf4d5c12, - 0x575accb3, 0xb4137b11, 0x5c04ebb0, 0xa9f11214, 0x41e682b5, - 0xa2af3517, 0x4ab8a5b6, 0x9235c01e, 0x7a2250bf, 0x996be71d, - 0x717c77bc, 0x84898e18, 0x6c9e1eb9, 0x8fd7a91b, 0x67c039ba, - 0xe5bc640a, 0x0dabf4ab, 0xeee24309, 0x06f5d3a8, 0xf3002a0c, - 0x1b17baad, 0xf85e0d0f, 0x10499dae, 0xc8c4f806, 0x20d368a7, - 0xc39adf05, 0x2b8d4fa4, 0xde78b600, 0x366f26a1, 0xd5269103, - 0x3d3101a2}}; + {0x00000000, 0x3db1ecdc, 0x7b63d9b8, 0x46d23564, 0xf6c7b370, 0xcb765fac, + 0x8da46ac8, 0xb0158614, 0x36fe60a1, 0x0b4f8c7d, 0x4d9db919, 0x702c55c5, + 0xc039d3d1, 0xfd883f0d, 0xbb5a0a69, 0x86ebe6b5, 0x6dfcc142, 0x504d2d9e, + 0x169f18fa, 0x2b2ef426, 0x9b3b7232, 0xa68a9eee, 0xe058ab8a, 0xdde94756, + 0x5b02a1e3, 0x66b34d3f, 0x2061785b, 0x1dd09487, 0xadc51293, 0x9074fe4f, + 0xd6a6cb2b, 0xeb1727f7, 0xdbf98284, 0xe6486e58, 0xa09a5b3c, 0x9d2bb7e0, + 0x2d3e31f4, 0x108fdd28, 0x565de84c, 0x6bec0490, 0xed07e225, 0xd0b60ef9, + 0x96643b9d, 0xabd5d741, 0x1bc05155, 0x2671bd89, 0x60a388ed, 0x5d126431, + 0xb60543c6, 0x8bb4af1a, 0xcd669a7e, 0xf0d776a2, 0x40c2f0b6, 0x7d731c6a, + 0x3ba1290e, 0x0610c5d2, 0x80fb2367, 0xbd4acfbb, 0xfb98fadf, 0xc6291603, + 0x763c9017, 0x4b8d7ccb, 0x0d5f49af, 0x30eea573, 0x6c820349, 0x5133ef95, + 0x17e1daf1, 0x2a50362d, 0x9a45b039, 0xa7f45ce5, 0xe1266981, 0xdc97855d, + 0x5a7c63e8, 0x67cd8f34, 0x211fba50, 0x1cae568c, 0xacbbd098, 0x910a3c44, + 0xd7d80920, 0xea69e5fc, 0x017ec20b, 0x3ccf2ed7, 0x7a1d1bb3, 0x47acf76f, + 0xf7b9717b, 0xca089da7, 0x8cdaa8c3, 0xb16b441f, 0x3780a2aa, 0x0a314e76, + 0x4ce37b12, 0x715297ce, 0xc14711da, 0xfcf6fd06, 0xba24c862, 0x879524be, + 0xb77b81cd, 0x8aca6d11, 0xcc185875, 0xf1a9b4a9, 0x41bc32bd, 0x7c0dde61, + 0x3adfeb05, 0x076e07d9, 0x8185e16c, 0xbc340db0, 0xfae638d4, 0xc757d408, + 0x7742521c, 0x4af3bec0, 0x0c218ba4, 0x31906778, 0xda87408f, 0xe736ac53, + 0xa1e49937, 0x9c5575eb, 0x2c40f3ff, 0x11f11f23, 0x57232a47, 0x6a92c69b, + 0xec79202e, 0xd1c8ccf2, 0x971af996, 0xaaab154a, 0x1abe935e, 0x270f7f82, + 0x61dd4ae6, 0x5c6ca63a, 0xd9040692, 0xe4b5ea4e, 0xa267df2a, 0x9fd633f6, + 0x2fc3b5e2, 0x1272593e, 0x54a06c5a, 0x69118086, 0xeffa6633, 0xd24b8aef, + 0x9499bf8b, 0xa9285357, 0x193dd543, 0x248c399f, 0x625e0cfb, 0x5fefe027, + 0xb4f8c7d0, 0x89492b0c, 0xcf9b1e68, 0xf22af2b4, 0x423f74a0, 0x7f8e987c, + 0x395cad18, 0x04ed41c4, 0x8206a771, 0xbfb74bad, 0xf9657ec9, 0xc4d49215, + 0x74c11401, 0x4970f8dd, 0x0fa2cdb9, 0x32132165, 0x02fd8416, 0x3f4c68ca, + 0x799e5dae, 0x442fb172, 0xf43a3766, 0xc98bdbba, 0x8f59eede, 0xb2e80202, + 0x3403e4b7, 0x09b2086b, 0x4f603d0f, 0x72d1d1d3, 0xc2c457c7, 0xff75bb1b, + 0xb9a78e7f, 0x841662a3, 0x6f014554, 0x52b0a988, 0x14629cec, 0x29d37030, + 0x99c6f624, 0xa4771af8, 0xe2a52f9c, 0xdf14c340, 0x59ff25f5, 0x644ec929, + 0x229cfc4d, 0x1f2d1091, 0xaf389685, 0x92897a59, 0xd45b4f3d, 0xe9eaa3e1, + 0xb58605db, 0x8837e907, 0xcee5dc63, 0xf35430bf, 0x4341b6ab, 0x7ef05a77, + 0x38226f13, 0x059383cf, 0x8378657a, 0xbec989a6, 0xf81bbcc2, 0xc5aa501e, + 0x75bfd60a, 0x480e3ad6, 0x0edc0fb2, 0x336de36e, 0xd87ac499, 0xe5cb2845, + 0xa3191d21, 0x9ea8f1fd, 0x2ebd77e9, 0x130c9b35, 0x55deae51, 0x686f428d, + 0xee84a438, 0xd33548e4, 0x95e77d80, 0xa856915c, 0x18431748, 0x25f2fb94, + 0x6320cef0, 0x5e91222c, 0x6e7f875f, 0x53ce6b83, 0x151c5ee7, 0x28adb23b, + 0x98b8342f, 0xa509d8f3, 0xe3dbed97, 0xde6a014b, 0x5881e7fe, 0x65300b22, + 0x23e23e46, 0x1e53d29a, 0xae46548e, 0x93f7b852, 0xd5258d36, 0xe89461ea, + 0x0383461d, 0x3e32aac1, 0x78e09fa5, 0x45517379, 0xf544f56d, 0xc8f519b1, + 0x8e272cd5, 0xb396c009, 0x357d26bc, 0x08ccca60, 0x4e1eff04, 0x73af13d8, + 0xc3ba95cc, 0xfe0b7910, 0xb8d94c74, 0x8568a0a8}, + {0x00000000, 0x69790b65, 0xd2f216ca, 0xbb8b1daf, 0x7e952bd5, 0x17ec20b0, + 0xac673d1f, 0xc51e367a, 0xfd2a57aa, 0x94535ccf, 0x2fd84160, 0x46a14a05, + 0x83bf7c7f, 0xeac6771a, 0x514d6ab5, 0x383461d0, 0x2125a915, 0x485ca270, + 0xf3d7bfdf, 0x9aaeb4ba, 0x5fb082c0, 0x36c989a5, 0x8d42940a, 0xe43b9f6f, + 0xdc0ffebf, 0xb576f5da, 0x0efde875, 0x6784e310, 0xa29ad56a, 0xcbe3de0f, + 0x7068c3a0, 0x1911c8c5, 0x424b522a, 0x2b32594f, 0x90b944e0, 0xf9c04f85, + 0x3cde79ff, 0x55a7729a, 0xee2c6f35, 0x87556450, 0xbf610580, 0xd6180ee5, + 0x6d93134a, 0x04ea182f, 0xc1f42e55, 0xa88d2530, 0x1306389f, 0x7a7f33fa, + 0x636efb3f, 0x0a17f05a, 0xb19cedf5, 0xd8e5e690, 0x1dfbd0ea, 0x7482db8f, + 0xcf09c620, 0xa670cd45, 0x9e44ac95, 0xf73da7f0, 0x4cb6ba5f, 0x25cfb13a, + 0xe0d18740, 0x89a88c25, 0x3223918a, 0x5b5a9aef, 0x8496a454, 0xedefaf31, + 0x5664b29e, 0x3f1db9fb, 0xfa038f81, 0x937a84e4, 0x28f1994b, 0x4188922e, + 0x79bcf3fe, 0x10c5f89b, 0xab4ee534, 0xc237ee51, 0x0729d82b, 0x6e50d34e, + 0xd5dbcee1, 0xbca2c584, 0xa5b30d41, 0xccca0624, 0x77411b8b, 0x1e3810ee, + 0xdb262694, 0xb25f2df1, 0x09d4305e, 0x60ad3b3b, 0x58995aeb, 0x31e0518e, + 0x8a6b4c21, 0xe3124744, 0x260c713e, 0x4f757a5b, 0xf4fe67f4, 0x9d876c91, + 0xc6ddf67e, 0xafa4fd1b, 0x142fe0b4, 0x7d56ebd1, 0xb848ddab, 0xd131d6ce, + 0x6abacb61, 0x03c3c004, 0x3bf7a1d4, 0x528eaab1, 0xe905b71e, 0x807cbc7b, + 0x45628a01, 0x2c1b8164, 0x97909ccb, 0xfee997ae, 0xe7f85f6b, 0x8e81540e, + 0x350a49a1, 0x5c7342c4, 0x996d74be, 0xf0147fdb, 0x4b9f6274, 0x22e66911, + 0x1ad208c1, 0x73ab03a4, 0xc8201e0b, 0xa159156e, 0x64472314, 0x0d3e2871, + 0xb6b535de, 0xdfcc3ebb, 0xd25c4ee9, 0xbb25458c, 0x00ae5823, 0x69d75346, + 0xacc9653c, 0xc5b06e59, 0x7e3b73f6, 0x17427893, 0x2f761943, 0x460f1226, + 0xfd840f89, 0x94fd04ec, 0x51e33296, 0x389a39f3, 0x8311245c, 0xea682f39, + 0xf379e7fc, 0x9a00ec99, 0x218bf136, 0x48f2fa53, 0x8deccc29, 0xe495c74c, + 0x5f1edae3, 0x3667d186, 0x0e53b056, 0x672abb33, 0xdca1a69c, 0xb5d8adf9, + 0x70c69b83, 0x19bf90e6, 0xa2348d49, 0xcb4d862c, 0x90171cc3, 0xf96e17a6, + 0x42e50a09, 0x2b9c016c, 0xee823716, 0x87fb3c73, 0x3c7021dc, 0x55092ab9, + 0x6d3d4b69, 0x0444400c, 0xbfcf5da3, 0xd6b656c6, 0x13a860bc, 0x7ad16bd9, + 0xc15a7676, 0xa8237d13, 0xb132b5d6, 0xd84bbeb3, 0x63c0a31c, 0x0ab9a879, + 0xcfa79e03, 0xa6de9566, 0x1d5588c9, 0x742c83ac, 0x4c18e27c, 0x2561e919, + 0x9eeaf4b6, 0xf793ffd3, 0x328dc9a9, 0x5bf4c2cc, 0xe07fdf63, 0x8906d406, + 0x56caeabd, 0x3fb3e1d8, 0x8438fc77, 0xed41f712, 0x285fc168, 0x4126ca0d, + 0xfaadd7a2, 0x93d4dcc7, 0xabe0bd17, 0xc299b672, 0x7912abdd, 0x106ba0b8, + 0xd57596c2, 0xbc0c9da7, 0x07878008, 0x6efe8b6d, 0x77ef43a8, 0x1e9648cd, + 0xa51d5562, 0xcc645e07, 0x097a687d, 0x60036318, 0xdb887eb7, 0xb2f175d2, + 0x8ac51402, 0xe3bc1f67, 0x583702c8, 0x314e09ad, 0xf4503fd7, 0x9d2934b2, + 0x26a2291d, 0x4fdb2278, 0x1481b897, 0x7df8b3f2, 0xc673ae5d, 0xaf0aa538, + 0x6a149342, 0x036d9827, 0xb8e68588, 0xd19f8eed, 0xe9abef3d, 0x80d2e458, + 0x3b59f9f7, 0x5220f292, 0x973ec4e8, 0xfe47cf8d, 0x45ccd222, 0x2cb5d947, + 0x35a41182, 0x5cdd1ae7, 0xe7560748, 0x8e2f0c2d, 0x4b313a57, 0x22483132, + 0x99c32c9d, 0xf0ba27f8, 0xc88e4628, 0xa1f74d4d, 0x1a7c50e2, 0x73055b87, + 0xb61b6dfd, 0xdf626698, 0x64e97b37, 0x0d907052}, + {0x00000000, 0x7fc99b93, 0xff933726, 0x805aacb5, 0x2457680d, 0x5b9ef39e, + 0xdbc45f2b, 0xa40dc4b8, 0x48aed01a, 0x37674b89, 0xb73de73c, 0xc8f47caf, + 0x6cf9b817, 0x13302384, 0x936a8f31, 0xeca314a2, 0x915da034, 0xee943ba7, + 0x6ece9712, 0x11070c81, 0xb50ac839, 0xcac353aa, 0x4a99ff1f, 0x3550648c, + 0xd9f3702e, 0xa63aebbd, 0x26604708, 0x59a9dc9b, 0xfda41823, 0x826d83b0, + 0x02372f05, 0x7dfeb496, 0xf9ca4629, 0x8603ddba, 0x0659710f, 0x7990ea9c, + 0xdd9d2e24, 0xa254b5b7, 0x220e1902, 0x5dc78291, 0xb1649633, 0xcead0da0, + 0x4ef7a115, 0x313e3a86, 0x9533fe3e, 0xeafa65ad, 0x6aa0c918, 0x1569528b, + 0x6897e61d, 0x175e7d8e, 0x9704d13b, 0xe8cd4aa8, 0x4cc08e10, 0x33091583, + 0xb353b936, 0xcc9a22a5, 0x20393607, 0x5ff0ad94, 0xdfaa0121, 0xa0639ab2, + 0x046e5e0a, 0x7ba7c599, 0xfbfd692c, 0x8434f2bf, 0x28e58a13, 0x572c1180, + 0xd776bd35, 0xa8bf26a6, 0x0cb2e21e, 0x737b798d, 0xf321d538, 0x8ce84eab, + 0x604b5a09, 0x1f82c19a, 0x9fd86d2f, 0xe011f6bc, 0x441c3204, 0x3bd5a997, + 0xbb8f0522, 0xc4469eb1, 0xb9b82a27, 0xc671b1b4, 0x462b1d01, 0x39e28692, + 0x9def422a, 0xe226d9b9, 0x627c750c, 0x1db5ee9f, 0xf116fa3d, 0x8edf61ae, + 0x0e85cd1b, 0x714c5688, 0xd5419230, 0xaa8809a3, 0x2ad2a516, 0x551b3e85, + 0xd12fcc3a, 0xaee657a9, 0x2ebcfb1c, 0x5175608f, 0xf578a437, 0x8ab13fa4, + 0x0aeb9311, 0x75220882, 0x99811c20, 0xe64887b3, 0x66122b06, 0x19dbb095, + 0xbdd6742d, 0xc21fefbe, 0x4245430b, 0x3d8cd898, 0x40726c0e, 0x3fbbf79d, + 0xbfe15b28, 0xc028c0bb, 0x64250403, 0x1bec9f90, 0x9bb63325, 0xe47fa8b6, + 0x08dcbc14, 0x77152787, 0xf74f8b32, 0x888610a1, 0x2c8bd419, 0x53424f8a, + 0xd318e33f, 0xacd178ac, 0x51cb1426, 0x2e028fb5, 0xae582300, 0xd191b893, + 0x759c7c2b, 0x0a55e7b8, 0x8a0f4b0d, 0xf5c6d09e, 0x1965c43c, 0x66ac5faf, + 0xe6f6f31a, 0x993f6889, 0x3d32ac31, 0x42fb37a2, 0xc2a19b17, 0xbd680084, + 0xc096b412, 0xbf5f2f81, 0x3f058334, 0x40cc18a7, 0xe4c1dc1f, 0x9b08478c, + 0x1b52eb39, 0x649b70aa, 0x88386408, 0xf7f1ff9b, 0x77ab532e, 0x0862c8bd, + 0xac6f0c05, 0xd3a69796, 0x53fc3b23, 0x2c35a0b0, 0xa801520f, 0xd7c8c99c, + 0x57926529, 0x285bfeba, 0x8c563a02, 0xf39fa191, 0x73c50d24, 0x0c0c96b7, + 0xe0af8215, 0x9f661986, 0x1f3cb533, 0x60f52ea0, 0xc4f8ea18, 0xbb31718b, + 0x3b6bdd3e, 0x44a246ad, 0x395cf23b, 0x469569a8, 0xc6cfc51d, 0xb9065e8e, + 0x1d0b9a36, 0x62c201a5, 0xe298ad10, 0x9d513683, 0x71f22221, 0x0e3bb9b2, + 0x8e611507, 0xf1a88e94, 0x55a54a2c, 0x2a6cd1bf, 0xaa367d0a, 0xd5ffe699, + 0x792e9e35, 0x06e705a6, 0x86bda913, 0xf9743280, 0x5d79f638, 0x22b06dab, + 0xa2eac11e, 0xdd235a8d, 0x31804e2f, 0x4e49d5bc, 0xce137909, 0xb1dae29a, + 0x15d72622, 0x6a1ebdb1, 0xea441104, 0x958d8a97, 0xe8733e01, 0x97baa592, + 0x17e00927, 0x682992b4, 0xcc24560c, 0xb3edcd9f, 0x33b7612a, 0x4c7efab9, + 0xa0ddee1b, 0xdf147588, 0x5f4ed93d, 0x208742ae, 0x848a8616, 0xfb431d85, + 0x7b19b130, 0x04d02aa3, 0x80e4d81c, 0xff2d438f, 0x7f77ef3a, 0x00be74a9, + 0xa4b3b011, 0xdb7a2b82, 0x5b208737, 0x24e91ca4, 0xc84a0806, 0xb7839395, + 0x37d93f20, 0x4810a4b3, 0xec1d600b, 0x93d4fb98, 0x138e572d, 0x6c47ccbe, + 0x11b97828, 0x6e70e3bb, 0xee2a4f0e, 0x91e3d49d, 0x35ee1025, 0x4a278bb6, + 0xca7d2703, 0xb5b4bc90, 0x5917a832, 0x26de33a1, 0xa6849f14, 0xd94d0487, + 0x7d40c03f, 0x02895bac, 0x82d3f719, 0xfd1a6c8a}, + {0x00000000, 0xa396284c, 0x9c5d56d9, 0x3fcb7e95, 0xe3cbabf3, 0x405d83bf, + 0x7f96fd2a, 0xdc00d566, 0x1ce651a7, 0xbf7079eb, 0x80bb077e, 0x232d2f32, + 0xff2dfa54, 0x5cbbd218, 0x6370ac8d, 0xc0e684c1, 0x39cca34e, 0x9a5a8b02, + 0xa591f597, 0x0607dddb, 0xda0708bd, 0x799120f1, 0x465a5e64, 0xe5cc7628, + 0x252af2e9, 0x86bcdaa5, 0xb977a430, 0x1ae18c7c, 0xc6e1591a, 0x65777156, + 0x5abc0fc3, 0xf92a278f, 0x7399469c, 0xd00f6ed0, 0xefc41045, 0x4c523809, + 0x9052ed6f, 0x33c4c523, 0x0c0fbbb6, 0xaf9993fa, 0x6f7f173b, 0xcce93f77, + 0xf32241e2, 0x50b469ae, 0x8cb4bcc8, 0x2f229484, 0x10e9ea11, 0xb37fc25d, + 0x4a55e5d2, 0xe9c3cd9e, 0xd608b30b, 0x759e9b47, 0xa99e4e21, 0x0a08666d, + 0x35c318f8, 0x965530b4, 0x56b3b475, 0xf5259c39, 0xcaeee2ac, 0x6978cae0, + 0xb5781f86, 0x16ee37ca, 0x2925495f, 0x8ab36113, 0xe7328d38, 0x44a4a574, + 0x7b6fdbe1, 0xd8f9f3ad, 0x04f926cb, 0xa76f0e87, 0x98a47012, 0x3b32585e, + 0xfbd4dc9f, 0x5842f4d3, 0x67898a46, 0xc41fa20a, 0x181f776c, 0xbb895f20, + 0x844221b5, 0x27d409f9, 0xdefe2e76, 0x7d68063a, 0x42a378af, 0xe13550e3, + 0x3d358585, 0x9ea3adc9, 0xa168d35c, 0x02fefb10, 0xc2187fd1, 0x618e579d, + 0x5e452908, 0xfdd30144, 0x21d3d422, 0x8245fc6e, 0xbd8e82fb, 0x1e18aab7, + 0x94abcba4, 0x373de3e8, 0x08f69d7d, 0xab60b531, 0x77606057, 0xd4f6481b, + 0xeb3d368e, 0x48ab1ec2, 0x884d9a03, 0x2bdbb24f, 0x1410ccda, 0xb786e496, + 0x6b8631f0, 0xc81019bc, 0xf7db6729, 0x544d4f65, 0xad6768ea, 0x0ef140a6, + 0x313a3e33, 0x92ac167f, 0x4eacc319, 0xed3aeb55, 0xd2f195c0, 0x7167bd8c, + 0xb181394d, 0x12171101, 0x2ddc6f94, 0x8e4a47d8, 0x524a92be, 0xf1dcbaf2, + 0xce17c467, 0x6d81ec2b, 0x15141c31, 0xb682347d, 0x89494ae8, 0x2adf62a4, + 0xf6dfb7c2, 0x55499f8e, 0x6a82e11b, 0xc914c957, 0x09f24d96, 0xaa6465da, + 0x95af1b4f, 0x36393303, 0xea39e665, 0x49afce29, 0x7664b0bc, 0xd5f298f0, + 0x2cd8bf7f, 0x8f4e9733, 0xb085e9a6, 0x1313c1ea, 0xcf13148c, 0x6c853cc0, + 0x534e4255, 0xf0d86a19, 0x303eeed8, 0x93a8c694, 0xac63b801, 0x0ff5904d, + 0xd3f5452b, 0x70636d67, 0x4fa813f2, 0xec3e3bbe, 0x668d5aad, 0xc51b72e1, + 0xfad00c74, 0x59462438, 0x8546f15e, 0x26d0d912, 0x191ba787, 0xba8d8fcb, + 0x7a6b0b0a, 0xd9fd2346, 0xe6365dd3, 0x45a0759f, 0x99a0a0f9, 0x3a3688b5, + 0x05fdf620, 0xa66bde6c, 0x5f41f9e3, 0xfcd7d1af, 0xc31caf3a, 0x608a8776, + 0xbc8a5210, 0x1f1c7a5c, 0x20d704c9, 0x83412c85, 0x43a7a844, 0xe0318008, + 0xdffafe9d, 0x7c6cd6d1, 0xa06c03b7, 0x03fa2bfb, 0x3c31556e, 0x9fa77d22, + 0xf2269109, 0x51b0b945, 0x6e7bc7d0, 0xcdedef9c, 0x11ed3afa, 0xb27b12b6, + 0x8db06c23, 0x2e26446f, 0xeec0c0ae, 0x4d56e8e2, 0x729d9677, 0xd10bbe3b, + 0x0d0b6b5d, 0xae9d4311, 0x91563d84, 0x32c015c8, 0xcbea3247, 0x687c1a0b, + 0x57b7649e, 0xf4214cd2, 0x282199b4, 0x8bb7b1f8, 0xb47ccf6d, 0x17eae721, + 0xd70c63e0, 0x749a4bac, 0x4b513539, 0xe8c71d75, 0x34c7c813, 0x9751e05f, + 0xa89a9eca, 0x0b0cb686, 0x81bfd795, 0x2229ffd9, 0x1de2814c, 0xbe74a900, + 0x62747c66, 0xc1e2542a, 0xfe292abf, 0x5dbf02f3, 0x9d598632, 0x3ecfae7e, + 0x0104d0eb, 0xa292f8a7, 0x7e922dc1, 0xdd04058d, 0xe2cf7b18, 0x41595354, + 0xb87374db, 0x1be55c97, 0x242e2202, 0x87b80a4e, 0x5bb8df28, 0xf82ef764, + 0xc7e589f1, 0x6473a1bd, 0xa495257c, 0x07030d30, 0x38c873a5, 0x9b5e5be9, + 0x475e8e8f, 0xe4c8a6c3, 0xdb03d856, 0x7895f01a}, + {0x00000000, 0x2a283862, 0x545070c4, 0x7e7848a6, 0xa8a0e188, 0x8288d9ea, + 0xfcf0914c, 0xd6d8a92e, 0x8a30c551, 0xa018fd33, 0xde60b595, 0xf4488df7, + 0x229024d9, 0x08b81cbb, 0x76c0541d, 0x5ce86c7f, 0xcf108ce3, 0xe538b481, + 0x9b40fc27, 0xb168c445, 0x67b06d6b, 0x4d985509, 0x33e01daf, 0x19c825cd, + 0x452049b2, 0x6f0871d0, 0x11703976, 0x3b580114, 0xed80a83a, 0xc7a89058, + 0xb9d0d8fe, 0x93f8e09c, 0x45501f87, 0x6f7827e5, 0x11006f43, 0x3b285721, + 0xedf0fe0f, 0xc7d8c66d, 0xb9a08ecb, 0x9388b6a9, 0xcf60dad6, 0xe548e2b4, + 0x9b30aa12, 0xb1189270, 0x67c03b5e, 0x4de8033c, 0x33904b9a, 0x19b873f8, + 0x8a409364, 0xa068ab06, 0xde10e3a0, 0xf438dbc2, 0x22e072ec, 0x08c84a8e, + 0x76b00228, 0x5c983a4a, 0x00705635, 0x2a586e57, 0x542026f1, 0x7e081e93, + 0xa8d0b7bd, 0x82f88fdf, 0xfc80c779, 0xd6a8ff1b, 0x8aa03f0e, 0xa088076c, + 0xdef04fca, 0xf4d877a8, 0x2200de86, 0x0828e6e4, 0x7650ae42, 0x5c789620, + 0x0090fa5f, 0x2ab8c23d, 0x54c08a9b, 0x7ee8b2f9, 0xa8301bd7, 0x821823b5, + 0xfc606b13, 0xd6485371, 0x45b0b3ed, 0x6f988b8f, 0x11e0c329, 0x3bc8fb4b, + 0xed105265, 0xc7386a07, 0xb94022a1, 0x93681ac3, 0xcf8076bc, 0xe5a84ede, + 0x9bd00678, 0xb1f83e1a, 0x67209734, 0x4d08af56, 0x3370e7f0, 0x1958df92, + 0xcff02089, 0xe5d818eb, 0x9ba0504d, 0xb188682f, 0x6750c101, 0x4d78f963, + 0x3300b1c5, 0x192889a7, 0x45c0e5d8, 0x6fe8ddba, 0x1190951c, 0x3bb8ad7e, + 0xed600450, 0xc7483c32, 0xb9307494, 0x93184cf6, 0x00e0ac6a, 0x2ac89408, + 0x54b0dcae, 0x7e98e4cc, 0xa8404de2, 0x82687580, 0xfc103d26, 0xd6380544, + 0x8ad0693b, 0xa0f85159, 0xde8019ff, 0xf4a8219d, 0x227088b3, 0x0858b0d1, + 0x7620f877, 0x5c08c015, 0xce31785d, 0xe419403f, 0x9a610899, 0xb04930fb, + 0x669199d5, 0x4cb9a1b7, 0x32c1e911, 0x18e9d173, 0x4401bd0c, 0x6e29856e, + 0x1051cdc8, 0x3a79f5aa, 0xeca15c84, 0xc68964e6, 0xb8f12c40, 0x92d91422, + 0x0121f4be, 0x2b09ccdc, 0x5571847a, 0x7f59bc18, 0xa9811536, 0x83a92d54, + 0xfdd165f2, 0xd7f95d90, 0x8b1131ef, 0xa139098d, 0xdf41412b, 0xf5697949, + 0x23b1d067, 0x0999e805, 0x77e1a0a3, 0x5dc998c1, 0x8b6167da, 0xa1495fb8, + 0xdf31171e, 0xf5192f7c, 0x23c18652, 0x09e9be30, 0x7791f696, 0x5db9cef4, + 0x0151a28b, 0x2b799ae9, 0x5501d24f, 0x7f29ea2d, 0xa9f14303, 0x83d97b61, + 0xfda133c7, 0xd7890ba5, 0x4471eb39, 0x6e59d35b, 0x10219bfd, 0x3a09a39f, + 0xecd10ab1, 0xc6f932d3, 0xb8817a75, 0x92a94217, 0xce412e68, 0xe469160a, + 0x9a115eac, 0xb03966ce, 0x66e1cfe0, 0x4cc9f782, 0x32b1bf24, 0x18998746, + 0x44914753, 0x6eb97f31, 0x10c13797, 0x3ae90ff5, 0xec31a6db, 0xc6199eb9, + 0xb861d61f, 0x9249ee7d, 0xcea18202, 0xe489ba60, 0x9af1f2c6, 0xb0d9caa4, + 0x6601638a, 0x4c295be8, 0x3251134e, 0x18792b2c, 0x8b81cbb0, 0xa1a9f3d2, + 0xdfd1bb74, 0xf5f98316, 0x23212a38, 0x0909125a, 0x77715afc, 0x5d59629e, + 0x01b10ee1, 0x2b993683, 0x55e17e25, 0x7fc94647, 0xa911ef69, 0x8339d70b, + 0xfd419fad, 0xd769a7cf, 0x01c158d4, 0x2be960b6, 0x55912810, 0x7fb91072, + 0xa961b95c, 0x8349813e, 0xfd31c998, 0xd719f1fa, 0x8bf19d85, 0xa1d9a5e7, + 0xdfa1ed41, 0xf589d523, 0x23517c0d, 0x0979446f, 0x77010cc9, 0x5d2934ab, + 0xced1d437, 0xe4f9ec55, 0x9a81a4f3, 0xb0a99c91, 0x667135bf, 0x4c590ddd, + 0x3221457b, 0x18097d19, 0x44e11166, 0x6ec92904, 0x10b161a2, 0x3a9959c0, + 0xec41f0ee, 0xc669c88c, 0xb811802a, 0x9239b848}, + {0x00000000, 0x4713f6fb, 0x8e27edf6, 0xc9341b0d, 0xc73eddad, 0x802d2b56, + 0x4919305b, 0x0e0ac6a0, 0x550cbd1b, 0x121f4be0, 0xdb2b50ed, 0x9c38a616, + 0x923260b6, 0xd521964d, 0x1c158d40, 0x5b067bbb, 0xaa197a36, 0xed0a8ccd, + 0x243e97c0, 0x632d613b, 0x6d27a79b, 0x2a345160, 0xe3004a6d, 0xa413bc96, + 0xff15c72d, 0xb80631d6, 0x71322adb, 0x3621dc20, 0x382b1a80, 0x7f38ec7b, + 0xb60cf776, 0xf11f018d, 0x8f43f22d, 0xc85004d6, 0x01641fdb, 0x4677e920, + 0x487d2f80, 0x0f6ed97b, 0xc65ac276, 0x8149348d, 0xda4f4f36, 0x9d5cb9cd, + 0x5468a2c0, 0x137b543b, 0x1d71929b, 0x5a626460, 0x93567f6d, 0xd4458996, + 0x255a881b, 0x62497ee0, 0xab7d65ed, 0xec6e9316, 0xe26455b6, 0xa577a34d, + 0x6c43b840, 0x2b504ebb, 0x70563500, 0x3745c3fb, 0xfe71d8f6, 0xb9622e0d, + 0xb768e8ad, 0xf07b1e56, 0x394f055b, 0x7e5cf3a0, 0xc5f6e21b, 0x82e514e0, + 0x4bd10fed, 0x0cc2f916, 0x02c83fb6, 0x45dbc94d, 0x8cefd240, 0xcbfc24bb, + 0x90fa5f00, 0xd7e9a9fb, 0x1eddb2f6, 0x59ce440d, 0x57c482ad, 0x10d77456, + 0xd9e36f5b, 0x9ef099a0, 0x6fef982d, 0x28fc6ed6, 0xe1c875db, 0xa6db8320, + 0xa8d14580, 0xefc2b37b, 0x26f6a876, 0x61e55e8d, 0x3ae32536, 0x7df0d3cd, + 0xb4c4c8c0, 0xf3d73e3b, 0xfdddf89b, 0xbace0e60, 0x73fa156d, 0x34e9e396, + 0x4ab51036, 0x0da6e6cd, 0xc492fdc0, 0x83810b3b, 0x8d8bcd9b, 0xca983b60, + 0x03ac206d, 0x44bfd696, 0x1fb9ad2d, 0x58aa5bd6, 0x919e40db, 0xd68db620, + 0xd8877080, 0x9f94867b, 0x56a09d76, 0x11b36b8d, 0xe0ac6a00, 0xa7bf9cfb, + 0x6e8b87f6, 0x2998710d, 0x2792b7ad, 0x60814156, 0xa9b55a5b, 0xeea6aca0, + 0xb5a0d71b, 0xf2b321e0, 0x3b873aed, 0x7c94cc16, 0x729e0ab6, 0x358dfc4d, + 0xfcb9e740, 0xbbaa11bb, 0x509cc277, 0x178f348c, 0xdebb2f81, 0x99a8d97a, + 0x97a21fda, 0xd0b1e921, 0x1985f22c, 0x5e9604d7, 0x05907f6c, 0x42838997, + 0x8bb7929a, 0xcca46461, 0xc2aea2c1, 0x85bd543a, 0x4c894f37, 0x0b9ab9cc, + 0xfa85b841, 0xbd964eba, 0x74a255b7, 0x33b1a34c, 0x3dbb65ec, 0x7aa89317, + 0xb39c881a, 0xf48f7ee1, 0xaf89055a, 0xe89af3a1, 0x21aee8ac, 0x66bd1e57, + 0x68b7d8f7, 0x2fa42e0c, 0xe6903501, 0xa183c3fa, 0xdfdf305a, 0x98ccc6a1, + 0x51f8ddac, 0x16eb2b57, 0x18e1edf7, 0x5ff21b0c, 0x96c60001, 0xd1d5f6fa, + 0x8ad38d41, 0xcdc07bba, 0x04f460b7, 0x43e7964c, 0x4ded50ec, 0x0afea617, + 0xc3cabd1a, 0x84d94be1, 0x75c64a6c, 0x32d5bc97, 0xfbe1a79a, 0xbcf25161, + 0xb2f897c1, 0xf5eb613a, 0x3cdf7a37, 0x7bcc8ccc, 0x20caf777, 0x67d9018c, + 0xaeed1a81, 0xe9feec7a, 0xe7f42ada, 0xa0e7dc21, 0x69d3c72c, 0x2ec031d7, + 0x956a206c, 0xd279d697, 0x1b4dcd9a, 0x5c5e3b61, 0x5254fdc1, 0x15470b3a, + 0xdc731037, 0x9b60e6cc, 0xc0669d77, 0x87756b8c, 0x4e417081, 0x0952867a, + 0x075840da, 0x404bb621, 0x897fad2c, 0xce6c5bd7, 0x3f735a5a, 0x7860aca1, + 0xb154b7ac, 0xf6474157, 0xf84d87f7, 0xbf5e710c, 0x766a6a01, 0x31799cfa, + 0x6a7fe741, 0x2d6c11ba, 0xe4580ab7, 0xa34bfc4c, 0xad413aec, 0xea52cc17, + 0x2366d71a, 0x647521e1, 0x1a29d241, 0x5d3a24ba, 0x940e3fb7, 0xd31dc94c, + 0xdd170fec, 0x9a04f917, 0x5330e21a, 0x142314e1, 0x4f256f5a, 0x083699a1, + 0xc10282ac, 0x86117457, 0x881bb2f7, 0xcf08440c, 0x063c5f01, 0x412fa9fa, + 0xb030a877, 0xf7235e8c, 0x3e174581, 0x7904b37a, 0x770e75da, 0x301d8321, + 0xf929982c, 0xbe3a6ed7, 0xe53c156c, 0xa22fe397, 0x6b1bf89a, 0x2c080e61, + 0x2202c8c1, 0x65113e3a, 0xac252537, 0xeb36d3cc}, + {0x00000000, 0xa13984ee, 0x99020f9d, 0x383b8b73, 0xe975197b, 0x484c9d95, + 0x707716e6, 0xd14e9208, 0x099b34b7, 0xa8a2b059, 0x90993b2a, 0x31a0bfc4, + 0xe0ee2dcc, 0x41d7a922, 0x79ec2251, 0xd8d5a6bf, 0x1336696e, 0xb20fed80, + 0x8a3466f3, 0x2b0de21d, 0xfa437015, 0x5b7af4fb, 0x63417f88, 0xc278fb66, + 0x1aad5dd9, 0xbb94d937, 0x83af5244, 0x2296d6aa, 0xf3d844a2, 0x52e1c04c, + 0x6ada4b3f, 0xcbe3cfd1, 0x266cd2dc, 0x87555632, 0xbf6edd41, 0x1e5759af, + 0xcf19cba7, 0x6e204f49, 0x561bc43a, 0xf72240d4, 0x2ff7e66b, 0x8ece6285, + 0xb6f5e9f6, 0x17cc6d18, 0xc682ff10, 0x67bb7bfe, 0x5f80f08d, 0xfeb97463, + 0x355abbb2, 0x94633f5c, 0xac58b42f, 0x0d6130c1, 0xdc2fa2c9, 0x7d162627, + 0x452dad54, 0xe41429ba, 0x3cc18f05, 0x9df80beb, 0xa5c38098, 0x04fa0476, + 0xd5b4967e, 0x748d1290, 0x4cb699e3, 0xed8f1d0d, 0x4cd9a5b8, 0xede02156, + 0xd5dbaa25, 0x74e22ecb, 0xa5acbcc3, 0x0495382d, 0x3caeb35e, 0x9d9737b0, + 0x4542910f, 0xe47b15e1, 0xdc409e92, 0x7d791a7c, 0xac378874, 0x0d0e0c9a, + 0x353587e9, 0x940c0307, 0x5fefccd6, 0xfed64838, 0xc6edc34b, 0x67d447a5, + 0xb69ad5ad, 0x17a35143, 0x2f98da30, 0x8ea15ede, 0x5674f861, 0xf74d7c8f, + 0xcf76f7fc, 0x6e4f7312, 0xbf01e11a, 0x1e3865f4, 0x2603ee87, 0x873a6a69, + 0x6ab57764, 0xcb8cf38a, 0xf3b778f9, 0x528efc17, 0x83c06e1f, 0x22f9eaf1, + 0x1ac26182, 0xbbfbe56c, 0x632e43d3, 0xc217c73d, 0xfa2c4c4e, 0x5b15c8a0, + 0x8a5b5aa8, 0x2b62de46, 0x13595535, 0xb260d1db, 0x79831e0a, 0xd8ba9ae4, + 0xe0811197, 0x41b89579, 0x90f60771, 0x31cf839f, 0x09f408ec, 0xa8cd8c02, + 0x70182abd, 0xd121ae53, 0xe91a2520, 0x4823a1ce, 0x996d33c6, 0x3854b728, + 0x006f3c5b, 0xa156b8b5, 0x99b34b70, 0x388acf9e, 0x00b144ed, 0xa188c003, + 0x70c6520b, 0xd1ffd6e5, 0xe9c45d96, 0x48fdd978, 0x90287fc7, 0x3111fb29, + 0x092a705a, 0xa813f4b4, 0x795d66bc, 0xd864e252, 0xe05f6921, 0x4166edcf, + 0x8a85221e, 0x2bbca6f0, 0x13872d83, 0xb2bea96d, 0x63f03b65, 0xc2c9bf8b, + 0xfaf234f8, 0x5bcbb016, 0x831e16a9, 0x22279247, 0x1a1c1934, 0xbb259dda, + 0x6a6b0fd2, 0xcb528b3c, 0xf369004f, 0x525084a1, 0xbfdf99ac, 0x1ee61d42, + 0x26dd9631, 0x87e412df, 0x56aa80d7, 0xf7930439, 0xcfa88f4a, 0x6e910ba4, + 0xb644ad1b, 0x177d29f5, 0x2f46a286, 0x8e7f2668, 0x5f31b460, 0xfe08308e, + 0xc633bbfd, 0x670a3f13, 0xace9f0c2, 0x0dd0742c, 0x35ebff5f, 0x94d27bb1, + 0x459ce9b9, 0xe4a56d57, 0xdc9ee624, 0x7da762ca, 0xa572c475, 0x044b409b, + 0x3c70cbe8, 0x9d494f06, 0x4c07dd0e, 0xed3e59e0, 0xd505d293, 0x743c567d, + 0xd56aeec8, 0x74536a26, 0x4c68e155, 0xed5165bb, 0x3c1ff7b3, 0x9d26735d, + 0xa51df82e, 0x04247cc0, 0xdcf1da7f, 0x7dc85e91, 0x45f3d5e2, 0xe4ca510c, + 0x3584c304, 0x94bd47ea, 0xac86cc99, 0x0dbf4877, 0xc65c87a6, 0x67650348, + 0x5f5e883b, 0xfe670cd5, 0x2f299edd, 0x8e101a33, 0xb62b9140, 0x171215ae, + 0xcfc7b311, 0x6efe37ff, 0x56c5bc8c, 0xf7fc3862, 0x26b2aa6a, 0x878b2e84, + 0xbfb0a5f7, 0x1e892119, 0xf3063c14, 0x523fb8fa, 0x6a043389, 0xcb3db767, + 0x1a73256f, 0xbb4aa181, 0x83712af2, 0x2248ae1c, 0xfa9d08a3, 0x5ba48c4d, + 0x639f073e, 0xc2a683d0, 0x13e811d8, 0xb2d19536, 0x8aea1e45, 0x2bd39aab, + 0xe030557a, 0x4109d194, 0x79325ae7, 0xd80bde09, 0x09454c01, 0xa87cc8ef, + 0x9047439c, 0x317ec772, 0xe9ab61cd, 0x4892e523, 0x70a96e50, 0xd190eabe, + 0x00de78b6, 0xa1e7fc58, 0x99dc772b, 0x38e5f3c5}, + {0x00000000, 0xe81790a1, 0x0b5e2703, 0xe349b7a2, 0x16bc4e06, 0xfeabdea7, + 0x1de26905, 0xf5f5f9a4, 0x2d789c0c, 0xc56f0cad, 0x2626bb0f, 0xce312bae, + 0x3bc4d20a, 0xd3d342ab, 0x309af509, 0xd88d65a8, 0x5af13818, 0xb2e6a8b9, + 0x51af1f1b, 0xb9b88fba, 0x4c4d761e, 0xa45ae6bf, 0x4713511d, 0xaf04c1bc, + 0x7789a414, 0x9f9e34b5, 0x7cd78317, 0x94c013b6, 0x6135ea12, 0x89227ab3, + 0x6a6bcd11, 0x827c5db0, 0xb5e27030, 0x5df5e091, 0xbebc5733, 0x56abc792, + 0xa35e3e36, 0x4b49ae97, 0xa8001935, 0x40178994, 0x989aec3c, 0x708d7c9d, + 0x93c4cb3f, 0x7bd35b9e, 0x8e26a23a, 0x6631329b, 0x85788539, 0x6d6f1598, + 0xef134828, 0x0704d889, 0xe44d6f2b, 0x0c5aff8a, 0xf9af062e, 0x11b8968f, + 0xf2f1212d, 0x1ae6b18c, 0xc26bd424, 0x2a7c4485, 0xc935f327, 0x21226386, + 0xd4d79a22, 0x3cc00a83, 0xdf89bd21, 0x379e2d80, 0xb0b5e621, 0x58a27680, + 0xbbebc122, 0x53fc5183, 0xa609a827, 0x4e1e3886, 0xad578f24, 0x45401f85, + 0x9dcd7a2d, 0x75daea8c, 0x96935d2e, 0x7e84cd8f, 0x8b71342b, 0x6366a48a, + 0x802f1328, 0x68388389, 0xea44de39, 0x02534e98, 0xe11af93a, 0x090d699b, + 0xfcf8903f, 0x14ef009e, 0xf7a6b73c, 0x1fb1279d, 0xc73c4235, 0x2f2bd294, + 0xcc626536, 0x2475f597, 0xd1800c33, 0x39979c92, 0xdade2b30, 0x32c9bb91, + 0x05579611, 0xed4006b0, 0x0e09b112, 0xe61e21b3, 0x13ebd817, 0xfbfc48b6, + 0x18b5ff14, 0xf0a26fb5, 0x282f0a1d, 0xc0389abc, 0x23712d1e, 0xcb66bdbf, + 0x3e93441b, 0xd684d4ba, 0x35cd6318, 0xdddaf3b9, 0x5fa6ae09, 0xb7b13ea8, + 0x54f8890a, 0xbcef19ab, 0x491ae00f, 0xa10d70ae, 0x4244c70c, 0xaa5357ad, + 0x72de3205, 0x9ac9a2a4, 0x79801506, 0x919785a7, 0x64627c03, 0x8c75eca2, + 0x6f3c5b00, 0x872bcba1, 0xba1aca03, 0x520d5aa2, 0xb144ed00, 0x59537da1, + 0xaca68405, 0x44b114a4, 0xa7f8a306, 0x4fef33a7, 0x9762560f, 0x7f75c6ae, + 0x9c3c710c, 0x742be1ad, 0x81de1809, 0x69c988a8, 0x8a803f0a, 0x6297afab, + 0xe0ebf21b, 0x08fc62ba, 0xebb5d518, 0x03a245b9, 0xf657bc1d, 0x1e402cbc, + 0xfd099b1e, 0x151e0bbf, 0xcd936e17, 0x2584feb6, 0xc6cd4914, 0x2edad9b5, + 0xdb2f2011, 0x3338b0b0, 0xd0710712, 0x386697b3, 0x0ff8ba33, 0xe7ef2a92, + 0x04a69d30, 0xecb10d91, 0x1944f435, 0xf1536494, 0x121ad336, 0xfa0d4397, + 0x2280263f, 0xca97b69e, 0x29de013c, 0xc1c9919d, 0x343c6839, 0xdc2bf898, + 0x3f624f3a, 0xd775df9b, 0x5509822b, 0xbd1e128a, 0x5e57a528, 0xb6403589, + 0x43b5cc2d, 0xaba25c8c, 0x48ebeb2e, 0xa0fc7b8f, 0x78711e27, 0x90668e86, + 0x732f3924, 0x9b38a985, 0x6ecd5021, 0x86dac080, 0x65937722, 0x8d84e783, + 0x0aaf2c22, 0xe2b8bc83, 0x01f10b21, 0xe9e69b80, 0x1c136224, 0xf404f285, + 0x174d4527, 0xff5ad586, 0x27d7b02e, 0xcfc0208f, 0x2c89972d, 0xc49e078c, + 0x316bfe28, 0xd97c6e89, 0x3a35d92b, 0xd222498a, 0x505e143a, 0xb849849b, + 0x5b003339, 0xb317a398, 0x46e25a3c, 0xaef5ca9d, 0x4dbc7d3f, 0xa5abed9e, + 0x7d268836, 0x95311897, 0x7678af35, 0x9e6f3f94, 0x6b9ac630, 0x838d5691, + 0x60c4e133, 0x88d37192, 0xbf4d5c12, 0x575accb3, 0xb4137b11, 0x5c04ebb0, + 0xa9f11214, 0x41e682b5, 0xa2af3517, 0x4ab8a5b6, 0x9235c01e, 0x7a2250bf, + 0x996be71d, 0x717c77bc, 0x84898e18, 0x6c9e1eb9, 0x8fd7a91b, 0x67c039ba, + 0xe5bc640a, 0x0dabf4ab, 0xeee24309, 0x06f5d3a8, 0xf3002a0c, 0x1b17baad, + 0xf85e0d0f, 0x10499dae, 0xc8c4f806, 0x20d368a7, 0xc39adf05, 0x2b8d4fa4, + 0xde78b600, 0x366f26a1, 0xd5269103, 0x3d3101a2}}; local const z_word_t FAR crc_braid_big_table[][256] = { - {0x0000000000000000, 0xa19017e800000000, 0x03275e0b00000000, - 0xa2b749e300000000, 0x064ebc1600000000, 0xa7deabfe00000000, - 0x0569e21d00000000, 0xa4f9f5f500000000, 0x0c9c782d00000000, - 0xad0c6fc500000000, 0x0fbb262600000000, 0xae2b31ce00000000, - 0x0ad2c43b00000000, 0xab42d3d300000000, 0x09f59a3000000000, - 0xa8658dd800000000, 0x1838f15a00000000, 0xb9a8e6b200000000, - 0x1b1faf5100000000, 0xba8fb8b900000000, 0x1e764d4c00000000, - 0xbfe65aa400000000, 0x1d51134700000000, 0xbcc104af00000000, - 0x14a4897700000000, 0xb5349e9f00000000, 0x1783d77c00000000, - 0xb613c09400000000, 0x12ea356100000000, 0xb37a228900000000, - 0x11cd6b6a00000000, 0xb05d7c8200000000, 0x3070e2b500000000, - 0x91e0f55d00000000, 0x3357bcbe00000000, 0x92c7ab5600000000, - 0x363e5ea300000000, 0x97ae494b00000000, 0x351900a800000000, - 0x9489174000000000, 0x3cec9a9800000000, 0x9d7c8d7000000000, - 0x3fcbc49300000000, 0x9e5bd37b00000000, 0x3aa2268e00000000, - 0x9b32316600000000, 0x3985788500000000, 0x98156f6d00000000, - 0x284813ef00000000, 0x89d8040700000000, 0x2b6f4de400000000, - 0x8aff5a0c00000000, 0x2e06aff900000000, 0x8f96b81100000000, - 0x2d21f1f200000000, 0x8cb1e61a00000000, 0x24d46bc200000000, - 0x85447c2a00000000, 0x27f335c900000000, 0x8663222100000000, - 0x229ad7d400000000, 0x830ac03c00000000, 0x21bd89df00000000, - 0x802d9e3700000000, 0x21e6b5b000000000, 0x8076a25800000000, - 0x22c1ebbb00000000, 0x8351fc5300000000, 0x27a809a600000000, - 0x86381e4e00000000, 0x248f57ad00000000, 0x851f404500000000, - 0x2d7acd9d00000000, 0x8ceada7500000000, 0x2e5d939600000000, - 0x8fcd847e00000000, 0x2b34718b00000000, 0x8aa4666300000000, - 0x28132f8000000000, 0x8983386800000000, 0x39de44ea00000000, - 0x984e530200000000, 0x3af91ae100000000, 0x9b690d0900000000, - 0x3f90f8fc00000000, 0x9e00ef1400000000, 0x3cb7a6f700000000, - 0x9d27b11f00000000, 0x35423cc700000000, 0x94d22b2f00000000, - 0x366562cc00000000, 0x97f5752400000000, 0x330c80d100000000, - 0x929c973900000000, 0x302bdeda00000000, 0x91bbc93200000000, - 0x1196570500000000, 0xb00640ed00000000, 0x12b1090e00000000, - 0xb3211ee600000000, 0x17d8eb1300000000, 0xb648fcfb00000000, - 0x14ffb51800000000, 0xb56fa2f000000000, 0x1d0a2f2800000000, - 0xbc9a38c000000000, 0x1e2d712300000000, 0xbfbd66cb00000000, - 0x1b44933e00000000, 0xbad484d600000000, 0x1863cd3500000000, - 0xb9f3dadd00000000, 0x09aea65f00000000, 0xa83eb1b700000000, - 0x0a89f85400000000, 0xab19efbc00000000, 0x0fe01a4900000000, - 0xae700da100000000, 0x0cc7444200000000, 0xad5753aa00000000, - 0x0532de7200000000, 0xa4a2c99a00000000, 0x0615807900000000, - 0xa785979100000000, 0x037c626400000000, 0xa2ec758c00000000, - 0x005b3c6f00000000, 0xa1cb2b8700000000, 0x03ca1aba00000000, - 0xa25a0d5200000000, 0x00ed44b100000000, 0xa17d535900000000, - 0x0584a6ac00000000, 0xa414b14400000000, 0x06a3f8a700000000, - 0xa733ef4f00000000, 0x0f56629700000000, 0xaec6757f00000000, - 0x0c713c9c00000000, 0xade12b7400000000, 0x0918de8100000000, - 0xa888c96900000000, 0x0a3f808a00000000, 0xabaf976200000000, - 0x1bf2ebe000000000, 0xba62fc0800000000, 0x18d5b5eb00000000, - 0xb945a20300000000, 0x1dbc57f600000000, 0xbc2c401e00000000, - 0x1e9b09fd00000000, 0xbf0b1e1500000000, 0x176e93cd00000000, - 0xb6fe842500000000, 0x1449cdc600000000, 0xb5d9da2e00000000, - 0x11202fdb00000000, 0xb0b0383300000000, 0x120771d000000000, - 0xb397663800000000, 0x33baf80f00000000, 0x922aefe700000000, - 0x309da60400000000, 0x910db1ec00000000, 0x35f4441900000000, - 0x946453f100000000, 0x36d31a1200000000, 0x97430dfa00000000, - 0x3f26802200000000, 0x9eb697ca00000000, 0x3c01de2900000000, - 0x9d91c9c100000000, 0x39683c3400000000, 0x98f82bdc00000000, - 0x3a4f623f00000000, 0x9bdf75d700000000, 0x2b82095500000000, - 0x8a121ebd00000000, 0x28a5575e00000000, 0x893540b600000000, - 0x2dccb54300000000, 0x8c5ca2ab00000000, 0x2eebeb4800000000, - 0x8f7bfca000000000, 0x271e717800000000, 0x868e669000000000, - 0x24392f7300000000, 0x85a9389b00000000, 0x2150cd6e00000000, - 0x80c0da8600000000, 0x2277936500000000, 0x83e7848d00000000, - 0x222caf0a00000000, 0x83bcb8e200000000, 0x210bf10100000000, - 0x809be6e900000000, 0x2462131c00000000, 0x85f204f400000000, - 0x27454d1700000000, 0x86d55aff00000000, 0x2eb0d72700000000, - 0x8f20c0cf00000000, 0x2d97892c00000000, 0x8c079ec400000000, - 0x28fe6b3100000000, 0x896e7cd900000000, 0x2bd9353a00000000, - 0x8a4922d200000000, 0x3a145e5000000000, 0x9b8449b800000000, - 0x3933005b00000000, 0x98a317b300000000, 0x3c5ae24600000000, - 0x9dcaf5ae00000000, 0x3f7dbc4d00000000, 0x9eedaba500000000, - 0x3688267d00000000, 0x9718319500000000, 0x35af787600000000, - 0x943f6f9e00000000, 0x30c69a6b00000000, 0x91568d8300000000, - 0x33e1c46000000000, 0x9271d38800000000, 0x125c4dbf00000000, - 0xb3cc5a5700000000, 0x117b13b400000000, 0xb0eb045c00000000, - 0x1412f1a900000000, 0xb582e64100000000, 0x1735afa200000000, - 0xb6a5b84a00000000, 0x1ec0359200000000, 0xbf50227a00000000, - 0x1de76b9900000000, 0xbc777c7100000000, 0x188e898400000000, - 0xb91e9e6c00000000, 0x1ba9d78f00000000, 0xba39c06700000000, - 0x0a64bce500000000, 0xabf4ab0d00000000, 0x0943e2ee00000000, - 0xa8d3f50600000000, 0x0c2a00f300000000, 0xadba171b00000000, - 0x0f0d5ef800000000, 0xae9d491000000000, 0x06f8c4c800000000, - 0xa768d32000000000, 0x05df9ac300000000, 0xa44f8d2b00000000, - 0x00b678de00000000, 0xa1266f3600000000, 0x039126d500000000, - 0xa201313d00000000}, - {0x0000000000000000, 0xee8439a100000000, 0x9d0f029900000000, - 0x738b3b3800000000, 0x7b1975e900000000, 0x959d4c4800000000, - 0xe616777000000000, 0x08924ed100000000, 0xb7349b0900000000, - 0x59b0a2a800000000, 0x2a3b999000000000, 0xc4bfa03100000000, - 0xcc2deee000000000, 0x22a9d74100000000, 0x5122ec7900000000, - 0xbfa6d5d800000000, 0x6e69361300000000, 0x80ed0fb200000000, - 0xf366348a00000000, 0x1de20d2b00000000, 0x157043fa00000000, - 0xfbf47a5b00000000, 0x887f416300000000, 0x66fb78c200000000, - 0xd95dad1a00000000, 0x37d994bb00000000, 0x4452af8300000000, - 0xaad6962200000000, 0xa244d8f300000000, 0x4cc0e15200000000, - 0x3f4bda6a00000000, 0xd1cfe3cb00000000, 0xdcd26c2600000000, - 0x3256558700000000, 0x41dd6ebf00000000, 0xaf59571e00000000, - 0xa7cb19cf00000000, 0x494f206e00000000, 0x3ac41b5600000000, - 0xd44022f700000000, 0x6be6f72f00000000, 0x8562ce8e00000000, - 0xf6e9f5b600000000, 0x186dcc1700000000, 0x10ff82c600000000, - 0xfe7bbb6700000000, 0x8df0805f00000000, 0x6374b9fe00000000, - 0xb2bb5a3500000000, 0x5c3f639400000000, 0x2fb458ac00000000, - 0xc130610d00000000, 0xc9a22fdc00000000, 0x2726167d00000000, - 0x54ad2d4500000000, 0xba2914e400000000, 0x058fc13c00000000, - 0xeb0bf89d00000000, 0x9880c3a500000000, 0x7604fa0400000000, - 0x7e96b4d500000000, 0x90128d7400000000, 0xe399b64c00000000, - 0x0d1d8fed00000000, 0xb8a5d94c00000000, 0x5621e0ed00000000, - 0x25aadbd500000000, 0xcb2ee27400000000, 0xc3bcaca500000000, - 0x2d38950400000000, 0x5eb3ae3c00000000, 0xb037979d00000000, - 0x0f91424500000000, 0xe1157be400000000, 0x929e40dc00000000, - 0x7c1a797d00000000, 0x748837ac00000000, 0x9a0c0e0d00000000, - 0xe987353500000000, 0x07030c9400000000, 0xd6ccef5f00000000, - 0x3848d6fe00000000, 0x4bc3edc600000000, 0xa547d46700000000, - 0xadd59ab600000000, 0x4351a31700000000, 0x30da982f00000000, - 0xde5ea18e00000000, 0x61f8745600000000, 0x8f7c4df700000000, - 0xfcf776cf00000000, 0x12734f6e00000000, 0x1ae101bf00000000, - 0xf465381e00000000, 0x87ee032600000000, 0x696a3a8700000000, - 0x6477b56a00000000, 0x8af38ccb00000000, 0xf978b7f300000000, - 0x17fc8e5200000000, 0x1f6ec08300000000, 0xf1eaf92200000000, - 0x8261c21a00000000, 0x6ce5fbbb00000000, 0xd3432e6300000000, - 0x3dc717c200000000, 0x4e4c2cfa00000000, 0xa0c8155b00000000, - 0xa85a5b8a00000000, 0x46de622b00000000, 0x3555591300000000, - 0xdbd160b200000000, 0x0a1e837900000000, 0xe49abad800000000, - 0x971181e000000000, 0x7995b84100000000, 0x7107f69000000000, - 0x9f83cf3100000000, 0xec08f40900000000, 0x028ccda800000000, - 0xbd2a187000000000, 0x53ae21d100000000, 0x20251ae900000000, - 0xcea1234800000000, 0xc6336d9900000000, 0x28b7543800000000, - 0x5b3c6f0000000000, 0xb5b856a100000000, 0x704bb39900000000, - 0x9ecf8a3800000000, 0xed44b10000000000, 0x03c088a100000000, - 0x0b52c67000000000, 0xe5d6ffd100000000, 0x965dc4e900000000, - 0x78d9fd4800000000, 0xc77f289000000000, 0x29fb113100000000, - 0x5a702a0900000000, 0xb4f413a800000000, 0xbc665d7900000000, - 0x52e264d800000000, 0x21695fe000000000, 0xcfed664100000000, - 0x1e22858a00000000, 0xf0a6bc2b00000000, 0x832d871300000000, - 0x6da9beb200000000, 0x653bf06300000000, 0x8bbfc9c200000000, - 0xf834f2fa00000000, 0x16b0cb5b00000000, 0xa9161e8300000000, - 0x4792272200000000, 0x34191c1a00000000, 0xda9d25bb00000000, - 0xd20f6b6a00000000, 0x3c8b52cb00000000, 0x4f0069f300000000, - 0xa184505200000000, 0xac99dfbf00000000, 0x421de61e00000000, - 0x3196dd2600000000, 0xdf12e48700000000, 0xd780aa5600000000, - 0x390493f700000000, 0x4a8fa8cf00000000, 0xa40b916e00000000, - 0x1bad44b600000000, 0xf5297d1700000000, 0x86a2462f00000000, - 0x68267f8e00000000, 0x60b4315f00000000, 0x8e3008fe00000000, - 0xfdbb33c600000000, 0x133f0a6700000000, 0xc2f0e9ac00000000, - 0x2c74d00d00000000, 0x5fffeb3500000000, 0xb17bd29400000000, - 0xb9e99c4500000000, 0x576da5e400000000, 0x24e69edc00000000, - 0xca62a77d00000000, 0x75c472a500000000, 0x9b404b0400000000, - 0xe8cb703c00000000, 0x064f499d00000000, 0x0edd074c00000000, - 0xe0593eed00000000, 0x93d205d500000000, 0x7d563c7400000000, - 0xc8ee6ad500000000, 0x266a537400000000, 0x55e1684c00000000, - 0xbb6551ed00000000, 0xb3f71f3c00000000, 0x5d73269d00000000, - 0x2ef81da500000000, 0xc07c240400000000, 0x7fdaf1dc00000000, - 0x915ec87d00000000, 0xe2d5f34500000000, 0x0c51cae400000000, - 0x04c3843500000000, 0xea47bd9400000000, 0x99cc86ac00000000, - 0x7748bf0d00000000, 0xa6875cc600000000, 0x4803656700000000, - 0x3b885e5f00000000, 0xd50c67fe00000000, 0xdd9e292f00000000, - 0x331a108e00000000, 0x40912bb600000000, 0xae15121700000000, - 0x11b3c7cf00000000, 0xff37fe6e00000000, 0x8cbcc55600000000, - 0x6238fcf700000000, 0x6aaab22600000000, 0x842e8b8700000000, - 0xf7a5b0bf00000000, 0x1921891e00000000, 0x143c06f300000000, - 0xfab83f5200000000, 0x8933046a00000000, 0x67b73dcb00000000, - 0x6f25731a00000000, 0x81a14abb00000000, 0xf22a718300000000, - 0x1cae482200000000, 0xa3089dfa00000000, 0x4d8ca45b00000000, - 0x3e079f6300000000, 0xd083a6c200000000, 0xd811e81300000000, - 0x3695d1b200000000, 0x451eea8a00000000, 0xab9ad32b00000000, - 0x7a5530e000000000, 0x94d1094100000000, 0xe75a327900000000, - 0x09de0bd800000000, 0x014c450900000000, 0xefc87ca800000000, - 0x9c43479000000000, 0x72c77e3100000000, 0xcd61abe900000000, - 0x23e5924800000000, 0x506ea97000000000, 0xbeea90d100000000, - 0xb678de0000000000, 0x58fce7a100000000, 0x2b77dc9900000000, - 0xc5f3e53800000000}, - {0x0000000000000000, 0xfbf6134700000000, 0xf6ed278e00000000, - 0x0d1b34c900000000, 0xaddd3ec700000000, 0x562b2d8000000000, - 0x5b30194900000000, 0xa0c60a0e00000000, 0x1bbd0c5500000000, - 0xe04b1f1200000000, 0xed502bdb00000000, 0x16a6389c00000000, - 0xb660329200000000, 0x4d9621d500000000, 0x408d151c00000000, - 0xbb7b065b00000000, 0x367a19aa00000000, 0xcd8c0aed00000000, - 0xc0973e2400000000, 0x3b612d6300000000, 0x9ba7276d00000000, - 0x6051342a00000000, 0x6d4a00e300000000, 0x96bc13a400000000, - 0x2dc715ff00000000, 0xd63106b800000000, 0xdb2a327100000000, - 0x20dc213600000000, 0x801a2b3800000000, 0x7bec387f00000000, - 0x76f70cb600000000, 0x8d011ff100000000, 0x2df2438f00000000, - 0xd60450c800000000, 0xdb1f640100000000, 0x20e9774600000000, - 0x802f7d4800000000, 0x7bd96e0f00000000, 0x76c25ac600000000, - 0x8d34498100000000, 0x364f4fda00000000, 0xcdb95c9d00000000, - 0xc0a2685400000000, 0x3b547b1300000000, 0x9b92711d00000000, - 0x6064625a00000000, 0x6d7f569300000000, 0x968945d400000000, - 0x1b885a2500000000, 0xe07e496200000000, 0xed657dab00000000, - 0x16936eec00000000, 0xb65564e200000000, 0x4da377a500000000, - 0x40b8436c00000000, 0xbb4e502b00000000, 0x0035567000000000, - 0xfbc3453700000000, 0xf6d871fe00000000, 0x0d2e62b900000000, - 0xade868b700000000, 0x561e7bf000000000, 0x5b054f3900000000, - 0xa0f35c7e00000000, 0x1be2f6c500000000, 0xe014e58200000000, - 0xed0fd14b00000000, 0x16f9c20c00000000, 0xb63fc80200000000, - 0x4dc9db4500000000, 0x40d2ef8c00000000, 0xbb24fccb00000000, - 0x005ffa9000000000, 0xfba9e9d700000000, 0xf6b2dd1e00000000, - 0x0d44ce5900000000, 0xad82c45700000000, 0x5674d71000000000, - 0x5b6fe3d900000000, 0xa099f09e00000000, 0x2d98ef6f00000000, - 0xd66efc2800000000, 0xdb75c8e100000000, 0x2083dba600000000, - 0x8045d1a800000000, 0x7bb3c2ef00000000, 0x76a8f62600000000, - 0x8d5ee56100000000, 0x3625e33a00000000, 0xcdd3f07d00000000, - 0xc0c8c4b400000000, 0x3b3ed7f300000000, 0x9bf8ddfd00000000, - 0x600eceba00000000, 0x6d15fa7300000000, 0x96e3e93400000000, - 0x3610b54a00000000, 0xcde6a60d00000000, 0xc0fd92c400000000, - 0x3b0b818300000000, 0x9bcd8b8d00000000, 0x603b98ca00000000, - 0x6d20ac0300000000, 0x96d6bf4400000000, 0x2dadb91f00000000, - 0xd65baa5800000000, 0xdb409e9100000000, 0x20b68dd600000000, - 0x807087d800000000, 0x7b86949f00000000, 0x769da05600000000, - 0x8d6bb31100000000, 0x006aace000000000, 0xfb9cbfa700000000, - 0xf6878b6e00000000, 0x0d71982900000000, 0xadb7922700000000, - 0x5641816000000000, 0x5b5ab5a900000000, 0xa0aca6ee00000000, - 0x1bd7a0b500000000, 0xe021b3f200000000, 0xed3a873b00000000, - 0x16cc947c00000000, 0xb60a9e7200000000, 0x4dfc8d3500000000, - 0x40e7b9fc00000000, 0xbb11aabb00000000, 0x77c29c5000000000, - 0x8c348f1700000000, 0x812fbbde00000000, 0x7ad9a89900000000, - 0xda1fa29700000000, 0x21e9b1d000000000, 0x2cf2851900000000, - 0xd704965e00000000, 0x6c7f900500000000, 0x9789834200000000, - 0x9a92b78b00000000, 0x6164a4cc00000000, 0xc1a2aec200000000, - 0x3a54bd8500000000, 0x374f894c00000000, 0xccb99a0b00000000, - 0x41b885fa00000000, 0xba4e96bd00000000, 0xb755a27400000000, - 0x4ca3b13300000000, 0xec65bb3d00000000, 0x1793a87a00000000, - 0x1a889cb300000000, 0xe17e8ff400000000, 0x5a0589af00000000, - 0xa1f39ae800000000, 0xace8ae2100000000, 0x571ebd6600000000, - 0xf7d8b76800000000, 0x0c2ea42f00000000, 0x013590e600000000, - 0xfac383a100000000, 0x5a30dfdf00000000, 0xa1c6cc9800000000, - 0xacddf85100000000, 0x572beb1600000000, 0xf7ede11800000000, - 0x0c1bf25f00000000, 0x0100c69600000000, 0xfaf6d5d100000000, - 0x418dd38a00000000, 0xba7bc0cd00000000, 0xb760f40400000000, - 0x4c96e74300000000, 0xec50ed4d00000000, 0x17a6fe0a00000000, - 0x1abdcac300000000, 0xe14bd98400000000, 0x6c4ac67500000000, - 0x97bcd53200000000, 0x9aa7e1fb00000000, 0x6151f2bc00000000, - 0xc197f8b200000000, 0x3a61ebf500000000, 0x377adf3c00000000, - 0xcc8ccc7b00000000, 0x77f7ca2000000000, 0x8c01d96700000000, - 0x811aedae00000000, 0x7aecfee900000000, 0xda2af4e700000000, - 0x21dce7a000000000, 0x2cc7d36900000000, 0xd731c02e00000000, - 0x6c206a9500000000, 0x97d679d200000000, 0x9acd4d1b00000000, - 0x613b5e5c00000000, 0xc1fd545200000000, 0x3a0b471500000000, - 0x371073dc00000000, 0xcce6609b00000000, 0x779d66c000000000, - 0x8c6b758700000000, 0x8170414e00000000, 0x7a86520900000000, - 0xda40580700000000, 0x21b64b4000000000, 0x2cad7f8900000000, - 0xd75b6cce00000000, 0x5a5a733f00000000, 0xa1ac607800000000, - 0xacb754b100000000, 0x574147f600000000, 0xf7874df800000000, - 0x0c715ebf00000000, 0x016a6a7600000000, 0xfa9c793100000000, - 0x41e77f6a00000000, 0xba116c2d00000000, 0xb70a58e400000000, - 0x4cfc4ba300000000, 0xec3a41ad00000000, 0x17cc52ea00000000, - 0x1ad7662300000000, 0xe121756400000000, 0x41d2291a00000000, - 0xba243a5d00000000, 0xb73f0e9400000000, 0x4cc91dd300000000, - 0xec0f17dd00000000, 0x17f9049a00000000, 0x1ae2305300000000, - 0xe114231400000000, 0x5a6f254f00000000, 0xa199360800000000, - 0xac8202c100000000, 0x5774118600000000, 0xf7b21b8800000000, - 0x0c4408cf00000000, 0x015f3c0600000000, 0xfaa92f4100000000, - 0x77a830b000000000, 0x8c5e23f700000000, 0x8145173e00000000, - 0x7ab3047900000000, 0xda750e7700000000, 0x21831d3000000000, - 0x2c9829f900000000, 0xd76e3abe00000000, 0x6c153ce500000000, - 0x97e32fa200000000, 0x9af81b6b00000000, 0x610e082c00000000, - 0xc1c8022200000000, 0x3a3e116500000000, 0x372525ac00000000, - 0xccd336eb00000000}, - {0x0000000000000000, 0x6238282a00000000, 0xc470505400000000, - 0xa648787e00000000, 0x88e1a0a800000000, 0xead9888200000000, - 0x4c91f0fc00000000, 0x2ea9d8d600000000, 0x51c5308a00000000, - 0x33fd18a000000000, 0x95b560de00000000, 0xf78d48f400000000, - 0xd924902200000000, 0xbb1cb80800000000, 0x1d54c07600000000, - 0x7f6ce85c00000000, 0xe38c10cf00000000, 0x81b438e500000000, - 0x27fc409b00000000, 0x45c468b100000000, 0x6b6db06700000000, - 0x0955984d00000000, 0xaf1de03300000000, 0xcd25c81900000000, - 0xb249204500000000, 0xd071086f00000000, 0x7639701100000000, - 0x1401583b00000000, 0x3aa880ed00000000, 0x5890a8c700000000, - 0xfed8d0b900000000, 0x9ce0f89300000000, 0x871f504500000000, - 0xe527786f00000000, 0x436f001100000000, 0x2157283b00000000, - 0x0ffef0ed00000000, 0x6dc6d8c700000000, 0xcb8ea0b900000000, - 0xa9b6889300000000, 0xd6da60cf00000000, 0xb4e248e500000000, - 0x12aa309b00000000, 0x709218b100000000, 0x5e3bc06700000000, - 0x3c03e84d00000000, 0x9a4b903300000000, 0xf873b81900000000, - 0x6493408a00000000, 0x06ab68a000000000, 0xa0e310de00000000, - 0xc2db38f400000000, 0xec72e02200000000, 0x8e4ac80800000000, - 0x2802b07600000000, 0x4a3a985c00000000, 0x3556700000000000, - 0x576e582a00000000, 0xf126205400000000, 0x931e087e00000000, - 0xbdb7d0a800000000, 0xdf8ff88200000000, 0x79c780fc00000000, - 0x1bffa8d600000000, 0x0e3fa08a00000000, 0x6c0788a000000000, - 0xca4ff0de00000000, 0xa877d8f400000000, 0x86de002200000000, - 0xe4e6280800000000, 0x42ae507600000000, 0x2096785c00000000, - 0x5ffa900000000000, 0x3dc2b82a00000000, 0x9b8ac05400000000, - 0xf9b2e87e00000000, 0xd71b30a800000000, 0xb523188200000000, - 0x136b60fc00000000, 0x715348d600000000, 0xedb3b04500000000, - 0x8f8b986f00000000, 0x29c3e01100000000, 0x4bfbc83b00000000, - 0x655210ed00000000, 0x076a38c700000000, 0xa12240b900000000, - 0xc31a689300000000, 0xbc7680cf00000000, 0xde4ea8e500000000, - 0x7806d09b00000000, 0x1a3ef8b100000000, 0x3497206700000000, - 0x56af084d00000000, 0xf0e7703300000000, 0x92df581900000000, - 0x8920f0cf00000000, 0xeb18d8e500000000, 0x4d50a09b00000000, - 0x2f6888b100000000, 0x01c1506700000000, 0x63f9784d00000000, - 0xc5b1003300000000, 0xa789281900000000, 0xd8e5c04500000000, - 0xbadde86f00000000, 0x1c95901100000000, 0x7eadb83b00000000, - 0x500460ed00000000, 0x323c48c700000000, 0x947430b900000000, - 0xf64c189300000000, 0x6aace00000000000, 0x0894c82a00000000, - 0xaedcb05400000000, 0xcce4987e00000000, 0xe24d40a800000000, - 0x8075688200000000, 0x263d10fc00000000, 0x440538d600000000, - 0x3b69d08a00000000, 0x5951f8a000000000, 0xff1980de00000000, - 0x9d21a8f400000000, 0xb388702200000000, 0xd1b0580800000000, - 0x77f8207600000000, 0x15c0085c00000000, 0x5d7831ce00000000, - 0x3f4019e400000000, 0x9908619a00000000, 0xfb3049b000000000, - 0xd599916600000000, 0xb7a1b94c00000000, 0x11e9c13200000000, - 0x73d1e91800000000, 0x0cbd014400000000, 0x6e85296e00000000, - 0xc8cd511000000000, 0xaaf5793a00000000, 0x845ca1ec00000000, - 0xe66489c600000000, 0x402cf1b800000000, 0x2214d99200000000, - 0xbef4210100000000, 0xdccc092b00000000, 0x7a84715500000000, - 0x18bc597f00000000, 0x361581a900000000, 0x542da98300000000, - 0xf265d1fd00000000, 0x905df9d700000000, 0xef31118b00000000, - 0x8d0939a100000000, 0x2b4141df00000000, 0x497969f500000000, - 0x67d0b12300000000, 0x05e8990900000000, 0xa3a0e17700000000, - 0xc198c95d00000000, 0xda67618b00000000, 0xb85f49a100000000, - 0x1e1731df00000000, 0x7c2f19f500000000, 0x5286c12300000000, - 0x30bee90900000000, 0x96f6917700000000, 0xf4ceb95d00000000, - 0x8ba2510100000000, 0xe99a792b00000000, 0x4fd2015500000000, - 0x2dea297f00000000, 0x0343f1a900000000, 0x617bd98300000000, - 0xc733a1fd00000000, 0xa50b89d700000000, 0x39eb714400000000, - 0x5bd3596e00000000, 0xfd9b211000000000, 0x9fa3093a00000000, - 0xb10ad1ec00000000, 0xd332f9c600000000, 0x757a81b800000000, - 0x1742a99200000000, 0x682e41ce00000000, 0x0a1669e400000000, - 0xac5e119a00000000, 0xce6639b000000000, 0xe0cfe16600000000, - 0x82f7c94c00000000, 0x24bfb13200000000, 0x4687991800000000, - 0x5347914400000000, 0x317fb96e00000000, 0x9737c11000000000, - 0xf50fe93a00000000, 0xdba631ec00000000, 0xb99e19c600000000, - 0x1fd661b800000000, 0x7dee499200000000, 0x0282a1ce00000000, - 0x60ba89e400000000, 0xc6f2f19a00000000, 0xa4cad9b000000000, - 0x8a63016600000000, 0xe85b294c00000000, 0x4e13513200000000, - 0x2c2b791800000000, 0xb0cb818b00000000, 0xd2f3a9a100000000, - 0x74bbd1df00000000, 0x1683f9f500000000, 0x382a212300000000, - 0x5a12090900000000, 0xfc5a717700000000, 0x9e62595d00000000, - 0xe10eb10100000000, 0x8336992b00000000, 0x257ee15500000000, - 0x4746c97f00000000, 0x69ef11a900000000, 0x0bd7398300000000, - 0xad9f41fd00000000, 0xcfa769d700000000, 0xd458c10100000000, - 0xb660e92b00000000, 0x1028915500000000, 0x7210b97f00000000, - 0x5cb961a900000000, 0x3e81498300000000, 0x98c931fd00000000, - 0xfaf119d700000000, 0x859df18b00000000, 0xe7a5d9a100000000, - 0x41eda1df00000000, 0x23d589f500000000, 0x0d7c512300000000, - 0x6f44790900000000, 0xc90c017700000000, 0xab34295d00000000, - 0x37d4d1ce00000000, 0x55ecf9e400000000, 0xf3a4819a00000000, - 0x919ca9b000000000, 0xbf35716600000000, 0xdd0d594c00000000, - 0x7b45213200000000, 0x197d091800000000, 0x6611e14400000000, - 0x0429c96e00000000, 0xa261b11000000000, 0xc059993a00000000, - 0xeef041ec00000000, 0x8cc869c600000000, 0x2a8011b800000000, - 0x48b8399200000000}, - {0x0000000000000000, 0x4c2896a300000000, 0xd9565d9c00000000, - 0x957ecb3f00000000, 0xf3abcbe300000000, 0xbf835d4000000000, - 0x2afd967f00000000, 0x66d500dc00000000, 0xa751e61c00000000, - 0xeb7970bf00000000, 0x7e07bb8000000000, 0x322f2d2300000000, - 0x54fa2dff00000000, 0x18d2bb5c00000000, 0x8dac706300000000, - 0xc184e6c000000000, 0x4ea3cc3900000000, 0x028b5a9a00000000, - 0x97f591a500000000, 0xdbdd070600000000, 0xbd0807da00000000, - 0xf120917900000000, 0x645e5a4600000000, 0x2876cce500000000, - 0xe9f22a2500000000, 0xa5dabc8600000000, 0x30a477b900000000, - 0x7c8ce11a00000000, 0x1a59e1c600000000, 0x5671776500000000, - 0xc30fbc5a00000000, 0x8f272af900000000, 0x9c46997300000000, - 0xd06e0fd000000000, 0x4510c4ef00000000, 0x0938524c00000000, - 0x6fed529000000000, 0x23c5c43300000000, 0xb6bb0f0c00000000, - 0xfa9399af00000000, 0x3b177f6f00000000, 0x773fe9cc00000000, - 0xe24122f300000000, 0xae69b45000000000, 0xc8bcb48c00000000, - 0x8494222f00000000, 0x11eae91000000000, 0x5dc27fb300000000, - 0xd2e5554a00000000, 0x9ecdc3e900000000, 0x0bb308d600000000, - 0x479b9e7500000000, 0x214e9ea900000000, 0x6d66080a00000000, - 0xf818c33500000000, 0xb430559600000000, 0x75b4b35600000000, - 0x399c25f500000000, 0xace2eeca00000000, 0xe0ca786900000000, - 0x861f78b500000000, 0xca37ee1600000000, 0x5f49252900000000, - 0x1361b38a00000000, 0x388d32e700000000, 0x74a5a44400000000, - 0xe1db6f7b00000000, 0xadf3f9d800000000, 0xcb26f90400000000, - 0x870e6fa700000000, 0x1270a49800000000, 0x5e58323b00000000, - 0x9fdcd4fb00000000, 0xd3f4425800000000, 0x468a896700000000, - 0x0aa21fc400000000, 0x6c771f1800000000, 0x205f89bb00000000, - 0xb521428400000000, 0xf909d42700000000, 0x762efede00000000, - 0x3a06687d00000000, 0xaf78a34200000000, 0xe35035e100000000, - 0x8585353d00000000, 0xc9ada39e00000000, 0x5cd368a100000000, - 0x10fbfe0200000000, 0xd17f18c200000000, 0x9d578e6100000000, - 0x0829455e00000000, 0x4401d3fd00000000, 0x22d4d32100000000, - 0x6efc458200000000, 0xfb828ebd00000000, 0xb7aa181e00000000, - 0xa4cbab9400000000, 0xe8e33d3700000000, 0x7d9df60800000000, - 0x31b560ab00000000, 0x5760607700000000, 0x1b48f6d400000000, - 0x8e363deb00000000, 0xc21eab4800000000, 0x039a4d8800000000, - 0x4fb2db2b00000000, 0xdacc101400000000, 0x96e486b700000000, - 0xf031866b00000000, 0xbc1910c800000000, 0x2967dbf700000000, - 0x654f4d5400000000, 0xea6867ad00000000, 0xa640f10e00000000, - 0x333e3a3100000000, 0x7f16ac9200000000, 0x19c3ac4e00000000, - 0x55eb3aed00000000, 0xc095f1d200000000, 0x8cbd677100000000, - 0x4d3981b100000000, 0x0111171200000000, 0x946fdc2d00000000, - 0xd8474a8e00000000, 0xbe924a5200000000, 0xf2badcf100000000, - 0x67c417ce00000000, 0x2bec816d00000000, 0x311c141500000000, - 0x7d3482b600000000, 0xe84a498900000000, 0xa462df2a00000000, - 0xc2b7dff600000000, 0x8e9f495500000000, 0x1be1826a00000000, - 0x57c914c900000000, 0x964df20900000000, 0xda6564aa00000000, - 0x4f1baf9500000000, 0x0333393600000000, 0x65e639ea00000000, - 0x29ceaf4900000000, 0xbcb0647600000000, 0xf098f2d500000000, - 0x7fbfd82c00000000, 0x33974e8f00000000, 0xa6e985b000000000, - 0xeac1131300000000, 0x8c1413cf00000000, 0xc03c856c00000000, - 0x55424e5300000000, 0x196ad8f000000000, 0xd8ee3e3000000000, - 0x94c6a89300000000, 0x01b863ac00000000, 0x4d90f50f00000000, - 0x2b45f5d300000000, 0x676d637000000000, 0xf213a84f00000000, - 0xbe3b3eec00000000, 0xad5a8d6600000000, 0xe1721bc500000000, - 0x740cd0fa00000000, 0x3824465900000000, 0x5ef1468500000000, - 0x12d9d02600000000, 0x87a71b1900000000, 0xcb8f8dba00000000, - 0x0a0b6b7a00000000, 0x4623fdd900000000, 0xd35d36e600000000, - 0x9f75a04500000000, 0xf9a0a09900000000, 0xb588363a00000000, - 0x20f6fd0500000000, 0x6cde6ba600000000, 0xe3f9415f00000000, - 0xafd1d7fc00000000, 0x3aaf1cc300000000, 0x76878a6000000000, - 0x10528abc00000000, 0x5c7a1c1f00000000, 0xc904d72000000000, - 0x852c418300000000, 0x44a8a74300000000, 0x088031e000000000, - 0x9dfefadf00000000, 0xd1d66c7c00000000, 0xb7036ca000000000, - 0xfb2bfa0300000000, 0x6e55313c00000000, 0x227da79f00000000, - 0x099126f200000000, 0x45b9b05100000000, 0xd0c77b6e00000000, - 0x9cefedcd00000000, 0xfa3aed1100000000, 0xb6127bb200000000, - 0x236cb08d00000000, 0x6f44262e00000000, 0xaec0c0ee00000000, - 0xe2e8564d00000000, 0x77969d7200000000, 0x3bbe0bd100000000, - 0x5d6b0b0d00000000, 0x11439dae00000000, 0x843d569100000000, - 0xc815c03200000000, 0x4732eacb00000000, 0x0b1a7c6800000000, - 0x9e64b75700000000, 0xd24c21f400000000, 0xb499212800000000, - 0xf8b1b78b00000000, 0x6dcf7cb400000000, 0x21e7ea1700000000, - 0xe0630cd700000000, 0xac4b9a7400000000, 0x3935514b00000000, - 0x751dc7e800000000, 0x13c8c73400000000, 0x5fe0519700000000, - 0xca9e9aa800000000, 0x86b60c0b00000000, 0x95d7bf8100000000, - 0xd9ff292200000000, 0x4c81e21d00000000, 0x00a974be00000000, - 0x667c746200000000, 0x2a54e2c100000000, 0xbf2a29fe00000000, - 0xf302bf5d00000000, 0x3286599d00000000, 0x7eaecf3e00000000, - 0xebd0040100000000, 0xa7f892a200000000, 0xc12d927e00000000, - 0x8d0504dd00000000, 0x187bcfe200000000, 0x5453594100000000, - 0xdb7473b800000000, 0x975ce51b00000000, 0x02222e2400000000, - 0x4e0ab88700000000, 0x28dfb85b00000000, 0x64f72ef800000000, - 0xf189e5c700000000, 0xbda1736400000000, 0x7c2595a400000000, - 0x300d030700000000, 0xa573c83800000000, 0xe95b5e9b00000000, - 0x8f8e5e4700000000, 0xc3a6c8e400000000, 0x56d803db00000000, - 0x1af0957800000000}, - {0x0000000000000000, 0x939bc97f00000000, 0x263793ff00000000, - 0xb5ac5a8000000000, 0x0d68572400000000, 0x9ef39e5b00000000, - 0x2b5fc4db00000000, 0xb8c40da400000000, 0x1ad0ae4800000000, - 0x894b673700000000, 0x3ce73db700000000, 0xaf7cf4c800000000, - 0x17b8f96c00000000, 0x8423301300000000, 0x318f6a9300000000, - 0xa214a3ec00000000, 0x34a05d9100000000, 0xa73b94ee00000000, - 0x1297ce6e00000000, 0x810c071100000000, 0x39c80ab500000000, - 0xaa53c3ca00000000, 0x1fff994a00000000, 0x8c64503500000000, - 0x2e70f3d900000000, 0xbdeb3aa600000000, 0x0847602600000000, - 0x9bdca95900000000, 0x2318a4fd00000000, 0xb0836d8200000000, - 0x052f370200000000, 0x96b4fe7d00000000, 0x2946caf900000000, - 0xbadd038600000000, 0x0f71590600000000, 0x9cea907900000000, - 0x242e9ddd00000000, 0xb7b554a200000000, 0x02190e2200000000, - 0x9182c75d00000000, 0x339664b100000000, 0xa00dadce00000000, - 0x15a1f74e00000000, 0x863a3e3100000000, 0x3efe339500000000, - 0xad65faea00000000, 0x18c9a06a00000000, 0x8b52691500000000, - 0x1de6976800000000, 0x8e7d5e1700000000, 0x3bd1049700000000, - 0xa84acde800000000, 0x108ec04c00000000, 0x8315093300000000, - 0x36b953b300000000, 0xa5229acc00000000, 0x0736392000000000, - 0x94adf05f00000000, 0x2101aadf00000000, 0xb29a63a000000000, - 0x0a5e6e0400000000, 0x99c5a77b00000000, 0x2c69fdfb00000000, - 0xbff2348400000000, 0x138ae52800000000, 0x80112c5700000000, - 0x35bd76d700000000, 0xa626bfa800000000, 0x1ee2b20c00000000, - 0x8d797b7300000000, 0x38d521f300000000, 0xab4ee88c00000000, - 0x095a4b6000000000, 0x9ac1821f00000000, 0x2f6dd89f00000000, - 0xbcf611e000000000, 0x04321c4400000000, 0x97a9d53b00000000, - 0x22058fbb00000000, 0xb19e46c400000000, 0x272ab8b900000000, - 0xb4b171c600000000, 0x011d2b4600000000, 0x9286e23900000000, - 0x2a42ef9d00000000, 0xb9d926e200000000, 0x0c757c6200000000, - 0x9feeb51d00000000, 0x3dfa16f100000000, 0xae61df8e00000000, - 0x1bcd850e00000000, 0x88564c7100000000, 0x309241d500000000, - 0xa30988aa00000000, 0x16a5d22a00000000, 0x853e1b5500000000, - 0x3acc2fd100000000, 0xa957e6ae00000000, 0x1cfbbc2e00000000, - 0x8f60755100000000, 0x37a478f500000000, 0xa43fb18a00000000, - 0x1193eb0a00000000, 0x8208227500000000, 0x201c819900000000, - 0xb38748e600000000, 0x062b126600000000, 0x95b0db1900000000, - 0x2d74d6bd00000000, 0xbeef1fc200000000, 0x0b43454200000000, - 0x98d88c3d00000000, 0x0e6c724000000000, 0x9df7bb3f00000000, - 0x285be1bf00000000, 0xbbc028c000000000, 0x0304256400000000, - 0x909fec1b00000000, 0x2533b69b00000000, 0xb6a87fe400000000, - 0x14bcdc0800000000, 0x8727157700000000, 0x328b4ff700000000, - 0xa110868800000000, 0x19d48b2c00000000, 0x8a4f425300000000, - 0x3fe318d300000000, 0xac78d1ac00000000, 0x2614cb5100000000, - 0xb58f022e00000000, 0x002358ae00000000, 0x93b891d100000000, - 0x2b7c9c7500000000, 0xb8e7550a00000000, 0x0d4b0f8a00000000, - 0x9ed0c6f500000000, 0x3cc4651900000000, 0xaf5fac6600000000, - 0x1af3f6e600000000, 0x89683f9900000000, 0x31ac323d00000000, - 0xa237fb4200000000, 0x179ba1c200000000, 0x840068bd00000000, - 0x12b496c000000000, 0x812f5fbf00000000, 0x3483053f00000000, - 0xa718cc4000000000, 0x1fdcc1e400000000, 0x8c47089b00000000, - 0x39eb521b00000000, 0xaa709b6400000000, 0x0864388800000000, - 0x9bfff1f700000000, 0x2e53ab7700000000, 0xbdc8620800000000, - 0x050c6fac00000000, 0x9697a6d300000000, 0x233bfc5300000000, - 0xb0a0352c00000000, 0x0f5201a800000000, 0x9cc9c8d700000000, - 0x2965925700000000, 0xbafe5b2800000000, 0x023a568c00000000, - 0x91a19ff300000000, 0x240dc57300000000, 0xb7960c0c00000000, - 0x1582afe000000000, 0x8619669f00000000, 0x33b53c1f00000000, - 0xa02ef56000000000, 0x18eaf8c400000000, 0x8b7131bb00000000, - 0x3edd6b3b00000000, 0xad46a24400000000, 0x3bf25c3900000000, - 0xa869954600000000, 0x1dc5cfc600000000, 0x8e5e06b900000000, - 0x369a0b1d00000000, 0xa501c26200000000, 0x10ad98e200000000, - 0x8336519d00000000, 0x2122f27100000000, 0xb2b93b0e00000000, - 0x0715618e00000000, 0x948ea8f100000000, 0x2c4aa55500000000, - 0xbfd16c2a00000000, 0x0a7d36aa00000000, 0x99e6ffd500000000, - 0x359e2e7900000000, 0xa605e70600000000, 0x13a9bd8600000000, - 0x803274f900000000, 0x38f6795d00000000, 0xab6db02200000000, - 0x1ec1eaa200000000, 0x8d5a23dd00000000, 0x2f4e803100000000, - 0xbcd5494e00000000, 0x097913ce00000000, 0x9ae2dab100000000, - 0x2226d71500000000, 0xb1bd1e6a00000000, 0x041144ea00000000, - 0x978a8d9500000000, 0x013e73e800000000, 0x92a5ba9700000000, - 0x2709e01700000000, 0xb492296800000000, 0x0c5624cc00000000, - 0x9fcdedb300000000, 0x2a61b73300000000, 0xb9fa7e4c00000000, - 0x1beedda000000000, 0x887514df00000000, 0x3dd94e5f00000000, - 0xae42872000000000, 0x16868a8400000000, 0x851d43fb00000000, - 0x30b1197b00000000, 0xa32ad00400000000, 0x1cd8e48000000000, - 0x8f432dff00000000, 0x3aef777f00000000, 0xa974be0000000000, - 0x11b0b3a400000000, 0x822b7adb00000000, 0x3787205b00000000, - 0xa41ce92400000000, 0x06084ac800000000, 0x959383b700000000, - 0x203fd93700000000, 0xb3a4104800000000, 0x0b601dec00000000, - 0x98fbd49300000000, 0x2d578e1300000000, 0xbecc476c00000000, - 0x2878b91100000000, 0xbbe3706e00000000, 0x0e4f2aee00000000, - 0x9dd4e39100000000, 0x2510ee3500000000, 0xb68b274a00000000, - 0x03277dca00000000, 0x90bcb4b500000000, 0x32a8175900000000, - 0xa133de2600000000, 0x149f84a600000000, 0x87044dd900000000, - 0x3fc0407d00000000, 0xac5b890200000000, 0x19f7d38200000000, - 0x8a6c1afd00000000}, - {0x0000000000000000, 0x650b796900000000, 0xca16f2d200000000, - 0xaf1d8bbb00000000, 0xd52b957e00000000, 0xb020ec1700000000, - 0x1f3d67ac00000000, 0x7a361ec500000000, 0xaa572afd00000000, - 0xcf5c539400000000, 0x6041d82f00000000, 0x054aa14600000000, - 0x7f7cbf8300000000, 0x1a77c6ea00000000, 0xb56a4d5100000000, - 0xd061343800000000, 0x15a9252100000000, 0x70a25c4800000000, - 0xdfbfd7f300000000, 0xbab4ae9a00000000, 0xc082b05f00000000, - 0xa589c93600000000, 0x0a94428d00000000, 0x6f9f3be400000000, - 0xbffe0fdc00000000, 0xdaf576b500000000, 0x75e8fd0e00000000, - 0x10e3846700000000, 0x6ad59aa200000000, 0x0fdee3cb00000000, - 0xa0c3687000000000, 0xc5c8111900000000, 0x2a524b4200000000, - 0x4f59322b00000000, 0xe044b99000000000, 0x854fc0f900000000, - 0xff79de3c00000000, 0x9a72a75500000000, 0x356f2cee00000000, - 0x5064558700000000, 0x800561bf00000000, 0xe50e18d600000000, - 0x4a13936d00000000, 0x2f18ea0400000000, 0x552ef4c100000000, - 0x30258da800000000, 0x9f38061300000000, 0xfa337f7a00000000, - 0x3ffb6e6300000000, 0x5af0170a00000000, 0xf5ed9cb100000000, - 0x90e6e5d800000000, 0xead0fb1d00000000, 0x8fdb827400000000, - 0x20c609cf00000000, 0x45cd70a600000000, 0x95ac449e00000000, - 0xf0a73df700000000, 0x5fbab64c00000000, 0x3ab1cf2500000000, - 0x4087d1e000000000, 0x258ca88900000000, 0x8a91233200000000, - 0xef9a5a5b00000000, 0x54a4968400000000, 0x31afefed00000000, - 0x9eb2645600000000, 0xfbb91d3f00000000, 0x818f03fa00000000, - 0xe4847a9300000000, 0x4b99f12800000000, 0x2e92884100000000, - 0xfef3bc7900000000, 0x9bf8c51000000000, 0x34e54eab00000000, - 0x51ee37c200000000, 0x2bd8290700000000, 0x4ed3506e00000000, - 0xe1cedbd500000000, 0x84c5a2bc00000000, 0x410db3a500000000, - 0x2406cacc00000000, 0x8b1b417700000000, 0xee10381e00000000, - 0x942626db00000000, 0xf12d5fb200000000, 0x5e30d40900000000, - 0x3b3bad6000000000, 0xeb5a995800000000, 0x8e51e03100000000, - 0x214c6b8a00000000, 0x444712e300000000, 0x3e710c2600000000, - 0x5b7a754f00000000, 0xf467fef400000000, 0x916c879d00000000, - 0x7ef6ddc600000000, 0x1bfda4af00000000, 0xb4e02f1400000000, - 0xd1eb567d00000000, 0xabdd48b800000000, 0xced631d100000000, - 0x61cbba6a00000000, 0x04c0c30300000000, 0xd4a1f73b00000000, - 0xb1aa8e5200000000, 0x1eb705e900000000, 0x7bbc7c8000000000, - 0x018a624500000000, 0x64811b2c00000000, 0xcb9c909700000000, - 0xae97e9fe00000000, 0x6b5ff8e700000000, 0x0e54818e00000000, - 0xa1490a3500000000, 0xc442735c00000000, 0xbe746d9900000000, - 0xdb7f14f000000000, 0x74629f4b00000000, 0x1169e62200000000, - 0xc108d21a00000000, 0xa403ab7300000000, 0x0b1e20c800000000, - 0x6e1559a100000000, 0x1423476400000000, 0x71283e0d00000000, - 0xde35b5b600000000, 0xbb3eccdf00000000, 0xe94e5cd200000000, - 0x8c4525bb00000000, 0x2358ae0000000000, 0x4653d76900000000, - 0x3c65c9ac00000000, 0x596eb0c500000000, 0xf6733b7e00000000, - 0x9378421700000000, 0x4319762f00000000, 0x26120f4600000000, - 0x890f84fd00000000, 0xec04fd9400000000, 0x9632e35100000000, - 0xf3399a3800000000, 0x5c24118300000000, 0x392f68ea00000000, - 0xfce779f300000000, 0x99ec009a00000000, 0x36f18b2100000000, - 0x53faf24800000000, 0x29ccec8d00000000, 0x4cc795e400000000, - 0xe3da1e5f00000000, 0x86d1673600000000, 0x56b0530e00000000, - 0x33bb2a6700000000, 0x9ca6a1dc00000000, 0xf9add8b500000000, - 0x839bc67000000000, 0xe690bf1900000000, 0x498d34a200000000, - 0x2c864dcb00000000, 0xc31c179000000000, 0xa6176ef900000000, - 0x090ae54200000000, 0x6c019c2b00000000, 0x163782ee00000000, - 0x733cfb8700000000, 0xdc21703c00000000, 0xb92a095500000000, - 0x694b3d6d00000000, 0x0c40440400000000, 0xa35dcfbf00000000, - 0xc656b6d600000000, 0xbc60a81300000000, 0xd96bd17a00000000, - 0x76765ac100000000, 0x137d23a800000000, 0xd6b532b100000000, - 0xb3be4bd800000000, 0x1ca3c06300000000, 0x79a8b90a00000000, - 0x039ea7cf00000000, 0x6695dea600000000, 0xc988551d00000000, - 0xac832c7400000000, 0x7ce2184c00000000, 0x19e9612500000000, - 0xb6f4ea9e00000000, 0xd3ff93f700000000, 0xa9c98d3200000000, - 0xccc2f45b00000000, 0x63df7fe000000000, 0x06d4068900000000, - 0xbdeaca5600000000, 0xd8e1b33f00000000, 0x77fc388400000000, - 0x12f741ed00000000, 0x68c15f2800000000, 0x0dca264100000000, - 0xa2d7adfa00000000, 0xc7dcd49300000000, 0x17bde0ab00000000, - 0x72b699c200000000, 0xddab127900000000, 0xb8a06b1000000000, - 0xc29675d500000000, 0xa79d0cbc00000000, 0x0880870700000000, - 0x6d8bfe6e00000000, 0xa843ef7700000000, 0xcd48961e00000000, - 0x62551da500000000, 0x075e64cc00000000, 0x7d687a0900000000, - 0x1863036000000000, 0xb77e88db00000000, 0xd275f1b200000000, - 0x0214c58a00000000, 0x671fbce300000000, 0xc802375800000000, - 0xad094e3100000000, 0xd73f50f400000000, 0xb234299d00000000, - 0x1d29a22600000000, 0x7822db4f00000000, 0x97b8811400000000, - 0xf2b3f87d00000000, 0x5dae73c600000000, 0x38a50aaf00000000, - 0x4293146a00000000, 0x27986d0300000000, 0x8885e6b800000000, - 0xed8e9fd100000000, 0x3defabe900000000, 0x58e4d28000000000, - 0xf7f9593b00000000, 0x92f2205200000000, 0xe8c43e9700000000, - 0x8dcf47fe00000000, 0x22d2cc4500000000, 0x47d9b52c00000000, - 0x8211a43500000000, 0xe71add5c00000000, 0x480756e700000000, - 0x2d0c2f8e00000000, 0x573a314b00000000, 0x3231482200000000, - 0x9d2cc39900000000, 0xf827baf000000000, 0x28468ec800000000, - 0x4d4df7a100000000, 0xe2507c1a00000000, 0x875b057300000000, - 0xfd6d1bb600000000, 0x986662df00000000, 0x377be96400000000, - 0x5270900d00000000}, - {0x0000000000000000, 0xdcecb13d00000000, 0xb8d9637b00000000, - 0x6435d24600000000, 0x70b3c7f600000000, 0xac5f76cb00000000, - 0xc86aa48d00000000, 0x148615b000000000, 0xa160fe3600000000, - 0x7d8c4f0b00000000, 0x19b99d4d00000000, 0xc5552c7000000000, - 0xd1d339c000000000, 0x0d3f88fd00000000, 0x690a5abb00000000, - 0xb5e6eb8600000000, 0x42c1fc6d00000000, 0x9e2d4d5000000000, - 0xfa189f1600000000, 0x26f42e2b00000000, 0x32723b9b00000000, - 0xee9e8aa600000000, 0x8aab58e000000000, 0x5647e9dd00000000, - 0xe3a1025b00000000, 0x3f4db36600000000, 0x5b78612000000000, - 0x8794d01d00000000, 0x9312c5ad00000000, 0x4ffe749000000000, - 0x2bcba6d600000000, 0xf72717eb00000000, 0x8482f9db00000000, - 0x586e48e600000000, 0x3c5b9aa000000000, 0xe0b72b9d00000000, - 0xf4313e2d00000000, 0x28dd8f1000000000, 0x4ce85d5600000000, - 0x9004ec6b00000000, 0x25e207ed00000000, 0xf90eb6d000000000, - 0x9d3b649600000000, 0x41d7d5ab00000000, 0x5551c01b00000000, - 0x89bd712600000000, 0xed88a36000000000, 0x3164125d00000000, - 0xc64305b600000000, 0x1aafb48b00000000, 0x7e9a66cd00000000, - 0xa276d7f000000000, 0xb6f0c24000000000, 0x6a1c737d00000000, - 0x0e29a13b00000000, 0xd2c5100600000000, 0x6723fb8000000000, - 0xbbcf4abd00000000, 0xdffa98fb00000000, 0x031629c600000000, - 0x17903c7600000000, 0xcb7c8d4b00000000, 0xaf495f0d00000000, - 0x73a5ee3000000000, 0x4903826c00000000, 0x95ef335100000000, - 0xf1dae11700000000, 0x2d36502a00000000, 0x39b0459a00000000, - 0xe55cf4a700000000, 0x816926e100000000, 0x5d8597dc00000000, - 0xe8637c5a00000000, 0x348fcd6700000000, 0x50ba1f2100000000, - 0x8c56ae1c00000000, 0x98d0bbac00000000, 0x443c0a9100000000, - 0x2009d8d700000000, 0xfce569ea00000000, 0x0bc27e0100000000, - 0xd72ecf3c00000000, 0xb31b1d7a00000000, 0x6ff7ac4700000000, - 0x7b71b9f700000000, 0xa79d08ca00000000, 0xc3a8da8c00000000, - 0x1f446bb100000000, 0xaaa2803700000000, 0x764e310a00000000, - 0x127be34c00000000, 0xce97527100000000, 0xda1147c100000000, - 0x06fdf6fc00000000, 0x62c824ba00000000, 0xbe24958700000000, - 0xcd817bb700000000, 0x116dca8a00000000, 0x755818cc00000000, - 0xa9b4a9f100000000, 0xbd32bc4100000000, 0x61de0d7c00000000, - 0x05ebdf3a00000000, 0xd9076e0700000000, 0x6ce1858100000000, - 0xb00d34bc00000000, 0xd438e6fa00000000, 0x08d457c700000000, - 0x1c52427700000000, 0xc0bef34a00000000, 0xa48b210c00000000, - 0x7867903100000000, 0x8f4087da00000000, 0x53ac36e700000000, - 0x3799e4a100000000, 0xeb75559c00000000, 0xfff3402c00000000, - 0x231ff11100000000, 0x472a235700000000, 0x9bc6926a00000000, - 0x2e2079ec00000000, 0xf2ccc8d100000000, 0x96f91a9700000000, - 0x4a15abaa00000000, 0x5e93be1a00000000, 0x827f0f2700000000, - 0xe64add6100000000, 0x3aa66c5c00000000, 0x920604d900000000, - 0x4eeab5e400000000, 0x2adf67a200000000, 0xf633d69f00000000, - 0xe2b5c32f00000000, 0x3e59721200000000, 0x5a6ca05400000000, - 0x8680116900000000, 0x3366faef00000000, 0xef8a4bd200000000, - 0x8bbf999400000000, 0x575328a900000000, 0x43d53d1900000000, - 0x9f398c2400000000, 0xfb0c5e6200000000, 0x27e0ef5f00000000, - 0xd0c7f8b400000000, 0x0c2b498900000000, 0x681e9bcf00000000, - 0xb4f22af200000000, 0xa0743f4200000000, 0x7c988e7f00000000, - 0x18ad5c3900000000, 0xc441ed0400000000, 0x71a7068200000000, - 0xad4bb7bf00000000, 0xc97e65f900000000, 0x1592d4c400000000, - 0x0114c17400000000, 0xddf8704900000000, 0xb9cda20f00000000, - 0x6521133200000000, 0x1684fd0200000000, 0xca684c3f00000000, - 0xae5d9e7900000000, 0x72b12f4400000000, 0x66373af400000000, - 0xbadb8bc900000000, 0xdeee598f00000000, 0x0202e8b200000000, - 0xb7e4033400000000, 0x6b08b20900000000, 0x0f3d604f00000000, - 0xd3d1d17200000000, 0xc757c4c200000000, 0x1bbb75ff00000000, - 0x7f8ea7b900000000, 0xa362168400000000, 0x5445016f00000000, - 0x88a9b05200000000, 0xec9c621400000000, 0x3070d32900000000, - 0x24f6c69900000000, 0xf81a77a400000000, 0x9c2fa5e200000000, - 0x40c314df00000000, 0xf525ff5900000000, 0x29c94e6400000000, - 0x4dfc9c2200000000, 0x91102d1f00000000, 0x859638af00000000, - 0x597a899200000000, 0x3d4f5bd400000000, 0xe1a3eae900000000, - 0xdb0586b500000000, 0x07e9378800000000, 0x63dce5ce00000000, - 0xbf3054f300000000, 0xabb6414300000000, 0x775af07e00000000, - 0x136f223800000000, 0xcf83930500000000, 0x7a65788300000000, - 0xa689c9be00000000, 0xc2bc1bf800000000, 0x1e50aac500000000, - 0x0ad6bf7500000000, 0xd63a0e4800000000, 0xb20fdc0e00000000, - 0x6ee36d3300000000, 0x99c47ad800000000, 0x4528cbe500000000, - 0x211d19a300000000, 0xfdf1a89e00000000, 0xe977bd2e00000000, - 0x359b0c1300000000, 0x51aede5500000000, 0x8d426f6800000000, - 0x38a484ee00000000, 0xe44835d300000000, 0x807de79500000000, - 0x5c9156a800000000, 0x4817431800000000, 0x94fbf22500000000, - 0xf0ce206300000000, 0x2c22915e00000000, 0x5f877f6e00000000, - 0x836bce5300000000, 0xe75e1c1500000000, 0x3bb2ad2800000000, - 0x2f34b89800000000, 0xf3d809a500000000, 0x97eddbe300000000, - 0x4b016ade00000000, 0xfee7815800000000, 0x220b306500000000, - 0x463ee22300000000, 0x9ad2531e00000000, 0x8e5446ae00000000, - 0x52b8f79300000000, 0x368d25d500000000, 0xea6194e800000000, - 0x1d46830300000000, 0xc1aa323e00000000, 0xa59fe07800000000, - 0x7973514500000000, 0x6df544f500000000, 0xb119f5c800000000, - 0xd52c278e00000000, 0x09c096b300000000, 0xbc267d3500000000, - 0x60cacc0800000000, 0x04ff1e4e00000000, 0xd813af7300000000, - 0xcc95bac300000000, 0x10790bfe00000000, 0x744cd9b800000000, - 0xa8a0688500000000}}; + {0x0000000000000000, 0xa19017e800000000, 0x03275e0b00000000, + 0xa2b749e300000000, 0x064ebc1600000000, 0xa7deabfe00000000, + 0x0569e21d00000000, 0xa4f9f5f500000000, 0x0c9c782d00000000, + 0xad0c6fc500000000, 0x0fbb262600000000, 0xae2b31ce00000000, + 0x0ad2c43b00000000, 0xab42d3d300000000, 0x09f59a3000000000, + 0xa8658dd800000000, 0x1838f15a00000000, 0xb9a8e6b200000000, + 0x1b1faf5100000000, 0xba8fb8b900000000, 0x1e764d4c00000000, + 0xbfe65aa400000000, 0x1d51134700000000, 0xbcc104af00000000, + 0x14a4897700000000, 0xb5349e9f00000000, 0x1783d77c00000000, + 0xb613c09400000000, 0x12ea356100000000, 0xb37a228900000000, + 0x11cd6b6a00000000, 0xb05d7c8200000000, 0x3070e2b500000000, + 0x91e0f55d00000000, 0x3357bcbe00000000, 0x92c7ab5600000000, + 0x363e5ea300000000, 0x97ae494b00000000, 0x351900a800000000, + 0x9489174000000000, 0x3cec9a9800000000, 0x9d7c8d7000000000, + 0x3fcbc49300000000, 0x9e5bd37b00000000, 0x3aa2268e00000000, + 0x9b32316600000000, 0x3985788500000000, 0x98156f6d00000000, + 0x284813ef00000000, 0x89d8040700000000, 0x2b6f4de400000000, + 0x8aff5a0c00000000, 0x2e06aff900000000, 0x8f96b81100000000, + 0x2d21f1f200000000, 0x8cb1e61a00000000, 0x24d46bc200000000, + 0x85447c2a00000000, 0x27f335c900000000, 0x8663222100000000, + 0x229ad7d400000000, 0x830ac03c00000000, 0x21bd89df00000000, + 0x802d9e3700000000, 0x21e6b5b000000000, 0x8076a25800000000, + 0x22c1ebbb00000000, 0x8351fc5300000000, 0x27a809a600000000, + 0x86381e4e00000000, 0x248f57ad00000000, 0x851f404500000000, + 0x2d7acd9d00000000, 0x8ceada7500000000, 0x2e5d939600000000, + 0x8fcd847e00000000, 0x2b34718b00000000, 0x8aa4666300000000, + 0x28132f8000000000, 0x8983386800000000, 0x39de44ea00000000, + 0x984e530200000000, 0x3af91ae100000000, 0x9b690d0900000000, + 0x3f90f8fc00000000, 0x9e00ef1400000000, 0x3cb7a6f700000000, + 0x9d27b11f00000000, 0x35423cc700000000, 0x94d22b2f00000000, + 0x366562cc00000000, 0x97f5752400000000, 0x330c80d100000000, + 0x929c973900000000, 0x302bdeda00000000, 0x91bbc93200000000, + 0x1196570500000000, 0xb00640ed00000000, 0x12b1090e00000000, + 0xb3211ee600000000, 0x17d8eb1300000000, 0xb648fcfb00000000, + 0x14ffb51800000000, 0xb56fa2f000000000, 0x1d0a2f2800000000, + 0xbc9a38c000000000, 0x1e2d712300000000, 0xbfbd66cb00000000, + 0x1b44933e00000000, 0xbad484d600000000, 0x1863cd3500000000, + 0xb9f3dadd00000000, 0x09aea65f00000000, 0xa83eb1b700000000, + 0x0a89f85400000000, 0xab19efbc00000000, 0x0fe01a4900000000, + 0xae700da100000000, 0x0cc7444200000000, 0xad5753aa00000000, + 0x0532de7200000000, 0xa4a2c99a00000000, 0x0615807900000000, + 0xa785979100000000, 0x037c626400000000, 0xa2ec758c00000000, + 0x005b3c6f00000000, 0xa1cb2b8700000000, 0x03ca1aba00000000, + 0xa25a0d5200000000, 0x00ed44b100000000, 0xa17d535900000000, + 0x0584a6ac00000000, 0xa414b14400000000, 0x06a3f8a700000000, + 0xa733ef4f00000000, 0x0f56629700000000, 0xaec6757f00000000, + 0x0c713c9c00000000, 0xade12b7400000000, 0x0918de8100000000, + 0xa888c96900000000, 0x0a3f808a00000000, 0xabaf976200000000, + 0x1bf2ebe000000000, 0xba62fc0800000000, 0x18d5b5eb00000000, + 0xb945a20300000000, 0x1dbc57f600000000, 0xbc2c401e00000000, + 0x1e9b09fd00000000, 0xbf0b1e1500000000, 0x176e93cd00000000, + 0xb6fe842500000000, 0x1449cdc600000000, 0xb5d9da2e00000000, + 0x11202fdb00000000, 0xb0b0383300000000, 0x120771d000000000, + 0xb397663800000000, 0x33baf80f00000000, 0x922aefe700000000, + 0x309da60400000000, 0x910db1ec00000000, 0x35f4441900000000, + 0x946453f100000000, 0x36d31a1200000000, 0x97430dfa00000000, + 0x3f26802200000000, 0x9eb697ca00000000, 0x3c01de2900000000, + 0x9d91c9c100000000, 0x39683c3400000000, 0x98f82bdc00000000, + 0x3a4f623f00000000, 0x9bdf75d700000000, 0x2b82095500000000, + 0x8a121ebd00000000, 0x28a5575e00000000, 0x893540b600000000, + 0x2dccb54300000000, 0x8c5ca2ab00000000, 0x2eebeb4800000000, + 0x8f7bfca000000000, 0x271e717800000000, 0x868e669000000000, + 0x24392f7300000000, 0x85a9389b00000000, 0x2150cd6e00000000, + 0x80c0da8600000000, 0x2277936500000000, 0x83e7848d00000000, + 0x222caf0a00000000, 0x83bcb8e200000000, 0x210bf10100000000, + 0x809be6e900000000, 0x2462131c00000000, 0x85f204f400000000, + 0x27454d1700000000, 0x86d55aff00000000, 0x2eb0d72700000000, + 0x8f20c0cf00000000, 0x2d97892c00000000, 0x8c079ec400000000, + 0x28fe6b3100000000, 0x896e7cd900000000, 0x2bd9353a00000000, + 0x8a4922d200000000, 0x3a145e5000000000, 0x9b8449b800000000, + 0x3933005b00000000, 0x98a317b300000000, 0x3c5ae24600000000, + 0x9dcaf5ae00000000, 0x3f7dbc4d00000000, 0x9eedaba500000000, + 0x3688267d00000000, 0x9718319500000000, 0x35af787600000000, + 0x943f6f9e00000000, 0x30c69a6b00000000, 0x91568d8300000000, + 0x33e1c46000000000, 0x9271d38800000000, 0x125c4dbf00000000, + 0xb3cc5a5700000000, 0x117b13b400000000, 0xb0eb045c00000000, + 0x1412f1a900000000, 0xb582e64100000000, 0x1735afa200000000, + 0xb6a5b84a00000000, 0x1ec0359200000000, 0xbf50227a00000000, + 0x1de76b9900000000, 0xbc777c7100000000, 0x188e898400000000, + 0xb91e9e6c00000000, 0x1ba9d78f00000000, 0xba39c06700000000, + 0x0a64bce500000000, 0xabf4ab0d00000000, 0x0943e2ee00000000, + 0xa8d3f50600000000, 0x0c2a00f300000000, 0xadba171b00000000, + 0x0f0d5ef800000000, 0xae9d491000000000, 0x06f8c4c800000000, + 0xa768d32000000000, 0x05df9ac300000000, 0xa44f8d2b00000000, + 0x00b678de00000000, 0xa1266f3600000000, 0x039126d500000000, + 0xa201313d00000000}, + {0x0000000000000000, 0xee8439a100000000, 0x9d0f029900000000, + 0x738b3b3800000000, 0x7b1975e900000000, 0x959d4c4800000000, + 0xe616777000000000, 0x08924ed100000000, 0xb7349b0900000000, + 0x59b0a2a800000000, 0x2a3b999000000000, 0xc4bfa03100000000, + 0xcc2deee000000000, 0x22a9d74100000000, 0x5122ec7900000000, + 0xbfa6d5d800000000, 0x6e69361300000000, 0x80ed0fb200000000, + 0xf366348a00000000, 0x1de20d2b00000000, 0x157043fa00000000, + 0xfbf47a5b00000000, 0x887f416300000000, 0x66fb78c200000000, + 0xd95dad1a00000000, 0x37d994bb00000000, 0x4452af8300000000, + 0xaad6962200000000, 0xa244d8f300000000, 0x4cc0e15200000000, + 0x3f4bda6a00000000, 0xd1cfe3cb00000000, 0xdcd26c2600000000, + 0x3256558700000000, 0x41dd6ebf00000000, 0xaf59571e00000000, + 0xa7cb19cf00000000, 0x494f206e00000000, 0x3ac41b5600000000, + 0xd44022f700000000, 0x6be6f72f00000000, 0x8562ce8e00000000, + 0xf6e9f5b600000000, 0x186dcc1700000000, 0x10ff82c600000000, + 0xfe7bbb6700000000, 0x8df0805f00000000, 0x6374b9fe00000000, + 0xb2bb5a3500000000, 0x5c3f639400000000, 0x2fb458ac00000000, + 0xc130610d00000000, 0xc9a22fdc00000000, 0x2726167d00000000, + 0x54ad2d4500000000, 0xba2914e400000000, 0x058fc13c00000000, + 0xeb0bf89d00000000, 0x9880c3a500000000, 0x7604fa0400000000, + 0x7e96b4d500000000, 0x90128d7400000000, 0xe399b64c00000000, + 0x0d1d8fed00000000, 0xb8a5d94c00000000, 0x5621e0ed00000000, + 0x25aadbd500000000, 0xcb2ee27400000000, 0xc3bcaca500000000, + 0x2d38950400000000, 0x5eb3ae3c00000000, 0xb037979d00000000, + 0x0f91424500000000, 0xe1157be400000000, 0x929e40dc00000000, + 0x7c1a797d00000000, 0x748837ac00000000, 0x9a0c0e0d00000000, + 0xe987353500000000, 0x07030c9400000000, 0xd6ccef5f00000000, + 0x3848d6fe00000000, 0x4bc3edc600000000, 0xa547d46700000000, + 0xadd59ab600000000, 0x4351a31700000000, 0x30da982f00000000, + 0xde5ea18e00000000, 0x61f8745600000000, 0x8f7c4df700000000, + 0xfcf776cf00000000, 0x12734f6e00000000, 0x1ae101bf00000000, + 0xf465381e00000000, 0x87ee032600000000, 0x696a3a8700000000, + 0x6477b56a00000000, 0x8af38ccb00000000, 0xf978b7f300000000, + 0x17fc8e5200000000, 0x1f6ec08300000000, 0xf1eaf92200000000, + 0x8261c21a00000000, 0x6ce5fbbb00000000, 0xd3432e6300000000, + 0x3dc717c200000000, 0x4e4c2cfa00000000, 0xa0c8155b00000000, + 0xa85a5b8a00000000, 0x46de622b00000000, 0x3555591300000000, + 0xdbd160b200000000, 0x0a1e837900000000, 0xe49abad800000000, + 0x971181e000000000, 0x7995b84100000000, 0x7107f69000000000, + 0x9f83cf3100000000, 0xec08f40900000000, 0x028ccda800000000, + 0xbd2a187000000000, 0x53ae21d100000000, 0x20251ae900000000, + 0xcea1234800000000, 0xc6336d9900000000, 0x28b7543800000000, + 0x5b3c6f0000000000, 0xb5b856a100000000, 0x704bb39900000000, + 0x9ecf8a3800000000, 0xed44b10000000000, 0x03c088a100000000, + 0x0b52c67000000000, 0xe5d6ffd100000000, 0x965dc4e900000000, + 0x78d9fd4800000000, 0xc77f289000000000, 0x29fb113100000000, + 0x5a702a0900000000, 0xb4f413a800000000, 0xbc665d7900000000, + 0x52e264d800000000, 0x21695fe000000000, 0xcfed664100000000, + 0x1e22858a00000000, 0xf0a6bc2b00000000, 0x832d871300000000, + 0x6da9beb200000000, 0x653bf06300000000, 0x8bbfc9c200000000, + 0xf834f2fa00000000, 0x16b0cb5b00000000, 0xa9161e8300000000, + 0x4792272200000000, 0x34191c1a00000000, 0xda9d25bb00000000, + 0xd20f6b6a00000000, 0x3c8b52cb00000000, 0x4f0069f300000000, + 0xa184505200000000, 0xac99dfbf00000000, 0x421de61e00000000, + 0x3196dd2600000000, 0xdf12e48700000000, 0xd780aa5600000000, + 0x390493f700000000, 0x4a8fa8cf00000000, 0xa40b916e00000000, + 0x1bad44b600000000, 0xf5297d1700000000, 0x86a2462f00000000, + 0x68267f8e00000000, 0x60b4315f00000000, 0x8e3008fe00000000, + 0xfdbb33c600000000, 0x133f0a6700000000, 0xc2f0e9ac00000000, + 0x2c74d00d00000000, 0x5fffeb3500000000, 0xb17bd29400000000, + 0xb9e99c4500000000, 0x576da5e400000000, 0x24e69edc00000000, + 0xca62a77d00000000, 0x75c472a500000000, 0x9b404b0400000000, + 0xe8cb703c00000000, 0x064f499d00000000, 0x0edd074c00000000, + 0xe0593eed00000000, 0x93d205d500000000, 0x7d563c7400000000, + 0xc8ee6ad500000000, 0x266a537400000000, 0x55e1684c00000000, + 0xbb6551ed00000000, 0xb3f71f3c00000000, 0x5d73269d00000000, + 0x2ef81da500000000, 0xc07c240400000000, 0x7fdaf1dc00000000, + 0x915ec87d00000000, 0xe2d5f34500000000, 0x0c51cae400000000, + 0x04c3843500000000, 0xea47bd9400000000, 0x99cc86ac00000000, + 0x7748bf0d00000000, 0xa6875cc600000000, 0x4803656700000000, + 0x3b885e5f00000000, 0xd50c67fe00000000, 0xdd9e292f00000000, + 0x331a108e00000000, 0x40912bb600000000, 0xae15121700000000, + 0x11b3c7cf00000000, 0xff37fe6e00000000, 0x8cbcc55600000000, + 0x6238fcf700000000, 0x6aaab22600000000, 0x842e8b8700000000, + 0xf7a5b0bf00000000, 0x1921891e00000000, 0x143c06f300000000, + 0xfab83f5200000000, 0x8933046a00000000, 0x67b73dcb00000000, + 0x6f25731a00000000, 0x81a14abb00000000, 0xf22a718300000000, + 0x1cae482200000000, 0xa3089dfa00000000, 0x4d8ca45b00000000, + 0x3e079f6300000000, 0xd083a6c200000000, 0xd811e81300000000, + 0x3695d1b200000000, 0x451eea8a00000000, 0xab9ad32b00000000, + 0x7a5530e000000000, 0x94d1094100000000, 0xe75a327900000000, + 0x09de0bd800000000, 0x014c450900000000, 0xefc87ca800000000, + 0x9c43479000000000, 0x72c77e3100000000, 0xcd61abe900000000, + 0x23e5924800000000, 0x506ea97000000000, 0xbeea90d100000000, + 0xb678de0000000000, 0x58fce7a100000000, 0x2b77dc9900000000, + 0xc5f3e53800000000}, + {0x0000000000000000, 0xfbf6134700000000, 0xf6ed278e00000000, + 0x0d1b34c900000000, 0xaddd3ec700000000, 0x562b2d8000000000, + 0x5b30194900000000, 0xa0c60a0e00000000, 0x1bbd0c5500000000, + 0xe04b1f1200000000, 0xed502bdb00000000, 0x16a6389c00000000, + 0xb660329200000000, 0x4d9621d500000000, 0x408d151c00000000, + 0xbb7b065b00000000, 0x367a19aa00000000, 0xcd8c0aed00000000, + 0xc0973e2400000000, 0x3b612d6300000000, 0x9ba7276d00000000, + 0x6051342a00000000, 0x6d4a00e300000000, 0x96bc13a400000000, + 0x2dc715ff00000000, 0xd63106b800000000, 0xdb2a327100000000, + 0x20dc213600000000, 0x801a2b3800000000, 0x7bec387f00000000, + 0x76f70cb600000000, 0x8d011ff100000000, 0x2df2438f00000000, + 0xd60450c800000000, 0xdb1f640100000000, 0x20e9774600000000, + 0x802f7d4800000000, 0x7bd96e0f00000000, 0x76c25ac600000000, + 0x8d34498100000000, 0x364f4fda00000000, 0xcdb95c9d00000000, + 0xc0a2685400000000, 0x3b547b1300000000, 0x9b92711d00000000, + 0x6064625a00000000, 0x6d7f569300000000, 0x968945d400000000, + 0x1b885a2500000000, 0xe07e496200000000, 0xed657dab00000000, + 0x16936eec00000000, 0xb65564e200000000, 0x4da377a500000000, + 0x40b8436c00000000, 0xbb4e502b00000000, 0x0035567000000000, + 0xfbc3453700000000, 0xf6d871fe00000000, 0x0d2e62b900000000, + 0xade868b700000000, 0x561e7bf000000000, 0x5b054f3900000000, + 0xa0f35c7e00000000, 0x1be2f6c500000000, 0xe014e58200000000, + 0xed0fd14b00000000, 0x16f9c20c00000000, 0xb63fc80200000000, + 0x4dc9db4500000000, 0x40d2ef8c00000000, 0xbb24fccb00000000, + 0x005ffa9000000000, 0xfba9e9d700000000, 0xf6b2dd1e00000000, + 0x0d44ce5900000000, 0xad82c45700000000, 0x5674d71000000000, + 0x5b6fe3d900000000, 0xa099f09e00000000, 0x2d98ef6f00000000, + 0xd66efc2800000000, 0xdb75c8e100000000, 0x2083dba600000000, + 0x8045d1a800000000, 0x7bb3c2ef00000000, 0x76a8f62600000000, + 0x8d5ee56100000000, 0x3625e33a00000000, 0xcdd3f07d00000000, + 0xc0c8c4b400000000, 0x3b3ed7f300000000, 0x9bf8ddfd00000000, + 0x600eceba00000000, 0x6d15fa7300000000, 0x96e3e93400000000, + 0x3610b54a00000000, 0xcde6a60d00000000, 0xc0fd92c400000000, + 0x3b0b818300000000, 0x9bcd8b8d00000000, 0x603b98ca00000000, + 0x6d20ac0300000000, 0x96d6bf4400000000, 0x2dadb91f00000000, + 0xd65baa5800000000, 0xdb409e9100000000, 0x20b68dd600000000, + 0x807087d800000000, 0x7b86949f00000000, 0x769da05600000000, + 0x8d6bb31100000000, 0x006aace000000000, 0xfb9cbfa700000000, + 0xf6878b6e00000000, 0x0d71982900000000, 0xadb7922700000000, + 0x5641816000000000, 0x5b5ab5a900000000, 0xa0aca6ee00000000, + 0x1bd7a0b500000000, 0xe021b3f200000000, 0xed3a873b00000000, + 0x16cc947c00000000, 0xb60a9e7200000000, 0x4dfc8d3500000000, + 0x40e7b9fc00000000, 0xbb11aabb00000000, 0x77c29c5000000000, + 0x8c348f1700000000, 0x812fbbde00000000, 0x7ad9a89900000000, + 0xda1fa29700000000, 0x21e9b1d000000000, 0x2cf2851900000000, + 0xd704965e00000000, 0x6c7f900500000000, 0x9789834200000000, + 0x9a92b78b00000000, 0x6164a4cc00000000, 0xc1a2aec200000000, + 0x3a54bd8500000000, 0x374f894c00000000, 0xccb99a0b00000000, + 0x41b885fa00000000, 0xba4e96bd00000000, 0xb755a27400000000, + 0x4ca3b13300000000, 0xec65bb3d00000000, 0x1793a87a00000000, + 0x1a889cb300000000, 0xe17e8ff400000000, 0x5a0589af00000000, + 0xa1f39ae800000000, 0xace8ae2100000000, 0x571ebd6600000000, + 0xf7d8b76800000000, 0x0c2ea42f00000000, 0x013590e600000000, + 0xfac383a100000000, 0x5a30dfdf00000000, 0xa1c6cc9800000000, + 0xacddf85100000000, 0x572beb1600000000, 0xf7ede11800000000, + 0x0c1bf25f00000000, 0x0100c69600000000, 0xfaf6d5d100000000, + 0x418dd38a00000000, 0xba7bc0cd00000000, 0xb760f40400000000, + 0x4c96e74300000000, 0xec50ed4d00000000, 0x17a6fe0a00000000, + 0x1abdcac300000000, 0xe14bd98400000000, 0x6c4ac67500000000, + 0x97bcd53200000000, 0x9aa7e1fb00000000, 0x6151f2bc00000000, + 0xc197f8b200000000, 0x3a61ebf500000000, 0x377adf3c00000000, + 0xcc8ccc7b00000000, 0x77f7ca2000000000, 0x8c01d96700000000, + 0x811aedae00000000, 0x7aecfee900000000, 0xda2af4e700000000, + 0x21dce7a000000000, 0x2cc7d36900000000, 0xd731c02e00000000, + 0x6c206a9500000000, 0x97d679d200000000, 0x9acd4d1b00000000, + 0x613b5e5c00000000, 0xc1fd545200000000, 0x3a0b471500000000, + 0x371073dc00000000, 0xcce6609b00000000, 0x779d66c000000000, + 0x8c6b758700000000, 0x8170414e00000000, 0x7a86520900000000, + 0xda40580700000000, 0x21b64b4000000000, 0x2cad7f8900000000, + 0xd75b6cce00000000, 0x5a5a733f00000000, 0xa1ac607800000000, + 0xacb754b100000000, 0x574147f600000000, 0xf7874df800000000, + 0x0c715ebf00000000, 0x016a6a7600000000, 0xfa9c793100000000, + 0x41e77f6a00000000, 0xba116c2d00000000, 0xb70a58e400000000, + 0x4cfc4ba300000000, 0xec3a41ad00000000, 0x17cc52ea00000000, + 0x1ad7662300000000, 0xe121756400000000, 0x41d2291a00000000, + 0xba243a5d00000000, 0xb73f0e9400000000, 0x4cc91dd300000000, + 0xec0f17dd00000000, 0x17f9049a00000000, 0x1ae2305300000000, + 0xe114231400000000, 0x5a6f254f00000000, 0xa199360800000000, + 0xac8202c100000000, 0x5774118600000000, 0xf7b21b8800000000, + 0x0c4408cf00000000, 0x015f3c0600000000, 0xfaa92f4100000000, + 0x77a830b000000000, 0x8c5e23f700000000, 0x8145173e00000000, + 0x7ab3047900000000, 0xda750e7700000000, 0x21831d3000000000, + 0x2c9829f900000000, 0xd76e3abe00000000, 0x6c153ce500000000, + 0x97e32fa200000000, 0x9af81b6b00000000, 0x610e082c00000000, + 0xc1c8022200000000, 0x3a3e116500000000, 0x372525ac00000000, + 0xccd336eb00000000}, + {0x0000000000000000, 0x6238282a00000000, 0xc470505400000000, + 0xa648787e00000000, 0x88e1a0a800000000, 0xead9888200000000, + 0x4c91f0fc00000000, 0x2ea9d8d600000000, 0x51c5308a00000000, + 0x33fd18a000000000, 0x95b560de00000000, 0xf78d48f400000000, + 0xd924902200000000, 0xbb1cb80800000000, 0x1d54c07600000000, + 0x7f6ce85c00000000, 0xe38c10cf00000000, 0x81b438e500000000, + 0x27fc409b00000000, 0x45c468b100000000, 0x6b6db06700000000, + 0x0955984d00000000, 0xaf1de03300000000, 0xcd25c81900000000, + 0xb249204500000000, 0xd071086f00000000, 0x7639701100000000, + 0x1401583b00000000, 0x3aa880ed00000000, 0x5890a8c700000000, + 0xfed8d0b900000000, 0x9ce0f89300000000, 0x871f504500000000, + 0xe527786f00000000, 0x436f001100000000, 0x2157283b00000000, + 0x0ffef0ed00000000, 0x6dc6d8c700000000, 0xcb8ea0b900000000, + 0xa9b6889300000000, 0xd6da60cf00000000, 0xb4e248e500000000, + 0x12aa309b00000000, 0x709218b100000000, 0x5e3bc06700000000, + 0x3c03e84d00000000, 0x9a4b903300000000, 0xf873b81900000000, + 0x6493408a00000000, 0x06ab68a000000000, 0xa0e310de00000000, + 0xc2db38f400000000, 0xec72e02200000000, 0x8e4ac80800000000, + 0x2802b07600000000, 0x4a3a985c00000000, 0x3556700000000000, + 0x576e582a00000000, 0xf126205400000000, 0x931e087e00000000, + 0xbdb7d0a800000000, 0xdf8ff88200000000, 0x79c780fc00000000, + 0x1bffa8d600000000, 0x0e3fa08a00000000, 0x6c0788a000000000, + 0xca4ff0de00000000, 0xa877d8f400000000, 0x86de002200000000, + 0xe4e6280800000000, 0x42ae507600000000, 0x2096785c00000000, + 0x5ffa900000000000, 0x3dc2b82a00000000, 0x9b8ac05400000000, + 0xf9b2e87e00000000, 0xd71b30a800000000, 0xb523188200000000, + 0x136b60fc00000000, 0x715348d600000000, 0xedb3b04500000000, + 0x8f8b986f00000000, 0x29c3e01100000000, 0x4bfbc83b00000000, + 0x655210ed00000000, 0x076a38c700000000, 0xa12240b900000000, + 0xc31a689300000000, 0xbc7680cf00000000, 0xde4ea8e500000000, + 0x7806d09b00000000, 0x1a3ef8b100000000, 0x3497206700000000, + 0x56af084d00000000, 0xf0e7703300000000, 0x92df581900000000, + 0x8920f0cf00000000, 0xeb18d8e500000000, 0x4d50a09b00000000, + 0x2f6888b100000000, 0x01c1506700000000, 0x63f9784d00000000, + 0xc5b1003300000000, 0xa789281900000000, 0xd8e5c04500000000, + 0xbadde86f00000000, 0x1c95901100000000, 0x7eadb83b00000000, + 0x500460ed00000000, 0x323c48c700000000, 0x947430b900000000, + 0xf64c189300000000, 0x6aace00000000000, 0x0894c82a00000000, + 0xaedcb05400000000, 0xcce4987e00000000, 0xe24d40a800000000, + 0x8075688200000000, 0x263d10fc00000000, 0x440538d600000000, + 0x3b69d08a00000000, 0x5951f8a000000000, 0xff1980de00000000, + 0x9d21a8f400000000, 0xb388702200000000, 0xd1b0580800000000, + 0x77f8207600000000, 0x15c0085c00000000, 0x5d7831ce00000000, + 0x3f4019e400000000, 0x9908619a00000000, 0xfb3049b000000000, + 0xd599916600000000, 0xb7a1b94c00000000, 0x11e9c13200000000, + 0x73d1e91800000000, 0x0cbd014400000000, 0x6e85296e00000000, + 0xc8cd511000000000, 0xaaf5793a00000000, 0x845ca1ec00000000, + 0xe66489c600000000, 0x402cf1b800000000, 0x2214d99200000000, + 0xbef4210100000000, 0xdccc092b00000000, 0x7a84715500000000, + 0x18bc597f00000000, 0x361581a900000000, 0x542da98300000000, + 0xf265d1fd00000000, 0x905df9d700000000, 0xef31118b00000000, + 0x8d0939a100000000, 0x2b4141df00000000, 0x497969f500000000, + 0x67d0b12300000000, 0x05e8990900000000, 0xa3a0e17700000000, + 0xc198c95d00000000, 0xda67618b00000000, 0xb85f49a100000000, + 0x1e1731df00000000, 0x7c2f19f500000000, 0x5286c12300000000, + 0x30bee90900000000, 0x96f6917700000000, 0xf4ceb95d00000000, + 0x8ba2510100000000, 0xe99a792b00000000, 0x4fd2015500000000, + 0x2dea297f00000000, 0x0343f1a900000000, 0x617bd98300000000, + 0xc733a1fd00000000, 0xa50b89d700000000, 0x39eb714400000000, + 0x5bd3596e00000000, 0xfd9b211000000000, 0x9fa3093a00000000, + 0xb10ad1ec00000000, 0xd332f9c600000000, 0x757a81b800000000, + 0x1742a99200000000, 0x682e41ce00000000, 0x0a1669e400000000, + 0xac5e119a00000000, 0xce6639b000000000, 0xe0cfe16600000000, + 0x82f7c94c00000000, 0x24bfb13200000000, 0x4687991800000000, + 0x5347914400000000, 0x317fb96e00000000, 0x9737c11000000000, + 0xf50fe93a00000000, 0xdba631ec00000000, 0xb99e19c600000000, + 0x1fd661b800000000, 0x7dee499200000000, 0x0282a1ce00000000, + 0x60ba89e400000000, 0xc6f2f19a00000000, 0xa4cad9b000000000, + 0x8a63016600000000, 0xe85b294c00000000, 0x4e13513200000000, + 0x2c2b791800000000, 0xb0cb818b00000000, 0xd2f3a9a100000000, + 0x74bbd1df00000000, 0x1683f9f500000000, 0x382a212300000000, + 0x5a12090900000000, 0xfc5a717700000000, 0x9e62595d00000000, + 0xe10eb10100000000, 0x8336992b00000000, 0x257ee15500000000, + 0x4746c97f00000000, 0x69ef11a900000000, 0x0bd7398300000000, + 0xad9f41fd00000000, 0xcfa769d700000000, 0xd458c10100000000, + 0xb660e92b00000000, 0x1028915500000000, 0x7210b97f00000000, + 0x5cb961a900000000, 0x3e81498300000000, 0x98c931fd00000000, + 0xfaf119d700000000, 0x859df18b00000000, 0xe7a5d9a100000000, + 0x41eda1df00000000, 0x23d589f500000000, 0x0d7c512300000000, + 0x6f44790900000000, 0xc90c017700000000, 0xab34295d00000000, + 0x37d4d1ce00000000, 0x55ecf9e400000000, 0xf3a4819a00000000, + 0x919ca9b000000000, 0xbf35716600000000, 0xdd0d594c00000000, + 0x7b45213200000000, 0x197d091800000000, 0x6611e14400000000, + 0x0429c96e00000000, 0xa261b11000000000, 0xc059993a00000000, + 0xeef041ec00000000, 0x8cc869c600000000, 0x2a8011b800000000, + 0x48b8399200000000}, + {0x0000000000000000, 0x4c2896a300000000, 0xd9565d9c00000000, + 0x957ecb3f00000000, 0xf3abcbe300000000, 0xbf835d4000000000, + 0x2afd967f00000000, 0x66d500dc00000000, 0xa751e61c00000000, + 0xeb7970bf00000000, 0x7e07bb8000000000, 0x322f2d2300000000, + 0x54fa2dff00000000, 0x18d2bb5c00000000, 0x8dac706300000000, + 0xc184e6c000000000, 0x4ea3cc3900000000, 0x028b5a9a00000000, + 0x97f591a500000000, 0xdbdd070600000000, 0xbd0807da00000000, + 0xf120917900000000, 0x645e5a4600000000, 0x2876cce500000000, + 0xe9f22a2500000000, 0xa5dabc8600000000, 0x30a477b900000000, + 0x7c8ce11a00000000, 0x1a59e1c600000000, 0x5671776500000000, + 0xc30fbc5a00000000, 0x8f272af900000000, 0x9c46997300000000, + 0xd06e0fd000000000, 0x4510c4ef00000000, 0x0938524c00000000, + 0x6fed529000000000, 0x23c5c43300000000, 0xb6bb0f0c00000000, + 0xfa9399af00000000, 0x3b177f6f00000000, 0x773fe9cc00000000, + 0xe24122f300000000, 0xae69b45000000000, 0xc8bcb48c00000000, + 0x8494222f00000000, 0x11eae91000000000, 0x5dc27fb300000000, + 0xd2e5554a00000000, 0x9ecdc3e900000000, 0x0bb308d600000000, + 0x479b9e7500000000, 0x214e9ea900000000, 0x6d66080a00000000, + 0xf818c33500000000, 0xb430559600000000, 0x75b4b35600000000, + 0x399c25f500000000, 0xace2eeca00000000, 0xe0ca786900000000, + 0x861f78b500000000, 0xca37ee1600000000, 0x5f49252900000000, + 0x1361b38a00000000, 0x388d32e700000000, 0x74a5a44400000000, + 0xe1db6f7b00000000, 0xadf3f9d800000000, 0xcb26f90400000000, + 0x870e6fa700000000, 0x1270a49800000000, 0x5e58323b00000000, + 0x9fdcd4fb00000000, 0xd3f4425800000000, 0x468a896700000000, + 0x0aa21fc400000000, 0x6c771f1800000000, 0x205f89bb00000000, + 0xb521428400000000, 0xf909d42700000000, 0x762efede00000000, + 0x3a06687d00000000, 0xaf78a34200000000, 0xe35035e100000000, + 0x8585353d00000000, 0xc9ada39e00000000, 0x5cd368a100000000, + 0x10fbfe0200000000, 0xd17f18c200000000, 0x9d578e6100000000, + 0x0829455e00000000, 0x4401d3fd00000000, 0x22d4d32100000000, + 0x6efc458200000000, 0xfb828ebd00000000, 0xb7aa181e00000000, + 0xa4cbab9400000000, 0xe8e33d3700000000, 0x7d9df60800000000, + 0x31b560ab00000000, 0x5760607700000000, 0x1b48f6d400000000, + 0x8e363deb00000000, 0xc21eab4800000000, 0x039a4d8800000000, + 0x4fb2db2b00000000, 0xdacc101400000000, 0x96e486b700000000, + 0xf031866b00000000, 0xbc1910c800000000, 0x2967dbf700000000, + 0x654f4d5400000000, 0xea6867ad00000000, 0xa640f10e00000000, + 0x333e3a3100000000, 0x7f16ac9200000000, 0x19c3ac4e00000000, + 0x55eb3aed00000000, 0xc095f1d200000000, 0x8cbd677100000000, + 0x4d3981b100000000, 0x0111171200000000, 0x946fdc2d00000000, + 0xd8474a8e00000000, 0xbe924a5200000000, 0xf2badcf100000000, + 0x67c417ce00000000, 0x2bec816d00000000, 0x311c141500000000, + 0x7d3482b600000000, 0xe84a498900000000, 0xa462df2a00000000, + 0xc2b7dff600000000, 0x8e9f495500000000, 0x1be1826a00000000, + 0x57c914c900000000, 0x964df20900000000, 0xda6564aa00000000, + 0x4f1baf9500000000, 0x0333393600000000, 0x65e639ea00000000, + 0x29ceaf4900000000, 0xbcb0647600000000, 0xf098f2d500000000, + 0x7fbfd82c00000000, 0x33974e8f00000000, 0xa6e985b000000000, + 0xeac1131300000000, 0x8c1413cf00000000, 0xc03c856c00000000, + 0x55424e5300000000, 0x196ad8f000000000, 0xd8ee3e3000000000, + 0x94c6a89300000000, 0x01b863ac00000000, 0x4d90f50f00000000, + 0x2b45f5d300000000, 0x676d637000000000, 0xf213a84f00000000, + 0xbe3b3eec00000000, 0xad5a8d6600000000, 0xe1721bc500000000, + 0x740cd0fa00000000, 0x3824465900000000, 0x5ef1468500000000, + 0x12d9d02600000000, 0x87a71b1900000000, 0xcb8f8dba00000000, + 0x0a0b6b7a00000000, 0x4623fdd900000000, 0xd35d36e600000000, + 0x9f75a04500000000, 0xf9a0a09900000000, 0xb588363a00000000, + 0x20f6fd0500000000, 0x6cde6ba600000000, 0xe3f9415f00000000, + 0xafd1d7fc00000000, 0x3aaf1cc300000000, 0x76878a6000000000, + 0x10528abc00000000, 0x5c7a1c1f00000000, 0xc904d72000000000, + 0x852c418300000000, 0x44a8a74300000000, 0x088031e000000000, + 0x9dfefadf00000000, 0xd1d66c7c00000000, 0xb7036ca000000000, + 0xfb2bfa0300000000, 0x6e55313c00000000, 0x227da79f00000000, + 0x099126f200000000, 0x45b9b05100000000, 0xd0c77b6e00000000, + 0x9cefedcd00000000, 0xfa3aed1100000000, 0xb6127bb200000000, + 0x236cb08d00000000, 0x6f44262e00000000, 0xaec0c0ee00000000, + 0xe2e8564d00000000, 0x77969d7200000000, 0x3bbe0bd100000000, + 0x5d6b0b0d00000000, 0x11439dae00000000, 0x843d569100000000, + 0xc815c03200000000, 0x4732eacb00000000, 0x0b1a7c6800000000, + 0x9e64b75700000000, 0xd24c21f400000000, 0xb499212800000000, + 0xf8b1b78b00000000, 0x6dcf7cb400000000, 0x21e7ea1700000000, + 0xe0630cd700000000, 0xac4b9a7400000000, 0x3935514b00000000, + 0x751dc7e800000000, 0x13c8c73400000000, 0x5fe0519700000000, + 0xca9e9aa800000000, 0x86b60c0b00000000, 0x95d7bf8100000000, + 0xd9ff292200000000, 0x4c81e21d00000000, 0x00a974be00000000, + 0x667c746200000000, 0x2a54e2c100000000, 0xbf2a29fe00000000, + 0xf302bf5d00000000, 0x3286599d00000000, 0x7eaecf3e00000000, + 0xebd0040100000000, 0xa7f892a200000000, 0xc12d927e00000000, + 0x8d0504dd00000000, 0x187bcfe200000000, 0x5453594100000000, + 0xdb7473b800000000, 0x975ce51b00000000, 0x02222e2400000000, + 0x4e0ab88700000000, 0x28dfb85b00000000, 0x64f72ef800000000, + 0xf189e5c700000000, 0xbda1736400000000, 0x7c2595a400000000, + 0x300d030700000000, 0xa573c83800000000, 0xe95b5e9b00000000, + 0x8f8e5e4700000000, 0xc3a6c8e400000000, 0x56d803db00000000, + 0x1af0957800000000}, + {0x0000000000000000, 0x939bc97f00000000, 0x263793ff00000000, + 0xb5ac5a8000000000, 0x0d68572400000000, 0x9ef39e5b00000000, + 0x2b5fc4db00000000, 0xb8c40da400000000, 0x1ad0ae4800000000, + 0x894b673700000000, 0x3ce73db700000000, 0xaf7cf4c800000000, + 0x17b8f96c00000000, 0x8423301300000000, 0x318f6a9300000000, + 0xa214a3ec00000000, 0x34a05d9100000000, 0xa73b94ee00000000, + 0x1297ce6e00000000, 0x810c071100000000, 0x39c80ab500000000, + 0xaa53c3ca00000000, 0x1fff994a00000000, 0x8c64503500000000, + 0x2e70f3d900000000, 0xbdeb3aa600000000, 0x0847602600000000, + 0x9bdca95900000000, 0x2318a4fd00000000, 0xb0836d8200000000, + 0x052f370200000000, 0x96b4fe7d00000000, 0x2946caf900000000, + 0xbadd038600000000, 0x0f71590600000000, 0x9cea907900000000, + 0x242e9ddd00000000, 0xb7b554a200000000, 0x02190e2200000000, + 0x9182c75d00000000, 0x339664b100000000, 0xa00dadce00000000, + 0x15a1f74e00000000, 0x863a3e3100000000, 0x3efe339500000000, + 0xad65faea00000000, 0x18c9a06a00000000, 0x8b52691500000000, + 0x1de6976800000000, 0x8e7d5e1700000000, 0x3bd1049700000000, + 0xa84acde800000000, 0x108ec04c00000000, 0x8315093300000000, + 0x36b953b300000000, 0xa5229acc00000000, 0x0736392000000000, + 0x94adf05f00000000, 0x2101aadf00000000, 0xb29a63a000000000, + 0x0a5e6e0400000000, 0x99c5a77b00000000, 0x2c69fdfb00000000, + 0xbff2348400000000, 0x138ae52800000000, 0x80112c5700000000, + 0x35bd76d700000000, 0xa626bfa800000000, 0x1ee2b20c00000000, + 0x8d797b7300000000, 0x38d521f300000000, 0xab4ee88c00000000, + 0x095a4b6000000000, 0x9ac1821f00000000, 0x2f6dd89f00000000, + 0xbcf611e000000000, 0x04321c4400000000, 0x97a9d53b00000000, + 0x22058fbb00000000, 0xb19e46c400000000, 0x272ab8b900000000, + 0xb4b171c600000000, 0x011d2b4600000000, 0x9286e23900000000, + 0x2a42ef9d00000000, 0xb9d926e200000000, 0x0c757c6200000000, + 0x9feeb51d00000000, 0x3dfa16f100000000, 0xae61df8e00000000, + 0x1bcd850e00000000, 0x88564c7100000000, 0x309241d500000000, + 0xa30988aa00000000, 0x16a5d22a00000000, 0x853e1b5500000000, + 0x3acc2fd100000000, 0xa957e6ae00000000, 0x1cfbbc2e00000000, + 0x8f60755100000000, 0x37a478f500000000, 0xa43fb18a00000000, + 0x1193eb0a00000000, 0x8208227500000000, 0x201c819900000000, + 0xb38748e600000000, 0x062b126600000000, 0x95b0db1900000000, + 0x2d74d6bd00000000, 0xbeef1fc200000000, 0x0b43454200000000, + 0x98d88c3d00000000, 0x0e6c724000000000, 0x9df7bb3f00000000, + 0x285be1bf00000000, 0xbbc028c000000000, 0x0304256400000000, + 0x909fec1b00000000, 0x2533b69b00000000, 0xb6a87fe400000000, + 0x14bcdc0800000000, 0x8727157700000000, 0x328b4ff700000000, + 0xa110868800000000, 0x19d48b2c00000000, 0x8a4f425300000000, + 0x3fe318d300000000, 0xac78d1ac00000000, 0x2614cb5100000000, + 0xb58f022e00000000, 0x002358ae00000000, 0x93b891d100000000, + 0x2b7c9c7500000000, 0xb8e7550a00000000, 0x0d4b0f8a00000000, + 0x9ed0c6f500000000, 0x3cc4651900000000, 0xaf5fac6600000000, + 0x1af3f6e600000000, 0x89683f9900000000, 0x31ac323d00000000, + 0xa237fb4200000000, 0x179ba1c200000000, 0x840068bd00000000, + 0x12b496c000000000, 0x812f5fbf00000000, 0x3483053f00000000, + 0xa718cc4000000000, 0x1fdcc1e400000000, 0x8c47089b00000000, + 0x39eb521b00000000, 0xaa709b6400000000, 0x0864388800000000, + 0x9bfff1f700000000, 0x2e53ab7700000000, 0xbdc8620800000000, + 0x050c6fac00000000, 0x9697a6d300000000, 0x233bfc5300000000, + 0xb0a0352c00000000, 0x0f5201a800000000, 0x9cc9c8d700000000, + 0x2965925700000000, 0xbafe5b2800000000, 0x023a568c00000000, + 0x91a19ff300000000, 0x240dc57300000000, 0xb7960c0c00000000, + 0x1582afe000000000, 0x8619669f00000000, 0x33b53c1f00000000, + 0xa02ef56000000000, 0x18eaf8c400000000, 0x8b7131bb00000000, + 0x3edd6b3b00000000, 0xad46a24400000000, 0x3bf25c3900000000, + 0xa869954600000000, 0x1dc5cfc600000000, 0x8e5e06b900000000, + 0x369a0b1d00000000, 0xa501c26200000000, 0x10ad98e200000000, + 0x8336519d00000000, 0x2122f27100000000, 0xb2b93b0e00000000, + 0x0715618e00000000, 0x948ea8f100000000, 0x2c4aa55500000000, + 0xbfd16c2a00000000, 0x0a7d36aa00000000, 0x99e6ffd500000000, + 0x359e2e7900000000, 0xa605e70600000000, 0x13a9bd8600000000, + 0x803274f900000000, 0x38f6795d00000000, 0xab6db02200000000, + 0x1ec1eaa200000000, 0x8d5a23dd00000000, 0x2f4e803100000000, + 0xbcd5494e00000000, 0x097913ce00000000, 0x9ae2dab100000000, + 0x2226d71500000000, 0xb1bd1e6a00000000, 0x041144ea00000000, + 0x978a8d9500000000, 0x013e73e800000000, 0x92a5ba9700000000, + 0x2709e01700000000, 0xb492296800000000, 0x0c5624cc00000000, + 0x9fcdedb300000000, 0x2a61b73300000000, 0xb9fa7e4c00000000, + 0x1beedda000000000, 0x887514df00000000, 0x3dd94e5f00000000, + 0xae42872000000000, 0x16868a8400000000, 0x851d43fb00000000, + 0x30b1197b00000000, 0xa32ad00400000000, 0x1cd8e48000000000, + 0x8f432dff00000000, 0x3aef777f00000000, 0xa974be0000000000, + 0x11b0b3a400000000, 0x822b7adb00000000, 0x3787205b00000000, + 0xa41ce92400000000, 0x06084ac800000000, 0x959383b700000000, + 0x203fd93700000000, 0xb3a4104800000000, 0x0b601dec00000000, + 0x98fbd49300000000, 0x2d578e1300000000, 0xbecc476c00000000, + 0x2878b91100000000, 0xbbe3706e00000000, 0x0e4f2aee00000000, + 0x9dd4e39100000000, 0x2510ee3500000000, 0xb68b274a00000000, + 0x03277dca00000000, 0x90bcb4b500000000, 0x32a8175900000000, + 0xa133de2600000000, 0x149f84a600000000, 0x87044dd900000000, + 0x3fc0407d00000000, 0xac5b890200000000, 0x19f7d38200000000, + 0x8a6c1afd00000000}, + {0x0000000000000000, 0x650b796900000000, 0xca16f2d200000000, + 0xaf1d8bbb00000000, 0xd52b957e00000000, 0xb020ec1700000000, + 0x1f3d67ac00000000, 0x7a361ec500000000, 0xaa572afd00000000, + 0xcf5c539400000000, 0x6041d82f00000000, 0x054aa14600000000, + 0x7f7cbf8300000000, 0x1a77c6ea00000000, 0xb56a4d5100000000, + 0xd061343800000000, 0x15a9252100000000, 0x70a25c4800000000, + 0xdfbfd7f300000000, 0xbab4ae9a00000000, 0xc082b05f00000000, + 0xa589c93600000000, 0x0a94428d00000000, 0x6f9f3be400000000, + 0xbffe0fdc00000000, 0xdaf576b500000000, 0x75e8fd0e00000000, + 0x10e3846700000000, 0x6ad59aa200000000, 0x0fdee3cb00000000, + 0xa0c3687000000000, 0xc5c8111900000000, 0x2a524b4200000000, + 0x4f59322b00000000, 0xe044b99000000000, 0x854fc0f900000000, + 0xff79de3c00000000, 0x9a72a75500000000, 0x356f2cee00000000, + 0x5064558700000000, 0x800561bf00000000, 0xe50e18d600000000, + 0x4a13936d00000000, 0x2f18ea0400000000, 0x552ef4c100000000, + 0x30258da800000000, 0x9f38061300000000, 0xfa337f7a00000000, + 0x3ffb6e6300000000, 0x5af0170a00000000, 0xf5ed9cb100000000, + 0x90e6e5d800000000, 0xead0fb1d00000000, 0x8fdb827400000000, + 0x20c609cf00000000, 0x45cd70a600000000, 0x95ac449e00000000, + 0xf0a73df700000000, 0x5fbab64c00000000, 0x3ab1cf2500000000, + 0x4087d1e000000000, 0x258ca88900000000, 0x8a91233200000000, + 0xef9a5a5b00000000, 0x54a4968400000000, 0x31afefed00000000, + 0x9eb2645600000000, 0xfbb91d3f00000000, 0x818f03fa00000000, + 0xe4847a9300000000, 0x4b99f12800000000, 0x2e92884100000000, + 0xfef3bc7900000000, 0x9bf8c51000000000, 0x34e54eab00000000, + 0x51ee37c200000000, 0x2bd8290700000000, 0x4ed3506e00000000, + 0xe1cedbd500000000, 0x84c5a2bc00000000, 0x410db3a500000000, + 0x2406cacc00000000, 0x8b1b417700000000, 0xee10381e00000000, + 0x942626db00000000, 0xf12d5fb200000000, 0x5e30d40900000000, + 0x3b3bad6000000000, 0xeb5a995800000000, 0x8e51e03100000000, + 0x214c6b8a00000000, 0x444712e300000000, 0x3e710c2600000000, + 0x5b7a754f00000000, 0xf467fef400000000, 0x916c879d00000000, + 0x7ef6ddc600000000, 0x1bfda4af00000000, 0xb4e02f1400000000, + 0xd1eb567d00000000, 0xabdd48b800000000, 0xced631d100000000, + 0x61cbba6a00000000, 0x04c0c30300000000, 0xd4a1f73b00000000, + 0xb1aa8e5200000000, 0x1eb705e900000000, 0x7bbc7c8000000000, + 0x018a624500000000, 0x64811b2c00000000, 0xcb9c909700000000, + 0xae97e9fe00000000, 0x6b5ff8e700000000, 0x0e54818e00000000, + 0xa1490a3500000000, 0xc442735c00000000, 0xbe746d9900000000, + 0xdb7f14f000000000, 0x74629f4b00000000, 0x1169e62200000000, + 0xc108d21a00000000, 0xa403ab7300000000, 0x0b1e20c800000000, + 0x6e1559a100000000, 0x1423476400000000, 0x71283e0d00000000, + 0xde35b5b600000000, 0xbb3eccdf00000000, 0xe94e5cd200000000, + 0x8c4525bb00000000, 0x2358ae0000000000, 0x4653d76900000000, + 0x3c65c9ac00000000, 0x596eb0c500000000, 0xf6733b7e00000000, + 0x9378421700000000, 0x4319762f00000000, 0x26120f4600000000, + 0x890f84fd00000000, 0xec04fd9400000000, 0x9632e35100000000, + 0xf3399a3800000000, 0x5c24118300000000, 0x392f68ea00000000, + 0xfce779f300000000, 0x99ec009a00000000, 0x36f18b2100000000, + 0x53faf24800000000, 0x29ccec8d00000000, 0x4cc795e400000000, + 0xe3da1e5f00000000, 0x86d1673600000000, 0x56b0530e00000000, + 0x33bb2a6700000000, 0x9ca6a1dc00000000, 0xf9add8b500000000, + 0x839bc67000000000, 0xe690bf1900000000, 0x498d34a200000000, + 0x2c864dcb00000000, 0xc31c179000000000, 0xa6176ef900000000, + 0x090ae54200000000, 0x6c019c2b00000000, 0x163782ee00000000, + 0x733cfb8700000000, 0xdc21703c00000000, 0xb92a095500000000, + 0x694b3d6d00000000, 0x0c40440400000000, 0xa35dcfbf00000000, + 0xc656b6d600000000, 0xbc60a81300000000, 0xd96bd17a00000000, + 0x76765ac100000000, 0x137d23a800000000, 0xd6b532b100000000, + 0xb3be4bd800000000, 0x1ca3c06300000000, 0x79a8b90a00000000, + 0x039ea7cf00000000, 0x6695dea600000000, 0xc988551d00000000, + 0xac832c7400000000, 0x7ce2184c00000000, 0x19e9612500000000, + 0xb6f4ea9e00000000, 0xd3ff93f700000000, 0xa9c98d3200000000, + 0xccc2f45b00000000, 0x63df7fe000000000, 0x06d4068900000000, + 0xbdeaca5600000000, 0xd8e1b33f00000000, 0x77fc388400000000, + 0x12f741ed00000000, 0x68c15f2800000000, 0x0dca264100000000, + 0xa2d7adfa00000000, 0xc7dcd49300000000, 0x17bde0ab00000000, + 0x72b699c200000000, 0xddab127900000000, 0xb8a06b1000000000, + 0xc29675d500000000, 0xa79d0cbc00000000, 0x0880870700000000, + 0x6d8bfe6e00000000, 0xa843ef7700000000, 0xcd48961e00000000, + 0x62551da500000000, 0x075e64cc00000000, 0x7d687a0900000000, + 0x1863036000000000, 0xb77e88db00000000, 0xd275f1b200000000, + 0x0214c58a00000000, 0x671fbce300000000, 0xc802375800000000, + 0xad094e3100000000, 0xd73f50f400000000, 0xb234299d00000000, + 0x1d29a22600000000, 0x7822db4f00000000, 0x97b8811400000000, + 0xf2b3f87d00000000, 0x5dae73c600000000, 0x38a50aaf00000000, + 0x4293146a00000000, 0x27986d0300000000, 0x8885e6b800000000, + 0xed8e9fd100000000, 0x3defabe900000000, 0x58e4d28000000000, + 0xf7f9593b00000000, 0x92f2205200000000, 0xe8c43e9700000000, + 0x8dcf47fe00000000, 0x22d2cc4500000000, 0x47d9b52c00000000, + 0x8211a43500000000, 0xe71add5c00000000, 0x480756e700000000, + 0x2d0c2f8e00000000, 0x573a314b00000000, 0x3231482200000000, + 0x9d2cc39900000000, 0xf827baf000000000, 0x28468ec800000000, + 0x4d4df7a100000000, 0xe2507c1a00000000, 0x875b057300000000, + 0xfd6d1bb600000000, 0x986662df00000000, 0x377be96400000000, + 0x5270900d00000000}, + {0x0000000000000000, 0xdcecb13d00000000, 0xb8d9637b00000000, + 0x6435d24600000000, 0x70b3c7f600000000, 0xac5f76cb00000000, + 0xc86aa48d00000000, 0x148615b000000000, 0xa160fe3600000000, + 0x7d8c4f0b00000000, 0x19b99d4d00000000, 0xc5552c7000000000, + 0xd1d339c000000000, 0x0d3f88fd00000000, 0x690a5abb00000000, + 0xb5e6eb8600000000, 0x42c1fc6d00000000, 0x9e2d4d5000000000, + 0xfa189f1600000000, 0x26f42e2b00000000, 0x32723b9b00000000, + 0xee9e8aa600000000, 0x8aab58e000000000, 0x5647e9dd00000000, + 0xe3a1025b00000000, 0x3f4db36600000000, 0x5b78612000000000, + 0x8794d01d00000000, 0x9312c5ad00000000, 0x4ffe749000000000, + 0x2bcba6d600000000, 0xf72717eb00000000, 0x8482f9db00000000, + 0x586e48e600000000, 0x3c5b9aa000000000, 0xe0b72b9d00000000, + 0xf4313e2d00000000, 0x28dd8f1000000000, 0x4ce85d5600000000, + 0x9004ec6b00000000, 0x25e207ed00000000, 0xf90eb6d000000000, + 0x9d3b649600000000, 0x41d7d5ab00000000, 0x5551c01b00000000, + 0x89bd712600000000, 0xed88a36000000000, 0x3164125d00000000, + 0xc64305b600000000, 0x1aafb48b00000000, 0x7e9a66cd00000000, + 0xa276d7f000000000, 0xb6f0c24000000000, 0x6a1c737d00000000, + 0x0e29a13b00000000, 0xd2c5100600000000, 0x6723fb8000000000, + 0xbbcf4abd00000000, 0xdffa98fb00000000, 0x031629c600000000, + 0x17903c7600000000, 0xcb7c8d4b00000000, 0xaf495f0d00000000, + 0x73a5ee3000000000, 0x4903826c00000000, 0x95ef335100000000, + 0xf1dae11700000000, 0x2d36502a00000000, 0x39b0459a00000000, + 0xe55cf4a700000000, 0x816926e100000000, 0x5d8597dc00000000, + 0xe8637c5a00000000, 0x348fcd6700000000, 0x50ba1f2100000000, + 0x8c56ae1c00000000, 0x98d0bbac00000000, 0x443c0a9100000000, + 0x2009d8d700000000, 0xfce569ea00000000, 0x0bc27e0100000000, + 0xd72ecf3c00000000, 0xb31b1d7a00000000, 0x6ff7ac4700000000, + 0x7b71b9f700000000, 0xa79d08ca00000000, 0xc3a8da8c00000000, + 0x1f446bb100000000, 0xaaa2803700000000, 0x764e310a00000000, + 0x127be34c00000000, 0xce97527100000000, 0xda1147c100000000, + 0x06fdf6fc00000000, 0x62c824ba00000000, 0xbe24958700000000, + 0xcd817bb700000000, 0x116dca8a00000000, 0x755818cc00000000, + 0xa9b4a9f100000000, 0xbd32bc4100000000, 0x61de0d7c00000000, + 0x05ebdf3a00000000, 0xd9076e0700000000, 0x6ce1858100000000, + 0xb00d34bc00000000, 0xd438e6fa00000000, 0x08d457c700000000, + 0x1c52427700000000, 0xc0bef34a00000000, 0xa48b210c00000000, + 0x7867903100000000, 0x8f4087da00000000, 0x53ac36e700000000, + 0x3799e4a100000000, 0xeb75559c00000000, 0xfff3402c00000000, + 0x231ff11100000000, 0x472a235700000000, 0x9bc6926a00000000, + 0x2e2079ec00000000, 0xf2ccc8d100000000, 0x96f91a9700000000, + 0x4a15abaa00000000, 0x5e93be1a00000000, 0x827f0f2700000000, + 0xe64add6100000000, 0x3aa66c5c00000000, 0x920604d900000000, + 0x4eeab5e400000000, 0x2adf67a200000000, 0xf633d69f00000000, + 0xe2b5c32f00000000, 0x3e59721200000000, 0x5a6ca05400000000, + 0x8680116900000000, 0x3366faef00000000, 0xef8a4bd200000000, + 0x8bbf999400000000, 0x575328a900000000, 0x43d53d1900000000, + 0x9f398c2400000000, 0xfb0c5e6200000000, 0x27e0ef5f00000000, + 0xd0c7f8b400000000, 0x0c2b498900000000, 0x681e9bcf00000000, + 0xb4f22af200000000, 0xa0743f4200000000, 0x7c988e7f00000000, + 0x18ad5c3900000000, 0xc441ed0400000000, 0x71a7068200000000, + 0xad4bb7bf00000000, 0xc97e65f900000000, 0x1592d4c400000000, + 0x0114c17400000000, 0xddf8704900000000, 0xb9cda20f00000000, + 0x6521133200000000, 0x1684fd0200000000, 0xca684c3f00000000, + 0xae5d9e7900000000, 0x72b12f4400000000, 0x66373af400000000, + 0xbadb8bc900000000, 0xdeee598f00000000, 0x0202e8b200000000, + 0xb7e4033400000000, 0x6b08b20900000000, 0x0f3d604f00000000, + 0xd3d1d17200000000, 0xc757c4c200000000, 0x1bbb75ff00000000, + 0x7f8ea7b900000000, 0xa362168400000000, 0x5445016f00000000, + 0x88a9b05200000000, 0xec9c621400000000, 0x3070d32900000000, + 0x24f6c69900000000, 0xf81a77a400000000, 0x9c2fa5e200000000, + 0x40c314df00000000, 0xf525ff5900000000, 0x29c94e6400000000, + 0x4dfc9c2200000000, 0x91102d1f00000000, 0x859638af00000000, + 0x597a899200000000, 0x3d4f5bd400000000, 0xe1a3eae900000000, + 0xdb0586b500000000, 0x07e9378800000000, 0x63dce5ce00000000, + 0xbf3054f300000000, 0xabb6414300000000, 0x775af07e00000000, + 0x136f223800000000, 0xcf83930500000000, 0x7a65788300000000, + 0xa689c9be00000000, 0xc2bc1bf800000000, 0x1e50aac500000000, + 0x0ad6bf7500000000, 0xd63a0e4800000000, 0xb20fdc0e00000000, + 0x6ee36d3300000000, 0x99c47ad800000000, 0x4528cbe500000000, + 0x211d19a300000000, 0xfdf1a89e00000000, 0xe977bd2e00000000, + 0x359b0c1300000000, 0x51aede5500000000, 0x8d426f6800000000, + 0x38a484ee00000000, 0xe44835d300000000, 0x807de79500000000, + 0x5c9156a800000000, 0x4817431800000000, 0x94fbf22500000000, + 0xf0ce206300000000, 0x2c22915e00000000, 0x5f877f6e00000000, + 0x836bce5300000000, 0xe75e1c1500000000, 0x3bb2ad2800000000, + 0x2f34b89800000000, 0xf3d809a500000000, 0x97eddbe300000000, + 0x4b016ade00000000, 0xfee7815800000000, 0x220b306500000000, + 0x463ee22300000000, 0x9ad2531e00000000, 0x8e5446ae00000000, + 0x52b8f79300000000, 0x368d25d500000000, 0xea6194e800000000, + 0x1d46830300000000, 0xc1aa323e00000000, 0xa59fe07800000000, + 0x7973514500000000, 0x6df544f500000000, 0xb119f5c800000000, + 0xd52c278e00000000, 0x09c096b300000000, 0xbc267d3500000000, + 0x60cacc0800000000, 0x04ff1e4e00000000, 0xd813af7300000000, + 0xcc95bac300000000, 0x10790bfe00000000, 0x744cd9b800000000, + 0xa8a0688500000000}}; #else /* W == 4 */ local const z_crc_t FAR crc_braid_table[][256] = { - {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f, - 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999, - 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee, - 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615, - 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383, - 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb, - 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275, - 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d, - 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b, - 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460, - 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317, - 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1, - 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5, - 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd, - 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04, - 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c, - 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7, - 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11, - 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66, - 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7, - 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871, - 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309, - 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd, - 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85, - 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913, - 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d, - 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a, - 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc, - 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57, - 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f, - 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6, - 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e, - 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f, - 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289, - 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe, - 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05, - 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893, - 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb, - 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0, - 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8, - 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e, - 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5, - 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2, - 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574, - 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5, - 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add, - 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114, - 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c, - 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7, - 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701, - 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076, - 0x09cd8551}, - {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193, - 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2, - 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c, - 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71, - 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a, - 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d, - 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71, - 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436, - 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d, - 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000, - 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae, - 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf, - 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930, - 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277, - 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff, - 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8, - 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef, - 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e, - 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20, - 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95, - 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e, - 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9, - 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d, - 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a, - 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151, - 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4, - 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a, - 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b, - 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c, - 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b, - 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3, - 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4, - 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b, - 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a, - 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4, - 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189, - 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92, - 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5, - 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9, - 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe, - 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5, - 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8, - 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66, - 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707, - 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8, - 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f, - 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707, - 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40, - 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017, - 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876, - 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8, - 0x7bc97a0c}, - {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300, - 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0, - 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80, - 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701, - 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41, - 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81, - 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43, - 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83, - 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3, - 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42, - 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202, - 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2, - 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7, - 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407, - 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47, - 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87, - 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86, - 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46, - 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506, - 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44, - 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704, - 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4, - 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5, - 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505, - 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45, - 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f, - 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f, - 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f, - 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e, - 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e, - 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e, - 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce, - 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c, - 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc, - 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c, - 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d, - 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d, - 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d, - 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88, - 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48, - 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708, - 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89, - 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9, - 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309, - 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb, - 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b, - 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b, - 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b, - 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a, - 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a, - 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a, - 0x7851a2ca}, - {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb, - 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8, - 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0, - 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f, - 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a, - 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf, - 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5, - 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380, - 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815, - 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa, - 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2, - 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1, - 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1, - 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4, - 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa, - 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df, - 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6, - 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5, - 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad, - 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca, - 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f, - 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a, - 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8, - 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d, - 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708, - 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d, - 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865, - 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636, - 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f, - 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a, - 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744, - 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061, - 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0, - 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293, - 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb, - 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874, - 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1, - 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4, - 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f, - 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a, - 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f, - 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120, - 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778, - 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b, - 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a, - 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af, - 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81, - 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4, - 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd, - 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e, - 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6, - 0x566b6848}}; + {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f, 0xe823fb78, + 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999, 0x0b36f0b1, 0x8a139596, + 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee, 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, + 0xa650b332, 0x2775d615, 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, + 0xad664383, 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb, + 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275, 0xa6c85752, + 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d, 0x2cdbc2c4, 0xadfea7e3, + 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b, 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, + 0x81bd8147, 0x0098e460, 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, + 0x3180d317, 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1, + 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5, 0xa7f99f92, + 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd, 0x96e1a8e5, 0x17c4cdc2, + 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04, 0xaccf6f23, 0x9dd75854, 0x1cf23d73, + 0x44ec945b, 0xc5c9f17c, 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, + 0x30b11bd7, 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11, + 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66, 0xbaa28e41, + 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7, 0xb10c9a90, 0x3029ffb7, + 0x6837569f, 0xe91233b8, 0x0a073871, 0x8b225d56, 0xd33cf47e, 0x52199159, + 0x6301a62e, 0xe224c309, 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, + 0x7e5ab7fd, 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85, + 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913, 0x9d4fbc34, + 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d, 0x94823965, 0x15a75c42, + 0x24bf6b35, 0xa59a0e12, 0xfd84a73a, 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, + 0x468f05db, 0xc7aa60fc, 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, + 0x32d28a57, 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f, + 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6, 0xb8c11fc1, + 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e, 0xb36f0b10, 0x324a6e37, + 0x6a54c71f, 0xeb71a238, 0xda69954f, 0x5b4cf068, 0x03525940, 0x82773c67, + 0x616237ae, 0xe0475289, 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, + 0xd15f65fe, 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05, + 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893, 0x9f2c2db4, + 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb, 0xae341ac3, 0x2f117fe4, + 0x6b650fdf, 0xea406af8, 0xb25ec3d0, 0x337ba6f7, 0x02639180, 0x8346f4a7, + 0xdb585d8f, 0x5a7d38a8, 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, + 0xd06ead3e, 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5, + 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2, 0x25164795, + 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574, 0xaf05d203, 0x2e20b724, + 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5, 0x14969482, 0x4c883daa, 0xcdad588d, + 0xfcb56ffa, 0x7d900add, 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, + 0x9e850114, 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c, + 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7, 0x02fb75e0, + 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701, 0xe1ee7e29, 0x60cb1b0e, + 0x51d32c79, 0xd0f6495e, 0x88e8e076, 0x09cd8551}, + {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193, 0x9b2f4b47, + 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2, 0xed2f90cf, 0x765c7a1b, + 0x00e5e2b5, 0x9b960861, 0xed73315c, 0x7600db88, 0x0172864c, 0x9a016c98, + 0xece455a5, 0x7797bf71, 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, + 0x01cbc56a, 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d, + 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71, 0x740035a5, + 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436, 0x025c4fbe, 0x992fa56a, + 0xefca9c57, 0x74b97683, 0x0200ee2d, 0x997304f9, 0xef963dc4, 0x74e5d710, + 0x03978ad4, 0x98e46000, 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, + 0xee5df8ae, 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf, + 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930, 0x9eb9f3e4, + 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277, 0xe8006b4a, 0x7373819e, + 0x05735a16, 0x9e00b0c2, 0xe8e589ff, 0x7396632b, 0x052ffb85, 0x9e5c1151, + 0xe8b9286c, 0x73cac2b8, 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, + 0x04e43eef, 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e, + 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20, 0x72b844f4, + 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95, 0x0773b43b, 0x9c005eef, + 0xeae567d2, 0x71968d06, 0x0796568e, 0x9ce5bc5a, 0xea008567, 0x71736fb3, + 0x07caf71d, 0x9cb91dc9, 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, + 0xebcb400d, 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a, + 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151, 0x9dcb9b85, + 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4, 0xe602e189, 0x7d710b5d, + 0x0bc893f3, 0x90bb7927, 0xe65e401a, 0x7d2daace, 0x0b2d7146, 0x905e9b92, + 0xe6bba2af, 0x7dc8487b, 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, + 0x0ae6b42c, 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b, + 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3, 0x7cbace37, + 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4, 0x09713ef8, 0x9202d42c, + 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b, 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, + 0x09c87dde, 0x92bb970a, 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, + 0xe4020fa4, 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189, + 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92, 0x93c91146, + 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5, 0xe57089e8, 0x7e03633c, + 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9, 0x78bb126d, 0x0e028ac3, 0x95716017, + 0xe394592a, 0x78e7b3fe, 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, + 0x0ebbc9e5, 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8, + 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66, 0x799535b2, + 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707, 0x0fc94fa9, 0x94baa57d, + 0xe25f9c40, 0x792c7694, 0x0cbb27c8, 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, + 0x0ce7865b, 0x97946c8f, 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, + 0xe194b707, 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40, + 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017, 0x96e6eac3, + 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876, 0xe0e6314b, 0x7b95db9f, + 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8, 0x7bc97a0c}, + {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300, 0x4b89f7c0, + 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0, 0x9713ef80, 0x803b8b40, + 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80, 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, + 0x87a783c1, 0x908fe701, 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, + 0x10b46c41, 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81, + 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43, 0xb1e73f83, + 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83, 0x31dcb4c3, 0x26f4d003, + 0x1f8c7d43, 0x08a41983, 0x6d7d27c3, 0x7a554303, 0x432dee43, 0x54058a83, + 0x2168d882, 0x3640bc42, 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, + 0x53998202, 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2, + 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7, 0xdd664707, + 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407, 0xb8bf7947, 0xaf971d87, + 0x730d05c7, 0x64256107, 0x5d5dcc47, 0x4a75a887, 0x2fac96c7, 0x3884f207, + 0x01fc5f47, 0x16d43b87, 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, + 0x3f18fa86, 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46, + 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506, 0xbf2371c6, + 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44, 0x1e702204, 0x095846c4, + 0x3020eb84, 0x27088f44, 0xfb929704, 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, + 0xa7330404, 0xb01b60c4, 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, + 0xc57632c5, 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505, + 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45, 0x19ec2a85, + 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f, 0x61bd884f, 0x7695ec8f, + 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f, 0x2a347f8f, 0xf6ae67cf, 0xe186030f, + 0xd8feae4f, 0xcfd6ca8f, 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, + 0xe61a0b8e, 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e, + 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e, 0x662180ce, + 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce, 0xc772d30c, 0xd05ab7cc, + 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c, 0x8cfb24cc, 0xb583898c, 0xa2abed4c, + 0x7e31f50c, 0x691991cc, 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, + 0x0cc0af8c, 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d, + 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d, 0xc0eedb8d, + 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d, 0xa537e5cd, 0xb21f810d, + 0x85a36208, 0x928b06c8, 0xabf3ab88, 0xbcdbcf48, 0xd902f108, 0xce2a95c8, + 0xf7523888, 0xe07a5c48, 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, + 0x6041d708, 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89, + 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9, 0x498d1609, + 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309, 0xc9b69d49, 0xde9ef989, + 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb, 0x1a14940b, 0x236c394b, 0x34445d8b, + 0x519d63cb, 0x46b5070b, 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, + 0x9a2f1f4b, 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b, + 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a, 0xef424d4a, + 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a, 0x33d8550a, 0x24f031ca, + 0x41290f8a, 0x56016b4a, 0x6f79c60a, 0x7851a2ca}, + {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb, 0x8d238725, + 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8, 0xc136080b, 0x5eec8b95, + 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0, 0x4c158f2e, 0x4be412ec, 0xd43e9172, + 0xaf201391, 0x30fa900f, 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, + 0x6e161b9a, 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf, + 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5, 0xecd6a73b, + 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380, 0xb23a2cae, 0x2de0af30, + 0x56fe2dd3, 0xc924ae4d, 0xa0c32815, 0x3f19ab8b, 0x44072968, 0xdbddaaf6, + 0xdc2c3734, 0x43f6b4aa, 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, + 0x2a1132f2, 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1, + 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1, 0x6b3bce6f, + 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4, 0x02dc4837, 0x9d06cba9, + 0xd1134487, 0x4ec9c719, 0x35d745fa, 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, + 0x272e4141, 0xb8f4c2df, 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, + 0xadfc5ba6, 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5, + 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad, 0xf310d033, + 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca, 0x71d06c92, 0xee0aef0c, + 0x95146def, 0x0aceee71, 0x46db615f, 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, + 0x542265e4, 0xcbf8e67a, 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, + 0xcc097bb8, 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d, + 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708, 0x801cf496, + 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d, 0xd6779cde, 0x49ad1f40, + 0x204a9918, 0xbf901a86, 0xc48e9865, 0x5b541bfb, 0x174194d5, 0x889b174b, + 0xf38595a8, 0x6c5f1636, 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, + 0x79578f4f, 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a, + 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744, 0x27bb04da, + 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061, 0xa57bb87b, 0x3aa13be5, + 0x41bfb906, 0xde653a98, 0xb782bcc0, 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, + 0x8089b10d, 0x1f533293, 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, + 0x76b4b4cb, 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874, + 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1, 0x54b7207f, + 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4, 0x3d50a627, 0xa28a25b9, + 0xc652d052, 0x598853cc, 0x2296d12f, 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, + 0x306fd594, 0xafb5560a, 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, + 0xf159dd9f, 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120, + 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778, 0xe45144e6, + 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b, 0xbabdcf73, 0x25674ced, + 0x5e79ce0e, 0xc1a34d90, 0x519af58a, 0xce407614, 0xb55ef4f7, 0x2a847769, + 0x4363f131, 0xdcb972af, 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, + 0x90acfd81, 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4, + 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd, 0x975d6043, + 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e, 0xdb48ef6d, 0x44926cf3, + 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6, 0x566b6848}}; local const z_word_t FAR crc_braid_big_table[][256] = { - {0x00000000, 0x9e83da9f, 0x7d01c4e4, 0xe3821e7b, 0xbb04f912, - 0x2587238d, 0xc6053df6, 0x5886e769, 0x7609f225, 0xe88a28ba, - 0x0b0836c1, 0x958bec5e, 0xcd0d0b37, 0x538ed1a8, 0xb00ccfd3, - 0x2e8f154c, 0xec12e44b, 0x72913ed4, 0x911320af, 0x0f90fa30, - 0x57161d59, 0xc995c7c6, 0x2a17d9bd, 0xb4940322, 0x9a1b166e, - 0x0498ccf1, 0xe71ad28a, 0x79990815, 0x211fef7c, 0xbf9c35e3, - 0x5c1e2b98, 0xc29df107, 0xd825c897, 0x46a61208, 0xa5240c73, - 0x3ba7d6ec, 0x63213185, 0xfda2eb1a, 0x1e20f561, 0x80a32ffe, - 0xae2c3ab2, 0x30afe02d, 0xd32dfe56, 0x4dae24c9, 0x1528c3a0, - 0x8bab193f, 0x68290744, 0xf6aadddb, 0x34372cdc, 0xaab4f643, - 0x4936e838, 0xd7b532a7, 0x8f33d5ce, 0x11b00f51, 0xf232112a, - 0x6cb1cbb5, 0x423edef9, 0xdcbd0466, 0x3f3f1a1d, 0xa1bcc082, - 0xf93a27eb, 0x67b9fd74, 0x843be30f, 0x1ab83990, 0xf14de1f4, - 0x6fce3b6b, 0x8c4c2510, 0x12cfff8f, 0x4a4918e6, 0xd4cac279, - 0x3748dc02, 0xa9cb069d, 0x874413d1, 0x19c7c94e, 0xfa45d735, - 0x64c60daa, 0x3c40eac3, 0xa2c3305c, 0x41412e27, 0xdfc2f4b8, - 0x1d5f05bf, 0x83dcdf20, 0x605ec15b, 0xfedd1bc4, 0xa65bfcad, - 0x38d82632, 0xdb5a3849, 0x45d9e2d6, 0x6b56f79a, 0xf5d52d05, - 0x1657337e, 0x88d4e9e1, 0xd0520e88, 0x4ed1d417, 0xad53ca6c, - 0x33d010f3, 0x29682963, 0xb7ebf3fc, 0x5469ed87, 0xcaea3718, - 0x926cd071, 0x0cef0aee, 0xef6d1495, 0x71eece0a, 0x5f61db46, - 0xc1e201d9, 0x22601fa2, 0xbce3c53d, 0xe4652254, 0x7ae6f8cb, - 0x9964e6b0, 0x07e73c2f, 0xc57acd28, 0x5bf917b7, 0xb87b09cc, - 0x26f8d353, 0x7e7e343a, 0xe0fdeea5, 0x037ff0de, 0x9dfc2a41, - 0xb3733f0d, 0x2df0e592, 0xce72fbe9, 0x50f12176, 0x0877c61f, - 0x96f41c80, 0x757602fb, 0xebf5d864, 0xa39db332, 0x3d1e69ad, - 0xde9c77d6, 0x401fad49, 0x18994a20, 0x861a90bf, 0x65988ec4, - 0xfb1b545b, 0xd5944117, 0x4b179b88, 0xa89585f3, 0x36165f6c, - 0x6e90b805, 0xf013629a, 0x13917ce1, 0x8d12a67e, 0x4f8f5779, - 0xd10c8de6, 0x328e939d, 0xac0d4902, 0xf48bae6b, 0x6a0874f4, - 0x898a6a8f, 0x1709b010, 0x3986a55c, 0xa7057fc3, 0x448761b8, - 0xda04bb27, 0x82825c4e, 0x1c0186d1, 0xff8398aa, 0x61004235, - 0x7bb87ba5, 0xe53ba13a, 0x06b9bf41, 0x983a65de, 0xc0bc82b7, - 0x5e3f5828, 0xbdbd4653, 0x233e9ccc, 0x0db18980, 0x9332531f, - 0x70b04d64, 0xee3397fb, 0xb6b57092, 0x2836aa0d, 0xcbb4b476, - 0x55376ee9, 0x97aa9fee, 0x09294571, 0xeaab5b0a, 0x74288195, - 0x2cae66fc, 0xb22dbc63, 0x51afa218, 0xcf2c7887, 0xe1a36dcb, - 0x7f20b754, 0x9ca2a92f, 0x022173b0, 0x5aa794d9, 0xc4244e46, - 0x27a6503d, 0xb9258aa2, 0x52d052c6, 0xcc538859, 0x2fd19622, - 0xb1524cbd, 0xe9d4abd4, 0x7757714b, 0x94d56f30, 0x0a56b5af, - 0x24d9a0e3, 0xba5a7a7c, 0x59d86407, 0xc75bbe98, 0x9fdd59f1, - 0x015e836e, 0xe2dc9d15, 0x7c5f478a, 0xbec2b68d, 0x20416c12, - 0xc3c37269, 0x5d40a8f6, 0x05c64f9f, 0x9b459500, 0x78c78b7b, - 0xe64451e4, 0xc8cb44a8, 0x56489e37, 0xb5ca804c, 0x2b495ad3, - 0x73cfbdba, 0xed4c6725, 0x0ece795e, 0x904da3c1, 0x8af59a51, - 0x147640ce, 0xf7f45eb5, 0x6977842a, 0x31f16343, 0xaf72b9dc, - 0x4cf0a7a7, 0xd2737d38, 0xfcfc6874, 0x627fb2eb, 0x81fdac90, - 0x1f7e760f, 0x47f89166, 0xd97b4bf9, 0x3af95582, 0xa47a8f1d, - 0x66e77e1a, 0xf864a485, 0x1be6bafe, 0x85656061, 0xdde38708, - 0x43605d97, 0xa0e243ec, 0x3e619973, 0x10ee8c3f, 0x8e6d56a0, - 0x6def48db, 0xf36c9244, 0xabea752d, 0x3569afb2, 0xd6ebb1c9, - 0x48686b56}, - {0x00000000, 0xc0642817, 0x80c9502e, 0x40ad7839, 0x0093a15c, - 0xc0f7894b, 0x805af172, 0x403ed965, 0x002643b9, 0xc0426bae, - 0x80ef1397, 0x408b3b80, 0x00b5e2e5, 0xc0d1caf2, 0x807cb2cb, - 0x40189adc, 0x414af7a9, 0x812edfbe, 0xc183a787, 0x01e78f90, - 0x41d956f5, 0x81bd7ee2, 0xc11006db, 0x01742ecc, 0x416cb410, - 0x81089c07, 0xc1a5e43e, 0x01c1cc29, 0x41ff154c, 0x819b3d5b, - 0xc1364562, 0x01526d75, 0xc3929f88, 0x03f6b79f, 0x435bcfa6, - 0x833fe7b1, 0xc3013ed4, 0x036516c3, 0x43c86efa, 0x83ac46ed, - 0xc3b4dc31, 0x03d0f426, 0x437d8c1f, 0x8319a408, 0xc3277d6d, - 0x0343557a, 0x43ee2d43, 0x838a0554, 0x82d86821, 0x42bc4036, - 0x0211380f, 0xc2751018, 0x824bc97d, 0x422fe16a, 0x02829953, - 0xc2e6b144, 0x82fe2b98, 0x429a038f, 0x02377bb6, 0xc25353a1, - 0x826d8ac4, 0x4209a2d3, 0x02a4daea, 0xc2c0f2fd, 0xc7234eca, - 0x074766dd, 0x47ea1ee4, 0x878e36f3, 0xc7b0ef96, 0x07d4c781, - 0x4779bfb8, 0x871d97af, 0xc7050d73, 0x07612564, 0x47cc5d5d, - 0x87a8754a, 0xc796ac2f, 0x07f28438, 0x475ffc01, 0x873bd416, - 0x8669b963, 0x460d9174, 0x06a0e94d, 0xc6c4c15a, 0x86fa183f, - 0x469e3028, 0x06334811, 0xc6576006, 0x864ffada, 0x462bd2cd, - 0x0686aaf4, 0xc6e282e3, 0x86dc5b86, 0x46b87391, 0x06150ba8, - 0xc67123bf, 0x04b1d142, 0xc4d5f955, 0x8478816c, 0x441ca97b, - 0x0422701e, 0xc4465809, 0x84eb2030, 0x448f0827, 0x049792fb, - 0xc4f3baec, 0x845ec2d5, 0x443aeac2, 0x040433a7, 0xc4601bb0, - 0x84cd6389, 0x44a94b9e, 0x45fb26eb, 0x859f0efc, 0xc53276c5, - 0x05565ed2, 0x456887b7, 0x850cafa0, 0xc5a1d799, 0x05c5ff8e, - 0x45dd6552, 0x85b94d45, 0xc514357c, 0x05701d6b, 0x454ec40e, - 0x852aec19, 0xc5879420, 0x05e3bc37, 0xcf41ed4f, 0x0f25c558, - 0x4f88bd61, 0x8fec9576, 0xcfd24c13, 0x0fb66404, 0x4f1b1c3d, - 0x8f7f342a, 0xcf67aef6, 0x0f0386e1, 0x4faefed8, 0x8fcad6cf, - 0xcff40faa, 0x0f9027bd, 0x4f3d5f84, 0x8f597793, 0x8e0b1ae6, - 0x4e6f32f1, 0x0ec24ac8, 0xcea662df, 0x8e98bbba, 0x4efc93ad, - 0x0e51eb94, 0xce35c383, 0x8e2d595f, 0x4e497148, 0x0ee40971, - 0xce802166, 0x8ebef803, 0x4edad014, 0x0e77a82d, 0xce13803a, - 0x0cd372c7, 0xccb75ad0, 0x8c1a22e9, 0x4c7e0afe, 0x0c40d39b, - 0xcc24fb8c, 0x8c8983b5, 0x4cedaba2, 0x0cf5317e, 0xcc911969, - 0x8c3c6150, 0x4c584947, 0x0c669022, 0xcc02b835, 0x8cafc00c, - 0x4ccbe81b, 0x4d99856e, 0x8dfdad79, 0xcd50d540, 0x0d34fd57, - 0x4d0a2432, 0x8d6e0c25, 0xcdc3741c, 0x0da75c0b, 0x4dbfc6d7, - 0x8ddbeec0, 0xcd7696f9, 0x0d12beee, 0x4d2c678b, 0x8d484f9c, - 0xcde537a5, 0x0d811fb2, 0x0862a385, 0xc8068b92, 0x88abf3ab, - 0x48cfdbbc, 0x08f102d9, 0xc8952ace, 0x883852f7, 0x485c7ae0, - 0x0844e03c, 0xc820c82b, 0x888db012, 0x48e99805, 0x08d74160, - 0xc8b36977, 0x881e114e, 0x487a3959, 0x4928542c, 0x894c7c3b, - 0xc9e10402, 0x09852c15, 0x49bbf570, 0x89dfdd67, 0xc972a55e, - 0x09168d49, 0x490e1795, 0x896a3f82, 0xc9c747bb, 0x09a36fac, - 0x499db6c9, 0x89f99ede, 0xc954e6e7, 0x0930cef0, 0xcbf03c0d, - 0x0b94141a, 0x4b396c23, 0x8b5d4434, 0xcb639d51, 0x0b07b546, - 0x4baacd7f, 0x8bcee568, 0xcbd67fb4, 0x0bb257a3, 0x4b1f2f9a, - 0x8b7b078d, 0xcb45dee8, 0x0b21f6ff, 0x4b8c8ec6, 0x8be8a6d1, - 0x8abacba4, 0x4adee3b3, 0x0a739b8a, 0xca17b39d, 0x8a296af8, - 0x4a4d42ef, 0x0ae03ad6, 0xca8412c1, 0x8a9c881d, 0x4af8a00a, - 0x0a55d833, 0xca31f024, 0x8a0f2941, 0x4a6b0156, 0x0ac6796f, - 0xcaa25178}, - {0x00000000, 0xd4ea739b, 0xe9d396ed, 0x3d39e576, 0x93a15c00, - 0x474b2f9b, 0x7a72caed, 0xae98b976, 0x2643b900, 0xf2a9ca9b, - 0xcf902fed, 0x1b7a5c76, 0xb5e2e500, 0x6108969b, 0x5c3173ed, - 0x88db0076, 0x4c867201, 0x986c019a, 0xa555e4ec, 0x71bf9777, - 0xdf272e01, 0x0bcd5d9a, 0x36f4b8ec, 0xe21ecb77, 0x6ac5cb01, - 0xbe2fb89a, 0x83165dec, 0x57fc2e77, 0xf9649701, 0x2d8ee49a, - 0x10b701ec, 0xc45d7277, 0x980ce502, 0x4ce69699, 0x71df73ef, - 0xa5350074, 0x0badb902, 0xdf47ca99, 0xe27e2fef, 0x36945c74, - 0xbe4f5c02, 0x6aa52f99, 0x579ccaef, 0x8376b974, 0x2dee0002, - 0xf9047399, 0xc43d96ef, 0x10d7e574, 0xd48a9703, 0x0060e498, - 0x3d5901ee, 0xe9b37275, 0x472bcb03, 0x93c1b898, 0xaef85dee, - 0x7a122e75, 0xf2c92e03, 0x26235d98, 0x1b1ab8ee, 0xcff0cb75, - 0x61687203, 0xb5820198, 0x88bbe4ee, 0x5c519775, 0x3019ca05, - 0xe4f3b99e, 0xd9ca5ce8, 0x0d202f73, 0xa3b89605, 0x7752e59e, - 0x4a6b00e8, 0x9e817373, 0x165a7305, 0xc2b0009e, 0xff89e5e8, - 0x2b639673, 0x85fb2f05, 0x51115c9e, 0x6c28b9e8, 0xb8c2ca73, - 0x7c9fb804, 0xa875cb9f, 0x954c2ee9, 0x41a65d72, 0xef3ee404, - 0x3bd4979f, 0x06ed72e9, 0xd2070172, 0x5adc0104, 0x8e36729f, - 0xb30f97e9, 0x67e5e472, 0xc97d5d04, 0x1d972e9f, 0x20aecbe9, - 0xf444b872, 0xa8152f07, 0x7cff5c9c, 0x41c6b9ea, 0x952cca71, - 0x3bb47307, 0xef5e009c, 0xd267e5ea, 0x068d9671, 0x8e569607, - 0x5abce59c, 0x678500ea, 0xb36f7371, 0x1df7ca07, 0xc91db99c, - 0xf4245cea, 0x20ce2f71, 0xe4935d06, 0x30792e9d, 0x0d40cbeb, - 0xd9aab870, 0x77320106, 0xa3d8729d, 0x9ee197eb, 0x4a0be470, - 0xc2d0e406, 0x163a979d, 0x2b0372eb, 0xffe90170, 0x5171b806, - 0x859bcb9d, 0xb8a22eeb, 0x6c485d70, 0x6032940b, 0xb4d8e790, - 0x89e102e6, 0x5d0b717d, 0xf393c80b, 0x2779bb90, 0x1a405ee6, - 0xceaa2d7d, 0x46712d0b, 0x929b5e90, 0xafa2bbe6, 0x7b48c87d, - 0xd5d0710b, 0x013a0290, 0x3c03e7e6, 0xe8e9947d, 0x2cb4e60a, - 0xf85e9591, 0xc56770e7, 0x118d037c, 0xbf15ba0a, 0x6bffc991, - 0x56c62ce7, 0x822c5f7c, 0x0af75f0a, 0xde1d2c91, 0xe324c9e7, - 0x37ceba7c, 0x9956030a, 0x4dbc7091, 0x708595e7, 0xa46fe67c, - 0xf83e7109, 0x2cd40292, 0x11ede7e4, 0xc507947f, 0x6b9f2d09, - 0xbf755e92, 0x824cbbe4, 0x56a6c87f, 0xde7dc809, 0x0a97bb92, - 0x37ae5ee4, 0xe3442d7f, 0x4ddc9409, 0x9936e792, 0xa40f02e4, - 0x70e5717f, 0xb4b80308, 0x60527093, 0x5d6b95e5, 0x8981e67e, - 0x27195f08, 0xf3f32c93, 0xcecac9e5, 0x1a20ba7e, 0x92fbba08, - 0x4611c993, 0x7b282ce5, 0xafc25f7e, 0x015ae608, 0xd5b09593, - 0xe88970e5, 0x3c63037e, 0x502b5e0e, 0x84c12d95, 0xb9f8c8e3, - 0x6d12bb78, 0xc38a020e, 0x17607195, 0x2a5994e3, 0xfeb3e778, - 0x7668e70e, 0xa2829495, 0x9fbb71e3, 0x4b510278, 0xe5c9bb0e, - 0x3123c895, 0x0c1a2de3, 0xd8f05e78, 0x1cad2c0f, 0xc8475f94, - 0xf57ebae2, 0x2194c979, 0x8f0c700f, 0x5be60394, 0x66dfe6e2, - 0xb2359579, 0x3aee950f, 0xee04e694, 0xd33d03e2, 0x07d77079, - 0xa94fc90f, 0x7da5ba94, 0x409c5fe2, 0x94762c79, 0xc827bb0c, - 0x1ccdc897, 0x21f42de1, 0xf51e5e7a, 0x5b86e70c, 0x8f6c9497, - 0xb25571e1, 0x66bf027a, 0xee64020c, 0x3a8e7197, 0x07b794e1, - 0xd35de77a, 0x7dc55e0c, 0xa92f2d97, 0x9416c8e1, 0x40fcbb7a, - 0x84a1c90d, 0x504bba96, 0x6d725fe0, 0xb9982c7b, 0x1700950d, - 0xc3eae696, 0xfed303e0, 0x2a39707b, 0xa2e2700d, 0x76080396, - 0x4b31e6e0, 0x9fdb957b, 0x31432c0d, 0xe5a95f96, 0xd890bae0, - 0x0c7ac97b}, - {0x00000000, 0x27652581, 0x0fcc3bd9, 0x28a91e58, 0x5f9e0669, - 0x78fb23e8, 0x50523db0, 0x77371831, 0xbe3c0dd2, 0x99592853, - 0xb1f0360b, 0x9695138a, 0xe1a20bbb, 0xc6c72e3a, 0xee6e3062, - 0xc90b15e3, 0x3d7f6b7f, 0x1a1a4efe, 0x32b350a6, 0x15d67527, - 0x62e16d16, 0x45844897, 0x6d2d56cf, 0x4a48734e, 0x834366ad, - 0xa426432c, 0x8c8f5d74, 0xabea78f5, 0xdcdd60c4, 0xfbb84545, - 0xd3115b1d, 0xf4747e9c, 0x7afed6fe, 0x5d9bf37f, 0x7532ed27, - 0x5257c8a6, 0x2560d097, 0x0205f516, 0x2aaceb4e, 0x0dc9cecf, - 0xc4c2db2c, 0xe3a7fead, 0xcb0ee0f5, 0xec6bc574, 0x9b5cdd45, - 0xbc39f8c4, 0x9490e69c, 0xb3f5c31d, 0x4781bd81, 0x60e49800, - 0x484d8658, 0x6f28a3d9, 0x181fbbe8, 0x3f7a9e69, 0x17d38031, - 0x30b6a5b0, 0xf9bdb053, 0xded895d2, 0xf6718b8a, 0xd114ae0b, - 0xa623b63a, 0x814693bb, 0xa9ef8de3, 0x8e8aa862, 0xb5fadc26, - 0x929ff9a7, 0xba36e7ff, 0x9d53c27e, 0xea64da4f, 0xcd01ffce, - 0xe5a8e196, 0xc2cdc417, 0x0bc6d1f4, 0x2ca3f475, 0x040aea2d, - 0x236fcfac, 0x5458d79d, 0x733df21c, 0x5b94ec44, 0x7cf1c9c5, - 0x8885b759, 0xafe092d8, 0x87498c80, 0xa02ca901, 0xd71bb130, - 0xf07e94b1, 0xd8d78ae9, 0xffb2af68, 0x36b9ba8b, 0x11dc9f0a, - 0x39758152, 0x1e10a4d3, 0x6927bce2, 0x4e429963, 0x66eb873b, - 0x418ea2ba, 0xcf040ad8, 0xe8612f59, 0xc0c83101, 0xe7ad1480, - 0x909a0cb1, 0xb7ff2930, 0x9f563768, 0xb83312e9, 0x7138070a, - 0x565d228b, 0x7ef43cd3, 0x59911952, 0x2ea60163, 0x09c324e2, - 0x216a3aba, 0x060f1f3b, 0xf27b61a7, 0xd51e4426, 0xfdb75a7e, - 0xdad27fff, 0xade567ce, 0x8a80424f, 0xa2295c17, 0x854c7996, - 0x4c476c75, 0x6b2249f4, 0x438b57ac, 0x64ee722d, 0x13d96a1c, - 0x34bc4f9d, 0x1c1551c5, 0x3b707444, 0x6af5b94d, 0x4d909ccc, - 0x65398294, 0x425ca715, 0x356bbf24, 0x120e9aa5, 0x3aa784fd, - 0x1dc2a17c, 0xd4c9b49f, 0xf3ac911e, 0xdb058f46, 0xfc60aac7, - 0x8b57b2f6, 0xac329777, 0x849b892f, 0xa3feacae, 0x578ad232, - 0x70eff7b3, 0x5846e9eb, 0x7f23cc6a, 0x0814d45b, 0x2f71f1da, - 0x07d8ef82, 0x20bdca03, 0xe9b6dfe0, 0xced3fa61, 0xe67ae439, - 0xc11fc1b8, 0xb628d989, 0x914dfc08, 0xb9e4e250, 0x9e81c7d1, - 0x100b6fb3, 0x376e4a32, 0x1fc7546a, 0x38a271eb, 0x4f9569da, - 0x68f04c5b, 0x40595203, 0x673c7782, 0xae376261, 0x895247e0, - 0xa1fb59b8, 0x869e7c39, 0xf1a96408, 0xd6cc4189, 0xfe655fd1, - 0xd9007a50, 0x2d7404cc, 0x0a11214d, 0x22b83f15, 0x05dd1a94, - 0x72ea02a5, 0x558f2724, 0x7d26397c, 0x5a431cfd, 0x9348091e, - 0xb42d2c9f, 0x9c8432c7, 0xbbe11746, 0xccd60f77, 0xebb32af6, - 0xc31a34ae, 0xe47f112f, 0xdf0f656b, 0xf86a40ea, 0xd0c35eb2, - 0xf7a67b33, 0x80916302, 0xa7f44683, 0x8f5d58db, 0xa8387d5a, - 0x613368b9, 0x46564d38, 0x6eff5360, 0x499a76e1, 0x3ead6ed0, - 0x19c84b51, 0x31615509, 0x16047088, 0xe2700e14, 0xc5152b95, - 0xedbc35cd, 0xcad9104c, 0xbdee087d, 0x9a8b2dfc, 0xb22233a4, - 0x95471625, 0x5c4c03c6, 0x7b292647, 0x5380381f, 0x74e51d9e, - 0x03d205af, 0x24b7202e, 0x0c1e3e76, 0x2b7b1bf7, 0xa5f1b395, - 0x82949614, 0xaa3d884c, 0x8d58adcd, 0xfa6fb5fc, 0xdd0a907d, - 0xf5a38e25, 0xd2c6aba4, 0x1bcdbe47, 0x3ca89bc6, 0x1401859e, - 0x3364a01f, 0x4453b82e, 0x63369daf, 0x4b9f83f7, 0x6cfaa676, - 0x988ed8ea, 0xbfebfd6b, 0x9742e333, 0xb027c6b2, 0xc710de83, - 0xe075fb02, 0xc8dce55a, 0xefb9c0db, 0x26b2d538, 0x01d7f0b9, - 0x297eeee1, 0x0e1bcb60, 0x792cd351, 0x5e49f6d0, 0x76e0e888, - 0x5185cd09}}; + {0x00000000, 0x9e83da9f, 0x7d01c4e4, 0xe3821e7b, 0xbb04f912, 0x2587238d, + 0xc6053df6, 0x5886e769, 0x7609f225, 0xe88a28ba, 0x0b0836c1, 0x958bec5e, + 0xcd0d0b37, 0x538ed1a8, 0xb00ccfd3, 0x2e8f154c, 0xec12e44b, 0x72913ed4, + 0x911320af, 0x0f90fa30, 0x57161d59, 0xc995c7c6, 0x2a17d9bd, 0xb4940322, + 0x9a1b166e, 0x0498ccf1, 0xe71ad28a, 0x79990815, 0x211fef7c, 0xbf9c35e3, + 0x5c1e2b98, 0xc29df107, 0xd825c897, 0x46a61208, 0xa5240c73, 0x3ba7d6ec, + 0x63213185, 0xfda2eb1a, 0x1e20f561, 0x80a32ffe, 0xae2c3ab2, 0x30afe02d, + 0xd32dfe56, 0x4dae24c9, 0x1528c3a0, 0x8bab193f, 0x68290744, 0xf6aadddb, + 0x34372cdc, 0xaab4f643, 0x4936e838, 0xd7b532a7, 0x8f33d5ce, 0x11b00f51, + 0xf232112a, 0x6cb1cbb5, 0x423edef9, 0xdcbd0466, 0x3f3f1a1d, 0xa1bcc082, + 0xf93a27eb, 0x67b9fd74, 0x843be30f, 0x1ab83990, 0xf14de1f4, 0x6fce3b6b, + 0x8c4c2510, 0x12cfff8f, 0x4a4918e6, 0xd4cac279, 0x3748dc02, 0xa9cb069d, + 0x874413d1, 0x19c7c94e, 0xfa45d735, 0x64c60daa, 0x3c40eac3, 0xa2c3305c, + 0x41412e27, 0xdfc2f4b8, 0x1d5f05bf, 0x83dcdf20, 0x605ec15b, 0xfedd1bc4, + 0xa65bfcad, 0x38d82632, 0xdb5a3849, 0x45d9e2d6, 0x6b56f79a, 0xf5d52d05, + 0x1657337e, 0x88d4e9e1, 0xd0520e88, 0x4ed1d417, 0xad53ca6c, 0x33d010f3, + 0x29682963, 0xb7ebf3fc, 0x5469ed87, 0xcaea3718, 0x926cd071, 0x0cef0aee, + 0xef6d1495, 0x71eece0a, 0x5f61db46, 0xc1e201d9, 0x22601fa2, 0xbce3c53d, + 0xe4652254, 0x7ae6f8cb, 0x9964e6b0, 0x07e73c2f, 0xc57acd28, 0x5bf917b7, + 0xb87b09cc, 0x26f8d353, 0x7e7e343a, 0xe0fdeea5, 0x037ff0de, 0x9dfc2a41, + 0xb3733f0d, 0x2df0e592, 0xce72fbe9, 0x50f12176, 0x0877c61f, 0x96f41c80, + 0x757602fb, 0xebf5d864, 0xa39db332, 0x3d1e69ad, 0xde9c77d6, 0x401fad49, + 0x18994a20, 0x861a90bf, 0x65988ec4, 0xfb1b545b, 0xd5944117, 0x4b179b88, + 0xa89585f3, 0x36165f6c, 0x6e90b805, 0xf013629a, 0x13917ce1, 0x8d12a67e, + 0x4f8f5779, 0xd10c8de6, 0x328e939d, 0xac0d4902, 0xf48bae6b, 0x6a0874f4, + 0x898a6a8f, 0x1709b010, 0x3986a55c, 0xa7057fc3, 0x448761b8, 0xda04bb27, + 0x82825c4e, 0x1c0186d1, 0xff8398aa, 0x61004235, 0x7bb87ba5, 0xe53ba13a, + 0x06b9bf41, 0x983a65de, 0xc0bc82b7, 0x5e3f5828, 0xbdbd4653, 0x233e9ccc, + 0x0db18980, 0x9332531f, 0x70b04d64, 0xee3397fb, 0xb6b57092, 0x2836aa0d, + 0xcbb4b476, 0x55376ee9, 0x97aa9fee, 0x09294571, 0xeaab5b0a, 0x74288195, + 0x2cae66fc, 0xb22dbc63, 0x51afa218, 0xcf2c7887, 0xe1a36dcb, 0x7f20b754, + 0x9ca2a92f, 0x022173b0, 0x5aa794d9, 0xc4244e46, 0x27a6503d, 0xb9258aa2, + 0x52d052c6, 0xcc538859, 0x2fd19622, 0xb1524cbd, 0xe9d4abd4, 0x7757714b, + 0x94d56f30, 0x0a56b5af, 0x24d9a0e3, 0xba5a7a7c, 0x59d86407, 0xc75bbe98, + 0x9fdd59f1, 0x015e836e, 0xe2dc9d15, 0x7c5f478a, 0xbec2b68d, 0x20416c12, + 0xc3c37269, 0x5d40a8f6, 0x05c64f9f, 0x9b459500, 0x78c78b7b, 0xe64451e4, + 0xc8cb44a8, 0x56489e37, 0xb5ca804c, 0x2b495ad3, 0x73cfbdba, 0xed4c6725, + 0x0ece795e, 0x904da3c1, 0x8af59a51, 0x147640ce, 0xf7f45eb5, 0x6977842a, + 0x31f16343, 0xaf72b9dc, 0x4cf0a7a7, 0xd2737d38, 0xfcfc6874, 0x627fb2eb, + 0x81fdac90, 0x1f7e760f, 0x47f89166, 0xd97b4bf9, 0x3af95582, 0xa47a8f1d, + 0x66e77e1a, 0xf864a485, 0x1be6bafe, 0x85656061, 0xdde38708, 0x43605d97, + 0xa0e243ec, 0x3e619973, 0x10ee8c3f, 0x8e6d56a0, 0x6def48db, 0xf36c9244, + 0xabea752d, 0x3569afb2, 0xd6ebb1c9, 0x48686b56}, + {0x00000000, 0xc0642817, 0x80c9502e, 0x40ad7839, 0x0093a15c, 0xc0f7894b, + 0x805af172, 0x403ed965, 0x002643b9, 0xc0426bae, 0x80ef1397, 0x408b3b80, + 0x00b5e2e5, 0xc0d1caf2, 0x807cb2cb, 0x40189adc, 0x414af7a9, 0x812edfbe, + 0xc183a787, 0x01e78f90, 0x41d956f5, 0x81bd7ee2, 0xc11006db, 0x01742ecc, + 0x416cb410, 0x81089c07, 0xc1a5e43e, 0x01c1cc29, 0x41ff154c, 0x819b3d5b, + 0xc1364562, 0x01526d75, 0xc3929f88, 0x03f6b79f, 0x435bcfa6, 0x833fe7b1, + 0xc3013ed4, 0x036516c3, 0x43c86efa, 0x83ac46ed, 0xc3b4dc31, 0x03d0f426, + 0x437d8c1f, 0x8319a408, 0xc3277d6d, 0x0343557a, 0x43ee2d43, 0x838a0554, + 0x82d86821, 0x42bc4036, 0x0211380f, 0xc2751018, 0x824bc97d, 0x422fe16a, + 0x02829953, 0xc2e6b144, 0x82fe2b98, 0x429a038f, 0x02377bb6, 0xc25353a1, + 0x826d8ac4, 0x4209a2d3, 0x02a4daea, 0xc2c0f2fd, 0xc7234eca, 0x074766dd, + 0x47ea1ee4, 0x878e36f3, 0xc7b0ef96, 0x07d4c781, 0x4779bfb8, 0x871d97af, + 0xc7050d73, 0x07612564, 0x47cc5d5d, 0x87a8754a, 0xc796ac2f, 0x07f28438, + 0x475ffc01, 0x873bd416, 0x8669b963, 0x460d9174, 0x06a0e94d, 0xc6c4c15a, + 0x86fa183f, 0x469e3028, 0x06334811, 0xc6576006, 0x864ffada, 0x462bd2cd, + 0x0686aaf4, 0xc6e282e3, 0x86dc5b86, 0x46b87391, 0x06150ba8, 0xc67123bf, + 0x04b1d142, 0xc4d5f955, 0x8478816c, 0x441ca97b, 0x0422701e, 0xc4465809, + 0x84eb2030, 0x448f0827, 0x049792fb, 0xc4f3baec, 0x845ec2d5, 0x443aeac2, + 0x040433a7, 0xc4601bb0, 0x84cd6389, 0x44a94b9e, 0x45fb26eb, 0x859f0efc, + 0xc53276c5, 0x05565ed2, 0x456887b7, 0x850cafa0, 0xc5a1d799, 0x05c5ff8e, + 0x45dd6552, 0x85b94d45, 0xc514357c, 0x05701d6b, 0x454ec40e, 0x852aec19, + 0xc5879420, 0x05e3bc37, 0xcf41ed4f, 0x0f25c558, 0x4f88bd61, 0x8fec9576, + 0xcfd24c13, 0x0fb66404, 0x4f1b1c3d, 0x8f7f342a, 0xcf67aef6, 0x0f0386e1, + 0x4faefed8, 0x8fcad6cf, 0xcff40faa, 0x0f9027bd, 0x4f3d5f84, 0x8f597793, + 0x8e0b1ae6, 0x4e6f32f1, 0x0ec24ac8, 0xcea662df, 0x8e98bbba, 0x4efc93ad, + 0x0e51eb94, 0xce35c383, 0x8e2d595f, 0x4e497148, 0x0ee40971, 0xce802166, + 0x8ebef803, 0x4edad014, 0x0e77a82d, 0xce13803a, 0x0cd372c7, 0xccb75ad0, + 0x8c1a22e9, 0x4c7e0afe, 0x0c40d39b, 0xcc24fb8c, 0x8c8983b5, 0x4cedaba2, + 0x0cf5317e, 0xcc911969, 0x8c3c6150, 0x4c584947, 0x0c669022, 0xcc02b835, + 0x8cafc00c, 0x4ccbe81b, 0x4d99856e, 0x8dfdad79, 0xcd50d540, 0x0d34fd57, + 0x4d0a2432, 0x8d6e0c25, 0xcdc3741c, 0x0da75c0b, 0x4dbfc6d7, 0x8ddbeec0, + 0xcd7696f9, 0x0d12beee, 0x4d2c678b, 0x8d484f9c, 0xcde537a5, 0x0d811fb2, + 0x0862a385, 0xc8068b92, 0x88abf3ab, 0x48cfdbbc, 0x08f102d9, 0xc8952ace, + 0x883852f7, 0x485c7ae0, 0x0844e03c, 0xc820c82b, 0x888db012, 0x48e99805, + 0x08d74160, 0xc8b36977, 0x881e114e, 0x487a3959, 0x4928542c, 0x894c7c3b, + 0xc9e10402, 0x09852c15, 0x49bbf570, 0x89dfdd67, 0xc972a55e, 0x09168d49, + 0x490e1795, 0x896a3f82, 0xc9c747bb, 0x09a36fac, 0x499db6c9, 0x89f99ede, + 0xc954e6e7, 0x0930cef0, 0xcbf03c0d, 0x0b94141a, 0x4b396c23, 0x8b5d4434, + 0xcb639d51, 0x0b07b546, 0x4baacd7f, 0x8bcee568, 0xcbd67fb4, 0x0bb257a3, + 0x4b1f2f9a, 0x8b7b078d, 0xcb45dee8, 0x0b21f6ff, 0x4b8c8ec6, 0x8be8a6d1, + 0x8abacba4, 0x4adee3b3, 0x0a739b8a, 0xca17b39d, 0x8a296af8, 0x4a4d42ef, + 0x0ae03ad6, 0xca8412c1, 0x8a9c881d, 0x4af8a00a, 0x0a55d833, 0xca31f024, + 0x8a0f2941, 0x4a6b0156, 0x0ac6796f, 0xcaa25178}, + {0x00000000, 0xd4ea739b, 0xe9d396ed, 0x3d39e576, 0x93a15c00, 0x474b2f9b, + 0x7a72caed, 0xae98b976, 0x2643b900, 0xf2a9ca9b, 0xcf902fed, 0x1b7a5c76, + 0xb5e2e500, 0x6108969b, 0x5c3173ed, 0x88db0076, 0x4c867201, 0x986c019a, + 0xa555e4ec, 0x71bf9777, 0xdf272e01, 0x0bcd5d9a, 0x36f4b8ec, 0xe21ecb77, + 0x6ac5cb01, 0xbe2fb89a, 0x83165dec, 0x57fc2e77, 0xf9649701, 0x2d8ee49a, + 0x10b701ec, 0xc45d7277, 0x980ce502, 0x4ce69699, 0x71df73ef, 0xa5350074, + 0x0badb902, 0xdf47ca99, 0xe27e2fef, 0x36945c74, 0xbe4f5c02, 0x6aa52f99, + 0x579ccaef, 0x8376b974, 0x2dee0002, 0xf9047399, 0xc43d96ef, 0x10d7e574, + 0xd48a9703, 0x0060e498, 0x3d5901ee, 0xe9b37275, 0x472bcb03, 0x93c1b898, + 0xaef85dee, 0x7a122e75, 0xf2c92e03, 0x26235d98, 0x1b1ab8ee, 0xcff0cb75, + 0x61687203, 0xb5820198, 0x88bbe4ee, 0x5c519775, 0x3019ca05, 0xe4f3b99e, + 0xd9ca5ce8, 0x0d202f73, 0xa3b89605, 0x7752e59e, 0x4a6b00e8, 0x9e817373, + 0x165a7305, 0xc2b0009e, 0xff89e5e8, 0x2b639673, 0x85fb2f05, 0x51115c9e, + 0x6c28b9e8, 0xb8c2ca73, 0x7c9fb804, 0xa875cb9f, 0x954c2ee9, 0x41a65d72, + 0xef3ee404, 0x3bd4979f, 0x06ed72e9, 0xd2070172, 0x5adc0104, 0x8e36729f, + 0xb30f97e9, 0x67e5e472, 0xc97d5d04, 0x1d972e9f, 0x20aecbe9, 0xf444b872, + 0xa8152f07, 0x7cff5c9c, 0x41c6b9ea, 0x952cca71, 0x3bb47307, 0xef5e009c, + 0xd267e5ea, 0x068d9671, 0x8e569607, 0x5abce59c, 0x678500ea, 0xb36f7371, + 0x1df7ca07, 0xc91db99c, 0xf4245cea, 0x20ce2f71, 0xe4935d06, 0x30792e9d, + 0x0d40cbeb, 0xd9aab870, 0x77320106, 0xa3d8729d, 0x9ee197eb, 0x4a0be470, + 0xc2d0e406, 0x163a979d, 0x2b0372eb, 0xffe90170, 0x5171b806, 0x859bcb9d, + 0xb8a22eeb, 0x6c485d70, 0x6032940b, 0xb4d8e790, 0x89e102e6, 0x5d0b717d, + 0xf393c80b, 0x2779bb90, 0x1a405ee6, 0xceaa2d7d, 0x46712d0b, 0x929b5e90, + 0xafa2bbe6, 0x7b48c87d, 0xd5d0710b, 0x013a0290, 0x3c03e7e6, 0xe8e9947d, + 0x2cb4e60a, 0xf85e9591, 0xc56770e7, 0x118d037c, 0xbf15ba0a, 0x6bffc991, + 0x56c62ce7, 0x822c5f7c, 0x0af75f0a, 0xde1d2c91, 0xe324c9e7, 0x37ceba7c, + 0x9956030a, 0x4dbc7091, 0x708595e7, 0xa46fe67c, 0xf83e7109, 0x2cd40292, + 0x11ede7e4, 0xc507947f, 0x6b9f2d09, 0xbf755e92, 0x824cbbe4, 0x56a6c87f, + 0xde7dc809, 0x0a97bb92, 0x37ae5ee4, 0xe3442d7f, 0x4ddc9409, 0x9936e792, + 0xa40f02e4, 0x70e5717f, 0xb4b80308, 0x60527093, 0x5d6b95e5, 0x8981e67e, + 0x27195f08, 0xf3f32c93, 0xcecac9e5, 0x1a20ba7e, 0x92fbba08, 0x4611c993, + 0x7b282ce5, 0xafc25f7e, 0x015ae608, 0xd5b09593, 0xe88970e5, 0x3c63037e, + 0x502b5e0e, 0x84c12d95, 0xb9f8c8e3, 0x6d12bb78, 0xc38a020e, 0x17607195, + 0x2a5994e3, 0xfeb3e778, 0x7668e70e, 0xa2829495, 0x9fbb71e3, 0x4b510278, + 0xe5c9bb0e, 0x3123c895, 0x0c1a2de3, 0xd8f05e78, 0x1cad2c0f, 0xc8475f94, + 0xf57ebae2, 0x2194c979, 0x8f0c700f, 0x5be60394, 0x66dfe6e2, 0xb2359579, + 0x3aee950f, 0xee04e694, 0xd33d03e2, 0x07d77079, 0xa94fc90f, 0x7da5ba94, + 0x409c5fe2, 0x94762c79, 0xc827bb0c, 0x1ccdc897, 0x21f42de1, 0xf51e5e7a, + 0x5b86e70c, 0x8f6c9497, 0xb25571e1, 0x66bf027a, 0xee64020c, 0x3a8e7197, + 0x07b794e1, 0xd35de77a, 0x7dc55e0c, 0xa92f2d97, 0x9416c8e1, 0x40fcbb7a, + 0x84a1c90d, 0x504bba96, 0x6d725fe0, 0xb9982c7b, 0x1700950d, 0xc3eae696, + 0xfed303e0, 0x2a39707b, 0xa2e2700d, 0x76080396, 0x4b31e6e0, 0x9fdb957b, + 0x31432c0d, 0xe5a95f96, 0xd890bae0, 0x0c7ac97b}, + {0x00000000, 0x27652581, 0x0fcc3bd9, 0x28a91e58, 0x5f9e0669, 0x78fb23e8, + 0x50523db0, 0x77371831, 0xbe3c0dd2, 0x99592853, 0xb1f0360b, 0x9695138a, + 0xe1a20bbb, 0xc6c72e3a, 0xee6e3062, 0xc90b15e3, 0x3d7f6b7f, 0x1a1a4efe, + 0x32b350a6, 0x15d67527, 0x62e16d16, 0x45844897, 0x6d2d56cf, 0x4a48734e, + 0x834366ad, 0xa426432c, 0x8c8f5d74, 0xabea78f5, 0xdcdd60c4, 0xfbb84545, + 0xd3115b1d, 0xf4747e9c, 0x7afed6fe, 0x5d9bf37f, 0x7532ed27, 0x5257c8a6, + 0x2560d097, 0x0205f516, 0x2aaceb4e, 0x0dc9cecf, 0xc4c2db2c, 0xe3a7fead, + 0xcb0ee0f5, 0xec6bc574, 0x9b5cdd45, 0xbc39f8c4, 0x9490e69c, 0xb3f5c31d, + 0x4781bd81, 0x60e49800, 0x484d8658, 0x6f28a3d9, 0x181fbbe8, 0x3f7a9e69, + 0x17d38031, 0x30b6a5b0, 0xf9bdb053, 0xded895d2, 0xf6718b8a, 0xd114ae0b, + 0xa623b63a, 0x814693bb, 0xa9ef8de3, 0x8e8aa862, 0xb5fadc26, 0x929ff9a7, + 0xba36e7ff, 0x9d53c27e, 0xea64da4f, 0xcd01ffce, 0xe5a8e196, 0xc2cdc417, + 0x0bc6d1f4, 0x2ca3f475, 0x040aea2d, 0x236fcfac, 0x5458d79d, 0x733df21c, + 0x5b94ec44, 0x7cf1c9c5, 0x8885b759, 0xafe092d8, 0x87498c80, 0xa02ca901, + 0xd71bb130, 0xf07e94b1, 0xd8d78ae9, 0xffb2af68, 0x36b9ba8b, 0x11dc9f0a, + 0x39758152, 0x1e10a4d3, 0x6927bce2, 0x4e429963, 0x66eb873b, 0x418ea2ba, + 0xcf040ad8, 0xe8612f59, 0xc0c83101, 0xe7ad1480, 0x909a0cb1, 0xb7ff2930, + 0x9f563768, 0xb83312e9, 0x7138070a, 0x565d228b, 0x7ef43cd3, 0x59911952, + 0x2ea60163, 0x09c324e2, 0x216a3aba, 0x060f1f3b, 0xf27b61a7, 0xd51e4426, + 0xfdb75a7e, 0xdad27fff, 0xade567ce, 0x8a80424f, 0xa2295c17, 0x854c7996, + 0x4c476c75, 0x6b2249f4, 0x438b57ac, 0x64ee722d, 0x13d96a1c, 0x34bc4f9d, + 0x1c1551c5, 0x3b707444, 0x6af5b94d, 0x4d909ccc, 0x65398294, 0x425ca715, + 0x356bbf24, 0x120e9aa5, 0x3aa784fd, 0x1dc2a17c, 0xd4c9b49f, 0xf3ac911e, + 0xdb058f46, 0xfc60aac7, 0x8b57b2f6, 0xac329777, 0x849b892f, 0xa3feacae, + 0x578ad232, 0x70eff7b3, 0x5846e9eb, 0x7f23cc6a, 0x0814d45b, 0x2f71f1da, + 0x07d8ef82, 0x20bdca03, 0xe9b6dfe0, 0xced3fa61, 0xe67ae439, 0xc11fc1b8, + 0xb628d989, 0x914dfc08, 0xb9e4e250, 0x9e81c7d1, 0x100b6fb3, 0x376e4a32, + 0x1fc7546a, 0x38a271eb, 0x4f9569da, 0x68f04c5b, 0x40595203, 0x673c7782, + 0xae376261, 0x895247e0, 0xa1fb59b8, 0x869e7c39, 0xf1a96408, 0xd6cc4189, + 0xfe655fd1, 0xd9007a50, 0x2d7404cc, 0x0a11214d, 0x22b83f15, 0x05dd1a94, + 0x72ea02a5, 0x558f2724, 0x7d26397c, 0x5a431cfd, 0x9348091e, 0xb42d2c9f, + 0x9c8432c7, 0xbbe11746, 0xccd60f77, 0xebb32af6, 0xc31a34ae, 0xe47f112f, + 0xdf0f656b, 0xf86a40ea, 0xd0c35eb2, 0xf7a67b33, 0x80916302, 0xa7f44683, + 0x8f5d58db, 0xa8387d5a, 0x613368b9, 0x46564d38, 0x6eff5360, 0x499a76e1, + 0x3ead6ed0, 0x19c84b51, 0x31615509, 0x16047088, 0xe2700e14, 0xc5152b95, + 0xedbc35cd, 0xcad9104c, 0xbdee087d, 0x9a8b2dfc, 0xb22233a4, 0x95471625, + 0x5c4c03c6, 0x7b292647, 0x5380381f, 0x74e51d9e, 0x03d205af, 0x24b7202e, + 0x0c1e3e76, 0x2b7b1bf7, 0xa5f1b395, 0x82949614, 0xaa3d884c, 0x8d58adcd, + 0xfa6fb5fc, 0xdd0a907d, 0xf5a38e25, 0xd2c6aba4, 0x1bcdbe47, 0x3ca89bc6, + 0x1401859e, 0x3364a01f, 0x4453b82e, 0x63369daf, 0x4b9f83f7, 0x6cfaa676, + 0x988ed8ea, 0xbfebfd6b, 0x9742e333, 0xb027c6b2, 0xc710de83, 0xe075fb02, + 0xc8dce55a, 0xefb9c0db, 0x26b2d538, 0x01d7f0b9, 0x297eeee1, 0x0e1bcb60, + 0x792cd351, 0x5e49f6d0, 0x76e0e888, 0x5185cd09}}; #endif @@ -9437,10 +8555,9 @@ local const z_word_t FAR crc_braid_big_table[][256] = { #endif local const z_crc_t FAR x2n_table[] = { - 0x40000000, 0x20000000, 0x08000000, 0x00800000, 0x00008000, - 0xedb88320, 0xb1e6b092, 0xa06a2517, 0xed627dae, 0x88d14467, - 0xd7bbfe6a, 0xec447f11, 0x8e7ea170, 0x6427800e, 0x4d47bae0, - 0x09fe548f, 0x83852d0f, 0x30362f1a, 0x7b5a9cc3, 0x31fec169, - 0x9fec022a, 0x6c8dedc4, 0x15d6874d, 0x5fde7a4e, 0xbad90e37, - 0x2e4e5eef, 0x4eaba214, 0xa8a472c0, 0x429a969e, 0x148d302a, + 0x40000000, 0x20000000, 0x08000000, 0x00800000, 0x00008000, 0xedb88320, + 0xb1e6b092, 0xa06a2517, 0xed627dae, 0x88d14467, 0xd7bbfe6a, 0xec447f11, + 0x8e7ea170, 0x6427800e, 0x4d47bae0, 0x09fe548f, 0x83852d0f, 0x30362f1a, + 0x7b5a9cc3, 0x31fec169, 0x9fec022a, 0x6c8dedc4, 0x15d6874d, 0x5fde7a4e, + 0xbad90e37, 0x2e4e5eef, 0x4eaba214, 0xa8a472c0, 0x429a969e, 0x148d302a, 0xc40ba6d0, 0xc4e22c3c}; diff --git a/vendor/hydra/vendor/zlib/deflate.h b/vendor/hydra/vendor/zlib/deflate.h index 300c6ada..45b546bd 100644 --- a/vendor/hydra/vendor/zlib/deflate.h +++ b/vendor/hydra/vendor/zlib/deflate.h @@ -20,7 +20,7 @@ the crc code when it is not needed. For shared libraries, gzip encoding should be left enabled. */ #ifndef NO_GZIP -# define GZIP +#define GZIP #endif /* define LIT_MEM to slightly increase the speed of deflate (order 1% to 2%) at @@ -34,19 +34,19 @@ #define LENGTH_CODES 29 /* number of length codes, not counting the special END_BLOCK code */ -#define LITERALS 256 +#define LITERALS 256 /* number of literal bytes 0..255 */ -#define L_CODES (LITERALS+1+LENGTH_CODES) +#define L_CODES (LITERALS + 1 + LENGTH_CODES) /* number of Literal or Length codes, including the END_BLOCK code */ -#define D_CODES 30 +#define D_CODES 30 /* number of distance codes */ -#define BL_CODES 19 +#define BL_CODES 19 /* number of codes used to transfer the bit lengths */ -#define HEAP_SIZE (2*L_CODES+1) +#define HEAP_SIZE (2 * L_CODES + 1) /* maximum heap size */ #define MAX_BITS 15 @@ -55,42 +55,41 @@ #define Buf_size 16 /* size of bit buffer in bi_buf */ -#define INIT_STATE 42 /* zlib header -> BUSY_STATE */ +#define INIT_STATE 42 /* zlib header -> BUSY_STATE */ #ifdef GZIP -# define GZIP_STATE 57 /* gzip header -> BUSY_STATE | EXTRA_STATE */ +#define GZIP_STATE 57 /* gzip header -> BUSY_STATE | EXTRA_STATE */ #endif -#define EXTRA_STATE 69 /* gzip extra block -> NAME_STATE */ -#define NAME_STATE 73 /* gzip file name -> COMMENT_STATE */ -#define COMMENT_STATE 91 /* gzip comment -> HCRC_STATE */ -#define HCRC_STATE 103 /* gzip header CRC -> BUSY_STATE */ -#define BUSY_STATE 113 /* deflate -> FINISH_STATE */ -#define FINISH_STATE 666 /* stream complete */ +#define EXTRA_STATE 69 /* gzip extra block -> NAME_STATE */ +#define NAME_STATE 73 /* gzip file name -> COMMENT_STATE */ +#define COMMENT_STATE 91 /* gzip comment -> HCRC_STATE */ +#define HCRC_STATE 103 /* gzip header CRC -> BUSY_STATE */ +#define BUSY_STATE 113 /* deflate -> FINISH_STATE */ +#define FINISH_STATE 666 /* stream complete */ /* Stream status */ - /* Data structure describing a single value and its code string. */ typedef struct ct_data_s { - union { - ush freq; /* frequency count */ - ush code; /* bit string */ - } fc; - union { - ush dad; /* father node in Huffman tree */ - ush len; /* length of bit string */ - } dl; + union { + ush freq; /* frequency count */ + ush code; /* bit string */ + } fc; + union { + ush dad; /* father node in Huffman tree */ + ush len; /* length of bit string */ + } dl; } FAR ct_data; #define Freq fc.freq #define Code fc.code -#define Dad dl.dad -#define Len dl.len +#define Dad dl.dad +#define Len dl.len -typedef struct static_tree_desc_s static_tree_desc; +typedef struct static_tree_desc_s static_tree_desc; typedef struct tree_desc_s { - ct_data *dyn_tree; /* the dynamic tree */ - int max_code; /* largest code with non zero frequency */ - const static_tree_desc *stat_desc; /* the corresponding static tree */ + ct_data *dyn_tree; /* the dynamic tree */ + int max_code; /* largest code with non zero frequency */ + const static_tree_desc *stat_desc; /* the corresponding static tree */ } FAR tree_desc; typedef ush Pos; @@ -102,197 +101,197 @@ typedef unsigned IPos; */ typedef struct internal_state { - z_streamp strm; /* pointer back to this zlib stream */ - int status; /* as the name implies */ - Bytef *pending_buf; /* output still pending */ - ulg pending_buf_size; /* size of pending_buf */ - Bytef *pending_out; /* next pending byte to output to the stream */ - ulg pending; /* nb of bytes in the pending buffer */ - int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ - gz_headerp gzhead; /* gzip header information to write */ - ulg gzindex; /* where in extra, name, or comment */ - Byte method; /* can only be DEFLATED */ - int last_flush; /* value of flush param for previous deflate call */ - - /* used by deflate.c: */ - - uInt w_size; /* LZ77 window size (32K by default) */ - uInt w_bits; /* log2(w_size) (8..16) */ - uInt w_mask; /* w_size - 1 */ - - Bytef *window; - /* Sliding window. Input bytes are read into the second half of the window, - * and move to the first half later to keep a dictionary of at least wSize - * bytes. With this organization, matches are limited to a distance of - * wSize-MAX_MATCH bytes, but this ensures that IO is always - * performed with a length multiple of the block size. Also, it limits - * the window size to 64K, which is quite useful on MSDOS. - * To do: use the user input buffer as sliding window. - */ - - ulg window_size; - /* Actual size of window: 2*wSize, except when the user input buffer - * is directly used as sliding window. - */ - - Posf *prev; - /* Link to older string with same hash index. To limit the size of this - * array to 64K, this link is maintained only for the last 32K strings. - * An index in this array is thus a window index modulo 32K. - */ - - Posf *head; /* Heads of the hash chains or NIL. */ - - uInt ins_h; /* hash index of string to be inserted */ - uInt hash_size; /* number of elements in hash table */ - uInt hash_bits; /* log2(hash_size) */ - uInt hash_mask; /* hash_size-1 */ - - uInt hash_shift; - /* Number of bits by which ins_h must be shifted at each input - * step. It must be such that after MIN_MATCH steps, the oldest - * byte no longer takes part in the hash key, that is: - * hash_shift * MIN_MATCH >= hash_bits - */ - - long block_start; - /* Window position at the beginning of the current output block. Gets - * negative when the window is moved backwards. - */ - - uInt match_length; /* length of best match */ - IPos prev_match; /* previous match */ - int match_available; /* set if previous match exists */ - uInt strstart; /* start of string to insert */ - uInt match_start; /* start of matching string */ - uInt lookahead; /* number of valid bytes ahead in window */ - - uInt prev_length; - /* Length of the best match at previous step. Matches not greater than this - * are discarded. This is used in the lazy match evaluation. - */ - - uInt max_chain_length; - /* To speed up deflation, hash chains are never searched beyond this - * length. A higher limit improves compression ratio but degrades the - * speed. - */ - - uInt max_lazy_match; - /* Attempt to find a better match only when the current match is strictly - * smaller than this value. This mechanism is used only for compression - * levels >= 4. - */ -# define max_insert_length max_lazy_match - /* Insert new strings in the hash table only if the match length is not - * greater than this length. This saves time but degrades compression. - * max_insert_length is used only for compression levels <= 3. - */ - - int level; /* compression level (1..9) */ - int strategy; /* favor or force Huffman coding*/ - - uInt good_match; - /* Use a faster search when the previous match is longer than this */ - - int nice_match; /* Stop searching when current match exceeds this */ - - /* used by trees.c: */ - /* Didn't use ct_data typedef below to suppress compiler warning */ - struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ - struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ - struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ - - struct tree_desc_s l_desc; /* desc. for literal tree */ - struct tree_desc_s d_desc; /* desc. for distance tree */ - struct tree_desc_s bl_desc; /* desc. for bit length tree */ - - ush bl_count[MAX_BITS+1]; - /* number of codes at each bit length for an optimal tree */ - - int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ - int heap_len; /* number of elements in the heap */ - int heap_max; /* element of largest frequency */ - /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. - * The same heap array is used to build all trees. - */ - - uch depth[2*L_CODES+1]; - /* Depth of each subtree used as tie breaker for trees of equal frequency - */ + z_streamp strm; /* pointer back to this zlib stream */ + int status; /* as the name implies */ + Bytef *pending_buf; /* output still pending */ + ulg pending_buf_size; /* size of pending_buf */ + Bytef *pending_out; /* next pending byte to output to the stream */ + ulg pending; /* nb of bytes in the pending buffer */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + gz_headerp gzhead; /* gzip header information to write */ + ulg gzindex; /* where in extra, name, or comment */ + Byte method; /* can only be DEFLATED */ + int last_flush; /* value of flush param for previous deflate call */ + + /* used by deflate.c: */ + + uInt w_size; /* LZ77 window size (32K by default) */ + uInt w_bits; /* log2(w_size) (8..16) */ + uInt w_mask; /* w_size - 1 */ + + Bytef *window; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. Also, it limits + * the window size to 64K, which is quite useful on MSDOS. + * To do: use the user input buffer as sliding window. + */ + + ulg window_size; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + Posf *prev; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + Posf *head; /* Heads of the hash chains or NIL. */ + + uInt ins_h; /* hash index of string to be inserted */ + uInt hash_size; /* number of elements in hash table */ + uInt hash_bits; /* log2(hash_size) */ + uInt hash_mask; /* hash_size-1 */ + + uInt hash_shift; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + long block_start; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + uInt match_length; /* length of best match */ + IPos prev_match; /* previous match */ + int match_available; /* set if previous match exists */ + uInt strstart; /* start of string to insert */ + uInt match_start; /* start of matching string */ + uInt lookahead; /* number of valid bytes ahead in window */ + + uInt prev_length; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + uInt max_chain_length; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + uInt max_lazy_match; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ +#define max_insert_length max_lazy_match + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + int level; /* compression level (1..9) */ + int strategy; /* favor or force Huffman coding*/ + + uInt good_match; + /* Use a faster search when the previous match is longer than this */ + + int nice_match; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + /* Didn't use ct_data typedef below to suppress compiler warning */ + struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + struct ct_data_s dyn_dtree[2 * D_CODES + 1]; /* distance tree */ + struct ct_data_s bl_tree[2 * BL_CODES + 1]; /* Huffman tree for bit lengths */ + + struct tree_desc_s l_desc; /* desc. for literal tree */ + struct tree_desc_s d_desc; /* desc. for distance tree */ + struct tree_desc_s bl_desc; /* desc. for bit length tree */ + + ush bl_count[MAX_BITS + 1]; + /* number of codes at each bit length for an optimal tree */ + + int heap[2 * L_CODES + 1]; /* heap used to build the Huffman trees */ + int heap_len; /* number of elements in the heap */ + int heap_max; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + uch depth[2 * L_CODES + 1]; + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ #ifdef LIT_MEM -# define LIT_BUFS 5 - ushf *d_buf; /* buffer for distances */ - uchf *l_buf; /* buffer for literals/lengths */ +#define LIT_BUFS 5 + ushf *d_buf; /* buffer for distances */ + uchf *l_buf; /* buffer for literals/lengths */ #else -# define LIT_BUFS 4 - uchf *sym_buf; /* buffer for distances and literals/lengths */ +#define LIT_BUFS 4 + uchf *sym_buf; /* buffer for distances and literals/lengths */ #endif - uInt lit_bufsize; - /* Size of match buffer for literals/lengths. There are 4 reasons for - * limiting lit_bufsize to 64K: - * - frequencies can be kept in 16 bit counters - * - if compression is not successful for the first block, all input - * data is still in the window so we can still emit a stored block even - * when input comes from standard input. (This can also be done for - * all blocks if lit_bufsize is not greater than 32K.) - * - if compression is not successful for a file smaller than 64K, we can - * even emit a stored file instead of a stored block (saving 5 bytes). - * This is applicable only for zip (not gzip or zlib). - * - creating new Huffman trees less frequently may not provide fast - * adaptation to changes in the input data statistics. (Take for - * example a binary file with poorly compressible code followed by - * a highly compressible string table.) Smaller buffer sizes give - * fast adaptation but have of course the overhead of transmitting - * trees more frequently. - * - I can't count above 4 - */ - - uInt sym_next; /* running index in symbol buffer */ - uInt sym_end; /* symbol table full when sym_next reaches this */ - - ulg opt_len; /* bit length of current block with optimal trees */ - ulg static_len; /* bit length of current block with static trees */ - uInt matches; /* number of string matches in current block */ - uInt insert; /* bytes at end of window left to insert */ + uInt lit_bufsize; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + uInt sym_next; /* running index in symbol buffer */ + uInt sym_end; /* symbol table full when sym_next reaches this */ + + ulg opt_len; /* bit length of current block with optimal trees */ + ulg static_len; /* bit length of current block with static trees */ + uInt matches; /* number of string matches in current block */ + uInt insert; /* bytes at end of window left to insert */ #ifdef ZLIB_DEBUG - ulg compressed_len; /* total bit length of compressed file mod 2^32 */ - ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ + ulg compressed_len; /* total bit length of compressed file mod 2^32 */ + ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ #endif - ush bi_buf; - /* Output buffer. bits are inserted starting at the bottom (least - * significant bits). - */ - int bi_valid; - /* Number of valid bits in bi_buf. All bits above the last valid bit - * are always zero. - */ - - ulg high_water; - /* High water mark offset in window for initialized bytes -- bytes above - * this are set to zero in order to avoid memory check warnings when - * longest match routines access bytes past the input. This is then - * updated to the new high water mark. - */ + ush bi_buf; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + int bi_valid; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + + ulg high_water; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ } FAR deflate_state; /* Output a byte on the stream. * IN assertion: there is enough room in pending_buf. */ -#define put_byte(s, c) {s->pending_buf[s->pending++] = (Bytef)(c);} - +#define put_byte(s, c) \ + { s->pending_buf[s->pending++] = (Bytef)(c); } -#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +#define MIN_LOOKAHEAD (MAX_MATCH + MIN_MATCH + 1) /* Minimum amount of lookahead, except at the end of the input file. * See deflate.c for comments about the MIN_MATCH+1. */ -#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) +#define MAX_DIST(s) ((s)->w_size - MIN_LOOKAHEAD) /* In order to simplify the code, particularly on 16 bit machines, match * distances are limited to MAX_DIST instead of WSIZE. */ @@ -301,18 +300,18 @@ typedef struct internal_state { /* Number of bytes after end of data in window to initialize in order to avoid memory checker errors from longest match routines */ - /* in trees.c */ +/* in trees.c */ void ZLIB_INTERNAL _tr_init(deflate_state *s); int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc); -void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, - ulg stored_len, int last); +void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, ulg stored_len, + int last); void ZLIB_INTERNAL _tr_flush_bits(deflate_state *s); void ZLIB_INTERNAL _tr_align(deflate_state *s); void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, ulg stored_len, int last); #define d_code(dist) \ - ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) + ((dist) < 256 ? _dist_code[dist] : _dist_code[256 + ((dist) >> 7)]) /* Mapping from a distance to a distance code. dist is the distance - 1 and * must not have side effects. _dist_code[256] and _dist_code[257] are never * used. @@ -322,56 +321,60 @@ void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, /* Inline versions of _tr_tally for speed: */ #if defined(GEN_TREES_H) || !defined(STDC) - extern uch ZLIB_INTERNAL _length_code[]; - extern uch ZLIB_INTERNAL _dist_code[]; +extern uch ZLIB_INTERNAL _length_code[]; +extern uch ZLIB_INTERNAL _dist_code[]; #else - extern const uch ZLIB_INTERNAL _length_code[]; - extern const uch ZLIB_INTERNAL _dist_code[]; +extern const uch ZLIB_INTERNAL _length_code[]; +extern const uch ZLIB_INTERNAL _dist_code[]; #endif #ifdef LIT_MEM -# define _tr_tally_lit(s, c, flush) \ - { uch cc = (c); \ - s->d_buf[s->sym_next] = 0; \ - s->l_buf[s->sym_next++] = cc; \ - s->dyn_ltree[cc].Freq++; \ - flush = (s->sym_next == s->sym_end); \ - } -# define _tr_tally_dist(s, distance, length, flush) \ - { uch len = (uch)(length); \ - ush dist = (ush)(distance); \ - s->d_buf[s->sym_next] = dist; \ - s->l_buf[s->sym_next++] = len; \ - dist--; \ - s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ - s->dyn_dtree[d_code(dist)].Freq++; \ +#define _tr_tally_lit(s, c, flush) \ + { \ + uch cc = (c); \ + s->d_buf[s->sym_next] = 0; \ + s->l_buf[s->sym_next++] = cc; \ + s->dyn_ltree[cc].Freq++; \ flush = (s->sym_next == s->sym_end); \ } +#define _tr_tally_dist(s, distance, length, flush) \ + { \ + uch len = (uch)(length); \ + ush dist = (ush)(distance); \ + s->d_buf[s->sym_next] = dist; \ + s->l_buf[s->sym_next++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len] + LITERALS + 1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->sym_next == s->sym_end); \ + } #else -# define _tr_tally_lit(s, c, flush) \ - { uch cc = (c); \ - s->sym_buf[s->sym_next++] = 0; \ - s->sym_buf[s->sym_next++] = 0; \ - s->sym_buf[s->sym_next++] = cc; \ - s->dyn_ltree[cc].Freq++; \ - flush = (s->sym_next == s->sym_end); \ - } -# define _tr_tally_dist(s, distance, length, flush) \ - { uch len = (uch)(length); \ - ush dist = (ush)(distance); \ - s->sym_buf[s->sym_next++] = (uch)dist; \ - s->sym_buf[s->sym_next++] = (uch)(dist >> 8); \ - s->sym_buf[s->sym_next++] = len; \ - dist--; \ - s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ - s->dyn_dtree[d_code(dist)].Freq++; \ +#define _tr_tally_lit(s, c, flush) \ + { \ + uch cc = (c); \ + s->sym_buf[s->sym_next++] = 0; \ + s->sym_buf[s->sym_next++] = 0; \ + s->sym_buf[s->sym_next++] = cc; \ + s->dyn_ltree[cc].Freq++; \ flush = (s->sym_next == s->sym_end); \ } +#define _tr_tally_dist(s, distance, length, flush) \ + { \ + uch len = (uch)(length); \ + ush dist = (ush)(distance); \ + s->sym_buf[s->sym_next++] = (uch)dist; \ + s->sym_buf[s->sym_next++] = (uch)(dist >> 8); \ + s->sym_buf[s->sym_next++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len] + LITERALS + 1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->sym_next == s->sym_end); \ + } #endif #else -# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) -# define _tr_tally_dist(s, distance, length, flush) \ - flush = _tr_tally(s, distance, length) +#define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) +#define _tr_tally_dist(s, distance, length, flush) \ + flush = _tr_tally(s, distance, length) #endif #endif /* DEFLATE_H */ diff --git a/vendor/hydra/vendor/zlib/gzguts.h b/vendor/hydra/vendor/zlib/gzguts.h index eba72085..833a0e20 100644 --- a/vendor/hydra/vendor/zlib/gzguts.h +++ b/vendor/hydra/vendor/zlib/gzguts.h @@ -4,113 +4,114 @@ */ #ifdef _LARGEFILE64_SOURCE -# ifndef _LARGEFILE_SOURCE -# define _LARGEFILE_SOURCE 1 -# endif -# undef _FILE_OFFSET_BITS -# undef _TIME_BITS +#ifndef _LARGEFILE_SOURCE +#define _LARGEFILE_SOURCE 1 +#endif +#undef _FILE_OFFSET_BITS +#undef _TIME_BITS #endif #ifdef HAVE_HIDDEN -# define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) +#define ZLIB_INTERNAL __attribute__((visibility("hidden"))) #else -# define ZLIB_INTERNAL +#define ZLIB_INTERNAL #endif #include + #include "zlib.h" #ifdef STDC -# include -# include -# include +#include +#include +#include #endif #ifndef _POSIX_SOURCE -# define _POSIX_SOURCE +#define _POSIX_SOURCE #endif #include #ifdef _WIN32 -# include +#include #endif #if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32) -# include +#include #endif #if defined(_WIN32) -# define WIDECHAR +#define WIDECHAR #endif #ifdef WINAPI_FAMILY -# define open _open -# define read _read -# define write _write -# define close _close +#define open _open +#define read _read +#define write _write +#define close _close #endif -#ifdef NO_DEFLATE /* for compatibility with old definition */ -# define NO_GZCOMPRESS +#ifdef NO_DEFLATE /* for compatibility with old definition */ +#define NO_GZCOMPRESS #endif #if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550) -# ifndef HAVE_VSNPRINTF -# define HAVE_VSNPRINTF -# endif +#ifndef HAVE_VSNPRINTF +#define HAVE_VSNPRINTF +#endif #endif #if defined(__CYGWIN__) -# ifndef HAVE_VSNPRINTF -# define HAVE_VSNPRINTF -# endif +#ifndef HAVE_VSNPRINTF +#define HAVE_VSNPRINTF +#endif #endif #if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410) -# ifndef HAVE_VSNPRINTF -# define HAVE_VSNPRINTF -# endif +#ifndef HAVE_VSNPRINTF +#define HAVE_VSNPRINTF +#endif #endif #ifndef HAVE_VSNPRINTF -# ifdef MSDOS +#ifdef MSDOS /* vsnprintf may exist on some MS-DOS compilers (DJGPP?), but for now we just assume it doesn't. */ -# define NO_vsnprintf -# endif -# ifdef __TURBOC__ -# define NO_vsnprintf -# endif -# ifdef WIN32 +#define NO_vsnprintf +#endif +#ifdef __TURBOC__ +#define NO_vsnprintf +#endif +#ifdef WIN32 /* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ -# if !defined(vsnprintf) && !defined(NO_vsnprintf) -# if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 ) -# define vsnprintf _vsnprintf -# endif -# endif -# endif -# ifdef __SASC -# define NO_vsnprintf -# endif -# ifdef VMS -# define NO_vsnprintf -# endif -# ifdef __OS400__ -# define NO_vsnprintf -# endif -# ifdef __MVS__ -# define NO_vsnprintf -# endif +#if !defined(vsnprintf) && !defined(NO_vsnprintf) +#if !defined(_MSC_VER) || (defined(_MSC_VER) && _MSC_VER < 1500) +#define vsnprintf _vsnprintf +#endif +#endif +#endif +#ifdef __SASC +#define NO_vsnprintf +#endif +#ifdef VMS +#define NO_vsnprintf +#endif +#ifdef __OS400__ +#define NO_vsnprintf +#endif +#ifdef __MVS__ +#define NO_vsnprintf +#endif #endif /* unlike snprintf (which is required in C99), _snprintf does not guarantee null termination of the result -- however this is only used in gzlib.c where the result is assured to fit in the space provided */ #if defined(_MSC_VER) && _MSC_VER < 1900 -# define snprintf _snprintf +#define snprintf _snprintf #endif #ifndef local -# define local static +#define local static #endif /* since "static" is used to mean two completely different things in C, we define "local" for the non-static meaning of "static", for readability @@ -118,36 +119,36 @@ /* gz* functions always use library allocation functions */ #ifndef STDC - extern voidp malloc(uInt size); - extern void free(voidpf ptr); +extern voidp malloc(uInt size); +extern void free(voidpf ptr); #endif /* get errno and strerror definition */ #if defined UNDER_CE -# include -# define zstrerror() gz_strwinerror((DWORD)GetLastError()) +#include +#define zstrerror() gz_strwinerror((DWORD)GetLastError()) #else -# ifndef NO_STRERROR -# include -# define zstrerror() strerror(errno) -# else -# define zstrerror() "stdio error (consult errno)" -# endif +#ifndef NO_STRERROR +#include +#define zstrerror() strerror(errno) +#else +#define zstrerror() "stdio error (consult errno)" +#endif #endif /* provide prototypes for these when building zlib without LFS */ -#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0 - ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); - ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); - ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); - ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); +#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE - 0 == 0 +ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); +ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); +ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); +ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); #endif /* default memLevel */ #if MAX_MEM_LEVEL >= 8 -# define DEF_MEM_LEVEL 8 +#define DEF_MEM_LEVEL 8 #else -# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#define DEF_MEM_LEVEL MAX_MEM_LEVEL #endif /* default i/o buffer size -- double this for output when reading (this and @@ -158,46 +159,46 @@ #define GZ_NONE 0 #define GZ_READ 7247 #define GZ_WRITE 31153 -#define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */ +#define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */ /* values for gz_state how */ -#define LOOK 0 /* look for a gzip header */ -#define COPY 1 /* copy input directly */ -#define GZIP 2 /* decompress a gzip stream */ +#define LOOK 0 /* look for a gzip header */ +#define COPY 1 /* copy input directly */ +#define GZIP 2 /* decompress a gzip stream */ /* internal gzip file state data structure */ typedef struct { - /* exposed contents for gzgetc() macro */ - struct gzFile_s x; /* "x" for exposed */ - /* x.have: number of bytes available at x.next */ - /* x.next: next output data to deliver or write */ - /* x.pos: current position in uncompressed data */ - /* used for both reading and writing */ - int mode; /* see gzip modes above */ - int fd; /* file descriptor */ - char *path; /* path or fd for error messages */ - unsigned size; /* buffer size, zero if not allocated yet */ - unsigned want; /* requested buffer size, default is GZBUFSIZE */ - unsigned char *in; /* input buffer (double-sized when writing) */ - unsigned char *out; /* output buffer (double-sized when reading) */ - int direct; /* 0 if processing gzip, 1 if transparent */ - /* just for reading */ - int how; /* 0: get header, 1: copy, 2: decompress */ - z_off64_t start; /* where the gzip data started, for rewinding */ - int eof; /* true if end of input file reached */ - int past; /* true if read requested past end */ - /* just for writing */ - int level; /* compression level */ - int strategy; /* compression strategy */ - int reset; /* true if a reset is pending after a Z_FINISH */ - /* seek request */ - z_off64_t skip; /* amount to skip (already rewound if backwards) */ - int seek; /* true if seek request pending */ - /* error information */ - int err; /* error code */ - char *msg; /* error message */ - /* zlib inflate or deflate stream */ - z_stream strm; /* stream structure in-place (not a pointer) */ + /* exposed contents for gzgetc() macro */ + struct gzFile_s x; /* "x" for exposed */ + /* x.have: number of bytes available at x.next */ + /* x.next: next output data to deliver or write */ + /* x.pos: current position in uncompressed data */ + /* used for both reading and writing */ + int mode; /* see gzip modes above */ + int fd; /* file descriptor */ + char *path; /* path or fd for error messages */ + unsigned size; /* buffer size, zero if not allocated yet */ + unsigned want; /* requested buffer size, default is GZBUFSIZE */ + unsigned char *in; /* input buffer (double-sized when writing) */ + unsigned char *out; /* output buffer (double-sized when reading) */ + int direct; /* 0 if processing gzip, 1 if transparent */ + /* just for reading */ + int how; /* 0: get header, 1: copy, 2: decompress */ + z_off64_t start; /* where the gzip data started, for rewinding */ + int eof; /* true if end of input file reached */ + int past; /* true if read requested past end */ + /* just for writing */ + int level; /* compression level */ + int strategy; /* compression strategy */ + int reset; /* true if a reset is pending after a Z_FINISH */ + /* seek request */ + z_off64_t skip; /* amount to skip (already rewound if backwards) */ + int seek; /* true if seek request pending */ + /* error information */ + int err; /* error code */ + char *msg; /* error message */ + /* zlib inflate or deflate stream */ + z_stream strm; /* stream structure in-place (not a pointer) */ } gz_state; typedef gz_state FAR *gz_statep; diff --git a/vendor/hydra/vendor/zlib/inffixed.h b/vendor/hydra/vendor/zlib/inffixed.h index d6283277..e12f9927 100644 --- a/vendor/hydra/vendor/zlib/inffixed.h +++ b/vendor/hydra/vendor/zlib/inffixed.h @@ -1,94 +1,122 @@ - /* inffixed.h -- table for decoding fixed codes - * Generated automatically by makefixed(). - */ +/* inffixed.h -- table for decoding fixed codes + * Generated automatically by makefixed(). + */ - /* WARNING: this file should *not* be used by applications. - It is part of the implementation of this library and is - subject to change. Applications should only use zlib.h. - */ +/* WARNING: this file should *not* be used by applications. + It is part of the implementation of this library and is + subject to change. Applications should only use zlib.h. + */ - static const code lenfix[512] = { - {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, - {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, - {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, - {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, - {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, - {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, - {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, - {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, - {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, - {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, - {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, - {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, - {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, - {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, - {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, - {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, - {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, - {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, - {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, - {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, - {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, - {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, - {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, - {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, - {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, - {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, - {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, - {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, - {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, - {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, - {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, - {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, - {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, - {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, - {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, - {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, - {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, - {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, - {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, - {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, - {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, - {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, - {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, - {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, - {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, - {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, - {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, - {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, - {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, - {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, - {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, - {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, - {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, - {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, - {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, - {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, - {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, - {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, - {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, - {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, - {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, - {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, - {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, - {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, - {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, - {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, - {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, - {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, - {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, - {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, - {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, - {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, - {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, - {0,9,255} - }; +static const code lenfix[512] = { + {96, 7, 0}, {0, 8, 80}, {0, 8, 16}, {20, 8, 115}, {18, 7, 31}, + {0, 8, 112}, {0, 8, 48}, {0, 9, 192}, {16, 7, 10}, {0, 8, 96}, + {0, 8, 32}, {0, 9, 160}, {0, 8, 0}, {0, 8, 128}, {0, 8, 64}, + {0, 9, 224}, {16, 7, 6}, {0, 8, 88}, {0, 8, 24}, {0, 9, 144}, + {19, 7, 59}, {0, 8, 120}, {0, 8, 56}, {0, 9, 208}, {17, 7, 17}, + {0, 8, 104}, {0, 8, 40}, {0, 9, 176}, {0, 8, 8}, {0, 8, 136}, + {0, 8, 72}, {0, 9, 240}, {16, 7, 4}, {0, 8, 84}, {0, 8, 20}, + {21, 8, 227}, {19, 7, 43}, {0, 8, 116}, {0, 8, 52}, {0, 9, 200}, + {17, 7, 13}, {0, 8, 100}, {0, 8, 36}, {0, 9, 168}, {0, 8, 4}, + {0, 8, 132}, {0, 8, 68}, {0, 9, 232}, {16, 7, 8}, {0, 8, 92}, + {0, 8, 28}, {0, 9, 152}, {20, 7, 83}, {0, 8, 124}, {0, 8, 60}, + {0, 9, 216}, {18, 7, 23}, {0, 8, 108}, {0, 8, 44}, {0, 9, 184}, + {0, 8, 12}, {0, 8, 140}, {0, 8, 76}, {0, 9, 248}, {16, 7, 3}, + {0, 8, 82}, {0, 8, 18}, {21, 8, 163}, {19, 7, 35}, {0, 8, 114}, + {0, 8, 50}, {0, 9, 196}, {17, 7, 11}, {0, 8, 98}, {0, 8, 34}, + {0, 9, 164}, {0, 8, 2}, {0, 8, 130}, {0, 8, 66}, {0, 9, 228}, + {16, 7, 7}, {0, 8, 90}, {0, 8, 26}, {0, 9, 148}, {20, 7, 67}, + {0, 8, 122}, {0, 8, 58}, {0, 9, 212}, {18, 7, 19}, {0, 8, 106}, + {0, 8, 42}, {0, 9, 180}, {0, 8, 10}, {0, 8, 138}, {0, 8, 74}, + {0, 9, 244}, {16, 7, 5}, {0, 8, 86}, {0, 8, 22}, {64, 8, 0}, + {19, 7, 51}, {0, 8, 118}, {0, 8, 54}, {0, 9, 204}, {17, 7, 15}, + {0, 8, 102}, {0, 8, 38}, {0, 9, 172}, {0, 8, 6}, {0, 8, 134}, + {0, 8, 70}, {0, 9, 236}, {16, 7, 9}, {0, 8, 94}, {0, 8, 30}, + {0, 9, 156}, {20, 7, 99}, {0, 8, 126}, {0, 8, 62}, {0, 9, 220}, + {18, 7, 27}, {0, 8, 110}, {0, 8, 46}, {0, 9, 188}, {0, 8, 14}, + {0, 8, 142}, {0, 8, 78}, {0, 9, 252}, {96, 7, 0}, {0, 8, 81}, + {0, 8, 17}, {21, 8, 131}, {18, 7, 31}, {0, 8, 113}, {0, 8, 49}, + {0, 9, 194}, {16, 7, 10}, {0, 8, 97}, {0, 8, 33}, {0, 9, 162}, + {0, 8, 1}, {0, 8, 129}, {0, 8, 65}, {0, 9, 226}, {16, 7, 6}, + {0, 8, 89}, {0, 8, 25}, {0, 9, 146}, {19, 7, 59}, {0, 8, 121}, + {0, 8, 57}, {0, 9, 210}, {17, 7, 17}, {0, 8, 105}, {0, 8, 41}, + {0, 9, 178}, {0, 8, 9}, {0, 8, 137}, {0, 8, 73}, {0, 9, 242}, + {16, 7, 4}, {0, 8, 85}, {0, 8, 21}, {16, 8, 258}, {19, 7, 43}, + {0, 8, 117}, {0, 8, 53}, {0, 9, 202}, {17, 7, 13}, {0, 8, 101}, + {0, 8, 37}, {0, 9, 170}, {0, 8, 5}, {0, 8, 133}, {0, 8, 69}, + {0, 9, 234}, {16, 7, 8}, {0, 8, 93}, {0, 8, 29}, {0, 9, 154}, + {20, 7, 83}, {0, 8, 125}, {0, 8, 61}, {0, 9, 218}, {18, 7, 23}, + {0, 8, 109}, {0, 8, 45}, {0, 9, 186}, {0, 8, 13}, {0, 8, 141}, + {0, 8, 77}, {0, 9, 250}, {16, 7, 3}, {0, 8, 83}, {0, 8, 19}, + {21, 8, 195}, {19, 7, 35}, {0, 8, 115}, {0, 8, 51}, {0, 9, 198}, + {17, 7, 11}, {0, 8, 99}, {0, 8, 35}, {0, 9, 166}, {0, 8, 3}, + {0, 8, 131}, {0, 8, 67}, {0, 9, 230}, {16, 7, 7}, {0, 8, 91}, + {0, 8, 27}, {0, 9, 150}, {20, 7, 67}, {0, 8, 123}, {0, 8, 59}, + {0, 9, 214}, {18, 7, 19}, {0, 8, 107}, {0, 8, 43}, {0, 9, 182}, + {0, 8, 11}, {0, 8, 139}, {0, 8, 75}, {0, 9, 246}, {16, 7, 5}, + {0, 8, 87}, {0, 8, 23}, {64, 8, 0}, {19, 7, 51}, {0, 8, 119}, + {0, 8, 55}, {0, 9, 206}, {17, 7, 15}, {0, 8, 103}, {0, 8, 39}, + {0, 9, 174}, {0, 8, 7}, {0, 8, 135}, {0, 8, 71}, {0, 9, 238}, + {16, 7, 9}, {0, 8, 95}, {0, 8, 31}, {0, 9, 158}, {20, 7, 99}, + {0, 8, 127}, {0, 8, 63}, {0, 9, 222}, {18, 7, 27}, {0, 8, 111}, + {0, 8, 47}, {0, 9, 190}, {0, 8, 15}, {0, 8, 143}, {0, 8, 79}, + {0, 9, 254}, {96, 7, 0}, {0, 8, 80}, {0, 8, 16}, {20, 8, 115}, + {18, 7, 31}, {0, 8, 112}, {0, 8, 48}, {0, 9, 193}, {16, 7, 10}, + {0, 8, 96}, {0, 8, 32}, {0, 9, 161}, {0, 8, 0}, {0, 8, 128}, + {0, 8, 64}, {0, 9, 225}, {16, 7, 6}, {0, 8, 88}, {0, 8, 24}, + {0, 9, 145}, {19, 7, 59}, {0, 8, 120}, {0, 8, 56}, {0, 9, 209}, + {17, 7, 17}, {0, 8, 104}, {0, 8, 40}, {0, 9, 177}, {0, 8, 8}, + {0, 8, 136}, {0, 8, 72}, {0, 9, 241}, {16, 7, 4}, {0, 8, 84}, + {0, 8, 20}, {21, 8, 227}, {19, 7, 43}, {0, 8, 116}, {0, 8, 52}, + {0, 9, 201}, {17, 7, 13}, {0, 8, 100}, {0, 8, 36}, {0, 9, 169}, + {0, 8, 4}, {0, 8, 132}, {0, 8, 68}, {0, 9, 233}, {16, 7, 8}, + {0, 8, 92}, {0, 8, 28}, {0, 9, 153}, {20, 7, 83}, {0, 8, 124}, + {0, 8, 60}, {0, 9, 217}, {18, 7, 23}, {0, 8, 108}, {0, 8, 44}, + {0, 9, 185}, {0, 8, 12}, {0, 8, 140}, {0, 8, 76}, {0, 9, 249}, + {16, 7, 3}, {0, 8, 82}, {0, 8, 18}, {21, 8, 163}, {19, 7, 35}, + {0, 8, 114}, {0, 8, 50}, {0, 9, 197}, {17, 7, 11}, {0, 8, 98}, + {0, 8, 34}, {0, 9, 165}, {0, 8, 2}, {0, 8, 130}, {0, 8, 66}, + {0, 9, 229}, {16, 7, 7}, {0, 8, 90}, {0, 8, 26}, {0, 9, 149}, + {20, 7, 67}, {0, 8, 122}, {0, 8, 58}, {0, 9, 213}, {18, 7, 19}, + {0, 8, 106}, {0, 8, 42}, {0, 9, 181}, {0, 8, 10}, {0, 8, 138}, + {0, 8, 74}, {0, 9, 245}, {16, 7, 5}, {0, 8, 86}, {0, 8, 22}, + {64, 8, 0}, {19, 7, 51}, {0, 8, 118}, {0, 8, 54}, {0, 9, 205}, + {17, 7, 15}, {0, 8, 102}, {0, 8, 38}, {0, 9, 173}, {0, 8, 6}, + {0, 8, 134}, {0, 8, 70}, {0, 9, 237}, {16, 7, 9}, {0, 8, 94}, + {0, 8, 30}, {0, 9, 157}, {20, 7, 99}, {0, 8, 126}, {0, 8, 62}, + {0, 9, 221}, {18, 7, 27}, {0, 8, 110}, {0, 8, 46}, {0, 9, 189}, + {0, 8, 14}, {0, 8, 142}, {0, 8, 78}, {0, 9, 253}, {96, 7, 0}, + {0, 8, 81}, {0, 8, 17}, {21, 8, 131}, {18, 7, 31}, {0, 8, 113}, + {0, 8, 49}, {0, 9, 195}, {16, 7, 10}, {0, 8, 97}, {0, 8, 33}, + {0, 9, 163}, {0, 8, 1}, {0, 8, 129}, {0, 8, 65}, {0, 9, 227}, + {16, 7, 6}, {0, 8, 89}, {0, 8, 25}, {0, 9, 147}, {19, 7, 59}, + {0, 8, 121}, {0, 8, 57}, {0, 9, 211}, {17, 7, 17}, {0, 8, 105}, + {0, 8, 41}, {0, 9, 179}, {0, 8, 9}, {0, 8, 137}, {0, 8, 73}, + {0, 9, 243}, {16, 7, 4}, {0, 8, 85}, {0, 8, 21}, {16, 8, 258}, + {19, 7, 43}, {0, 8, 117}, {0, 8, 53}, {0, 9, 203}, {17, 7, 13}, + {0, 8, 101}, {0, 8, 37}, {0, 9, 171}, {0, 8, 5}, {0, 8, 133}, + {0, 8, 69}, {0, 9, 235}, {16, 7, 8}, {0, 8, 93}, {0, 8, 29}, + {0, 9, 155}, {20, 7, 83}, {0, 8, 125}, {0, 8, 61}, {0, 9, 219}, + {18, 7, 23}, {0, 8, 109}, {0, 8, 45}, {0, 9, 187}, {0, 8, 13}, + {0, 8, 141}, {0, 8, 77}, {0, 9, 251}, {16, 7, 3}, {0, 8, 83}, + {0, 8, 19}, {21, 8, 195}, {19, 7, 35}, {0, 8, 115}, {0, 8, 51}, + {0, 9, 199}, {17, 7, 11}, {0, 8, 99}, {0, 8, 35}, {0, 9, 167}, + {0, 8, 3}, {0, 8, 131}, {0, 8, 67}, {0, 9, 231}, {16, 7, 7}, + {0, 8, 91}, {0, 8, 27}, {0, 9, 151}, {20, 7, 67}, {0, 8, 123}, + {0, 8, 59}, {0, 9, 215}, {18, 7, 19}, {0, 8, 107}, {0, 8, 43}, + {0, 9, 183}, {0, 8, 11}, {0, 8, 139}, {0, 8, 75}, {0, 9, 247}, + {16, 7, 5}, {0, 8, 87}, {0, 8, 23}, {64, 8, 0}, {19, 7, 51}, + {0, 8, 119}, {0, 8, 55}, {0, 9, 207}, {17, 7, 15}, {0, 8, 103}, + {0, 8, 39}, {0, 9, 175}, {0, 8, 7}, {0, 8, 135}, {0, 8, 71}, + {0, 9, 239}, {16, 7, 9}, {0, 8, 95}, {0, 8, 31}, {0, 9, 159}, + {20, 7, 99}, {0, 8, 127}, {0, 8, 63}, {0, 9, 223}, {18, 7, 27}, + {0, 8, 111}, {0, 8, 47}, {0, 9, 191}, {0, 8, 15}, {0, 8, 143}, + {0, 8, 79}, {0, 9, 255}}; - static const code distfix[32] = { - {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, - {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, - {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, - {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, - {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, - {22,5,193},{64,5,0} - }; +static const code distfix[32] = { + {16, 5, 1}, {23, 5, 257}, {19, 5, 17}, {27, 5, 4097}, {17, 5, 5}, + {25, 5, 1025}, {21, 5, 65}, {29, 5, 16385}, {16, 5, 3}, {24, 5, 513}, + {20, 5, 33}, {28, 5, 8193}, {18, 5, 9}, {26, 5, 2049}, {22, 5, 129}, + {64, 5, 0}, {16, 5, 2}, {23, 5, 385}, {19, 5, 25}, {27, 5, 6145}, + {17, 5, 7}, {25, 5, 1537}, {21, 5, 97}, {29, 5, 24577}, {16, 5, 4}, + {24, 5, 769}, {20, 5, 49}, {28, 5, 12289}, {18, 5, 13}, {26, 5, 3073}, + {22, 5, 193}, {64, 5, 0}}; diff --git a/vendor/hydra/vendor/zlib/inflate.h b/vendor/hydra/vendor/zlib/inflate.h index f127b6b1..6103e34e 100644 --- a/vendor/hydra/vendor/zlib/inflate.h +++ b/vendor/hydra/vendor/zlib/inflate.h @@ -13,43 +13,43 @@ the crc code when it is not needed. For shared libraries, gzip decoding should be left enabled. */ #ifndef NO_GZIP -# define GUNZIP +#define GUNZIP #endif /* Possible inflate modes between inflate() calls */ typedef enum { - HEAD = 16180, /* i: waiting for magic header */ - FLAGS, /* i: waiting for method and flags (gzip) */ - TIME, /* i: waiting for modification time (gzip) */ - OS, /* i: waiting for extra flags and operating system (gzip) */ - EXLEN, /* i: waiting for extra length (gzip) */ - EXTRA, /* i: waiting for extra bytes (gzip) */ - NAME, /* i: waiting for end of file name (gzip) */ - COMMENT, /* i: waiting for end of comment (gzip) */ - HCRC, /* i: waiting for header crc (gzip) */ - DICTID, /* i: waiting for dictionary check value */ - DICT, /* waiting for inflateSetDictionary() call */ - TYPE, /* i: waiting for type bits, including last-flag bit */ - TYPEDO, /* i: same, but skip check to exit inflate on new block */ - STORED, /* i: waiting for stored size (length and complement) */ - COPY_, /* i/o: same as COPY below, but only first time in */ - COPY, /* i/o: waiting for input or output to copy stored block */ - TABLE, /* i: waiting for dynamic block table lengths */ - LENLENS, /* i: waiting for code length code lengths */ - CODELENS, /* i: waiting for length/lit and distance code lengths */ - LEN_, /* i: same as LEN below, but only first time in */ - LEN, /* i: waiting for length/lit/eob code */ - LENEXT, /* i: waiting for length extra bits */ - DIST, /* i: waiting for distance code */ - DISTEXT, /* i: waiting for distance extra bits */ - MATCH, /* o: waiting for output space to copy string */ - LIT, /* o: waiting for output space to write literal */ - CHECK, /* i: waiting for 32-bit check value */ - LENGTH, /* i: waiting for 32-bit length (gzip) */ - DONE, /* finished check, done -- remain here until reset */ - BAD, /* got a data error -- remain here until reset */ - MEM, /* got an inflate() memory error -- remain here until reset */ - SYNC /* looking for synchronization bytes to restart inflate() */ + HEAD = 16180, /* i: waiting for magic header */ + FLAGS, /* i: waiting for method and flags (gzip) */ + TIME, /* i: waiting for modification time (gzip) */ + OS, /* i: waiting for extra flags and operating system (gzip) */ + EXLEN, /* i: waiting for extra length (gzip) */ + EXTRA, /* i: waiting for extra bytes (gzip) */ + NAME, /* i: waiting for end of file name (gzip) */ + COMMENT, /* i: waiting for end of comment (gzip) */ + HCRC, /* i: waiting for header crc (gzip) */ + DICTID, /* i: waiting for dictionary check value */ + DICT, /* waiting for inflateSetDictionary() call */ + TYPE, /* i: waiting for type bits, including last-flag bit */ + TYPEDO, /* i: same, but skip check to exit inflate on new block */ + STORED, /* i: waiting for stored size (length and complement) */ + COPY_, /* i/o: same as COPY below, but only first time in */ + COPY, /* i/o: waiting for input or output to copy stored block */ + TABLE, /* i: waiting for dynamic block table lengths */ + LENLENS, /* i: waiting for code length code lengths */ + CODELENS, /* i: waiting for length/lit and distance code lengths */ + LEN_, /* i: same as LEN below, but only first time in */ + LEN, /* i: waiting for length/lit/eob code */ + LENEXT, /* i: waiting for length extra bits */ + DIST, /* i: waiting for distance code */ + DISTEXT, /* i: waiting for distance extra bits */ + MATCH, /* o: waiting for output space to copy string */ + LIT, /* o: waiting for output space to write literal */ + CHECK, /* i: waiting for 32-bit check value */ + LENGTH, /* i: waiting for 32-bit length (gzip) */ + DONE, /* finished check, done -- remain here until reset */ + BAD, /* got a data error -- remain here until reset */ + MEM, /* got an inflate() memory error -- remain here until reset */ + SYNC /* looking for synchronization bytes to restart inflate() */ } inflate_mode; /* @@ -80,47 +80,47 @@ typedef enum { /* State maintained between inflate() calls -- approximately 7K bytes, not including the allocated sliding window, which is up to 32K bytes. */ struct inflate_state { - z_streamp strm; /* pointer back to this zlib stream */ - inflate_mode mode; /* current inflate mode */ - int last; /* true if processing last block */ - int wrap; /* bit 0 true for zlib, bit 1 true for gzip, - bit 2 true to validate check value */ - int havedict; /* true if dictionary provided */ - int flags; /* gzip header method and flags, 0 if zlib, or - -1 if raw or no header yet */ - unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ - unsigned long check; /* protected copy of check value */ - unsigned long total; /* protected copy of output count */ - gz_headerp head; /* where to save gzip header information */ - /* sliding window */ - unsigned wbits; /* log base 2 of requested window size */ - unsigned wsize; /* window size or zero if not using window */ - unsigned whave; /* valid bytes in the window */ - unsigned wnext; /* window write index */ - unsigned char FAR *window; /* allocated sliding window, if needed */ - /* bit accumulator */ - unsigned long hold; /* input bit accumulator */ - unsigned bits; /* number of bits in "in" */ - /* for string and stored block copying */ - unsigned length; /* literal or length of data to copy */ - unsigned offset; /* distance back to copy string from */ - /* for table and code decoding */ - unsigned extra; /* extra bits needed */ - /* fixed and dynamic code tables */ - code const FAR *lencode; /* starting table for length/literal codes */ - code const FAR *distcode; /* starting table for distance codes */ - unsigned lenbits; /* index bits for lencode */ - unsigned distbits; /* index bits for distcode */ - /* dynamic table building */ - unsigned ncode; /* number of code length code lengths */ - unsigned nlen; /* number of length code lengths */ - unsigned ndist; /* number of distance code lengths */ - unsigned have; /* number of code lengths in lens[] */ - code FAR *next; /* next available space in codes[] */ - unsigned short lens[320]; /* temporary storage for code lengths */ - unsigned short work[288]; /* work area for code table building */ - code codes[ENOUGH]; /* space for code tables */ - int sane; /* if false, allow invalid distance too far */ - int back; /* bits back of last unprocessed length/lit */ - unsigned was; /* initial length of match */ + z_streamp strm; /* pointer back to this zlib stream */ + inflate_mode mode; /* current inflate mode */ + int last; /* true if processing last block */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip, + bit 2 true to validate check value */ + int havedict; /* true if dictionary provided */ + int flags; /* gzip header method and flags, 0 if zlib, or + -1 if raw or no header yet */ + unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ + unsigned long check; /* protected copy of check value */ + unsigned long total; /* protected copy of output count */ + gz_headerp head; /* where to save gzip header information */ + /* sliding window */ + unsigned wbits; /* log base 2 of requested window size */ + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned wnext; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if needed */ + /* bit accumulator */ + unsigned long hold; /* input bit accumulator */ + unsigned bits; /* number of bits in "in" */ + /* for string and stored block copying */ + unsigned length; /* literal or length of data to copy */ + unsigned offset; /* distance back to copy string from */ + /* for table and code decoding */ + unsigned extra; /* extra bits needed */ + /* fixed and dynamic code tables */ + code const FAR *lencode; /* starting table for length/literal codes */ + code const FAR *distcode; /* starting table for distance codes */ + unsigned lenbits; /* index bits for lencode */ + unsigned distbits; /* index bits for distcode */ + /* dynamic table building */ + unsigned ncode; /* number of code length code lengths */ + unsigned nlen; /* number of length code lengths */ + unsigned ndist; /* number of distance code lengths */ + unsigned have; /* number of code lengths in lens[] */ + code FAR *next; /* next available space in codes[] */ + unsigned short lens[320]; /* temporary storage for code lengths */ + unsigned short work[288]; /* work area for code table building */ + code codes[ENOUGH]; /* space for code tables */ + int sane; /* if false, allow invalid distance too far */ + int back; /* bits back of last unprocessed length/lit */ + unsigned was; /* initial length of match */ }; diff --git a/vendor/hydra/vendor/zlib/inftrees.h b/vendor/hydra/vendor/zlib/inftrees.h index 396f74b5..c663c873 100644 --- a/vendor/hydra/vendor/zlib/inftrees.h +++ b/vendor/hydra/vendor/zlib/inftrees.h @@ -22,9 +22,9 @@ of a literal, the base length or distance, or the offset from the current table to the next table. Each entry is four bytes. */ typedef struct { - unsigned char op; /* operation, extra bits, table bits */ - unsigned char bits; /* bits in this part of the code */ - unsigned short val; /* offset in table or code value */ + unsigned char op; /* operation, extra bits, table bits */ + unsigned char bits; /* bits in this part of the code */ + unsigned short val; /* offset in table or code value */ } code; /* op values as set by inflate_table(): @@ -48,15 +48,11 @@ typedef struct { updated. */ #define ENOUGH_LENS 852 #define ENOUGH_DISTS 592 -#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS) +#define ENOUGH (ENOUGH_LENS + ENOUGH_DISTS) /* Type of code to build for inflate_table() */ -typedef enum { - CODES, - LENS, - DISTS -} codetype; +typedef enum { CODES, LENS, DISTS } codetype; int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, - unsigned codes, code FAR * FAR *table, + unsigned codes, code FAR *FAR *table, unsigned FAR *bits, unsigned short FAR *work); diff --git a/vendor/hydra/vendor/zlib/trees.h b/vendor/hydra/vendor/zlib/trees.h index d35639d8..e7f691e3 100644 --- a/vendor/hydra/vendor/zlib/trees.h +++ b/vendor/hydra/vendor/zlib/trees.h @@ -1,128 +1,123 @@ /* header created automatically with -DGEN_TREES_H */ -local const ct_data static_ltree[L_CODES+2] = { -{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, -{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, -{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, -{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, -{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, -{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, -{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, -{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, -{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, -{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, -{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, -{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, -{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, -{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, -{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, -{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, -{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, -{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, -{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, -{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, -{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, -{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, -{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, -{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, -{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, -{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, -{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, -{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, -{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, -{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, -{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, -{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, -{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, -{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, -{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, -{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, -{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, -{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, -{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, -{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, -{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, -{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, -{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, -{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, -{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, -{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, -{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, -{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, -{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, -{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, -{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, -{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, -{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, -{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, -{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, -{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, -{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, -{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} -}; +local const ct_data static_ltree[L_CODES + 2] = { + {{12}, {8}}, {{140}, {8}}, {{76}, {8}}, {{204}, {8}}, {{44}, {8}}, + {{172}, {8}}, {{108}, {8}}, {{236}, {8}}, {{28}, {8}}, {{156}, {8}}, + {{92}, {8}}, {{220}, {8}}, {{60}, {8}}, {{188}, {8}}, {{124}, {8}}, + {{252}, {8}}, {{2}, {8}}, {{130}, {8}}, {{66}, {8}}, {{194}, {8}}, + {{34}, {8}}, {{162}, {8}}, {{98}, {8}}, {{226}, {8}}, {{18}, {8}}, + {{146}, {8}}, {{82}, {8}}, {{210}, {8}}, {{50}, {8}}, {{178}, {8}}, + {{114}, {8}}, {{242}, {8}}, {{10}, {8}}, {{138}, {8}}, {{74}, {8}}, + {{202}, {8}}, {{42}, {8}}, {{170}, {8}}, {{106}, {8}}, {{234}, {8}}, + {{26}, {8}}, {{154}, {8}}, {{90}, {8}}, {{218}, {8}}, {{58}, {8}}, + {{186}, {8}}, {{122}, {8}}, {{250}, {8}}, {{6}, {8}}, {{134}, {8}}, + {{70}, {8}}, {{198}, {8}}, {{38}, {8}}, {{166}, {8}}, {{102}, {8}}, + {{230}, {8}}, {{22}, {8}}, {{150}, {8}}, {{86}, {8}}, {{214}, {8}}, + {{54}, {8}}, {{182}, {8}}, {{118}, {8}}, {{246}, {8}}, {{14}, {8}}, + {{142}, {8}}, {{78}, {8}}, {{206}, {8}}, {{46}, {8}}, {{174}, {8}}, + {{110}, {8}}, {{238}, {8}}, {{30}, {8}}, {{158}, {8}}, {{94}, {8}}, + {{222}, {8}}, {{62}, {8}}, {{190}, {8}}, {{126}, {8}}, {{254}, {8}}, + {{1}, {8}}, {{129}, {8}}, {{65}, {8}}, {{193}, {8}}, {{33}, {8}}, + {{161}, {8}}, {{97}, {8}}, {{225}, {8}}, {{17}, {8}}, {{145}, {8}}, + {{81}, {8}}, {{209}, {8}}, {{49}, {8}}, {{177}, {8}}, {{113}, {8}}, + {{241}, {8}}, {{9}, {8}}, {{137}, {8}}, {{73}, {8}}, {{201}, {8}}, + {{41}, {8}}, {{169}, {8}}, {{105}, {8}}, {{233}, {8}}, {{25}, {8}}, + {{153}, {8}}, {{89}, {8}}, {{217}, {8}}, {{57}, {8}}, {{185}, {8}}, + {{121}, {8}}, {{249}, {8}}, {{5}, {8}}, {{133}, {8}}, {{69}, {8}}, + {{197}, {8}}, {{37}, {8}}, {{165}, {8}}, {{101}, {8}}, {{229}, {8}}, + {{21}, {8}}, {{149}, {8}}, {{85}, {8}}, {{213}, {8}}, {{53}, {8}}, + {{181}, {8}}, {{117}, {8}}, {{245}, {8}}, {{13}, {8}}, {{141}, {8}}, + {{77}, {8}}, {{205}, {8}}, {{45}, {8}}, {{173}, {8}}, {{109}, {8}}, + {{237}, {8}}, {{29}, {8}}, {{157}, {8}}, {{93}, {8}}, {{221}, {8}}, + {{61}, {8}}, {{189}, {8}}, {{125}, {8}}, {{253}, {8}}, {{19}, {9}}, + {{275}, {9}}, {{147}, {9}}, {{403}, {9}}, {{83}, {9}}, {{339}, {9}}, + {{211}, {9}}, {{467}, {9}}, {{51}, {9}}, {{307}, {9}}, {{179}, {9}}, + {{435}, {9}}, {{115}, {9}}, {{371}, {9}}, {{243}, {9}}, {{499}, {9}}, + {{11}, {9}}, {{267}, {9}}, {{139}, {9}}, {{395}, {9}}, {{75}, {9}}, + {{331}, {9}}, {{203}, {9}}, {{459}, {9}}, {{43}, {9}}, {{299}, {9}}, + {{171}, {9}}, {{427}, {9}}, {{107}, {9}}, {{363}, {9}}, {{235}, {9}}, + {{491}, {9}}, {{27}, {9}}, {{283}, {9}}, {{155}, {9}}, {{411}, {9}}, + {{91}, {9}}, {{347}, {9}}, {{219}, {9}}, {{475}, {9}}, {{59}, {9}}, + {{315}, {9}}, {{187}, {9}}, {{443}, {9}}, {{123}, {9}}, {{379}, {9}}, + {{251}, {9}}, {{507}, {9}}, {{7}, {9}}, {{263}, {9}}, {{135}, {9}}, + {{391}, {9}}, {{71}, {9}}, {{327}, {9}}, {{199}, {9}}, {{455}, {9}}, + {{39}, {9}}, {{295}, {9}}, {{167}, {9}}, {{423}, {9}}, {{103}, {9}}, + {{359}, {9}}, {{231}, {9}}, {{487}, {9}}, {{23}, {9}}, {{279}, {9}}, + {{151}, {9}}, {{407}, {9}}, {{87}, {9}}, {{343}, {9}}, {{215}, {9}}, + {{471}, {9}}, {{55}, {9}}, {{311}, {9}}, {{183}, {9}}, {{439}, {9}}, + {{119}, {9}}, {{375}, {9}}, {{247}, {9}}, {{503}, {9}}, {{15}, {9}}, + {{271}, {9}}, {{143}, {9}}, {{399}, {9}}, {{79}, {9}}, {{335}, {9}}, + {{207}, {9}}, {{463}, {9}}, {{47}, {9}}, {{303}, {9}}, {{175}, {9}}, + {{431}, {9}}, {{111}, {9}}, {{367}, {9}}, {{239}, {9}}, {{495}, {9}}, + {{31}, {9}}, {{287}, {9}}, {{159}, {9}}, {{415}, {9}}, {{95}, {9}}, + {{351}, {9}}, {{223}, {9}}, {{479}, {9}}, {{63}, {9}}, {{319}, {9}}, + {{191}, {9}}, {{447}, {9}}, {{127}, {9}}, {{383}, {9}}, {{255}, {9}}, + {{511}, {9}}, {{0}, {7}}, {{64}, {7}}, {{32}, {7}}, {{96}, {7}}, + {{16}, {7}}, {{80}, {7}}, {{48}, {7}}, {{112}, {7}}, {{8}, {7}}, + {{72}, {7}}, {{40}, {7}}, {{104}, {7}}, {{24}, {7}}, {{88}, {7}}, + {{56}, {7}}, {{120}, {7}}, {{4}, {7}}, {{68}, {7}}, {{36}, {7}}, + {{100}, {7}}, {{20}, {7}}, {{84}, {7}}, {{52}, {7}}, {{116}, {7}}, + {{3}, {8}}, {{131}, {8}}, {{67}, {8}}, {{195}, {8}}, {{35}, {8}}, + {{163}, {8}}, {{99}, {8}}, {{227}, {8}}}; local const ct_data static_dtree[D_CODES] = { -{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, -{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, -{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, -{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, -{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, -{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} -}; + {{0}, {5}}, {{16}, {5}}, {{8}, {5}}, {{24}, {5}}, {{4}, {5}}, + {{20}, {5}}, {{12}, {5}}, {{28}, {5}}, {{2}, {5}}, {{18}, {5}}, + {{10}, {5}}, {{26}, {5}}, {{6}, {5}}, {{22}, {5}}, {{14}, {5}}, + {{30}, {5}}, {{1}, {5}}, {{17}, {5}}, {{9}, {5}}, {{25}, {5}}, + {{5}, {5}}, {{21}, {5}}, {{13}, {5}}, {{29}, {5}}, {{3}, {5}}, + {{19}, {5}}, {{11}, {5}}, {{27}, {5}}, {{7}, {5}}, {{23}, {5}}}; const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = { - 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, - 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, -10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, -11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, -12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, -13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, -13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, -14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, -14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, -14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, -15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, -15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, -15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, -18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, -23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, -24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, -26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, -27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, -27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, -28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, -28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, -28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, -29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, -29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, -29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 -}; + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, + 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, + 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, 18, 18, 19, 19, 20, 20, + 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, + 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, + 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29}; -const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, -13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, -17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, -19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, -21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, -22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, -23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, -24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, -25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, -26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, -26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, -27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 -}; +const uch ZLIB_INTERNAL _length_code[MAX_MATCH - MIN_MATCH + 1] = { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, + 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, + 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, + 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, + 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, + 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, + 27, 27, 27, 27, 27, 27, 27, 27, 28}; local const int base_length[LENGTH_CODES] = { -0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, -64, 80, 96, 112, 128, 160, 192, 224, 0 -}; + 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, + 28, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 0}; local const int base_dist[D_CODES] = { - 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, - 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, - 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 -}; - + 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, + 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, + 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576}; diff --git a/vendor/hydra/vendor/zlib/zconf.h b/vendor/hydra/vendor/zlib/zconf.h index 62adc8d8..3aeae87f 100644 --- a/vendor/hydra/vendor/zlib/zconf.h +++ b/vendor/hydra/vendor/zlib/zconf.h @@ -14,180 +14,180 @@ * Even better than compiling with -DZ_PREFIX would be to use configure to set * this permanently in zconf.h using "./configure --zprefix". */ -#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ -# define Z_PREFIX_SET +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +#define Z_PREFIX_SET /* all linked symbols and init macros */ -# define _dist_code z__dist_code -# define _length_code z__length_code -# define _tr_align z__tr_align -# define _tr_flush_bits z__tr_flush_bits -# define _tr_flush_block z__tr_flush_block -# define _tr_init z__tr_init -# define _tr_stored_block z__tr_stored_block -# define _tr_tally z__tr_tally -# define adler32 z_adler32 -# define adler32_combine z_adler32_combine -# define adler32_combine64 z_adler32_combine64 -# define adler32_z z_adler32_z -# ifndef Z_SOLO -# define compress z_compress -# define compress2 z_compress2 -# define compressBound z_compressBound -# endif -# define crc32 z_crc32 -# define crc32_combine z_crc32_combine -# define crc32_combine64 z_crc32_combine64 -# define crc32_combine_gen z_crc32_combine_gen -# define crc32_combine_gen64 z_crc32_combine_gen64 -# define crc32_combine_op z_crc32_combine_op -# define crc32_z z_crc32_z -# define deflate z_deflate -# define deflateBound z_deflateBound -# define deflateCopy z_deflateCopy -# define deflateEnd z_deflateEnd -# define deflateGetDictionary z_deflateGetDictionary -# define deflateInit z_deflateInit -# define deflateInit2 z_deflateInit2 -# define deflateInit2_ z_deflateInit2_ -# define deflateInit_ z_deflateInit_ -# define deflateParams z_deflateParams -# define deflatePending z_deflatePending -# define deflatePrime z_deflatePrime -# define deflateReset z_deflateReset -# define deflateResetKeep z_deflateResetKeep -# define deflateSetDictionary z_deflateSetDictionary -# define deflateSetHeader z_deflateSetHeader -# define deflateTune z_deflateTune -# define deflate_copyright z_deflate_copyright -# define get_crc_table z_get_crc_table -# ifndef Z_SOLO -# define gz_error z_gz_error -# define gz_intmax z_gz_intmax -# define gz_strwinerror z_gz_strwinerror -# define gzbuffer z_gzbuffer -# define gzclearerr z_gzclearerr -# define gzclose z_gzclose -# define gzclose_r z_gzclose_r -# define gzclose_w z_gzclose_w -# define gzdirect z_gzdirect -# define gzdopen z_gzdopen -# define gzeof z_gzeof -# define gzerror z_gzerror -# define gzflush z_gzflush -# define gzfread z_gzfread -# define gzfwrite z_gzfwrite -# define gzgetc z_gzgetc -# define gzgetc_ z_gzgetc_ -# define gzgets z_gzgets -# define gzoffset z_gzoffset -# define gzoffset64 z_gzoffset64 -# define gzopen z_gzopen -# define gzopen64 z_gzopen64 -# ifdef _WIN32 -# define gzopen_w z_gzopen_w -# endif -# define gzprintf z_gzprintf -# define gzputc z_gzputc -# define gzputs z_gzputs -# define gzread z_gzread -# define gzrewind z_gzrewind -# define gzseek z_gzseek -# define gzseek64 z_gzseek64 -# define gzsetparams z_gzsetparams -# define gztell z_gztell -# define gztell64 z_gztell64 -# define gzungetc z_gzungetc -# define gzvprintf z_gzvprintf -# define gzwrite z_gzwrite -# endif -# define inflate z_inflate -# define inflateBack z_inflateBack -# define inflateBackEnd z_inflateBackEnd -# define inflateBackInit z_inflateBackInit -# define inflateBackInit_ z_inflateBackInit_ -# define inflateCodesUsed z_inflateCodesUsed -# define inflateCopy z_inflateCopy -# define inflateEnd z_inflateEnd -# define inflateGetDictionary z_inflateGetDictionary -# define inflateGetHeader z_inflateGetHeader -# define inflateInit z_inflateInit -# define inflateInit2 z_inflateInit2 -# define inflateInit2_ z_inflateInit2_ -# define inflateInit_ z_inflateInit_ -# define inflateMark z_inflateMark -# define inflatePrime z_inflatePrime -# define inflateReset z_inflateReset -# define inflateReset2 z_inflateReset2 -# define inflateResetKeep z_inflateResetKeep -# define inflateSetDictionary z_inflateSetDictionary -# define inflateSync z_inflateSync -# define inflateSyncPoint z_inflateSyncPoint -# define inflateUndermine z_inflateUndermine -# define inflateValidate z_inflateValidate -# define inflate_copyright z_inflate_copyright -# define inflate_fast z_inflate_fast -# define inflate_table z_inflate_table -# ifndef Z_SOLO -# define uncompress z_uncompress -# define uncompress2 z_uncompress2 -# endif -# define zError z_zError -# ifndef Z_SOLO -# define zcalloc z_zcalloc -# define zcfree z_zcfree -# endif -# define zlibCompileFlags z_zlibCompileFlags -# define zlibVersion z_zlibVersion +#define _dist_code z__dist_code +#define _length_code z__length_code +#define _tr_align z__tr_align +#define _tr_flush_bits z__tr_flush_bits +#define _tr_flush_block z__tr_flush_block +#define _tr_init z__tr_init +#define _tr_stored_block z__tr_stored_block +#define _tr_tally z__tr_tally +#define adler32 z_adler32 +#define adler32_combine z_adler32_combine +#define adler32_combine64 z_adler32_combine64 +#define adler32_z z_adler32_z +#ifndef Z_SOLO +#define compress z_compress +#define compress2 z_compress2 +#define compressBound z_compressBound +#endif +#define crc32 z_crc32 +#define crc32_combine z_crc32_combine +#define crc32_combine64 z_crc32_combine64 +#define crc32_combine_gen z_crc32_combine_gen +#define crc32_combine_gen64 z_crc32_combine_gen64 +#define crc32_combine_op z_crc32_combine_op +#define crc32_z z_crc32_z +#define deflate z_deflate +#define deflateBound z_deflateBound +#define deflateCopy z_deflateCopy +#define deflateEnd z_deflateEnd +#define deflateGetDictionary z_deflateGetDictionary +#define deflateInit z_deflateInit +#define deflateInit2 z_deflateInit2 +#define deflateInit2_ z_deflateInit2_ +#define deflateInit_ z_deflateInit_ +#define deflateParams z_deflateParams +#define deflatePending z_deflatePending +#define deflatePrime z_deflatePrime +#define deflateReset z_deflateReset +#define deflateResetKeep z_deflateResetKeep +#define deflateSetDictionary z_deflateSetDictionary +#define deflateSetHeader z_deflateSetHeader +#define deflateTune z_deflateTune +#define deflate_copyright z_deflate_copyright +#define get_crc_table z_get_crc_table +#ifndef Z_SOLO +#define gz_error z_gz_error +#define gz_intmax z_gz_intmax +#define gz_strwinerror z_gz_strwinerror +#define gzbuffer z_gzbuffer +#define gzclearerr z_gzclearerr +#define gzclose z_gzclose +#define gzclose_r z_gzclose_r +#define gzclose_w z_gzclose_w +#define gzdirect z_gzdirect +#define gzdopen z_gzdopen +#define gzeof z_gzeof +#define gzerror z_gzerror +#define gzflush z_gzflush +#define gzfread z_gzfread +#define gzfwrite z_gzfwrite +#define gzgetc z_gzgetc +#define gzgetc_ z_gzgetc_ +#define gzgets z_gzgets +#define gzoffset z_gzoffset +#define gzoffset64 z_gzoffset64 +#define gzopen z_gzopen +#define gzopen64 z_gzopen64 +#ifdef _WIN32 +#define gzopen_w z_gzopen_w +#endif +#define gzprintf z_gzprintf +#define gzputc z_gzputc +#define gzputs z_gzputs +#define gzread z_gzread +#define gzrewind z_gzrewind +#define gzseek z_gzseek +#define gzseek64 z_gzseek64 +#define gzsetparams z_gzsetparams +#define gztell z_gztell +#define gztell64 z_gztell64 +#define gzungetc z_gzungetc +#define gzvprintf z_gzvprintf +#define gzwrite z_gzwrite +#endif +#define inflate z_inflate +#define inflateBack z_inflateBack +#define inflateBackEnd z_inflateBackEnd +#define inflateBackInit z_inflateBackInit +#define inflateBackInit_ z_inflateBackInit_ +#define inflateCodesUsed z_inflateCodesUsed +#define inflateCopy z_inflateCopy +#define inflateEnd z_inflateEnd +#define inflateGetDictionary z_inflateGetDictionary +#define inflateGetHeader z_inflateGetHeader +#define inflateInit z_inflateInit +#define inflateInit2 z_inflateInit2 +#define inflateInit2_ z_inflateInit2_ +#define inflateInit_ z_inflateInit_ +#define inflateMark z_inflateMark +#define inflatePrime z_inflatePrime +#define inflateReset z_inflateReset +#define inflateReset2 z_inflateReset2 +#define inflateResetKeep z_inflateResetKeep +#define inflateSetDictionary z_inflateSetDictionary +#define inflateSync z_inflateSync +#define inflateSyncPoint z_inflateSyncPoint +#define inflateUndermine z_inflateUndermine +#define inflateValidate z_inflateValidate +#define inflate_copyright z_inflate_copyright +#define inflate_fast z_inflate_fast +#define inflate_table z_inflate_table +#ifndef Z_SOLO +#define uncompress z_uncompress +#define uncompress2 z_uncompress2 +#endif +#define zError z_zError +#ifndef Z_SOLO +#define zcalloc z_zcalloc +#define zcfree z_zcfree +#endif +#define zlibCompileFlags z_zlibCompileFlags +#define zlibVersion z_zlibVersion /* all zlib typedefs in zlib.h and zconf.h */ -# define Byte z_Byte -# define Bytef z_Bytef -# define alloc_func z_alloc_func -# define charf z_charf -# define free_func z_free_func -# ifndef Z_SOLO -# define gzFile z_gzFile -# endif -# define gz_header z_gz_header -# define gz_headerp z_gz_headerp -# define in_func z_in_func -# define intf z_intf -# define out_func z_out_func -# define uInt z_uInt -# define uIntf z_uIntf -# define uLong z_uLong -# define uLongf z_uLongf -# define voidp z_voidp -# define voidpc z_voidpc -# define voidpf z_voidpf +#define Byte z_Byte +#define Bytef z_Bytef +#define alloc_func z_alloc_func +#define charf z_charf +#define free_func z_free_func +#ifndef Z_SOLO +#define gzFile z_gzFile +#endif +#define gz_header z_gz_header +#define gz_headerp z_gz_headerp +#define in_func z_in_func +#define intf z_intf +#define out_func z_out_func +#define uInt z_uInt +#define uIntf z_uIntf +#define uLong z_uLong +#define uLongf z_uLongf +#define voidp z_voidp +#define voidpc z_voidpc +#define voidpf z_voidpf /* all zlib structs in zlib.h and zconf.h */ -# define gz_header_s z_gz_header_s -# define internal_state z_internal_state +#define gz_header_s z_gz_header_s +#define internal_state z_internal_state #endif #if defined(__MSDOS__) && !defined(MSDOS) -# define MSDOS +#define MSDOS #endif #if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) -# define OS2 +#define OS2 #endif #if defined(_WINDOWS) && !defined(WINDOWS) -# define WINDOWS +#define WINDOWS #endif #if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) -# ifndef WIN32 -# define WIN32 -# endif +#ifndef WIN32 +#define WIN32 +#endif #endif #if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) -# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) -# ifndef SYS16BIT -# define SYS16BIT -# endif -# endif +#if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +#ifndef SYS16BIT +#define SYS16BIT +#endif +#endif #endif /* @@ -195,77 +195,77 @@ * than 64k bytes at a time (needed on systems with 16-bit int). */ #ifdef SYS16BIT -# define MAXSEG_64K +#define MAXSEG_64K #endif #ifdef MSDOS -# define UNALIGNED_OK +#define UNALIGNED_OK #endif #ifdef __STDC_VERSION__ -# ifndef STDC -# define STDC -# endif -# if __STDC_VERSION__ >= 199901L -# ifndef STDC99 -# define STDC99 -# endif -# endif +#ifndef STDC +#define STDC +#endif +#if __STDC_VERSION__ >= 199901L +#ifndef STDC99 +#define STDC99 +#endif +#endif #endif #if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) -# define STDC +#define STDC #endif #if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) -# define STDC +#define STDC #endif #if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) -# define STDC +#define STDC #endif #if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) -# define STDC +#define STDC #endif -#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ -# define STDC +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +#define STDC #endif #ifndef STDC -# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ -# define const /* note: need a more gentle solution here */ -# endif +#ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +#define const /* note: need a more gentle solution here */ +#endif #endif #if defined(ZLIB_CONST) && !defined(z_const) -# define z_const const +#define z_const const #else -# define z_const +#define z_const #endif #ifdef Z_SOLO -# ifdef _WIN64 - typedef unsigned long long z_size_t; -# else - typedef unsigned long z_size_t; -# endif +#ifdef _WIN64 +typedef unsigned long long z_size_t; #else -# define z_longlong long long -# if defined(NO_SIZE_T) - typedef unsigned NO_SIZE_T z_size_t; -# elif defined(STDC) -# include - typedef size_t z_size_t; -# else - typedef unsigned long z_size_t; -# endif -# undef z_longlong +typedef unsigned long z_size_t; +#endif +#else +#define z_longlong long long +#if defined(NO_SIZE_T) +typedef unsigned NO_SIZE_T z_size_t; +#elif defined(STDC) +#include +typedef size_t z_size_t; +#else +typedef unsigned long z_size_t; +#endif +#undef z_longlong #endif /* Maximum value for memLevel in deflateInit2 */ #ifndef MAX_MEM_LEVEL -# ifdef MAXSEG_64K -# define MAX_MEM_LEVEL 8 -# else -# define MAX_MEM_LEVEL 9 -# endif +#ifdef MAXSEG_64K +#define MAX_MEM_LEVEL 8 +#else +#define MAX_MEM_LEVEL 9 +#endif #endif /* Maximum value for windowBits in deflateInit2 and inflateInit2. @@ -274,7 +274,7 @@ * gzip.) */ #ifndef MAX_WBITS -# define MAX_WBITS 15 /* 32K LZ77 window */ +#define MAX_WBITS 15 /* 32K LZ77 window */ #endif /* The memory requirements for deflate are (in bytes): @@ -290,14 +290,14 @@ for small objects. */ - /* Type declarations */ +/* Type declarations */ #ifndef OF /* function prototypes */ -# ifdef STDC -# define OF(args) args -# else -# define OF(args) () -# endif +#ifdef STDC +#define OF(args) args +#else +#define OF(args) () +#endif #endif /* The following definitions for FAR are needed only for MSDOS mixed @@ -307,156 +307,156 @@ * just define FAR to be empty. */ #ifdef SYS16BIT -# if defined(M_I86SM) || defined(M_I86MM) - /* MSC small or medium model */ -# define SMALL_MEDIUM -# ifdef _MSC_VER -# define FAR _far -# else -# define FAR far -# endif -# endif -# if (defined(__SMALL__) || defined(__MEDIUM__)) - /* Turbo C small or medium model */ -# define SMALL_MEDIUM -# ifdef __BORLANDC__ -# define FAR _far -# else -# define FAR far -# endif -# endif +#if defined(M_I86SM) || defined(M_I86MM) +/* MSC small or medium model */ +#define SMALL_MEDIUM +#ifdef _MSC_VER +#define FAR _far +#else +#define FAR far +#endif +#endif +#if (defined(__SMALL__) || defined(__MEDIUM__)) +/* Turbo C small or medium model */ +#define SMALL_MEDIUM +#ifdef __BORLANDC__ +#define FAR _far +#else +#define FAR far +#endif +#endif #endif #if defined(WINDOWS) || defined(WIN32) - /* If building or using zlib as a DLL, define ZLIB_DLL. - * This is not mandatory, but it offers a little performance increase. - */ -# ifdef ZLIB_DLL -# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) -# ifdef ZLIB_INTERNAL -# define ZEXTERN extern __declspec(dllexport) -# else -# define ZEXTERN extern __declspec(dllimport) -# endif -# endif -# endif /* ZLIB_DLL */ - /* If building or using zlib with the WINAPI/WINAPIV calling convention, - * define ZLIB_WINAPI. - * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. - */ -# ifdef ZLIB_WINAPI -# ifdef FAR -# undef FAR -# endif -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -# endif -# include - /* No need for _export, use ZLIB.DEF instead. */ - /* For complete Windows compatibility, use WINAPI, not __stdcall. */ -# define ZEXPORT WINAPI -# ifdef WIN32 -# define ZEXPORTVA WINAPIV -# else -# define ZEXPORTVA FAR CDECL -# endif -# endif -#endif - -#if defined (__BEOS__) -# ifdef ZLIB_DLL -# ifdef ZLIB_INTERNAL -# define ZEXPORT __declspec(dllexport) -# define ZEXPORTVA __declspec(dllexport) -# else -# define ZEXPORT __declspec(dllimport) -# define ZEXPORTVA __declspec(dllimport) -# endif -# endif +/* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +#ifdef ZLIB_DLL +#if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +#ifdef ZLIB_INTERNAL +#define ZEXTERN extern __declspec(dllexport) +#else +#define ZEXTERN extern __declspec(dllimport) +#endif +#endif +#endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +#ifdef ZLIB_WINAPI +#ifdef FAR +#undef FAR +#endif +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +/* No need for _export, use ZLIB.DEF instead. */ +/* For complete Windows compatibility, use WINAPI, not __stdcall. */ +#define ZEXPORT WINAPI +#ifdef WIN32 +#define ZEXPORTVA WINAPIV +#else +#define ZEXPORTVA FAR CDECL +#endif +#endif +#endif + +#if defined(__BEOS__) +#ifdef ZLIB_DLL +#ifdef ZLIB_INTERNAL +#define ZEXPORT __declspec(dllexport) +#define ZEXPORTVA __declspec(dllexport) +#else +#define ZEXPORT __declspec(dllimport) +#define ZEXPORTVA __declspec(dllimport) +#endif +#endif #endif #ifndef ZEXTERN -# define ZEXTERN extern +#define ZEXTERN extern #endif #ifndef ZEXPORT -# define ZEXPORT +#define ZEXPORT #endif #ifndef ZEXPORTVA -# define ZEXPORTVA +#define ZEXPORTVA #endif #ifndef FAR -# define FAR +#define FAR #endif #if !defined(__MACTYPES__) -typedef unsigned char Byte; /* 8 bits */ +typedef unsigned char Byte; /* 8 bits */ #endif -typedef unsigned int uInt; /* 16 bits or more */ -typedef unsigned long uLong; /* 32 bits or more */ +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ #ifdef SMALL_MEDIUM - /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ -# define Bytef Byte FAR +/* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +#define Bytef Byte FAR #else - typedef Byte FAR Bytef; +typedef Byte FAR Bytef; #endif -typedef char FAR charf; -typedef int FAR intf; -typedef uInt FAR uIntf; +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; typedef uLong FAR uLongf; #ifdef STDC - typedef void const *voidpc; - typedef void FAR *voidpf; - typedef void *voidp; +typedef void const *voidpc; +typedef void FAR *voidpf; +typedef void *voidp; #else - typedef Byte const *voidpc; - typedef Byte FAR *voidpf; - typedef Byte *voidp; +typedef Byte const *voidpc; +typedef Byte FAR *voidpf; +typedef Byte *voidp; #endif #if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) -# include -# if (UINT_MAX == 0xffffffffUL) -# define Z_U4 unsigned -# elif (ULONG_MAX == 0xffffffffUL) -# define Z_U4 unsigned long -# elif (USHRT_MAX == 0xffffffffUL) -# define Z_U4 unsigned short -# endif +#include +#if (UINT_MAX == 0xffffffffUL) +#define Z_U4 unsigned +#elif (ULONG_MAX == 0xffffffffUL) +#define Z_U4 unsigned long +#elif (USHRT_MAX == 0xffffffffUL) +#define Z_U4 unsigned short +#endif #endif #ifdef Z_U4 - typedef Z_U4 z_crc_t; +typedef Z_U4 z_crc_t; #else - typedef unsigned long z_crc_t; +typedef unsigned long z_crc_t; #endif -#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ -# define Z_HAVE_UNISTD_H +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +#define Z_HAVE_UNISTD_H #endif -#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ -# define Z_HAVE_STDARG_H +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +#define Z_HAVE_STDARG_H #endif #ifdef STDC -# ifndef Z_SOLO -# include /* for off_t */ -# endif +#ifndef Z_SOLO +#include /* for off_t */ +#endif #endif #if defined(STDC) || defined(Z_HAVE_STDARG_H) -# ifndef Z_SOLO -# include /* for va_list */ -# endif +#ifndef Z_SOLO +#include /* for va_list */ +#endif #endif #ifdef _WIN32 -# ifndef Z_SOLO -# include /* for wchar_t */ -# endif +#ifndef Z_SOLO +#include /* for wchar_t */ +#endif #endif /* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and @@ -466,78 +466,79 @@ typedef uLong FAR uLongf; * equivalently requesting no 64-bit operations */ #if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 -# undef _LARGEFILE64_SOURCE +#undef _LARGEFILE64_SOURCE #endif #ifndef Z_HAVE_UNISTD_H -# ifdef __WATCOMC__ -# define Z_HAVE_UNISTD_H -# endif +#ifdef __WATCOMC__ +#define Z_HAVE_UNISTD_H +#endif #endif #ifndef Z_HAVE_UNISTD_H -# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) -# define Z_HAVE_UNISTD_H -# endif +#if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) +#define Z_HAVE_UNISTD_H +#endif #endif #ifndef Z_SOLO -# if defined(Z_HAVE_UNISTD_H) -# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ -# ifdef VMS -# include /* for off_t */ -# endif -# ifndef z_off_t -# define z_off_t off_t -# endif -# endif +#if defined(Z_HAVE_UNISTD_H) +#include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +#ifdef VMS +#include /* for off_t */ +#endif +#ifndef z_off_t +#define z_off_t off_t +#endif +#endif #endif -#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 -# define Z_LFS64 +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE - 0 +#define Z_LFS64 #endif #if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) -# define Z_LARGE64 +#define Z_LARGE64 #endif -#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) -# define Z_WANT64 +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS - 0 == 64 && \ + defined(Z_LFS64) +#define Z_WANT64 #endif #if !defined(SEEK_SET) && !defined(Z_SOLO) -# define SEEK_SET 0 /* Seek from beginning of file. */ -# define SEEK_CUR 1 /* Seek from current position. */ -# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#define SEEK_SET 0 /* Seek from beginning of file. */ +#define SEEK_CUR 1 /* Seek from current position. */ +#define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ #endif #ifndef z_off_t -# define z_off_t long +#define z_off_t long #endif #if !defined(_WIN32) && defined(Z_LARGE64) -# define z_off64_t off64_t +#define z_off64_t off64_t +#else +#if defined(_WIN32) && !defined(__GNUC__) +#define z_off64_t __int64 #else -# if defined(_WIN32) && !defined(__GNUC__) -# define z_off64_t __int64 -# else -# define z_off64_t z_off_t -# endif +#define z_off64_t z_off_t +#endif #endif /* MVS linker does not support external names larger than 8 bytes */ #if defined(__MVS__) - #pragma map(deflateInit_,"DEIN") - #pragma map(deflateInit2_,"DEIN2") - #pragma map(deflateEnd,"DEEND") - #pragma map(deflateBound,"DEBND") - #pragma map(inflateInit_,"ININ") - #pragma map(inflateInit2_,"ININ2") - #pragma map(inflateEnd,"INEND") - #pragma map(inflateSync,"INSY") - #pragma map(inflateSetDictionary,"INSEDI") - #pragma map(compressBound,"CMBND") - #pragma map(inflate_table,"INTABL") - #pragma map(inflate_fast,"INFA") - #pragma map(inflate_copyright,"INCOPY") +#pragma map(deflateInit_, "DEIN") +#pragma map(deflateInit2_, "DEIN2") +#pragma map(deflateEnd, "DEEND") +#pragma map(deflateBound, "DEBND") +#pragma map(inflateInit_, "ININ") +#pragma map(inflateInit2_, "ININ2") +#pragma map(inflateEnd, "INEND") +#pragma map(inflateSync, "INSY") +#pragma map(inflateSetDictionary, "INSEDI") +#pragma map(compressBound, "CMBND") +#pragma map(inflate_table, "INTABL") +#pragma map(inflate_fast, "INFA") +#pragma map(inflate_copyright, "INCOPY") #endif #endif /* ZCONF_H */ diff --git a/vendor/hydra/vendor/zlib/zlib.h b/vendor/hydra/vendor/zlib/zlib.h index 8d4b932e..da00810c 100644 --- a/vendor/hydra/vendor/zlib/zlib.h +++ b/vendor/hydra/vendor/zlib/zlib.h @@ -79,30 +79,30 @@ extern "C" { */ typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size); -typedef void (*free_func)(voidpf opaque, voidpf address); +typedef void (*free_func)(voidpf opaque, voidpf address); struct internal_state; typedef struct z_stream_s { - z_const Bytef *next_in; /* next input byte */ - uInt avail_in; /* number of bytes available at next_in */ - uLong total_in; /* total number of input bytes read so far */ + z_const Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total number of input bytes read so far */ - Bytef *next_out; /* next output byte will go here */ - uInt avail_out; /* remaining free space at next_out */ - uLong total_out; /* total number of bytes output so far */ + Bytef *next_out; /* next output byte will go here */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total number of bytes output so far */ - z_const char *msg; /* last error message, NULL if no error */ - struct internal_state FAR *state; /* not visible by applications */ + z_const char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ - alloc_func zalloc; /* used to allocate the internal state */ - free_func zfree; /* used to free the internal state */ - voidpf opaque; /* private data object passed to zalloc and zfree */ + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ - int data_type; /* best guess about the data type: binary or text - for deflate, or the decoding state for inflate */ - uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */ - uLong reserved; /* reserved for future use */ + int data_type; /* best guess about the data type: binary or text + for deflate, or the decoding state for inflate */ + uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ } z_stream; typedef z_stream FAR *z_streamp; @@ -112,20 +112,20 @@ typedef z_stream FAR *z_streamp; for more details on the meanings of these fields. */ typedef struct gz_header_s { - int text; /* true if compressed data believed to be text */ - uLong time; /* modification time */ - int xflags; /* extra flags (not used when writing a gzip file) */ - int os; /* operating system */ - Bytef *extra; /* pointer to extra field or Z_NULL if none */ - uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ - uInt extra_max; /* space at extra (only when reading header) */ - Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ - uInt name_max; /* space at name (only when reading header) */ - Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ - uInt comm_max; /* space at comment (only when reading header) */ - int hcrc; /* true if there was or will be a header crc */ - int done; /* true when done reading gzip header (not used - when writing a gzip file) */ + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ } gz_header; typedef gz_header FAR *gz_headerp; @@ -163,61 +163,60 @@ typedef gz_header FAR *gz_headerp; if the decompressor wants to decompress everything in a single step). */ - /* constants */ +/* constants */ -#define Z_NO_FLUSH 0 +#define Z_NO_FLUSH 0 #define Z_PARTIAL_FLUSH 1 -#define Z_SYNC_FLUSH 2 -#define Z_FULL_FLUSH 3 -#define Z_FINISH 4 -#define Z_BLOCK 5 -#define Z_TREES 6 +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +#define Z_TREES 6 /* Allowed flush values; see deflate() and inflate() below for details */ -#define Z_OK 0 -#define Z_STREAM_END 1 -#define Z_NEED_DICT 2 -#define Z_ERRNO (-1) +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) #define Z_STREAM_ERROR (-2) -#define Z_DATA_ERROR (-3) -#define Z_MEM_ERROR (-4) -#define Z_BUF_ERROR (-5) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) #define Z_VERSION_ERROR (-6) /* Return codes for the compression/decompression functions. Negative values * are errors, positive values are used for special but normal events. */ -#define Z_NO_COMPRESSION 0 -#define Z_BEST_SPEED 1 -#define Z_BEST_COMPRESSION 9 -#define Z_DEFAULT_COMPRESSION (-1) +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) /* compression levels */ -#define Z_FILTERED 1 -#define Z_HUFFMAN_ONLY 2 -#define Z_RLE 3 -#define Z_FIXED 4 -#define Z_DEFAULT_STRATEGY 0 +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 /* compression strategy; see deflateInit2() below for details */ -#define Z_BINARY 0 -#define Z_TEXT 1 -#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ -#define Z_UNKNOWN 2 +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 /* Possible values of the data_type field for deflate() */ -#define Z_DEFLATED 8 +#define Z_DEFLATED 8 /* The deflate compression method (the only one supported in this version) */ -#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ #define zlib_version zlibVersion() /* for compatibility with versions < 1.0.2 */ +/* basic functions */ - /* basic functions */ - -ZEXTERN const char * ZEXPORT zlibVersion(void); +ZEXTERN const char *ZEXPORT zlibVersion(void); /* The application can compare zlibVersion and ZLIB_VERSION for consistency. If the first character differs, the library code actually used is not compatible with the zlib.h header file used by the application. This check @@ -246,7 +245,6 @@ ZEXTERN int ZEXPORT deflateInit(z_streamp strm, int level); this will be done by deflate(). */ - ZEXTERN int ZEXPORT deflate(z_streamp strm, int flush); /* deflate compresses as much data as possible, and stops when the input @@ -359,7 +357,6 @@ ZEXTERN int ZEXPORT deflate(z_streamp strm, int flush); continue compressing. */ - ZEXTERN int ZEXPORT deflateEnd(z_streamp strm); /* All dynamically allocated data structures for this stream are freed. @@ -373,7 +370,6 @@ ZEXTERN int ZEXPORT deflateEnd(z_streamp strm); deallocated). */ - /* ZEXTERN int ZEXPORT inflateInit(z_streamp strm); @@ -397,7 +393,6 @@ ZEXTERN int ZEXPORT inflateInit(z_streamp strm); that is deferred until inflate() is called. */ - ZEXTERN int ZEXPORT inflate(z_streamp strm, int flush); /* inflate decompresses as much data as possible, and stops when the input @@ -517,7 +512,6 @@ ZEXTERN int ZEXPORT inflate(z_streamp strm, int flush); recovery of the data is to be attempted. */ - ZEXTERN int ZEXPORT inflateEnd(z_streamp strm); /* All dynamically allocated data structures for this stream are freed. @@ -528,8 +522,7 @@ ZEXTERN int ZEXPORT inflateEnd(z_streamp strm); was inconsistent. */ - - /* Advanced functions */ +/* Advanced functions */ /* The following functions are needed only in some special applications. @@ -610,7 +603,7 @@ ZEXTERN int ZEXPORT deflateInit2(z_streamp strm, ZEXTERN int ZEXPORT deflateSetDictionary(z_streamp strm, const Bytef *dictionary, - uInt dictLength); + uInt dictLength); /* Initializes the compression dictionary from the given byte sequence without producing any compressed output. When using the zlib format, this @@ -652,9 +645,8 @@ ZEXTERN int ZEXPORT deflateSetDictionary(z_streamp strm, not perform any compression: this will be done by deflate(). */ -ZEXTERN int ZEXPORT deflateGetDictionary(z_streamp strm, - Bytef *dictionary, - uInt *dictLength); +ZEXTERN int ZEXPORT deflateGetDictionary(z_streamp strm, Bytef *dictionary, + uInt *dictLength); /* Returns the sliding dictionary being maintained by deflate. dictLength is set to the number of bytes in the dictionary, and that many bytes are copied @@ -674,8 +666,7 @@ ZEXTERN int ZEXPORT deflateGetDictionary(z_streamp strm, stream state is inconsistent. */ -ZEXTERN int ZEXPORT deflateCopy(z_streamp dest, - z_streamp source); +ZEXTERN int ZEXPORT deflateCopy(z_streamp dest, z_streamp source); /* Sets the destination stream as a complete copy of the source stream. @@ -703,9 +694,7 @@ ZEXTERN int ZEXPORT deflateReset(z_streamp strm); stream state was inconsistent (such as zalloc or state being Z_NULL). */ -ZEXTERN int ZEXPORT deflateParams(z_streamp strm, - int level, - int strategy); +ZEXTERN int ZEXPORT deflateParams(z_streamp strm, int level, int strategy); /* Dynamically update the compression level and compression strategy. The interpretation of level and strategy is as in deflateInit2(). This can be @@ -741,11 +730,8 @@ ZEXTERN int ZEXPORT deflateParams(z_streamp strm, retried with more output space. */ -ZEXTERN int ZEXPORT deflateTune(z_streamp strm, - int good_length, - int max_lazy, - int nice_length, - int max_chain); +ZEXTERN int ZEXPORT deflateTune(z_streamp strm, int good_length, int max_lazy, + int nice_length, int max_chain); /* Fine tune deflate's internal compression parameters. This should only be used by someone who understands the algorithm used by zlib's deflate for @@ -758,8 +744,7 @@ ZEXTERN int ZEXPORT deflateTune(z_streamp strm, returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. */ -ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm, - uLong sourceLen); +ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen); /* deflateBound() returns an upper bound on the compressed size after deflation of sourceLen bytes. It must be called after deflateInit() or @@ -773,8 +758,7 @@ ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm, than Z_FINISH or Z_NO_FLUSH are used. */ -ZEXTERN int ZEXPORT deflatePending(z_streamp strm, - unsigned *pending, +ZEXTERN int ZEXPORT deflatePending(z_streamp strm, unsigned *pending, int *bits); /* deflatePending() returns the number of bytes and bits of output that have @@ -788,9 +772,7 @@ ZEXTERN int ZEXPORT deflatePending(z_streamp strm, stream state was inconsistent. */ -ZEXTERN int ZEXPORT deflatePrime(z_streamp strm, - int bits, - int value); +ZEXTERN int ZEXPORT deflatePrime(z_streamp strm, int bits, int value); /* deflatePrime() inserts bits in the deflate output stream. The intent is that this function is used to start off the deflate output with the bits @@ -805,8 +787,7 @@ ZEXTERN int ZEXPORT deflatePrime(z_streamp strm, source stream state was inconsistent. */ -ZEXTERN int ZEXPORT deflateSetHeader(z_streamp strm, - gz_headerp head); +ZEXTERN int ZEXPORT deflateSetHeader(z_streamp strm, gz_headerp head); /* deflateSetHeader() provides gzip header information for when a gzip stream is requested by deflateInit2(). deflateSetHeader() may be called @@ -887,7 +868,7 @@ ZEXTERN int ZEXPORT inflateInit2(z_streamp strm, ZEXTERN int ZEXPORT inflateSetDictionary(z_streamp strm, const Bytef *dictionary, - uInt dictLength); + uInt dictLength); /* Initializes the decompression dictionary from the given uncompressed byte sequence. This function must be called immediately after a call of inflate, @@ -908,9 +889,8 @@ ZEXTERN int ZEXPORT inflateSetDictionary(z_streamp strm, inflate(). */ -ZEXTERN int ZEXPORT inflateGetDictionary(z_streamp strm, - Bytef *dictionary, - uInt *dictLength); +ZEXTERN int ZEXPORT inflateGetDictionary(z_streamp strm, Bytef *dictionary, + uInt *dictLength); /* Returns the sliding dictionary being maintained by inflate. dictLength is set to the number of bytes in the dictionary, and that many bytes are copied @@ -942,8 +922,7 @@ ZEXTERN int ZEXPORT inflateSync(z_streamp strm); time, until success or end of the input data. */ -ZEXTERN int ZEXPORT inflateCopy(z_streamp dest, - z_streamp source); +ZEXTERN int ZEXPORT inflateCopy(z_streamp dest, z_streamp source); /* Sets the destination stream as a complete copy of the source stream. @@ -969,8 +948,7 @@ ZEXTERN int ZEXPORT inflateReset(z_streamp strm); stream state was inconsistent (such as zalloc or state being Z_NULL). */ -ZEXTERN int ZEXPORT inflateReset2(z_streamp strm, - int windowBits); +ZEXTERN int ZEXPORT inflateReset2(z_streamp strm, int windowBits); /* This function is the same as inflateReset, but it also permits changing the wrap and window size requests. The windowBits parameter is interpreted @@ -983,9 +961,7 @@ ZEXTERN int ZEXPORT inflateReset2(z_streamp strm, the windowBits parameter is invalid. */ -ZEXTERN int ZEXPORT inflatePrime(z_streamp strm, - int bits, - int value); +ZEXTERN int ZEXPORT inflatePrime(z_streamp strm, int bits, int value); /* This function inserts bits in the inflate input stream. The intent is that this function is used to start inflating at a bit position in the @@ -1032,8 +1008,7 @@ ZEXTERN long ZEXPORT inflateMark(z_streamp strm); source stream state was inconsistent. */ -ZEXTERN int ZEXPORT inflateGetHeader(z_streamp strm, - gz_headerp head); +ZEXTERN int ZEXPORT inflateGetHeader(z_streamp strm, gz_headerp head); /* inflateGetHeader() requests that gzip header information be stored in the provided gz_header structure. inflateGetHeader() may be called after @@ -1094,12 +1069,10 @@ ZEXTERN int ZEXPORT inflateBackInit(z_streamp strm, int windowBits, the version of the header file. */ -typedef unsigned (*in_func)(void FAR *, - z_const unsigned char FAR * FAR *); +typedef unsigned (*in_func)(void FAR *, z_const unsigned char FAR *FAR *); typedef int (*out_func)(void FAR *, unsigned char FAR *, unsigned); -ZEXTERN int ZEXPORT inflateBack(z_streamp strm, - in_func in, void FAR *in_desc, +ZEXTERN int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc, out_func out, void FAR *out_desc); /* inflateBack() does a raw inflate with a single call using a call-back @@ -1219,7 +1192,7 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags(void); #ifndef Z_SOLO - /* utility functions */ +/* utility functions */ /* The following utility functions are implemented on top of the basic @@ -1229,8 +1202,8 @@ ZEXTERN uLong ZEXPORT zlibCompileFlags(void); you need special options. */ -ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen); +ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong sourceLen); /* Compresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size @@ -1244,9 +1217,8 @@ ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen, buffer. */ -ZEXTERN int ZEXPORT compress2(Bytef *dest, uLongf *destLen, - const Bytef *source, uLong sourceLen, - int level); +ZEXTERN int ZEXPORT compress2(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong sourceLen, int level); /* Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte @@ -1267,7 +1239,7 @@ ZEXTERN uLong ZEXPORT compressBound(uLong sourceLen); compress() or compress2() call to allocate the destination buffer. */ -ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, +ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen); /* Decompresses the source buffer into the destination buffer. sourceLen is @@ -1285,7 +1257,7 @@ ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, buffer with the uncompressed data up to that point. */ -ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, +ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source, uLong *sourceLen); /* Same as uncompress, except that sourceLen is a pointer, where the @@ -1293,7 +1265,7 @@ ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, source bytes consumed. */ - /* gzip file access functions */ +/* gzip file access functions */ /* This library supports reading and writing files in gzip (.gz) format with @@ -1302,7 +1274,7 @@ ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, wrapper, documented in RFC 1952, wrapped around a deflate stream. */ -typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ +typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ /* ZEXTERN gzFile ZEXPORT gzopen(const char *path, const char *mode); @@ -1454,8 +1426,8 @@ ZEXTERN int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len); returns the number of uncompressed bytes written or 0 in case of error. */ -ZEXTERN z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, - z_size_t nitems, gzFile file); +ZEXTERN z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, z_size_t nitems, + gzFile file); /* Compress and write nitems items of size size from buf to file, duplicating the interface of stdio's fwrite(), with size_t request and return types. If @@ -1491,7 +1463,7 @@ ZEXTERN int ZEXPORT gzputs(gzFile file, const char *s); gzputs returns the number of characters written, or -1 in case of error. */ -ZEXTERN char * ZEXPORT gzgets(gzFile file, char *buf, int len); +ZEXTERN char *ZEXPORT gzgets(gzFile file, char *buf, int len); /* Read and decompress bytes from file into buf, until len-1 characters are read, or until a newline character is read and transferred to buf, or an @@ -1567,7 +1539,7 @@ ZEXTERN z_off_t ZEXPORT gzseek(gzFile file, would be before the current position. */ -ZEXTERN int ZEXPORT gzrewind(gzFile file); +ZEXTERN int ZEXPORT gzrewind(gzFile file); /* Rewind file. This function is supported only for reading. @@ -1631,7 +1603,7 @@ ZEXTERN int ZEXPORT gzdirect(gzFile file); gzip file reading and decompression, which may not be desired.) */ -ZEXTERN int ZEXPORT gzclose(gzFile file); +ZEXTERN int ZEXPORT gzclose(gzFile file); /* Flush all pending output for file, if necessary, close file and deallocate the (de)compression state. Note that once file is closed, you @@ -1656,7 +1628,7 @@ ZEXTERN int ZEXPORT gzclose_w(gzFile file); zlib library. */ -ZEXTERN const char * ZEXPORT gzerror(gzFile file, int *errnum); +ZEXTERN const char *ZEXPORT gzerror(gzFile file, int *errnum); /* Return the error message for the last error which occurred on file. errnum is set to zlib error number. If an error occurred in the file system @@ -1681,7 +1653,7 @@ ZEXTERN void ZEXPORT gzclearerr(gzFile file); #endif /* !Z_SOLO */ - /* checksum functions */ +/* checksum functions */ /* These functions are not related to compression but are exported @@ -1709,8 +1681,7 @@ ZEXTERN uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len); if (adler != original_adler) error(); */ -ZEXTERN uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, - z_size_t len); +ZEXTERN uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, z_size_t len); /* Same as adler32(), but with a size_t length. */ @@ -1745,8 +1716,7 @@ ZEXTERN uLong ZEXPORT crc32(uLong crc, const Bytef *buf, uInt len); if (crc != original_crc) error(); */ -ZEXTERN uLong ZEXPORT crc32_z(uLong crc, const Bytef *buf, - z_size_t len); +ZEXTERN uLong ZEXPORT crc32_z(uLong crc, const Bytef *buf, z_size_t len); /* Same as crc32(), but with a size_t length. */ @@ -1775,54 +1745,49 @@ ZEXTERN uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op); crc32_combine() if the generated op is used more than once. */ - - /* various hacks, don't look :) */ +/* various hacks, don't look :) */ /* deflateInit and inflateInit are macros to allow checking the zlib version * and the compiler's view of z_stream: */ -ZEXTERN int ZEXPORT deflateInit_(z_streamp strm, int level, - const char *version, int stream_size); -ZEXTERN int ZEXPORT inflateInit_(z_streamp strm, - const char *version, int stream_size); -ZEXTERN int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, - int windowBits, int memLevel, - int strategy, const char *version, - int stream_size); -ZEXTERN int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, +ZEXTERN int ZEXPORT deflateInit_(z_streamp strm, int level, const char *version, + int stream_size); +ZEXTERN int ZEXPORT inflateInit_(z_streamp strm, const char *version, + int stream_size); +ZEXTERN int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, + int windowBits, int memLevel, int strategy, + const char *version, int stream_size); +ZEXTERN int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, const char *version, int stream_size); ZEXTERN int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, unsigned char FAR *window, - const char *version, - int stream_size); + const char *version, int stream_size); #ifdef Z_PREFIX_SET -# define z_deflateInit(strm, level) \ - deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) -# define z_inflateInit(strm) \ - inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) -# define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ - deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ - (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) -# define z_inflateInit2(strm, windowBits) \ - inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ - (int)sizeof(z_stream)) -# define z_inflateBackInit(strm, windowBits, window) \ - inflateBackInit_((strm), (windowBits), (window), \ - ZLIB_VERSION, (int)sizeof(z_stream)) +#define z_deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +#define z_inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +#define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm), (level), (method), (windowBits), (memLevel), \ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +#define z_inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, (int)sizeof(z_stream)) +#define z_inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), ZLIB_VERSION, \ + (int)sizeof(z_stream)) #else -# define deflateInit(strm, level) \ - deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) -# define inflateInit(strm) \ - inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) -# define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ - deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ - (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) -# define inflateInit2(strm, windowBits) \ - inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ - (int)sizeof(z_stream)) -# define inflateBackInit(strm, windowBits, window) \ - inflateBackInit_((strm), (windowBits), (window), \ - ZLIB_VERSION, (int)sizeof(z_stream)) +#define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +#define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +#define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm), (level), (method), (windowBits), (memLevel), \ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +#define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, (int)sizeof(z_stream)) +#define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), ZLIB_VERSION, \ + (int)sizeof(z_stream)) #endif #ifndef Z_SOLO @@ -1835,18 +1800,18 @@ ZEXTERN int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, * only be used by the gzgetc() macro. You have been warned. */ struct gzFile_s { - unsigned have; - unsigned char *next; - z_off64_t pos; + unsigned have; + unsigned char *next; + z_off64_t pos; }; -ZEXTERN int ZEXPORT gzgetc_(gzFile file); /* backward compatibility */ +ZEXTERN int ZEXPORT gzgetc_(gzFile file); /* backward compatibility */ #ifdef Z_PREFIX_SET -# undef z_gzgetc -# define z_gzgetc(g) \ - ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#undef z_gzgetc +#define z_gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) #else -# define gzgetc(g) \ - ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#define gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) #endif /* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or @@ -1856,79 +1821,76 @@ ZEXTERN int ZEXPORT gzgetc_(gzFile file); /* backward compatibility */ * without large file support, _LFS64_LARGEFILE must also be true */ #ifdef Z_LARGE64 - ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); - ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); - ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); - ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); - ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); - ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); - ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); +ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); +ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); +ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); +ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); +ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); +ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); +ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); #endif #if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) -# ifdef Z_PREFIX_SET -# define z_gzopen z_gzopen64 -# define z_gzseek z_gzseek64 -# define z_gztell z_gztell64 -# define z_gzoffset z_gzoffset64 -# define z_adler32_combine z_adler32_combine64 -# define z_crc32_combine z_crc32_combine64 -# define z_crc32_combine_gen z_crc32_combine_gen64 -# else -# define gzopen gzopen64 -# define gzseek gzseek64 -# define gztell gztell64 -# define gzoffset gzoffset64 -# define adler32_combine adler32_combine64 -# define crc32_combine crc32_combine64 -# define crc32_combine_gen crc32_combine_gen64 -# endif -# ifndef Z_LARGE64 - ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); - ZEXTERN z_off_t ZEXPORT gzseek64(gzFile, z_off_t, int); - ZEXTERN z_off_t ZEXPORT gztell64(gzFile); - ZEXTERN z_off_t ZEXPORT gzoffset64(gzFile); - ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); -# endif +#ifdef Z_PREFIX_SET +#define z_gzopen z_gzopen64 +#define z_gzseek z_gzseek64 +#define z_gztell z_gztell64 +#define z_gzoffset z_gzoffset64 +#define z_adler32_combine z_adler32_combine64 +#define z_crc32_combine z_crc32_combine64 +#define z_crc32_combine_gen z_crc32_combine_gen64 #else - ZEXTERN gzFile ZEXPORT gzopen(const char *, const char *); - ZEXTERN z_off_t ZEXPORT gzseek(gzFile, z_off_t, int); - ZEXTERN z_off_t ZEXPORT gztell(gzFile); - ZEXTERN z_off_t ZEXPORT gzoffset(gzFile); - ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); +#define gzopen gzopen64 +#define gzseek gzseek64 +#define gztell gztell64 +#define gzoffset gzoffset64 +#define adler32_combine adler32_combine64 +#define crc32_combine crc32_combine64 +#define crc32_combine_gen crc32_combine_gen64 +#endif +#ifndef Z_LARGE64 +ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); +ZEXTERN z_off_t ZEXPORT gzseek64(gzFile, z_off_t, int); +ZEXTERN z_off_t ZEXPORT gztell64(gzFile); +ZEXTERN z_off_t ZEXPORT gzoffset64(gzFile); +ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); +ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); +ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); +#endif +#else +ZEXTERN gzFile ZEXPORT gzopen(const char *, const char *); +ZEXTERN z_off_t ZEXPORT gzseek(gzFile, z_off_t, int); +ZEXTERN z_off_t ZEXPORT gztell(gzFile); +ZEXTERN z_off_t ZEXPORT gzoffset(gzFile); +ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); +ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); +ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); #endif #else /* Z_SOLO */ - ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); +ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); +ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); +ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); #endif /* !Z_SOLO */ /* undocumented functions */ -ZEXTERN const char * ZEXPORT zError(int); -ZEXTERN int ZEXPORT inflateSyncPoint(z_streamp); -ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table(void); -ZEXTERN int ZEXPORT inflateUndermine(z_streamp, int); -ZEXTERN int ZEXPORT inflateValidate(z_streamp, int); -ZEXTERN unsigned long ZEXPORT inflateCodesUsed(z_streamp); -ZEXTERN int ZEXPORT inflateResetKeep(z_streamp); -ZEXTERN int ZEXPORT deflateResetKeep(z_streamp); +ZEXTERN const char *ZEXPORT zError(int); +ZEXTERN int ZEXPORT inflateSyncPoint(z_streamp); +ZEXTERN const z_crc_t FAR *ZEXPORT get_crc_table(void); +ZEXTERN int ZEXPORT inflateUndermine(z_streamp, int); +ZEXTERN int ZEXPORT inflateValidate(z_streamp, int); +ZEXTERN unsigned long ZEXPORT inflateCodesUsed(z_streamp); +ZEXTERN int ZEXPORT inflateResetKeep(z_streamp); +ZEXTERN int ZEXPORT deflateResetKeep(z_streamp); #if defined(_WIN32) && !defined(Z_SOLO) -ZEXTERN gzFile ZEXPORT gzopen_w(const wchar_t *path, - const char *mode); +ZEXTERN gzFile ZEXPORT gzopen_w(const wchar_t *path, const char *mode); #endif #if defined(STDC) || defined(Z_HAVE_STDARG_H) -# ifndef Z_SOLO -ZEXTERN int ZEXPORTVA gzvprintf(gzFile file, - const char *format, - va_list va); -# endif +#ifndef Z_SOLO +ZEXTERN int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va); +#endif #endif #ifdef __cplusplus diff --git a/vendor/hydra/vendor/zlib/zutil.h b/vendor/hydra/vendor/zlib/zutil.h index 48dd7feb..6766c6f4 100644 --- a/vendor/hydra/vendor/zlib/zutil.h +++ b/vendor/hydra/vendor/zlib/zutil.h @@ -14,241 +14,261 @@ #define ZUTIL_H #ifdef HAVE_HIDDEN -# define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) +#define ZLIB_INTERNAL __attribute__((visibility("hidden"))) #else -# define ZLIB_INTERNAL +#define ZLIB_INTERNAL #endif #include "zlib.h" #if defined(STDC) && !defined(Z_SOLO) -# if !(defined(_WIN32_WCE) && defined(_MSC_VER)) -# include -# endif -# include -# include +#if !(defined(_WIN32_WCE) && defined(_MSC_VER)) +#include +#endif +#include +#include #endif #ifndef local -# define local static +#define local static #endif /* since "static" is used to mean two completely different things in C, we define "local" for the non-static meaning of "static", for readability (compile with -Dlocal if your debugger can't find static symbols) */ -typedef unsigned char uch; +typedef unsigned char uch; typedef uch FAR uchf; typedef unsigned short ush; typedef ush FAR ushf; -typedef unsigned long ulg; +typedef unsigned long ulg; #if !defined(Z_U8) && !defined(Z_SOLO) && defined(STDC) -# include -# if (ULONG_MAX == 0xffffffffffffffff) -# define Z_U8 unsigned long -# elif (ULLONG_MAX == 0xffffffffffffffff) -# define Z_U8 unsigned long long -# elif (UINT_MAX == 0xffffffffffffffff) -# define Z_U8 unsigned -# endif +#include +#if (ULONG_MAX == 0xffffffffffffffff) +#define Z_U8 unsigned long +#elif (ULLONG_MAX == 0xffffffffffffffff) +#define Z_U8 unsigned long long +#elif (UINT_MAX == 0xffffffffffffffff) +#define Z_U8 unsigned +#endif #endif -extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ +extern z_const char *const z_errmsg[10]; /* indexed by 2-zlib_error */ /* (size given to avoid silly warnings with Visual C++) */ #define ERR_MSG(err) z_errmsg[(err) < -6 || (err) > 2 ? 9 : 2 - (err)] -#define ERR_RETURN(strm,err) \ - return (strm->msg = ERR_MSG(err), (err)) +#define ERR_RETURN(strm, err) return (strm->msg = ERR_MSG(err), (err)) /* To be used only when the state is known to be valid */ - /* common constants */ +/* common constants */ #ifndef DEF_WBITS -# define DEF_WBITS MAX_WBITS +#define DEF_WBITS MAX_WBITS #endif /* default windowBits for decompression. MAX_WBITS is for compression only */ #if MAX_MEM_LEVEL >= 8 -# define DEF_MEM_LEVEL 8 +#define DEF_MEM_LEVEL 8 #else -# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#define DEF_MEM_LEVEL MAX_MEM_LEVEL #endif /* default memLevel */ #define STORED_BLOCK 0 #define STATIC_TREES 1 -#define DYN_TREES 2 +#define DYN_TREES 2 /* The three kinds of block type */ -#define MIN_MATCH 3 -#define MAX_MATCH 258 +#define MIN_MATCH 3 +#define MAX_MATCH 258 /* The minimum and maximum match lengths */ #define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ - /* target dependencies */ +/* target dependencies */ #if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) -# define OS_CODE 0x00 -# ifndef Z_SOLO -# if defined(__TURBOC__) || defined(__BORLANDC__) -# if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) - /* Allow compilation with ANSI keywords only enabled */ - void _Cdecl farfree( void *block ); - void *_Cdecl farmalloc( unsigned long nbytes ); -# else -# include -# endif -# else /* MSC or DJGPP */ -# include -# endif -# endif +#define OS_CODE 0x00 +#ifndef Z_SOLO +#if defined(__TURBOC__) || defined(__BORLANDC__) +#if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) +/* Allow compilation with ANSI keywords only enabled */ +void _Cdecl farfree(void *block); +void *_Cdecl farmalloc(unsigned long nbytes); +#else +#include +#endif +#else /* MSC or DJGPP */ +#include +#endif +#endif #endif #ifdef AMIGA -# define OS_CODE 1 +#define OS_CODE 1 #endif #if defined(VAXC) || defined(VMS) -# define OS_CODE 2 -# define F_OPEN(name, mode) \ - fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") +#define OS_CODE 2 +#define F_OPEN(name, mode) \ + fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") #endif #ifdef __370__ -# if __TARGET_LIB__ < 0x20000000 -# define OS_CODE 4 -# elif __TARGET_LIB__ < 0x40000000 -# define OS_CODE 11 -# else -# define OS_CODE 8 -# endif +#if __TARGET_LIB__ < 0x20000000 +#define OS_CODE 4 +#elif __TARGET_LIB__ < 0x40000000 +#define OS_CODE 11 +#else +#define OS_CODE 8 +#endif #endif #if defined(ATARI) || defined(atarist) -# define OS_CODE 5 +#define OS_CODE 5 #endif #ifdef OS2 -# define OS_CODE 6 -# if defined(M_I86) && !defined(Z_SOLO) -# include -# endif +#define OS_CODE 6 +#if defined(M_I86) && !defined(Z_SOLO) +#include +#endif #endif #if defined(MACOS) -# define OS_CODE 7 +#define OS_CODE 7 #endif #ifdef __acorn -# define OS_CODE 13 +#define OS_CODE 13 #endif #if defined(WIN32) && !defined(__CYGWIN__) -# define OS_CODE 10 +#define OS_CODE 10 #endif #ifdef _BEOS_ -# define OS_CODE 16 +#define OS_CODE 16 #endif #ifdef __TOS_OS400__ -# define OS_CODE 18 +#define OS_CODE 18 #endif #ifdef __APPLE__ -# define OS_CODE 19 +#define OS_CODE 19 #endif #if defined(__BORLANDC__) && !defined(MSDOS) - #pragma warn -8004 - #pragma warn -8008 - #pragma warn -8066 +#pragma warn - 8004 +#pragma warn - 8008 +#pragma warn - 8066 #endif /* provide prototypes for these when building zlib without LFS */ #if !defined(_WIN32) && \ - (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0) - ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); - ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); + (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE - 0 == 0) +ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); +ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); +ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); #endif - /* common defaults */ +/* common defaults */ #ifndef OS_CODE -# define OS_CODE 3 /* assume Unix */ +#define OS_CODE 3 /* assume Unix */ #endif #ifndef F_OPEN -# define F_OPEN(name, mode) fopen((name), (mode)) +#define F_OPEN(name, mode) fopen((name), (mode)) #endif - /* functions */ +/* functions */ #if defined(pyr) || defined(Z_SOLO) -# define NO_MEMCPY +#define NO_MEMCPY #endif #if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) - /* Use our own functions for small and medium model with MSC <= 5.0. - * You may have to use the same strategy for Borland C (untested). - * The __SC__ check is for Symantec. - */ -# define NO_MEMCPY +/* Use our own functions for small and medium model with MSC <= 5.0. + * You may have to use the same strategy for Borland C (untested). + * The __SC__ check is for Symantec. + */ +#define NO_MEMCPY #endif #if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) -# define HAVE_MEMCPY +#define HAVE_MEMCPY #endif #ifdef HAVE_MEMCPY -# ifdef SMALL_MEDIUM /* MSDOS small or medium model */ -# define zmemcpy _fmemcpy -# define zmemcmp _fmemcmp -# define zmemzero(dest, len) _fmemset(dest, 0, len) -# else -# define zmemcpy memcpy -# define zmemcmp memcmp -# define zmemzero(dest, len) memset(dest, 0, len) -# endif +#ifdef SMALL_MEDIUM /* MSDOS small or medium model */ +#define zmemcpy _fmemcpy +#define zmemcmp _fmemcmp +#define zmemzero(dest, len) _fmemset(dest, 0, len) +#else +#define zmemcpy memcpy +#define zmemcmp memcmp +#define zmemzero(dest, len) memset(dest, 0, len) +#endif #else - void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len); - int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len); - void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len); +void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len); +int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len); +void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len); #endif /* Diagnostic functions */ #ifdef ZLIB_DEBUG -# include - extern int ZLIB_INTERNAL z_verbose; - extern void ZLIB_INTERNAL z_error(char *m); -# define Assert(cond,msg) {if(!(cond)) z_error(msg);} -# define Trace(x) {if (z_verbose>=0) fprintf x ;} -# define Tracev(x) {if (z_verbose>0) fprintf x ;} -# define Tracevv(x) {if (z_verbose>1) fprintf x ;} -# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} -# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} +#include +extern int ZLIB_INTERNAL z_verbose; +extern void ZLIB_INTERNAL z_error(char *m); +#define Assert(cond, msg) \ + { \ + if (!(cond)) z_error(msg); \ + } +#define Trace(x) \ + { \ + if (z_verbose >= 0) fprintf x; \ + } +#define Tracev(x) \ + { \ + if (z_verbose > 0) fprintf x; \ + } +#define Tracevv(x) \ + { \ + if (z_verbose > 1) fprintf x; \ + } +#define Tracec(c, x) \ + { \ + if (z_verbose > 0 && (c)) fprintf x; \ + } +#define Tracecv(c, x) \ + { \ + if (z_verbose > 1 && (c)) fprintf x; \ + } #else -# define Assert(cond,msg) -# define Trace(x) -# define Tracev(x) -# define Tracevv(x) -# define Tracec(c,x) -# define Tracecv(c,x) +#define Assert(cond, msg) +#define Trace(x) +#define Tracev(x) +#define Tracevv(x) +#define Tracec(c, x) +#define Tracecv(c, x) #endif #ifndef Z_SOLO - voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, - unsigned size); - void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr); +voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size); +void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr); #endif #define ZALLOC(strm, items, size) \ - (*((strm)->zalloc))((strm)->opaque, (items), (size)) -#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) -#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} + (*((strm)->zalloc))((strm)->opaque, (items), (size)) +#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) +#define TRY_FREE(s, p) \ + { \ + if (p) ZFREE(s, p); \ + } /* Reverse the bytes in a 32-bit value */ -#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ - (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) +#define ZSWAP32(q) \ + ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + (((q) & 0xff00) << 8) + \ + (((q) & 0xff) << 24)) #endif /* ZUTIL_H */ diff --git a/vendor/jsonbinpack/src/compiler/encoding.h b/vendor/jsonbinpack/src/compiler/encoding.h index 304d45c8..30f7c1bf 100644 --- a/vendor/jsonbinpack/src/compiler/encoding.h +++ b/vendor/jsonbinpack/src/compiler/encoding.h @@ -8,8 +8,8 @@ namespace sourcemeta::jsonbinpack { constexpr auto ENCODING_V1{"tag:sourcemeta.com,2024:jsonbinpack/encoding/v1"}; -inline auto -make_resolver(const sourcemeta::jsontoolkit::SchemaResolver &fallback) -> auto { +inline auto make_resolver( + const sourcemeta::jsontoolkit::SchemaResolver &fallback) -> auto { return [&fallback](std::string_view identifier) -> std::optional { if (identifier == ENCODING_V1) { @@ -27,6 +27,6 @@ make_resolver(const sourcemeta::jsontoolkit::SchemaResolver &fallback) -> auto { }; } -} // namespace sourcemeta::jsonbinpack +} // namespace sourcemeta::jsonbinpack #endif diff --git a/vendor/jsonbinpack/src/compiler/include/sourcemeta/jsonbinpack/compiler.h b/vendor/jsonbinpack/src/compiler/include/sourcemeta/jsonbinpack/compiler.h index e06b9683..19884f0a 100644 --- a/vendor/jsonbinpack/src/compiler/include/sourcemeta/jsonbinpack/compiler.h +++ b/vendor/jsonbinpack/src/compiler/include/sourcemeta/jsonbinpack/compiler.h @@ -17,8 +17,8 @@ #include #include -#include // std::optional -#include // std::string +#include // std::optional +#include // std::string namespace sourcemeta::jsonbinpack { @@ -86,6 +86,6 @@ auto canonicalize( const sourcemeta::jsontoolkit::SchemaResolver &resolver, const std::optional &default_dialect = std::nullopt) -> void; -} // namespace sourcemeta::jsonbinpack +} // namespace sourcemeta::jsonbinpack #endif diff --git a/vendor/jsonbinpack/src/compiler/mapper/enum_8_bit.h b/vendor/jsonbinpack/src/compiler/mapper/enum_8_bit.h index 476d893c..1d4df751 100644 --- a/vendor/jsonbinpack/src/compiler/mapper/enum_8_bit.h +++ b/vendor/jsonbinpack/src/compiler/mapper/enum_8_bit.h @@ -1,6 +1,6 @@ // TODO: Unit test this mapping once we have container encodings class Enum8Bit final : public sourcemeta::alterschema::Rule { -public: + public: Enum8Bit() : sourcemeta::alterschema::Rule{"enum_8_bit", ""} {}; [[nodiscard]] auto condition( diff --git a/vendor/jsonbinpack/src/compiler/mapper/enum_8_bit_top_level.h b/vendor/jsonbinpack/src/compiler/mapper/enum_8_bit_top_level.h index 4dc10d11..7e62bd29 100644 --- a/vendor/jsonbinpack/src/compiler/mapper/enum_8_bit_top_level.h +++ b/vendor/jsonbinpack/src/compiler/mapper/enum_8_bit_top_level.h @@ -1,5 +1,5 @@ class Enum8BitTopLevel final : public sourcemeta::alterschema::Rule { -public: + public: Enum8BitTopLevel() : sourcemeta::alterschema::Rule{"enum_8_bit_top_level", ""} {}; diff --git a/vendor/jsonbinpack/src/compiler/mapper/enum_arbitrary.h b/vendor/jsonbinpack/src/compiler/mapper/enum_arbitrary.h index 759ad529..f3132809 100644 --- a/vendor/jsonbinpack/src/compiler/mapper/enum_arbitrary.h +++ b/vendor/jsonbinpack/src/compiler/mapper/enum_arbitrary.h @@ -1,6 +1,6 @@ // TODO: Unit test this mapping once we have container encodings class EnumArbitrary final : public sourcemeta::alterschema::Rule { -public: + public: EnumArbitrary() : sourcemeta::alterschema::Rule{"enum_arbitrary", ""} {}; [[nodiscard]] auto condition( diff --git a/vendor/jsonbinpack/src/compiler/mapper/enum_singleton.h b/vendor/jsonbinpack/src/compiler/mapper/enum_singleton.h index 3bce7459..a40369c8 100644 --- a/vendor/jsonbinpack/src/compiler/mapper/enum_singleton.h +++ b/vendor/jsonbinpack/src/compiler/mapper/enum_singleton.h @@ -1,12 +1,11 @@ class EnumSingleton final : public sourcemeta::alterschema::Rule { -public: + public: EnumSingleton() : sourcemeta::alterschema::Rule{"enum_singleton", ""} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &dialect, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &dialect, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return dialect == "https://json-schema.org/draft/2020-12/schema" && vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && diff --git a/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_8_bit.h b/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_8_bit.h index c045043f..d6ec5a22 100644 --- a/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_8_bit.h +++ b/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_8_bit.h @@ -1,13 +1,12 @@ class IntegerBounded8Bit final : public sourcemeta::alterschema::Rule { -public: + public: IntegerBounded8Bit() : sourcemeta::alterschema::Rule{"integer_bounded_8_bit", ""} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &dialect, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &dialect, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return dialect == "https://json-schema.org/draft/2020-12/schema" && vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && diff --git a/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_greater_than_8_bit.h b/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_greater_than_8_bit.h index 866dca1f..21bc37c9 100644 --- a/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_greater_than_8_bit.h +++ b/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_greater_than_8_bit.h @@ -1,15 +1,14 @@ class IntegerBoundedGreaterThan8Bit final : public sourcemeta::alterschema::Rule { -public: + public: IntegerBoundedGreaterThan8Bit() : sourcemeta::alterschema::Rule{"integer_bounded_greater_than_8_bit", ""} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &dialect, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &dialect, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return dialect == "https://json-schema.org/draft/2020-12/schema" && vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && diff --git a/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_multiplier_8_bit.h b/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_multiplier_8_bit.h index fd431421..87345ddf 100644 --- a/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_multiplier_8_bit.h +++ b/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_multiplier_8_bit.h @@ -1,15 +1,14 @@ class IntegerBoundedMultiplier8Bit final : public sourcemeta::alterschema::Rule { -public: + public: IntegerBoundedMultiplier8Bit() - : sourcemeta::alterschema::Rule{"integer_bounded_multiplier_8_bit", ""} { - }; + : sourcemeta::alterschema::Rule{"integer_bounded_multiplier_8_bit", + ""} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &dialect, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &dialect, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { if (dialect != "https://json-schema.org/draft/2020-12/schema" || !vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") || diff --git a/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_multiplier_greater_than_8_bit.h b/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_multiplier_greater_than_8_bit.h index b4220c3f..ae4dff9c 100644 --- a/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_multiplier_greater_than_8_bit.h +++ b/vendor/jsonbinpack/src/compiler/mapper/integer_bounded_multiplier_greater_than_8_bit.h @@ -1,15 +1,14 @@ class IntegerBoundedMultiplierGreaterThan8Bit final : public sourcemeta::alterschema::Rule { -public: + public: IntegerBoundedMultiplierGreaterThan8Bit() : sourcemeta::alterschema::Rule{ "integer_bounded_multiplier_greater_than_8_bit", ""} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &dialect, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &dialect, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { if (dialect != "https://json-schema.org/draft/2020-12/schema" || !vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") || diff --git a/vendor/jsonbinpack/src/compiler/mapper/integer_lower_bound.h b/vendor/jsonbinpack/src/compiler/mapper/integer_lower_bound.h index 8177f173..4ffb53e5 100644 --- a/vendor/jsonbinpack/src/compiler/mapper/integer_lower_bound.h +++ b/vendor/jsonbinpack/src/compiler/mapper/integer_lower_bound.h @@ -1,13 +1,12 @@ class IntegerLowerBound final : public sourcemeta::alterschema::Rule { -public: + public: IntegerLowerBound() : sourcemeta::alterschema::Rule{"integer_lower_bound", ""} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &dialect, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &dialect, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return dialect == "https://json-schema.org/draft/2020-12/schema" && vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && diff --git a/vendor/jsonbinpack/src/compiler/mapper/integer_lower_bound_multiplier.h b/vendor/jsonbinpack/src/compiler/mapper/integer_lower_bound_multiplier.h index 9c866a8e..7bfe7044 100644 --- a/vendor/jsonbinpack/src/compiler/mapper/integer_lower_bound_multiplier.h +++ b/vendor/jsonbinpack/src/compiler/mapper/integer_lower_bound_multiplier.h @@ -1,13 +1,12 @@ class IntegerLowerBoundMultiplier final : public sourcemeta::alterschema::Rule { -public: + public: IntegerLowerBoundMultiplier() : sourcemeta::alterschema::Rule{"integer_lower_bound_multiplier", ""} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &dialect, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &dialect, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return dialect == "https://json-schema.org/draft/2020-12/schema" && vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && diff --git a/vendor/jsonbinpack/src/compiler/mapper/integer_unbound.h b/vendor/jsonbinpack/src/compiler/mapper/integer_unbound.h index 1662a390..b28beb60 100644 --- a/vendor/jsonbinpack/src/compiler/mapper/integer_unbound.h +++ b/vendor/jsonbinpack/src/compiler/mapper/integer_unbound.h @@ -1,12 +1,11 @@ class IntegerUnbound final : public sourcemeta::alterschema::Rule { -public: + public: IntegerUnbound() : sourcemeta::alterschema::Rule{"integer_unbound", ""} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &dialect, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &dialect, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return dialect == "https://json-schema.org/draft/2020-12/schema" && vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && diff --git a/vendor/jsonbinpack/src/compiler/mapper/integer_unbound_multiplier.h b/vendor/jsonbinpack/src/compiler/mapper/integer_unbound_multiplier.h index 1d5bfd80..ceb2379e 100644 --- a/vendor/jsonbinpack/src/compiler/mapper/integer_unbound_multiplier.h +++ b/vendor/jsonbinpack/src/compiler/mapper/integer_unbound_multiplier.h @@ -1,13 +1,12 @@ class IntegerUnboundMultiplier final : public sourcemeta::alterschema::Rule { -public: + public: IntegerUnboundMultiplier() : sourcemeta::alterschema::Rule{"integer_unbound_multiplier", ""} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &dialect, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &dialect, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return dialect == "https://json-schema.org/draft/2020-12/schema" && vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && diff --git a/vendor/jsonbinpack/src/compiler/mapper/integer_upper_bound.h b/vendor/jsonbinpack/src/compiler/mapper/integer_upper_bound.h index 9473b613..f4d68ffd 100644 --- a/vendor/jsonbinpack/src/compiler/mapper/integer_upper_bound.h +++ b/vendor/jsonbinpack/src/compiler/mapper/integer_upper_bound.h @@ -1,13 +1,12 @@ class IntegerUpperBound final : public sourcemeta::alterschema::Rule { -public: + public: IntegerUpperBound() : sourcemeta::alterschema::Rule{"integer_upper_bound", ""} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &dialect, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &dialect, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return dialect == "https://json-schema.org/draft/2020-12/schema" && vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && diff --git a/vendor/jsonbinpack/src/compiler/mapper/integer_upper_bound_multiplier.h b/vendor/jsonbinpack/src/compiler/mapper/integer_upper_bound_multiplier.h index 03e0ca81..88b829c8 100644 --- a/vendor/jsonbinpack/src/compiler/mapper/integer_upper_bound_multiplier.h +++ b/vendor/jsonbinpack/src/compiler/mapper/integer_upper_bound_multiplier.h @@ -1,13 +1,12 @@ class IntegerUpperBoundMultiplier final : public sourcemeta::alterschema::Rule { -public: + public: IntegerUpperBoundMultiplier() : sourcemeta::alterschema::Rule{"integer_upper_bound_multiplier", ""} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &dialect, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &dialect, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return dialect == "https://json-schema.org/draft/2020-12/schema" && vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && diff --git a/vendor/jsonbinpack/src/compiler/mapper/number_arbitrary.h b/vendor/jsonbinpack/src/compiler/mapper/number_arbitrary.h index fe72cbed..cfd32b14 100644 --- a/vendor/jsonbinpack/src/compiler/mapper/number_arbitrary.h +++ b/vendor/jsonbinpack/src/compiler/mapper/number_arbitrary.h @@ -1,12 +1,11 @@ class NumberArbitrary final : public sourcemeta::alterschema::Rule { -public: + public: NumberArbitrary() : sourcemeta::alterschema::Rule{"number_arbitrary", ""} {}; - [[nodiscard]] auto condition(const sourcemeta::jsontoolkit::JSON &schema, - const std::string &dialect, - const std::set &vocabularies, - const sourcemeta::jsontoolkit::Pointer &) const - -> bool override { + [[nodiscard]] auto condition( + const sourcemeta::jsontoolkit::JSON &schema, const std::string &dialect, + const std::set &vocabularies, + const sourcemeta::jsontoolkit::Pointer &) const -> bool override { return dialect == "https://json-schema.org/draft/2020-12/schema" && vocabularies.contains( "https://json-schema.org/draft/2020-12/vocab/validation") && diff --git a/vendor/jsonbinpack/src/numeric/include/sourcemeta/jsonbinpack/numeric_integral.h b/vendor/jsonbinpack/src/numeric/include/sourcemeta/jsonbinpack/numeric_integral.h index a29b93d6..70bff3fc 100644 --- a/vendor/jsonbinpack/src/numeric/include/sourcemeta/jsonbinpack/numeric_integral.h +++ b/vendor/jsonbinpack/src/numeric/include/sourcemeta/jsonbinpack/numeric_integral.h @@ -1,15 +1,16 @@ #ifndef SOURCEMETA_JSONBINPACK_NUMERIC_INTEGRAL_H_ #define SOURCEMETA_JSONBINPACK_NUMERIC_INTEGRAL_H_ -#include // assert -#include // std::abs -#include // std::uint8_t, std::int64_t, std::uint64_t -#include // std::numeric_limits +#include // assert +#include // std::abs +#include // std::uint8_t, std::int64_t, std::uint64_t +#include // std::numeric_limits namespace sourcemeta::jsonbinpack { /// @ingroup numeric -template constexpr auto is_byte(const T value) noexcept -> bool { +template +constexpr auto is_byte(const T value) noexcept -> bool { return value <= std::numeric_limits::max(); } @@ -24,7 +25,8 @@ constexpr auto count_multiples(const std::int64_t minimum, } /// @ingroup numeric -template constexpr auto uint_max = (2 << (T - 1)) - 1; +template +constexpr auto uint_max = (2 << (T - 1)) - 1; /// @ingroup numeric template @@ -104,11 +106,10 @@ constexpr auto divide_floor(const std::int64_t dividend, } /// @ingroup numeric -constexpr auto closest_smallest_exponent(const std::uint64_t value, - const std::uint8_t base, - const std::uint8_t exponent_start, - const std::uint8_t exponent_end) - -> std::uint8_t { +constexpr auto closest_smallest_exponent( + const std::uint64_t value, const std::uint8_t base, + const std::uint8_t exponent_start, + const std::uint8_t exponent_end) -> std::uint8_t { assert(exponent_start <= exponent_end); std::uint64_t result{base}; for (std::uint8_t exponent = 1; exponent < exponent_end; exponent++) { @@ -125,6 +126,6 @@ constexpr auto closest_smallest_exponent(const std::uint64_t value, return exponent_end; } -} // namespace sourcemeta::jsonbinpack +} // namespace sourcemeta::jsonbinpack #endif diff --git a/vendor/jsonbinpack/src/numeric/include/sourcemeta/jsonbinpack/numeric_real.h b/vendor/jsonbinpack/src/numeric/include/sourcemeta/jsonbinpack/numeric_real.h index fe52879c..92540909 100644 --- a/vendor/jsonbinpack/src/numeric/include/sourcemeta/jsonbinpack/numeric_real.h +++ b/vendor/jsonbinpack/src/numeric/include/sourcemeta/jsonbinpack/numeric_real.h @@ -1,9 +1,9 @@ #ifndef SOURCEMETA_JSONBINPACK_NUMERIC_REAL_H_ #define SOURCEMETA_JSONBINPACK_NUMERIC_REAL_H_ -#include // assert -#include // std::modf, std::floor, std::isfinite -#include // std::floating_point, std::integral +#include // assert +#include // std::modf, std::floor, std::isfinite +#include // std::floating_point, std::integral namespace sourcemeta::jsonbinpack { @@ -30,8 +30,8 @@ constexpr auto correct_ieee764(const Real value) -> Real { /// @ingroup numeric template -constexpr auto real_digits(Real value, std::uint64_t *point_position) - -> Integer { +constexpr auto real_digits(Real value, + std::uint64_t *point_position) -> Integer { assert(std::isfinite(value)); Real integral; std::uint64_t shifts{0}; @@ -49,6 +49,6 @@ constexpr auto real_digits(Real value, std::uint64_t *point_position) return static_cast(std::floor(integral)); } -} // namespace sourcemeta::jsonbinpack +} // namespace sourcemeta::jsonbinpack #endif diff --git a/vendor/jsonbinpack/src/numeric/include/sourcemeta/jsonbinpack/numeric_zigzag.h b/vendor/jsonbinpack/src/numeric/include/sourcemeta/jsonbinpack/numeric_zigzag.h index 37d07487..35ab1732 100644 --- a/vendor/jsonbinpack/src/numeric/include/sourcemeta/jsonbinpack/numeric_zigzag.h +++ b/vendor/jsonbinpack/src/numeric/include/sourcemeta/jsonbinpack/numeric_zigzag.h @@ -1,8 +1,8 @@ #ifndef SOURCEMETA_JSONBINPACK_NUMERIC_ZIGZAG_H_ #define SOURCEMETA_JSONBINPACK_NUMERIC_ZIGZAG_H_ -#include // std::abs -#include // std::uint64_t, std::int64_t +#include // std::abs +#include // std::uint64_t, std::int64_t namespace sourcemeta::jsonbinpack { @@ -26,6 +26,6 @@ constexpr auto zigzag_decode(const std::uint64_t value) noexcept return -(static_cast((value + 1) / 2)); } -} // namespace sourcemeta::jsonbinpack +} // namespace sourcemeta::jsonbinpack #endif diff --git a/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime.h b/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime.h index 24dcd001..39af20cc 100644 --- a/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime.h +++ b/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime.h @@ -14,14 +14,13 @@ #include #endif -#include - #include #include #include +#include -#include // std::exception -#include // std::move +#include // std::exception +#include // std::move namespace sourcemeta::jsonbinpack { @@ -40,7 +39,7 @@ auto load(const sourcemeta::jsontoolkit::JSON &input) -> Encoding; /// This class represents an encoding error class SOURCEMETA_JSONBINPACK_RUNTIME_EXPORT EncodingError : public std::exception { -public: + public: EncodingError(sourcemeta::jsontoolkit::JSON::String message) : message_{std::move(message)} {} @@ -48,7 +47,7 @@ class SOURCEMETA_JSONBINPACK_RUNTIME_EXPORT EncodingError return this->message_.c_str(); } -private: + private: const sourcemeta::jsontoolkit::JSON::String message_; }; @@ -56,6 +55,6 @@ class SOURCEMETA_JSONBINPACK_RUNTIME_EXPORT EncodingError #pragma warning(default : 4251 4275) #endif -} // namespace sourcemeta::jsonbinpack +} // namespace sourcemeta::jsonbinpack #endif diff --git a/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_decoder.h b/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_decoder.h index cc65efae..d8f6f180 100644 --- a/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_decoder.h +++ b/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_decoder.h @@ -7,20 +7,19 @@ #include #include - #include namespace sourcemeta::jsonbinpack { /// @ingroup runtime class SOURCEMETA_JSONBINPACK_RUNTIME_EXPORT Decoder : private InputStream { -public: + public: Decoder(Stream &input); auto read(const Encoding &encoding) -> sourcemeta::jsontoolkit::JSON; // The methods that implement individual encodings as considered private #ifndef DOXYGEN -#define DECLARE_ENCODING(name) \ +#define DECLARE_ENCODING(name) \ auto name(const name &) -> sourcemeta::jsontoolkit::JSON; // Integer @@ -65,6 +64,6 @@ class SOURCEMETA_JSONBINPACK_RUNTIME_EXPORT Decoder : private InputStream { #endif }; -} // namespace sourcemeta::jsonbinpack +} // namespace sourcemeta::jsonbinpack #endif diff --git a/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_encoder.h b/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_encoder.h index 5bd469a1..299660df 100644 --- a/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_encoder.h +++ b/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_encoder.h @@ -8,23 +8,22 @@ #include #include #include - #include namespace sourcemeta::jsonbinpack { /// @ingroup runtime class SOURCEMETA_JSONBINPACK_RUNTIME_EXPORT Encoder : private OutputStream { -public: + public: Encoder(Stream &output); auto write(const sourcemeta::jsontoolkit::JSON &document, const Encoding &encoding) -> void; // The methods that implement individual encodings as considered private #ifndef DOXYGEN -#define DECLARE_ENCODING(name) \ - auto name(const sourcemeta::jsontoolkit::JSON &document, const name &) \ - -> void; +#define DECLARE_ENCODING(name) \ + auto name(const sourcemeta::jsontoolkit::JSON &document, \ + const name &) -> void; // Integer DECLARE_ENCODING(BOUNDED_MULTIPLE_8BITS_ENUM_FIXED) @@ -67,10 +66,10 @@ class SOURCEMETA_JSONBINPACK_RUNTIME_EXPORT Encoder : private OutputStream { #undef DECLARE_ENCODING #endif -private: + private: Cache cache_; }; -} // namespace sourcemeta::jsonbinpack +} // namespace sourcemeta::jsonbinpack #endif diff --git a/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_encoder_cache.h b/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_encoder_cache.h index 8740761d..f9730813 100644 --- a/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_encoder_cache.h +++ b/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_encoder_cache.h @@ -8,15 +8,15 @@ #include -#include // std::reference_wrapper -#include // std::map -#include // std::optional -#include // std::pair +#include // std::reference_wrapper +#include // std::map +#include // std::optional +#include // std::pair namespace sourcemeta::jsonbinpack { class SOURCEMETA_JSONBINPACK_RUNTIME_EXPORT Cache { -public: + public: enum class Type { Standalone, PrefixLengthVarintPlusOne }; auto record(const sourcemeta::jsontoolkit::JSON::String &value, const std::uint64_t offset, const Type type) -> void; @@ -28,7 +28,7 @@ class SOURCEMETA_JSONBINPACK_RUNTIME_EXPORT Cache { auto remove_oldest() -> void; #endif -private: + private: // Exporting symbols that depends on the standard C++ library is considered // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN @@ -44,7 +44,7 @@ class SOURCEMETA_JSONBINPACK_RUNTIME_EXPORT Cache { #endif }; -} // namespace sourcemeta::jsonbinpack +} // namespace sourcemeta::jsonbinpack #endif #endif diff --git a/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_encoding.h b/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_encoding.h index 2e225e81..30f30d8a 100644 --- a/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_encoding.h +++ b/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_encoding.h @@ -2,13 +2,12 @@ #define SOURCEMETA_JSONBINPACK_RUNTIME_ENCODING_H_ #include - #include -#include // std::int64_t, std::uint64_t -#include // std::shared_ptr -#include // std::variant -#include // std::vector +#include // std::int64_t, std::uint64_t +#include // std::shared_ptr +#include // std::variant +#include // std::vector namespace sourcemeta::jsonbinpack { @@ -452,7 +451,7 @@ static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_7 == 7); static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_8 == 8); static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_9 == 9); static_assert(SUBTYPE_LONG_STRING_BASE_EXPONENT_10 == 10); -} // namespace internal::ANY_PACKED_TYPE_TAG_BYTE_PREFIX +} // namespace internal::ANY_PACKED_TYPE_TAG_BYTE_PREFIX #endif /// @} @@ -1041,6 +1040,6 @@ struct VARINT_TYPED_ARBITRARY_OBJECT { /// @} -} // namespace sourcemeta::jsonbinpack +} // namespace sourcemeta::jsonbinpack #endif diff --git a/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_input_stream.h b/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_input_stream.h index 466ddea9..2cfecc2e 100644 --- a/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_input_stream.h +++ b/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_input_stream.h @@ -7,14 +7,14 @@ #include -#include // std::uint8_t, std::uint16_t, std::uint64_t -#include // std::basic_istream +#include // std::uint8_t, std::uint16_t, std::uint64_t +#include // std::basic_istream namespace sourcemeta::jsonbinpack { /// @ingroup runtime class SOURCEMETA_JSONBINPACK_RUNTIME_EXPORT InputStream { -public: + public: using Stream = std::basic_istream; InputStream(Stream &input); @@ -25,8 +25,8 @@ class SOURCEMETA_JSONBINPACK_RUNTIME_EXPORT InputStream { auto position() const noexcept -> std::uint64_t; auto seek(const std::uint64_t offset) -> void; // Seek backwards given a relative offset - auto rewind(const std::uint64_t relative_offset, const std::uint64_t position) - -> std::uint64_t; + auto rewind(const std::uint64_t relative_offset, + const std::uint64_t position) -> std::uint64_t; auto get_byte() -> std::uint8_t; // A "word" corresponds to two bytes // See https://stackoverflow.com/questions/28066462/how-many-bits-is-a-word @@ -37,10 +37,10 @@ class SOURCEMETA_JSONBINPACK_RUNTIME_EXPORT InputStream { auto get_string_utf8(const std::uint64_t length) -> sourcemeta::jsontoolkit::JSON::String; -private: + private: Stream &stream; }; -} // namespace sourcemeta::jsonbinpack +} // namespace sourcemeta::jsonbinpack #endif diff --git a/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_output_stream.h b/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_output_stream.h index 7eff978c..f073949b 100644 --- a/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_output_stream.h +++ b/vendor/jsonbinpack/src/runtime/include/sourcemeta/jsonbinpack/runtime_output_stream.h @@ -7,14 +7,14 @@ #include -#include // std::uint8_t, std::uint16_t, std::uint64_t -#include // std::basic_ostream +#include // std::uint8_t, std::uint16_t, std::uint64_t +#include // std::basic_ostream namespace sourcemeta::jsonbinpack { /// @ingroup runtime class SOURCEMETA_JSONBINPACK_RUNTIME_EXPORT OutputStream { -public: + public: using Stream = std::basic_ostream; OutputStream(Stream &output); @@ -31,10 +31,10 @@ class SOURCEMETA_JSONBINPACK_RUNTIME_EXPORT OutputStream { auto put_string_utf8(const sourcemeta::jsontoolkit::JSON::String &string, const std::uint64_t length) -> void; -private: + private: Stream &stream; }; -} // namespace sourcemeta::jsonbinpack +} // namespace sourcemeta::jsonbinpack #endif diff --git a/vendor/jsonbinpack/src/runtime/loader_v1_any.h b/vendor/jsonbinpack/src/runtime/loader_v1_any.h index 9062bbd1..f16d9dd4 100644 --- a/vendor/jsonbinpack/src/runtime/loader_v1_any.h +++ b/vendor/jsonbinpack/src/runtime/loader_v1_any.h @@ -2,12 +2,11 @@ #define SOURCEMETA_JSONBINPACK_RUNTIME_LOADER_V1_ANY_H_ #include - #include -#include // assert -#include // std::move -#include // std::vector +#include // assert +#include // std::move +#include // std::vector namespace sourcemeta::jsonbinpack::v1 { @@ -55,6 +54,6 @@ auto ANY_PACKED_TYPE_TAG_BYTE_PREFIX(const sourcemeta::jsontoolkit::JSON &) return sourcemeta::jsonbinpack::ANY_PACKED_TYPE_TAG_BYTE_PREFIX{}; } -} // namespace sourcemeta::jsonbinpack::v1 +} // namespace sourcemeta::jsonbinpack::v1 #endif diff --git a/vendor/jsonbinpack/src/runtime/loader_v1_array.h b/vendor/jsonbinpack/src/runtime/loader_v1_array.h index 8c0b750e..2d6eafc7 100644 --- a/vendor/jsonbinpack/src/runtime/loader_v1_array.h +++ b/vendor/jsonbinpack/src/runtime/loader_v1_array.h @@ -2,15 +2,14 @@ #define SOURCEMETA_JSONBINPACK_RUNTIME_LOADER_V1_ARRAY_H_ #include - #include -#include // std::transform -#include // assert -#include // std::uint64_t -#include // std::back_inserter -#include // std::make_shared -#include // std::vector +#include // std::transform +#include // assert +#include // std::uint64_t +#include // std::back_inserter +#include // std::make_shared +#include // std::vector namespace sourcemeta::jsonbinpack::v1 { @@ -111,6 +110,6 @@ auto ROOF_TYPED_ARRAY(const sourcemeta::jsontoolkit::JSON &options) std::make_shared(load(array_encoding)), std::move(encodings)}; } -} // namespace sourcemeta::jsonbinpack::v1 +} // namespace sourcemeta::jsonbinpack::v1 #endif diff --git a/vendor/jsonbinpack/src/runtime/loader_v1_integer.h b/vendor/jsonbinpack/src/runtime/loader_v1_integer.h index 32e46199..d33d4b25 100644 --- a/vendor/jsonbinpack/src/runtime/loader_v1_integer.h +++ b/vendor/jsonbinpack/src/runtime/loader_v1_integer.h @@ -2,11 +2,10 @@ #define SOURCEMETA_JSONBINPACK_RUNTIME_LOADER_V1_INTEGER_H_ #include - #include -#include // assert -#include // std::uint64_t +#include // assert +#include // std::uint64_t namespace sourcemeta::jsonbinpack::v1 { @@ -65,6 +64,6 @@ auto ARBITRARY_MULTIPLE_ZIGZAG_VARINT( static_cast(multiplier.to_integer())}; } -} // namespace sourcemeta::jsonbinpack::v1 +} // namespace sourcemeta::jsonbinpack::v1 #endif diff --git a/vendor/jsonbinpack/src/runtime/loader_v1_number.h b/vendor/jsonbinpack/src/runtime/loader_v1_number.h index 50f508f4..46abcb3c 100644 --- a/vendor/jsonbinpack/src/runtime/loader_v1_number.h +++ b/vendor/jsonbinpack/src/runtime/loader_v1_number.h @@ -2,7 +2,6 @@ #define SOURCEMETA_JSONBINPACK_RUNTIME_LOADER_V1_NUMBER_H_ #include - #include namespace sourcemeta::jsonbinpack::v1 { @@ -11,6 +10,6 @@ auto DOUBLE_VARINT_TUPLE(const sourcemeta::jsontoolkit::JSON &) -> Encoding { return sourcemeta::jsonbinpack::DOUBLE_VARINT_TUPLE{}; } -} // namespace sourcemeta::jsonbinpack::v1 +} // namespace sourcemeta::jsonbinpack::v1 #endif diff --git a/vendor/jsonbinpack/src/runtime/loader_v1_string.h b/vendor/jsonbinpack/src/runtime/loader_v1_string.h index c9ff959e..0b47125e 100644 --- a/vendor/jsonbinpack/src/runtime/loader_v1_string.h +++ b/vendor/jsonbinpack/src/runtime/loader_v1_string.h @@ -2,11 +2,10 @@ #define SOURCEMETA_JSONBINPACK_RUNTIME_LOADER_V1_STRING_H_ #include - #include -#include // assert -#include // std::uint64_t +#include // assert +#include // std::uint64_t namespace sourcemeta::jsonbinpack::v1 { @@ -65,6 +64,6 @@ auto PREFIX_VARINT_LENGTH_STRING_SHARED(const sourcemeta::jsontoolkit::JSON &) return sourcemeta::jsonbinpack::PREFIX_VARINT_LENGTH_STRING_SHARED{}; } -} // namespace sourcemeta::jsonbinpack::v1 +} // namespace sourcemeta::jsonbinpack::v1 #endif diff --git a/vendor/jsonbinpack/src/runtime/unreachable.h b/vendor/jsonbinpack/src/runtime/unreachable.h index 21f95159..6366bdfc 100644 --- a/vendor/jsonbinpack/src/runtime/unreachable.h +++ b/vendor/jsonbinpack/src/runtime/unreachable.h @@ -1,7 +1,7 @@ #ifndef SOURCEMETA_JSONBINPACK_RUNTIME_UNREACHABLE_H_ #define SOURCEMETA_JSONBINPACK_RUNTIME_UNREACHABLE_H_ -#include // assert +#include // assert // Until we are on C++23 and can use std::unreachable // See https://en.cppreference.com/w/cpp/utility/unreachable diff --git a/vendor/jsonbinpack/src/runtime/varint.h b/vendor/jsonbinpack/src/runtime/varint.h index 9017a7a0..26f4c6a7 100644 --- a/vendor/jsonbinpack/src/runtime/varint.h +++ b/vendor/jsonbinpack/src/runtime/varint.h @@ -1,10 +1,10 @@ #ifndef SOURCEMETA_JSONBINPACK_RUNTIME_VARINT_H_ #define SOURCEMETA_JSONBINPACK_RUNTIME_VARINT_H_ -#include // assert -#include // std::uint8_t, std::uint64_t -#include // std::basic_istream -#include // std::basic_ostream +#include // assert +#include // std::uint8_t, std::uint64_t +#include // std::basic_istream +#include // std::basic_ostream namespace sourcemeta::jsonbinpack { @@ -55,6 +55,6 @@ auto varint_decode(std::basic_istream &stream) -> std::uint64_t { return result; } -} // namespace sourcemeta::jsonbinpack +} // namespace sourcemeta::jsonbinpack #endif diff --git a/vendor/jsontoolkit/src/json/grammar.h b/vendor/jsontoolkit/src/json/grammar.h index 74533060..5d09932b 100644 --- a/vendor/jsontoolkit/src/json/grammar.h +++ b/vendor/jsontoolkit/src/json/grammar.h @@ -1,7 +1,7 @@ #ifndef SOURCEMETA_JSONTOOLKIT_JSON_GRAMMAR_H_ #define SOURCEMETA_JSONTOOLKIT_JSON_GRAMMAR_H_ -#include // std::basic_string_view +#include // std::basic_string_view namespace sourcemeta::jsontoolkit::internal { @@ -21,9 +21,12 @@ namespace sourcemeta::jsontoolkit::internal { // solidus (U+005C), and the control characters U+0000 to U+001F. // See // https://www.ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf -template static constexpr CharT token_string_quote{'\u0022'}; -template static constexpr CharT token_string_escape{'\u005C'}; -template static constexpr CharT token_string_solidus{'\u002F'}; +template +static constexpr CharT token_string_quote{'\u0022'}; +template +static constexpr CharT token_string_escape{'\u005C'}; +template +static constexpr CharT token_string_solidus{'\u002F'}; // There are two-character escape sequence representations of some characters. // @@ -51,14 +54,18 @@ template static constexpr CharT token_string_escape_unicode{'\u0075'}; // Array -template static constexpr CharT token_array_begin{'\u005B'}; -template static constexpr CharT token_array_end{'\u005D'}; +template +static constexpr CharT token_array_begin{'\u005B'}; +template +static constexpr CharT token_array_end{'\u005D'}; template static constexpr CharT token_array_delimiter{'\u002C'}; // Object -template static constexpr CharT token_object_begin{'\u007B'}; -template static constexpr CharT token_object_end{'\u007D'}; +template +static constexpr CharT token_object_begin{'\u007B'}; +template +static constexpr CharT token_object_end{'\u007D'}; template static constexpr CharT token_object_key_delimiter{'\u003A'}; template @@ -97,18 +104,30 @@ template static constexpr CharT token_number_exponent_uppercase{'\u0045'}; template static constexpr CharT token_number_exponent_lowercase{'\u0065'}; -template static constexpr CharT token_number_plus{'\u002B'}; -template static constexpr CharT token_number_minus{'\u002D'}; -template static constexpr CharT token_number_zero{'\u0030'}; -template static constexpr CharT token_number_one{'\u0031'}; -template static constexpr CharT token_number_two{'\u0032'}; -template static constexpr CharT token_number_three{'\u0033'}; -template static constexpr CharT token_number_four{'\u0034'}; -template static constexpr CharT token_number_five{'\u0035'}; -template static constexpr CharT token_number_six{'\u0036'}; -template static constexpr CharT token_number_seven{'\u0037'}; -template static constexpr CharT token_number_eight{'\u0038'}; -template static constexpr CharT token_number_nine{'\u0039'}; +template +static constexpr CharT token_number_plus{'\u002B'}; +template +static constexpr CharT token_number_minus{'\u002D'}; +template +static constexpr CharT token_number_zero{'\u0030'}; +template +static constexpr CharT token_number_one{'\u0031'}; +template +static constexpr CharT token_number_two{'\u0032'}; +template +static constexpr CharT token_number_three{'\u0033'}; +template +static constexpr CharT token_number_four{'\u0034'}; +template +static constexpr CharT token_number_five{'\u0035'}; +template +static constexpr CharT token_number_six{'\u0036'}; +template +static constexpr CharT token_number_seven{'\u0037'}; +template +static constexpr CharT token_number_eight{'\u0038'}; +template +static constexpr CharT token_number_nine{'\u0039'}; // Whitespace is any sequence of one or more of the following code points: // character tabulation (U+0009), line feed (U+000A), carriage return (U+000D), @@ -124,6 +143,6 @@ static constexpr CharT token_whitespace_carriage_return{'\u000D'}; template static constexpr CharT token_whitespace_space{'\u0020'}; -} // namespace sourcemeta::jsontoolkit::internal +} // namespace sourcemeta::jsontoolkit::internal #endif diff --git a/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json.h b/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json.h index 18c589ef..b0a83119 100644 --- a/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json.h +++ b/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json.h @@ -8,12 +8,12 @@ #include #include -#include // std::uint64_t -#include // std::filesystem -#include // std::basic_ifstream -#include // std::basic_istream -#include // std::basic_ostream -#include // std::basic_string +#include // std::uint64_t +#include // std::filesystem +#include // std::basic_ifstream +#include // std::basic_istream +#include // std::basic_ostream +#include // std::basic_string /// @defgroup json JSON /// @brief A full-blown ECMA-404 implementation with read, write, and iterators @@ -286,6 +286,6 @@ auto operator<<(std::basic_ostream &stream, const JSON::Type type) -> std::basic_ostream &; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_array.h b/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_array.h index e99d0786..f08175cb 100644 --- a/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_array.h +++ b/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_array.h @@ -1,14 +1,15 @@ #ifndef SOURCEMETA_JSONTOOLKIT_JSON_ARRAY_H_ #define SOURCEMETA_JSONTOOLKIT_JSON_ARRAY_H_ -#include // std::initializer_list -#include // std::vector +#include // std::initializer_list +#include // std::vector namespace sourcemeta::jsontoolkit { /// @ingroup json -template class JSONArray { -public: +template +class JSONArray { + public: // Constructors using Container = std::vector>; @@ -84,7 +85,7 @@ template class JSONArray { return this->data.crend(); } -private: + private: friend Value; // Exporting symbols that depends on the standard C++ library is considered // safe. @@ -98,6 +99,6 @@ template class JSONArray { #endif }; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_error.h b/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_error.h index eb7e90c6..96ab63f5 100644 --- a/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_error.h +++ b/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_error.h @@ -5,9 +5,9 @@ #include #endif -#include // std::uint64_t -#include // std::exception -#include // std::filesystem::path +#include // std::uint64_t +#include // std::exception +#include // std::filesystem::path namespace sourcemeta::jsontoolkit { @@ -21,7 +21,7 @@ namespace sourcemeta::jsontoolkit { /// @ingroup json /// This class represents a parsing error class SOURCEMETA_JSONTOOLKIT_JSON_EXPORT ParseError : public std::exception { -public: + public: /// Create a parsing error ParseError(const std::uint64_t line, const std::uint64_t column) : line_{line}, column_{column} {} @@ -38,7 +38,7 @@ class SOURCEMETA_JSONTOOLKIT_JSON_EXPORT ParseError : public std::exception { return column_; } -private: + private: std::uint64_t line_; std::uint64_t column_; }; @@ -46,7 +46,7 @@ class SOURCEMETA_JSONTOOLKIT_JSON_EXPORT ParseError : public std::exception { /// @ingroup json /// This class represents a parsing error occurring from parsing a file class SOURCEMETA_JSONTOOLKIT_JSON_EXPORT FileParseError : public ParseError { -public: + public: /// Create a file parsing error FileParseError(const std::filesystem::path &path, const std::uint64_t line, const std::uint64_t column) @@ -61,7 +61,7 @@ class SOURCEMETA_JSONTOOLKIT_JSON_EXPORT FileParseError : public ParseError { return path_; } -private: + private: std::filesystem::path path_; }; @@ -69,6 +69,6 @@ class SOURCEMETA_JSONTOOLKIT_JSON_EXPORT FileParseError : public ParseError { #pragma warning(default : 4251 4275) #endif -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_object.h b/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_object.h index b9d2b774..65b86ef3 100644 --- a/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_object.h +++ b/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_object.h @@ -1,20 +1,21 @@ #ifndef SOURCEMETA_JSONTOOLKIT_JSON_OBJECT_H_ #define SOURCEMETA_JSONTOOLKIT_JSON_OBJECT_H_ -#include // std::equal_to, std::less -#include // std::initializer_list +#include // std::equal_to, std::less +#include // std::initializer_list #if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ < 12) -#include // std::map +#include // std::map #else -#include // std::unordered_map +#include // std::unordered_map #endif namespace sourcemeta::jsontoolkit { /// @ingroup json -template class JSONObject { -public: +template +class JSONObject { + public: // Constructors // Older versions of GCC don't allow `std::unordered_map` to incomplete @@ -99,7 +100,7 @@ template class JSONObject { /// Get a constant end iterator on the object auto cend() const noexcept -> const_iterator { return this->data.cend(); } -private: + private: friend Value; // Exporting symbols that depends on the standard C++ library is considered // safe. @@ -113,6 +114,6 @@ template class JSONObject { #endif }; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_value.h b/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_value.h index a5e9fb92..b852d306 100644 --- a/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_value.h +++ b/vendor/jsontoolkit/src/json/include/sourcemeta/jsontoolkit/json_value.h @@ -8,26 +8,26 @@ #include #include -#include // std::any_of -#include // assert -#include // std::int64_t, std::uint8_t -#include // std::less, std::reference_wrapper -#include // std::initializer_list -#include // std::allocator -#include // std::optional -#include // std::set -#include // std::basic_istringstream -#include // std::basic_string, std::char_traits -#include // std::basic_string_view -#include // std::enable_if_t, std::is_same_v -#include // std::in_place_type, std::pair -#include // std::variant +#include // std::any_of +#include // assert +#include // std::int64_t, std::uint8_t +#include // std::less, std::reference_wrapper +#include // std::initializer_list +#include // std::allocator +#include // std::optional +#include // std::set +#include // std::basic_istringstream +#include // std::basic_string, std::char_traits +#include // std::basic_string_view +#include // std::enable_if_t, std::is_same_v +#include // std::in_place_type, std::pair +#include // std::variant namespace sourcemeta::jsontoolkit { /// @ingroup json class SOURCEMETA_JSONTOOLKIT_JSON_EXPORT JSON { -public: + public: /// The character type used by the JSON document. using Char = char; /// The character traits used by the JSON document. @@ -37,7 +37,8 @@ class SOURCEMETA_JSONTOOLKIT_JSON_EXPORT JSON { /// The real type used by the JSON document. using Real = double; /// The allocator used by the JSON document. - template using Allocator = std::allocator; + template + using Allocator = std::allocator; /// The string type used by the JSON document. using String = std::basic_string>; /// The array type used by the JSON document. @@ -1356,7 +1357,7 @@ class SOURCEMETA_JSONTOOLKIT_JSON_EXPORT JSON { /// ``` auto into_object() -> void; -private: + private: // Exporting symbols that depends on the standard C++ library is considered // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN @@ -1369,6 +1370,6 @@ class SOURCEMETA_JSONTOOLKIT_JSON_EXPORT JSON { #endif }; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/json/parser.h b/vendor/jsontoolkit/src/json/parser.h index 88253c62..71941356 100644 --- a/vendor/jsontoolkit/src/json/parser.h +++ b/vendor/jsontoolkit/src/json/parser.h @@ -1,21 +1,21 @@ #ifndef SOURCEMETA_JSONTOOLKIT_JSON_PARSER_H_ #define SOURCEMETA_JSONTOOLKIT_JSON_PARSER_H_ -#include "grammar.h" - #include #include -#include // assert -#include // std::isxdigit -#include // std::uint64_t -#include // std::reference_wrapper -#include // std::basic_istream -#include // std::optional -#include // std::basic_ostringstream, std::basic_istringstream -#include // std::stack -#include // std::out_of_range -#include // std::basic_string, std::stol, std::stod, std::stoul +#include // assert +#include // std::isxdigit +#include // std::uint64_t +#include // std::reference_wrapper +#include // std::basic_istream +#include // std::optional +#include // std::basic_ostringstream, std::basic_istringstream +#include // std::stack +#include // std::out_of_range +#include // std::basic_string, std::stol, std::stod, std::stoul + +#include "grammar.h" namespace sourcemeta::jsontoolkit::internal { @@ -643,7 +643,7 @@ auto parse_number( } } -} // namespace sourcemeta::jsontoolkit::internal +} // namespace sourcemeta::jsontoolkit::internal // We use "goto" to avoid recursion // NOLINTBEGIN(cppcoreguidelines-avoid-goto) @@ -1063,6 +1063,6 @@ auto internal_parse(const std::basic_string -#include // std::transform, std::sort -#include // std::setprecision -#include // std::noshowpoint, std::fixed -#include // std::next, std::cbegin, std::cend, std::back_inserter -#include // std::basic_ostream -#include // std::to_string +#include // std::transform, std::sort +#include // std::setprecision +#include // std::noshowpoint, std::fixed +#include // std::next, std::cbegin, std::cend, std::back_inserter +#include // std::basic_ostream +#include // std::to_string + +#include "grammar.h" namespace sourcemeta::jsontoolkit::internal { template @@ -21,7 +21,7 @@ auto indent(std::basic_ostream &stream, stream.put(internal::token_whitespace_space); } } -} // namespace sourcemeta::jsontoolkit::internal +} // namespace sourcemeta::jsontoolkit::internal namespace sourcemeta::jsontoolkit { @@ -593,6 +593,6 @@ auto prettify( } } -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonl/grammar.h b/vendor/jsontoolkit/src/jsonl/grammar.h index fc74641c..89b1d2e0 100644 --- a/vendor/jsontoolkit/src/jsonl/grammar.h +++ b/vendor/jsontoolkit/src/jsonl/grammar.h @@ -17,6 +17,6 @@ static constexpr CharT token_jsonl_whitespace_carriage_return{'\u000D'}; template static constexpr CharT token_jsonl_whitespace_space{'\u0020'}; -} // namespace sourcemeta::jsontoolkit::internal +} // namespace sourcemeta::jsontoolkit::internal #endif diff --git a/vendor/jsontoolkit/src/jsonl/include/sourcemeta/jsontoolkit/jsonl.h b/vendor/jsontoolkit/src/jsonl/include/sourcemeta/jsontoolkit/jsonl.h index d54a60e4..69448f1f 100644 --- a/vendor/jsontoolkit/src/jsonl/include/sourcemeta/jsontoolkit/jsonl.h +++ b/vendor/jsontoolkit/src/jsonl/include/sourcemeta/jsontoolkit/jsonl.h @@ -8,7 +8,7 @@ #include #include -#include // std::basic_istream +#include // std::basic_istream /// @defgroup jsonl JSONL /// @brief A JSON Lines implementation with iterators support. @@ -23,7 +23,7 @@ namespace sourcemeta::jsontoolkit { /// @ingroup jsonl class SOURCEMETA_JSONTOOLKIT_JSONL_EXPORT JSONL { -public: + public: /// Parse a JSONL document from a C++ standard input stream using a standard /// read-only C++ forward iterator interface. For example, you can parse a /// JSONL document and prettify each of its rows as follows: @@ -53,10 +53,10 @@ class SOURCEMETA_JSONTOOLKIT_JSONL_EXPORT JSONL { auto cbegin() -> const_iterator; auto cend() -> const_iterator; -private: + private: std::basic_istream &data; }; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonl/include/sourcemeta/jsontoolkit/jsonl_iterator.h b/vendor/jsontoolkit/src/jsonl/include/sourcemeta/jsontoolkit/jsonl_iterator.h index 41ef4ab2..1b4fa3a8 100644 --- a/vendor/jsontoolkit/src/jsonl/include/sourcemeta/jsontoolkit/jsonl_iterator.h +++ b/vendor/jsontoolkit/src/jsonl/include/sourcemeta/jsontoolkit/jsonl_iterator.h @@ -7,18 +7,18 @@ #include -#include // std::ptrdiff_t -#include // std::uint64_t -#include // std::basic_istream -#include // std::forward_iterator_tag -#include // std::unique_ptr +#include // std::ptrdiff_t +#include // std::uint64_t +#include // std::basic_istream +#include // std::forward_iterator_tag +#include // std::unique_ptr namespace sourcemeta::jsontoolkit { /// @ingroup jsonl /// A forward iterator to parse JSON documents out of a JSON Lines stream. class SOURCEMETA_JSONTOOLKIT_JSONL_EXPORT ConstJSONLIterator { -public: + public: ConstJSONLIterator(std::basic_istream *stream); ~ConstJSONLIterator(); using iterator_category = std::forward_iterator_tag; @@ -31,11 +31,10 @@ class SOURCEMETA_JSONTOOLKIT_JSONL_EXPORT ConstJSONLIterator { auto operator->() const -> pointer; auto operator++() -> ConstJSONLIterator &; - SOURCEMETA_JSONTOOLKIT_JSONL_EXPORT friend auto - operator==(const ConstJSONLIterator &left, const ConstJSONLIterator &right) - -> bool; + SOURCEMETA_JSONTOOLKIT_JSONL_EXPORT friend auto operator==( + const ConstJSONLIterator &left, const ConstJSONLIterator &right) -> bool; -private: + private: std::uint64_t line{1}; std::uint64_t column{0}; auto parse_next() -> JSON; @@ -56,6 +55,6 @@ class SOURCEMETA_JSONTOOLKIT_JSONL_EXPORT ConstJSONLIterator { #endif }; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonpointer/grammar.h b/vendor/jsontoolkit/src/jsonpointer/grammar.h index 7aff1f87..ae748c1c 100644 --- a/vendor/jsontoolkit/src/jsonpointer/grammar.h +++ b/vendor/jsontoolkit/src/jsonpointer/grammar.h @@ -2,11 +2,16 @@ #define SOURCEMETA_JSONTOOLKIT_JSONPOINTER_GRAMMAR_H_ namespace sourcemeta::jsontoolkit::internal { -template static constexpr CharT token_pointer_slash{'\u002F'}; -template static constexpr CharT token_pointer_tilde{'\u007E'}; -template static constexpr CharT token_pointer_zero{'\u0030'}; -template static constexpr CharT token_pointer_one{'\u0031'}; -template static constexpr CharT token_pointer_quote{'\u0022'}; +template +static constexpr CharT token_pointer_slash{'\u002F'}; +template +static constexpr CharT token_pointer_tilde{'\u007E'}; +template +static constexpr CharT token_pointer_zero{'\u0030'}; +template +static constexpr CharT token_pointer_one{'\u0031'}; +template +static constexpr CharT token_pointer_quote{'\u0022'}; template static constexpr CharT token_pointer_escape_unicode{'\u0075'}; template @@ -42,6 +47,6 @@ template static constexpr CharT token_pointer_number_eight{'\u0038'}; template static constexpr CharT token_pointer_number_nine{'\u0039'}; -} // namespace sourcemeta::jsontoolkit::internal +} // namespace sourcemeta::jsontoolkit::internal #endif diff --git a/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer.h b/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer.h index c79eebea..9d775713 100644 --- a/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer.h +++ b/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer.h @@ -13,11 +13,11 @@ #include #include -#include // std::reference_wrapper -#include // std::allocator -#include // std::optional -#include // std::basic_ostream -#include // std::basic_string +#include // std::reference_wrapper +#include // std::allocator +#include // std::optional +#include // std::basic_ostream +#include // std::basic_string /// @defgroup jsonpointer JSON Pointer /// @brief An growing implementation of RFC 6901 JSON Pointer. @@ -484,6 +484,6 @@ using PointerWalker = GenericPointerWalker; /// ``` using SubPointerWalker = GenericSubPointerWalker; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_error.h b/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_error.h index 29b9812f..5aa9d3b3 100644 --- a/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_error.h +++ b/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_error.h @@ -7,7 +7,7 @@ #include -#include // std::uint64_t +#include // std::uint64_t namespace sourcemeta::jsontoolkit { @@ -15,15 +15,15 @@ namespace sourcemeta::jsontoolkit { /// This class represents a parsing error. class SOURCEMETA_JSONTOOLKIT_JSONPOINTER_EXPORT PointerParseError : public ParseError { -public: + public: /// Create a parsing error PointerParseError(const std::uint64_t column) : ParseError{1, column} {} - [[nodiscard]] auto what() const noexcept -> const char * override { + [[nodiscard]] auto what() const noexcept -> const char* override { return "The input is not a valid JSON Pointer"; } }; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_pointer.h b/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_pointer.h index e6a22c9c..ebf98460 100644 --- a/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_pointer.h +++ b/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_pointer.h @@ -3,22 +3,23 @@ #include -#include // std::copy, std::equal -#include // assert -#include // std::reference_wrapper -#include // std::initializer_list -#include // std::advance, std::back_inserter -#include // std::basic_ostringstream -#include // std::runtime_error -#include // std::enable_if_t, std::is_same_v -#include // std::move -#include // std::vector +#include // std::copy, std::equal +#include // assert +#include // std::reference_wrapper +#include // std::initializer_list +#include // std::advance, std::back_inserter +#include // std::basic_ostringstream +#include // std::runtime_error +#include // std::enable_if_t, std::is_same_v +#include // std::move +#include // std::vector namespace sourcemeta::jsontoolkit { /// @ingroup jsonpointer -template class GenericPointer { -public: +template +class GenericPointer { + public: using Token = GenericToken; using Value = typename Token::Value; using Container = std::vector; @@ -170,7 +171,8 @@ template class GenericPointer { /// assert(!pointer.empty()); /// assert(token.is_property()); /// ``` - template auto emplace_back(Args &&...args) -> reference { + template + auto emplace_back(Args &&...args) -> reference { return this->data.emplace_back(args...); } @@ -577,10 +579,10 @@ template class GenericPointer { return this->data < other.data; } -private: + private: Container data; }; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_subpointer_walker.h b/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_subpointer_walker.h index 8b953d9a..a1e49afa 100644 --- a/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_subpointer_walker.h +++ b/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_subpointer_walker.h @@ -1,17 +1,18 @@ #ifndef SOURCEMETA_JSONTOOLKIT_JSONPOINTER_SUBPOINTER_WALKER_H_ #define SOURCEMETA_JSONTOOLKIT_JSONPOINTER_SUBPOINTER_WALKER_H_ -#include // std::ptrdiff_t -#include // std::forward_iterator_tag - #include +#include // std::ptrdiff_t +#include // std::forward_iterator_tag + namespace sourcemeta::jsontoolkit { /// @ingroup jsonpointer /// A forward iterator to traverse all subpointers of a given JSON Pointer. -template class GenericSubPointerIterator { -public: +template +class GenericSubPointerIterator { + public: using iterator_category = std::forward_iterator_tag; using difference_type = std::ptrdiff_t; using value_type = PointerT; @@ -45,14 +46,15 @@ template class GenericSubPointerIterator { (left.data && right.data && *(left.data) == *(right.data)); }; -private: + private: pointer data; }; /// @ingroup jsonpointer /// A walker to traverse all subpointers of a given JSON Pointer. -template class GenericSubPointerWalker { -public: +template +class GenericSubPointerWalker { + public: using const_iterator = GenericSubPointerIterator; GenericSubPointerWalker(const PointerT &pointer) : data{pointer} {} @@ -61,10 +63,10 @@ template class GenericSubPointerWalker { const_iterator cbegin() { return {&this->data}; } const_iterator cend() { return {nullptr}; } -private: + private: PointerT data; }; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_token.h b/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_token.h index b763eb0c..12985203 100644 --- a/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_token.h +++ b/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_token.h @@ -3,15 +3,16 @@ #include -#include // assert -#include // std::in_place_type -#include // std::variant, std::holds_alternative, std::get +#include // assert +#include // std::in_place_type +#include // std::variant, std::holds_alternative, std::get namespace sourcemeta::jsontoolkit { /// @ingroup jsonpointer -template class GenericToken { -public: +template +class GenericToken { + public: using Value = JSON; using Property = PropertyT; using Index = typename Value::Array::size_type; @@ -236,10 +237,10 @@ template class GenericToken { return this->to_index() < other.to_index(); } -private: + private: std::variant data; }; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_walker.h b/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_walker.h index 08da9061..1dbb6796 100644 --- a/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_walker.h +++ b/vendor/jsontoolkit/src/jsonpointer/include/sourcemeta/jsontoolkit/jsonpointer_walker.h @@ -1,21 +1,22 @@ #ifndef SOURCEMETA_JSONTOOLKIT_JSONPOINTER_WALKER_H_ #define SOURCEMETA_JSONTOOLKIT_JSONPOINTER_WALKER_H_ -#include // std::vector - #include #include +#include // std::vector + namespace sourcemeta::jsontoolkit { /// @ingroup jsonpointer /// A walker to get every JSON Pointer in a JSON document. Note that no specific /// ordering is guaranteed. If you expect any ordering, sort afterwards. -template class GenericPointerWalker { -private: +template +class GenericPointerWalker { + private: using internal = typename std::vector; -public: + public: GenericPointerWalker(const JSON &document) { this->walk(document, {}); } using const_iterator = typename internal::const_iterator; @@ -24,7 +25,7 @@ template class GenericPointerWalker { auto cbegin() const -> const_iterator { return this->pointers.cbegin(); }; auto cend() const -> const_iterator { return this->pointers.cend(); }; -private: + private: auto walk(const JSON &document, const PointerT &pointer) -> void { this->pointers.push_back(pointer); if (document.is_array()) { @@ -54,6 +55,6 @@ template class GenericPointerWalker { #endif }; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonpointer/parser.h b/vendor/jsontoolkit/src/jsonpointer/parser.h index 6db2196f..73ae4156 100644 --- a/vendor/jsontoolkit/src/jsonpointer/parser.h +++ b/vendor/jsontoolkit/src/jsonpointer/parser.h @@ -1,31 +1,30 @@ #ifndef SOURCEMETA_JSONTOOLKIT_JSONPOINTER_PARSER_H_ #define SOURCEMETA_JSONTOOLKIT_JSONPOINTER_PARSER_H_ -#include "grammar.h" - #include #include -#include // std::basic_istream -#include // std::basic_stringstream -#include // std::out_of_range -#include // std::stoi +#include // std::basic_istream +#include // std::basic_stringstream +#include // std::out_of_range +#include // std::stoi + +#include "grammar.h" namespace sourcemeta::jsontoolkit::internal { template typename Allocator> -inline auto -reset(std::basic_stringstream> &stream) - -> void { +inline auto reset( + std::basic_stringstream> &stream) -> void { stream.str(""); stream.clear(); } template typename Allocator> -inline auto -parse_index(std::basic_stringstream> &stream, - const std::uint64_t column) -> decltype(auto) { +inline auto parse_index( + std::basic_stringstream> &stream, + const std::uint64_t column) -> decltype(auto) { try { return std::stoul(stream.str()); } catch (const std::out_of_range &) { @@ -33,7 +32,7 @@ parse_index(std::basic_stringstream> &stream, } } -} // namespace sourcemeta::jsontoolkit::internal +} // namespace sourcemeta::jsontoolkit::internal // We use "goto" for performance reasons // NOLINTBEGIN(cppcoreguidelines-avoid-goto) @@ -209,6 +208,6 @@ auto parse_pointer(std::basic_istream &stream) // NOLINTEND(cppcoreguidelines-avoid-goto) -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonpointer/stringify.h b/vendor/jsontoolkit/src/jsonpointer/stringify.h index 937a8996..446b3ed3 100644 --- a/vendor/jsontoolkit/src/jsonpointer/stringify.h +++ b/vendor/jsontoolkit/src/jsonpointer/stringify.h @@ -1,21 +1,20 @@ #ifndef SOURCEMETA_JSONTOOLKIT_JSONPOINTER_STRINGIFY_H_ #define SOURCEMETA_JSONTOOLKIT_JSONPOINTER_STRINGIFY_H_ -#include "grammar.h" - #include #include #include -#include // std::basic_ostream -#include // std::basic_istringstream -#include // std::to_string, std::basic_string +#include // std::basic_ostream +#include // std::basic_istringstream +#include // std::to_string, std::basic_string + +#include "grammar.h" namespace sourcemeta::jsontoolkit::internal { -inline auto -write_character(std::basic_ostream &stream, - const JSON::Char character, const bool perform_uri_escaping) - -> void { +inline auto write_character( + std::basic_ostream &stream, + const JSON::Char character, const bool perform_uri_escaping) -> void { // The dollar sign does not need to be encoded in URI fragments // See `fragment` in https://www.rfc-editor.org/rfc/rfc3986#appendix-A if (perform_uri_escaping && character != '$') { @@ -28,7 +27,7 @@ write_character(std::basic_ostream &stream, stream.put(character); } } -} // namespace sourcemeta::jsontoolkit::internal +} // namespace sourcemeta::jsontoolkit::internal namespace sourcemeta::jsontoolkit { @@ -435,6 +434,6 @@ auto stringify(const PointerT &pointer, } } -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema.h b/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema.h index 9a981943..dc3e4488 100644 --- a/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema.h +++ b/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema.h @@ -13,9 +13,9 @@ #include #include -#include // std::map -#include // std::optional -#include // std::string +#include // std::map +#include // std::optional +#include // std::string /// @defgroup jsonschema JSON Schema /// @brief A set of JSON Schema utilities across draft versions. @@ -293,8 +293,8 @@ auto vocabularies(const JSON &schema, const SchemaResolver &resolver, /// dialect and dialect URI. SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT auto vocabularies(const SchemaResolver &resolver, - const std::string &base_dialect, const std::string &dialect) - -> std::map; + const std::string &base_dialect, + const std::string &dialect) -> std::map; /// @ingroup jsonschema /// @@ -316,9 +316,9 @@ auto vocabularies(const SchemaResolver &resolver, /// std::cout << stream.str() << std::endl; /// ``` SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT -auto schema_format_compare(const JSON::String &left, const JSON::String &right) - -> bool; +auto schema_format_compare(const JSON::String &left, + const JSON::String &right) -> bool; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_anchor.h b/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_anchor.h index aaf565bd..765f923d 100644 --- a/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_anchor.h +++ b/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_anchor.h @@ -8,10 +8,10 @@ #include #include -#include // std::uint8_t -#include // std::map -#include // std::optional -#include // std::string +#include // std::uint8_t +#include // std::map +#include // std::optional +#include // std::string namespace sourcemeta::jsontoolkit { @@ -59,6 +59,6 @@ auto anchors(const JSON &schema, const std::map &vocabularies) -> std::map; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_bundle.h b/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_bundle.h index 345510bc..95d2241d 100644 --- a/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_bundle.h +++ b/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_bundle.h @@ -9,9 +9,9 @@ #include #include -#include // std::uint8_t -#include // std::optional, std::nullopt -#include // std::string +#include // std::uint8_t +#include // std::optional, std::nullopt +#include // std::string namespace sourcemeta::jsontoolkit { @@ -145,6 +145,6 @@ auto bundle(const sourcemeta::jsontoolkit::JSON &schema, const std::optional &default_dialect = std::nullopt) -> sourcemeta::jsontoolkit::JSON; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_error.h b/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_error.h index a2ca383a..0fa80aab 100644 --- a/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_error.h +++ b/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_error.h @@ -8,9 +8,9 @@ #include #include -#include // std::exception -#include // std::string -#include // std::move +#include // std::exception +#include // std::string +#include // std::move namespace sourcemeta::jsontoolkit { @@ -25,13 +25,13 @@ namespace sourcemeta::jsontoolkit { /// An error that represents a general schema error event class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaError : public std::exception { -public: + public: SchemaError(std::string message) : message_{std::move(message)} {} [[nodiscard]] auto what() const noexcept -> const char * override { return this->message_.c_str(); } -private: + private: std::string message_; }; @@ -39,7 +39,7 @@ class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaError /// An error that represents a schema resolution failure event class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaResolutionError : public std::exception { -public: + public: SchemaResolutionError(std::string identifier, std::string message) : identifier_{std::move(identifier)}, message_{std::move(message)} {} [[nodiscard]] auto what() const noexcept -> const char * override { @@ -50,7 +50,7 @@ class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaResolutionError return this->identifier_; } -private: + private: std::string identifier_; std::string message_; }; @@ -59,7 +59,7 @@ class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaResolutionError /// An error that represents a schema vocabulary error class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaVocabularyError : public std::exception { -public: + public: SchemaVocabularyError(std::string uri, std::string message) : uri_{std::move(uri)}, message_{std::move(message)} {} [[nodiscard]] auto what() const noexcept -> const char * override { @@ -70,7 +70,7 @@ class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaVocabularyError return this->uri_; } -private: + private: std::string uri_; std::string message_; }; @@ -79,10 +79,11 @@ class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaVocabularyError /// An error that represents a schema resolution failure event class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaReferenceError : public std::exception { -public: + public: SchemaReferenceError(std::string identifier, const Pointer &schema_location, std::string message) - : identifier_{std::move(identifier)}, schema_location_{schema_location}, + : identifier_{std::move(identifier)}, + schema_location_{schema_location}, message_{std::move(message)} {} [[nodiscard]] auto what() const noexcept -> const char * override { return this->message_.c_str(); @@ -96,7 +97,7 @@ class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaReferenceError return this->schema_location_; } -private: + private: std::string identifier_; Pointer schema_location_; std::string message_; @@ -106,6 +107,6 @@ class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaReferenceError #pragma warning(default : 4251 4275) #endif -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_reference.h b/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_reference.h index 4eac5268..9119ef33 100644 --- a/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_reference.h +++ b/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_reference.h @@ -9,12 +9,12 @@ #include #include -#include // std::uint8_t -#include // std::map -#include // std::optional -#include // std::string -#include // std::tuple -#include // std::pair +#include // std::uint8_t +#include // std::map +#include // std::optional +#include // std::string +#include // std::tuple +#include // std::pair namespace sourcemeta::jsontoolkit { @@ -160,6 +160,6 @@ auto frame(const JSON &schema, ReferenceFrame &frame, ReferenceMap &references, const std::optional &default_dialect = std::nullopt, const std::optional &default_id = std::nullopt) -> void; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_resolver.h b/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_resolver.h index 9bd3cd09..804f79cf 100644 --- a/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_resolver.h +++ b/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_resolver.h @@ -7,10 +7,10 @@ #include -#include // std::function -#include // std::map -#include // std::optional -#include // std::string_view +#include // std::function +#include // std::map +#include // std::optional +#include // std::string_view namespace sourcemeta::jsontoolkit { @@ -63,7 +63,7 @@ auto official_resolver(std::string_view identifier) /// assert(resolver("https://www.example.com").has_value()); /// ``` class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT MapSchemaResolver { -public: + public: /// Construct an empty map resolver. If you don't add schemas to it, it will /// always resolve to nothing MapSchemaResolver(); @@ -80,7 +80,7 @@ class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT MapSchemaResolver { /// Attempt to resolve a schema auto operator()(std::string_view identifier) const -> std::optional; -private: + private: // Exporting symbols that depends on the standard C++ library is considered // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN @@ -94,6 +94,6 @@ class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT MapSchemaResolver { #endif }; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_walker.h b/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_walker.h index e271a41f..00b5cfd2 100644 --- a/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_walker.h +++ b/vendor/jsontoolkit/src/jsonschema/include/sourcemeta/jsontoolkit/jsonschema_walker.h @@ -9,14 +9,14 @@ #include #include -#include // std::uint8_t -#include // std::function -#include // std::map -#include // std::optional -#include // std::set -#include // std::string -#include // std::string_view -#include // std::vector +#include // std::uint8_t +#include // std::function +#include // std::map +#include // std::optional +#include // std::set +#include // std::string +#include // std::string_view +#include // std::vector namespace sourcemeta::jsontoolkit { @@ -146,10 +146,10 @@ struct SchemaIteratorEntry { /// } /// ``` class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaIterator { -private: + private: using internal = typename std::vector; -public: + public: using const_iterator = typename internal::const_iterator; SchemaIterator( const JSON &input, const SchemaWalker &walker, @@ -160,7 +160,7 @@ class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaIterator { auto cbegin() const -> const_iterator; auto cend() const -> const_iterator; -private: + private: // Exporting symbols that depends on the standard C++ library is considered // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN @@ -213,10 +213,10 @@ class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaIterator { /// } /// ``` class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaIteratorFlat { -private: + private: using internal = typename std::vector; -public: + public: using const_iterator = typename internal::const_iterator; SchemaIteratorFlat( const JSON &input, const SchemaWalker &walker, @@ -227,7 +227,7 @@ class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaIteratorFlat { auto cbegin() const -> const_iterator; auto cend() const -> const_iterator; -private: + private: // Exporting symbols that depends on the standard C++ library is considered // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN @@ -309,10 +309,10 @@ auto SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT keyword_priority( /// } /// ``` class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaKeywordIterator { -private: + private: using internal = typename std::vector; -public: + public: using const_iterator = typename internal::const_iterator; SchemaKeywordIterator( const JSON &input, const SchemaWalker &walker, @@ -323,7 +323,7 @@ class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaKeywordIterator { auto cbegin() const -> const_iterator; auto cend() const -> const_iterator; -private: + private: // Exporting symbols that depends on the standard C++ library is considered // safe. // https://learn.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4275?view=msvc-170&redirectedfrom=MSDN @@ -336,6 +336,6 @@ class SOURCEMETA_JSONTOOLKIT_JSONSCHEMA_EXPORT SchemaKeywordIterator { #endif }; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/uri/include/sourcemeta/jsontoolkit/uri.h b/vendor/jsontoolkit/src/uri/include/sourcemeta/jsontoolkit/uri.h index be76d729..9f6fd2ee 100644 --- a/vendor/jsontoolkit/src/uri/include/sourcemeta/jsontoolkit/uri.h +++ b/vendor/jsontoolkit/src/uri/include/sourcemeta/jsontoolkit/uri.h @@ -7,15 +7,15 @@ #include -#include // std::uint32_t -#include // std::istream -#include // std::unique_ptr -#include // std::optional -#include // std::ostream -#include // std::span -#include // std::string -#include // std::string_view -#include // std::vector +#include // std::uint32_t +#include // std::istream +#include // std::unique_ptr +#include // std::optional +#include // std::ostream +#include // std::span +#include // std::string +#include // std::string_view +#include // std::vector /// @defgroup uri URI /// @brief A RFC 3986 URI implementation based on `uriparser`. @@ -30,7 +30,7 @@ namespace sourcemeta::jsontoolkit { /// @ingroup uri class SOURCEMETA_JSONTOOLKIT_URI_EXPORT URI { -public: + public: // TODO: Add a constructor that takes a C++ input stream /// This constructor creates a URI from a string type. For example: @@ -381,7 +381,7 @@ class SOURCEMETA_JSONTOOLKIT_URI_EXPORT URI { /// colon. See https://tools.ietf.org/html/rfc3986#section-3.2.1 [[nodiscard]] auto userinfo() const -> std::optional; -private: + private: bool parsed = false; auto parse() -> void; @@ -413,6 +413,6 @@ class SOURCEMETA_JSONTOOLKIT_URI_EXPORT URI { #endif }; -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/src/uri/include/sourcemeta/jsontoolkit/uri_error.h b/vendor/jsontoolkit/src/uri/include/sourcemeta/jsontoolkit/uri_error.h index d0313870..843810de 100644 --- a/vendor/jsontoolkit/src/uri/include/sourcemeta/jsontoolkit/uri_error.h +++ b/vendor/jsontoolkit/src/uri/include/sourcemeta/jsontoolkit/uri_error.h @@ -5,10 +5,10 @@ #include #endif -#include // std::uint64_t -#include // std::exception -#include // std::string -#include // std::string +#include // std::uint64_t +#include // std::exception +#include // std::string +#include // std::string namespace sourcemeta::jsontoolkit { @@ -22,10 +22,10 @@ namespace sourcemeta::jsontoolkit { /// @ingroup uri /// An error that represents a URI parsing failure class SOURCEMETA_JSONTOOLKIT_URI_EXPORT URIParseError : public std::exception { -public: + public: URIParseError(const std::uint64_t column) : column_{column} {} - [[nodiscard]] auto what() const noexcept -> const char * override { + [[nodiscard]] auto what() const noexcept -> const char* override { return "The input is not a valid URI"; } @@ -34,20 +34,20 @@ class SOURCEMETA_JSONTOOLKIT_URI_EXPORT URIParseError : public std::exception { return column_; } -private: + private: std::uint64_t column_; }; /// @ingroup uri /// An error that represents a general URI error event class SOURCEMETA_JSONTOOLKIT_URI_EXPORT URIError : public std::exception { -public: + public: URIError(std::string message) : message_{std::move(message)} {} - [[nodiscard]] auto what() const noexcept -> const char * override { + [[nodiscard]] auto what() const noexcept -> const char* override { return this->message_.c_str(); } -private: + private: std::string message_; }; @@ -55,6 +55,6 @@ class SOURCEMETA_JSONTOOLKIT_URI_EXPORT URIError : public std::exception { #pragma warning(default : 4251 4275) #endif -} // namespace sourcemeta::jsontoolkit +} // namespace sourcemeta::jsontoolkit #endif diff --git a/vendor/jsontoolkit/vendor/uriparser/include/uriparser/Uri.h b/vendor/jsontoolkit/vendor/uriparser/include/uriparser/Uri.h index b80ac6ca..d6f72cb3 100644 --- a/vendor/jsontoolkit/vendor/uriparser/include/uriparser/Uri.h +++ b/vendor/jsontoolkit/vendor/uriparser/include/uriparser/Uri.h @@ -44,49 +44,44 @@ * NOTE: This header includes itself twice. */ -#if (defined(URI_PASS_ANSI) && !defined(URI_H_ANSI)) \ - || (defined(URI_PASS_UNICODE) && !defined(URI_H_UNICODE)) \ - || (!defined(URI_PASS_ANSI) && !defined(URI_PASS_UNICODE)) +#if (defined(URI_PASS_ANSI) && !defined(URI_H_ANSI)) || \ + (defined(URI_PASS_UNICODE) && !defined(URI_H_UNICODE)) || \ + (!defined(URI_PASS_ANSI) && !defined(URI_PASS_UNICODE)) /* What encodings are enabled? */ #include "UriDefsConfig.h" #if (!defined(URI_PASS_ANSI) && !defined(URI_PASS_UNICODE)) /* Include SELF twice */ -# ifdef URI_ENABLE_ANSI -# define URI_PASS_ANSI 1 -# include "Uri.h" -# undef URI_PASS_ANSI -# endif -# ifdef URI_ENABLE_UNICODE -# define URI_PASS_UNICODE 1 -# include "Uri.h" -# undef URI_PASS_UNICODE -# endif +#ifdef URI_ENABLE_ANSI +#define URI_PASS_ANSI 1 +#include "Uri.h" +#undef URI_PASS_ANSI +#endif +#ifdef URI_ENABLE_UNICODE +#define URI_PASS_UNICODE 1 +#include "Uri.h" +#undef URI_PASS_UNICODE +#endif /* Only one pass for each encoding */ -#elif (defined(URI_PASS_ANSI) && !defined(URI_H_ANSI) \ - && defined(URI_ENABLE_ANSI)) || (defined(URI_PASS_UNICODE) \ - && !defined(URI_H_UNICODE) && defined(URI_ENABLE_UNICODE)) -# ifdef URI_PASS_ANSI -# define URI_H_ANSI 1 -# include "UriDefsAnsi.h" -# else -# define URI_H_UNICODE 1 -# include "UriDefsUnicode.h" -# endif - - +#elif (defined(URI_PASS_ANSI) && !defined(URI_H_ANSI) && \ + defined(URI_ENABLE_ANSI)) || \ + (defined(URI_PASS_UNICODE) && !defined(URI_H_UNICODE) && \ + defined(URI_ENABLE_UNICODE)) +#ifdef URI_PASS_ANSI +#define URI_H_ANSI 1 +#include "UriDefsAnsi.h" +#else +#define URI_H_UNICODE 1 +#include "UriDefsUnicode.h" +#endif #ifdef __cplusplus extern "C" { #endif - - #ifndef URI_DOXYGEN -# include "UriBase.h" +#include "UriBase.h" #endif - - /** * Specifies a range of characters within a string. * The range includes all characters from first @@ -99,12 +94,11 @@ extern "C" { * @since 0.3.0 */ typedef struct URI_TYPE(TextRangeStruct) { - const URI_CHAR * first; /**< Pointer to first character */ - const URI_CHAR * afterLast; /**< Pointer to character after the last one still in */ + const URI_CHAR* first; /**< Pointer to first character */ + const URI_CHAR* + afterLast; /**< Pointer to character after the last one still in */ } URI_TYPE(TextRange); /**< @copydoc UriTextRangeStructA */ - - /** * Represents a path segment within a %URI path. * More precisely it is a node in a linked @@ -114,14 +108,14 @@ typedef struct URI_TYPE(TextRangeStruct) { * @since 0.3.0 */ typedef struct URI_TYPE(PathSegmentStruct) { - URI_TYPE(TextRange) text; /**< Path segment name */ - struct URI_TYPE(PathSegmentStruct) * next; /**< Pointer to the next path segment in the list, can be NULL if last already */ + URI_TYPE(TextRange) text; /**< Path segment name */ + struct URI_TYPE(PathSegmentStruct) * + next; /**< Pointer to the next path segment in the list, can be NULL if + last already */ - void * reserved; /**< Reserved to the parser */ + void* reserved; /**< Reserved to the parser */ } URI_TYPE(PathSegment); /**< @copydoc UriPathSegmentStructA */ - - /** * Holds structured host information. * This is either a IPv4, IPv6, plain @@ -132,12 +126,10 @@ typedef struct URI_TYPE(PathSegmentStruct) { * @since 0.3.0 */ typedef struct URI_TYPE(HostDataStruct) { - UriIp4 * ip4; /**< IPv4 address */ - UriIp6 * ip6; /**< IPv6 address */ - URI_TYPE(TextRange) ipFuture; /**< IPvFuture address */ -} URI_TYPE(HostData); /**< @copydoc UriHostDataStructA */ - - + UriIp4* ip4; /**< IPv4 address */ + UriIp6* ip6; /**< IPv6 address */ + URI_TYPE(TextRange) ipFuture; /**< IPvFuture address */ +} URI_TYPE(HostData); /**< @copydoc UriHostDataStructA */ /** * Represents an RFC 3986 %URI. @@ -149,23 +141,24 @@ typedef struct URI_TYPE(HostDataStruct) { * @since 0.3.0 */ typedef struct URI_TYPE(UriStruct) { - URI_TYPE(TextRange) scheme; /**< Scheme (e.g. "http") */ - URI_TYPE(TextRange) userInfo; /**< User info (e.g. "user:pass") */ - URI_TYPE(TextRange) hostText; /**< Host text (set for all hosts, excluding square brackets) */ - URI_TYPE(HostData) hostData; /**< Structured host type specific data */ - URI_TYPE(TextRange) portText; /**< Port (e.g. "80") */ - URI_TYPE(PathSegment) * pathHead; /**< Head of a linked list of path segments */ - URI_TYPE(PathSegment) * pathTail; /**< Tail of the list behind pathHead */ - URI_TYPE(TextRange) query; /**< Query without leading "?" */ - URI_TYPE(TextRange) fragment; /**< Query without leading "#" */ - UriBool absolutePath; /**< Absolute path flag, distincting "a" and "/a"; - always URI_FALSE for URIs with host */ - UriBool owner; /**< Memory owner flag */ - - void * reserved; /**< Reserved to the parser */ -} URI_TYPE(Uri); /**< @copydoc UriUriStructA */ - - + URI_TYPE(TextRange) scheme; /**< Scheme (e.g. "http") */ + URI_TYPE(TextRange) userInfo; /**< User info (e.g. "user:pass") */ + URI_TYPE(TextRange) + hostText; /**< Host text (set for all hosts, excluding square brackets) */ + URI_TYPE(HostData) hostData; /**< Structured host type specific data */ + URI_TYPE(TextRange) portText; /**< Port (e.g. "80") */ + URI_TYPE(PathSegment) * + pathHead; /**< Head of a linked list of path segments */ + URI_TYPE(PathSegment) * pathTail; /**< Tail of the list behind pathHead */ + URI_TYPE(TextRange) query; /**< Query without leading "?" */ + URI_TYPE(TextRange) fragment; /**< Query without leading "#" */ + UriBool absolutePath; /**< Absolute path flag, distincting "a" and "/a"; + always + URI_FALSE for URIs with host */ + UriBool owner; /**< Memory owner flag */ + + void* reserved; /**< Reserved to the parser */ +} URI_TYPE(Uri); /**< @copydoc UriUriStructA */ /** * Represents a state of the %URI parser. @@ -177,15 +170,15 @@ typedef struct URI_TYPE(UriStruct) { * @since 0.3.0 */ typedef struct URI_TYPE(ParserStateStruct) { - URI_TYPE(Uri) * uri; /**< Plug in the %URI structure to be filled while parsing here */ - int errorCode; /**< Code identifying the error which occurred */ - const URI_CHAR * errorPos; /**< Pointer to position in case of a syntax error */ + URI_TYPE(Uri) * + uri; /**< Plug in the %URI structure to be filled while parsing here */ + int errorCode; /**< Code identifying the error which occurred */ + const URI_CHAR* + errorPos; /**< Pointer to position in case of a syntax error */ - void * reserved; /**< Reserved to the parser */ + void* reserved; /**< Reserved to the parser */ } URI_TYPE(ParserState); /**< @copydoc UriParserStateStructA */ - - /** * Represents a query element. * More precisely it is a node in a linked @@ -194,21 +187,24 @@ typedef struct URI_TYPE(ParserStateStruct) { * @since 0.7.0 */ typedef struct URI_TYPE(QueryListStruct) { - const URI_CHAR * key; /**< Key of the query element */ - const URI_CHAR * value; /**< Value of the query element, can be NULL */ + const URI_CHAR* key; /**< Key of the query element */ + const URI_CHAR* value; /**< Value of the query element, can be NULL */ - struct URI_TYPE(QueryListStruct) * next; /**< Pointer to the next key/value pair in the list, can be NULL if last already */ + struct URI_TYPE(QueryListStruct) * + next; /**< Pointer to the next key/value pair in the list, can be NULL if + last already */ } URI_TYPE(QueryList); /**< @copydoc UriQueryListStructA */ - - /** * Parses a RFC 3986 %URI. * Uses default libc-based memory manager. * - * @param state INOUT: Parser state with set output %URI, must not be NULL - * @param first IN: Pointer to the first character to parse, must not be NULL - * @param afterLast IN: Pointer to the character after the last to parse, must not be NULL + * @param state INOUT: Parser state with set output %URI, must not + * be NULL + * @param first IN: Pointer to the first character to parse, must + * not be NULL + * @param afterLast IN: Pointer to the character after the last to + * parse, must not be NULL * @return 0 on success, error code otherwise * * @see uriParseUriA @@ -216,18 +212,19 @@ typedef struct URI_TYPE(QueryListStruct) { * @see uriParseSingleUriExA * @see uriToStringA * @since 0.3.0 - * @deprecated Deprecated since 0.9.0, please migrate to uriParseSingleUriExA (with "Single"). + * @deprecated Deprecated since 0.9.0, please migrate to uriParseSingleUriExA + * (with "Single"). */ URI_PUBLIC int URI_FUNC(ParseUriEx)(URI_TYPE(ParserState) * state, - const URI_CHAR * first, const URI_CHAR * afterLast); - - + const URI_CHAR* first, + const URI_CHAR* afterLast); /** * Parses a RFC 3986 %URI. * Uses default libc-based memory manager. * - * @param state INOUT: Parser state with set output %URI, must not be NULL + * @param state INOUT: Parser state with set output %URI, must not be + * NULL * @param text IN: Text to parse, must not be NULL * @return 0 on success, error code otherwise * @@ -236,12 +233,11 @@ URI_PUBLIC int URI_FUNC(ParseUriEx)(URI_TYPE(ParserState) * state, * @see uriParseSingleUriExA * @see uriToStringA * @since 0.3.0 - * @deprecated Deprecated since 0.9.0, please migrate to uriParseSingleUriA (with "Single"). + * @deprecated Deprecated since 0.9.0, please migrate to uriParseSingleUriA + * (with "Single"). */ URI_PUBLIC int URI_FUNC(ParseUri)(URI_TYPE(ParserState) * state, - const URI_CHAR * text); - - + const URI_CHAR* text); /** * Parses a single RFC 3986 %URI. @@ -261,9 +257,8 @@ URI_PUBLIC int URI_FUNC(ParseUri)(URI_TYPE(ParserState) * state, * @since 0.9.0 */ URI_PUBLIC int URI_FUNC(ParseSingleUri)(URI_TYPE(Uri) * uri, - const URI_CHAR * text, const URI_CHAR ** errorPos); - - + const URI_CHAR* text, + const URI_CHAR** errorPos); /** * Parses a single RFC 3986 %URI. @@ -286,10 +281,9 @@ URI_PUBLIC int URI_FUNC(ParseSingleUri)(URI_TYPE(Uri) * uri, * @since 0.9.0 */ URI_PUBLIC int URI_FUNC(ParseSingleUriEx)(URI_TYPE(Uri) * uri, - const URI_CHAR * first, const URI_CHAR * afterLast, - const URI_CHAR ** errorPos); - - + const URI_CHAR* first, + const URI_CHAR* afterLast, + const URI_CHAR** errorPos); /** * Parses a single RFC 3986 %URI. @@ -312,10 +306,10 @@ URI_PUBLIC int URI_FUNC(ParseSingleUriEx)(URI_TYPE(Uri) * uri, * @since 0.9.0 */ URI_PUBLIC int URI_FUNC(ParseSingleUriExMm)(URI_TYPE(Uri) * uri, - const URI_CHAR * first, const URI_CHAR * afterLast, - const URI_CHAR ** errorPos, UriMemoryManager * memory); - - + const URI_CHAR* first, + const URI_CHAR* afterLast, + const URI_CHAR** errorPos, + UriMemoryManager* memory); /** * Frees all memory associated with the members @@ -330,8 +324,6 @@ URI_PUBLIC int URI_FUNC(ParseSingleUriExMm)(URI_TYPE(Uri) * uri, */ URI_PUBLIC void URI_FUNC(FreeUriMembers)(URI_TYPE(Uri) * uri); - - /** * Frees all memory associated with the members * of the %URI structure. Note that the structure @@ -345,9 +337,7 @@ URI_PUBLIC void URI_FUNC(FreeUriMembers)(URI_TYPE(Uri) * uri); * @since 0.9.0 */ URI_PUBLIC int URI_FUNC(FreeUriMembersMm)(URI_TYPE(Uri) * uri, - UriMemoryManager * memory); - - + UriMemoryManager* memory); /** * Percent-encodes all unreserved characters from the input string and @@ -359,29 +349,31 @@ URI_PUBLIC int URI_FUNC(FreeUriMembersMm)(URI_TYPE(Uri) * uri, * (since e.g. "\x0d" becomes "%0D%0A" in that case). * * NOTE: The implementation treats (both char and) wchar_t units - * as code point integers, which works well for code points U+0001 to U+00ff - * in host-native endianness but nothing more; - * in particular, using uriEscapeExW with arbitrary Unicode input will - * not produce healthy results. - * Passing UTF-8 input to uriEscapeExA may be useful in some scenarios. - * Keep in mind that uriparser is about %URI (RFC 3986) not %IRI (RFC 3987). - * - * @param inFirst IN: Pointer to first character of the input text - * @param inAfterLast IN: Pointer after the last character of the input text + * as code point integers, which works well for code points U+0001 to + * U+00ff in host-native endianness but nothing more; in particular, + * using uriEscapeExW with arbitrary Unicode input will not produce + * healthy results. Passing UTF-8 input to uriEscapeExA may be useful in + * some scenarios. Keep in mind that uriparser is about %URI (RFC 3986) not %IRI + * (RFC 3987). + * + * @param inFirst IN: Pointer to first character of the input + * text + * @param inAfterLast IN: Pointer after the last character of the + * input text * @param out OUT: Encoded text destination * @param spaceToPlus IN: Whether to convert ' ' to '+' or not - * @param normalizeBreaks IN: Whether to convert CR and LF to CR-LF or not. + * @param normalizeBreaks IN: Whether to convert CR and LF to CR-LF or + * not. * @return Position of terminator in output string * * @see uriEscapeA * @see uriUnescapeInPlaceExA * @since 0.5.2 */ -URI_PUBLIC URI_CHAR * URI_FUNC(EscapeEx)(const URI_CHAR * inFirst, - const URI_CHAR * inAfterLast, URI_CHAR * out, - UriBool spaceToPlus, UriBool normalizeBreaks); - - +URI_PUBLIC URI_CHAR* URI_FUNC(EscapeEx)(const URI_CHAR* inFirst, + const URI_CHAR* inAfterLast, + URI_CHAR* out, UriBool spaceToPlus, + UriBool normalizeBreaks); /** * Percent-encodes all unreserved characters from the input string and @@ -393,27 +385,27 @@ URI_PUBLIC URI_CHAR * URI_FUNC(EscapeEx)(const URI_CHAR * inFirst, * (since e.g. "\x0d" becomes "%0D%0A" in that case). * * NOTE: The implementation treats (both char and) wchar_t units - * as code point integers, which works well for code points U+0001 to U+00ff - * in host-native endianness but nothing more; - * in particular, using uriEscapeW with arbitrary Unicode input will - * not produce healthy results. - * Passing UTF-8 input to uriEscapeA may be useful in some scenarios. - * Keep in mind that uriparser is about %URI (RFC 3986) not %IRI (RFC 3987). + * as code point integers, which works well for code points U+0001 to + * U+00ff in host-native endianness but nothing more; in particular, + * using uriEscapeW with arbitrary Unicode input will not produce healthy + * results. Passing UTF-8 input to uriEscapeA may be useful in some + * scenarios. Keep in mind that uriparser is about %URI (RFC 3986) not %IRI (RFC + * 3987). * * @param in IN: Text source * @param out OUT: Encoded text destination * @param spaceToPlus IN: Whether to convert ' ' to '+' or not - * @param normalizeBreaks IN: Whether to convert CR and LF to CR-LF or not. + * @param normalizeBreaks IN: Whether to convert CR and LF to CR-LF or + * not. * @return Position of terminator in output string * * @see uriEscapeExA * @see uriUnescapeInPlaceA * @since 0.5.0 */ -URI_PUBLIC URI_CHAR * URI_FUNC(Escape)(const URI_CHAR * in, URI_CHAR * out, - UriBool spaceToPlus, UriBool normalizeBreaks); - - +URI_PUBLIC URI_CHAR* URI_FUNC(Escape)(const URI_CHAR* in, URI_CHAR* out, + UriBool spaceToPlus, + UriBool normalizeBreaks); /** * Unescapes percent-encoded groups in a given string. @@ -432,10 +424,8 @@ URI_PUBLIC URI_CHAR * URI_FUNC(Escape)(const URI_CHAR * in, URI_CHAR * out, * @see uriEscapeExA * @since 0.5.0 */ -URI_PUBLIC const URI_CHAR * URI_FUNC(UnescapeInPlaceEx)(URI_CHAR * inout, - UriBool plusToSpace, UriBreakConversion breakConversion); - - +URI_PUBLIC const URI_CHAR* URI_FUNC(UnescapeInPlaceEx)( + URI_CHAR* inout, UriBool plusToSpace, UriBreakConversion breakConversion); /** * Unescapes percent-encoded groups in a given string. @@ -455,15 +445,13 @@ URI_PUBLIC const URI_CHAR * URI_FUNC(UnescapeInPlaceEx)(URI_CHAR * inout, * @see uriEscapeA * @since 0.3.0 */ -URI_PUBLIC const URI_CHAR * URI_FUNC(UnescapeInPlace)(URI_CHAR * inout); - - +URI_PUBLIC const URI_CHAR* URI_FUNC(UnescapeInPlace)(URI_CHAR* inout); /** * Performs reference resolution as described in - * section 5.2.2 of RFC 3986. - * Uses default libc-based memory manager. - * NOTE: On success you have to call uriFreeUriMembersA on \p absoluteDest manually later. + * section 5.2.2 of + * RFC 3986. Uses default libc-based memory manager. NOTE: On success you + * have to call uriFreeUriMembersA on \p absoluteDest manually later. * * @param absoluteDest OUT: Result %URI * @param relativeSource IN: Reference to resolve @@ -477,16 +465,14 @@ URI_PUBLIC const URI_CHAR * URI_FUNC(UnescapeInPlace)(URI_CHAR * inout); * @since 0.4.0 */ URI_PUBLIC int URI_FUNC(AddBaseUri)(URI_TYPE(Uri) * absoluteDest, - const URI_TYPE(Uri) * relativeSource, - const URI_TYPE(Uri) * absoluteBase); - - + const URI_TYPE(Uri) * relativeSource, + const URI_TYPE(Uri) * absoluteBase); /** * Performs reference resolution as described in - * section 5.2.2 of RFC 3986. - * Uses default libc-based memory manager. - * NOTE: On success you have to call uriFreeUriMembersA on \p absoluteDest manually later. + * section 5.2.2 of + * RFC 3986. Uses default libc-based memory manager. NOTE: On success you + * have to call uriFreeUriMembersA on \p absoluteDest manually later. * * @param absoluteDest OUT: Result %URI * @param relativeSource IN: Reference to resolve @@ -500,22 +486,22 @@ URI_PUBLIC int URI_FUNC(AddBaseUri)(URI_TYPE(Uri) * absoluteDest, * @since 0.8.1 */ URI_PUBLIC int URI_FUNC(AddBaseUriEx)(URI_TYPE(Uri) * absoluteDest, - const URI_TYPE(Uri) * relativeSource, - const URI_TYPE(Uri) * absoluteBase, - UriResolutionOptions options); - - + const URI_TYPE(Uri) * relativeSource, + const URI_TYPE(Uri) * absoluteBase, + UriResolutionOptions options); /** * Performs reference resolution as described in - * section 5.2.2 of RFC 3986. - * NOTE: On success you have to call uriFreeUriMembersMmA on \p absoluteDest manually later. + * section 5.2.2 of + * RFC 3986. NOTE: On success you have to call uriFreeUriMembersMmA on \p + * absoluteDest manually later. * * @param absoluteDest OUT: Result %URI * @param relativeSource IN: Reference to resolve * @param absoluteBase IN: Base %URI to apply * @param options IN: Configuration to apply - * @param memory IN: Memory manager to use, NULL for default libc + * @param memory IN: Memory manager to use, NULL for default + * libc * @return Error code or 0 on success * * @see uriRemoveBaseUriA @@ -525,11 +511,10 @@ URI_PUBLIC int URI_FUNC(AddBaseUriEx)(URI_TYPE(Uri) * absoluteDest, * @since 0.9.0 */ URI_PUBLIC int URI_FUNC(AddBaseUriExMm)(URI_TYPE(Uri) * absoluteDest, - const URI_TYPE(Uri) * relativeSource, - const URI_TYPE(Uri) * absoluteBase, - UriResolutionOptions options, UriMemoryManager * memory); - - + const URI_TYPE(Uri) * relativeSource, + const URI_TYPE(Uri) * absoluteBase, + UriResolutionOptions options, + UriMemoryManager* memory); /** * Tries to make a relative %URI (a reference) from an @@ -544,7 +529,8 @@ URI_PUBLIC int URI_FUNC(AddBaseUriExMm)(URI_TYPE(Uri) * absoluteDest, * @param dest OUT: Result %URI * @param absoluteSource IN: Absolute %URI to make relative * @param absoluteBase IN: Base %URI - * @param domainRootMode IN: Create %URI with path relative to domain root + * @param domainRootMode IN: Create %URI with path relative to domain + * root * @return Error code or 0 on success * * @see uriRemoveBaseUriMmA @@ -554,11 +540,9 @@ URI_PUBLIC int URI_FUNC(AddBaseUriExMm)(URI_TYPE(Uri) * absoluteDest, * @since 0.5.2 */ URI_PUBLIC int URI_FUNC(RemoveBaseUri)(URI_TYPE(Uri) * dest, - const URI_TYPE(Uri) * absoluteSource, - const URI_TYPE(Uri) * absoluteBase, - UriBool domainRootMode); - - + const URI_TYPE(Uri) * absoluteSource, + const URI_TYPE(Uri) * absoluteBase, + UriBool domainRootMode); /** * Tries to make a relative %URI (a reference) from an @@ -572,8 +556,10 @@ URI_PUBLIC int URI_FUNC(RemoveBaseUri)(URI_TYPE(Uri) * dest, * @param dest OUT: Result %URI * @param absoluteSource IN: Absolute %URI to make relative * @param absoluteBase IN: Base %URI - * @param domainRootMode IN: Create %URI with path relative to domain root - * @param memory IN: Memory manager to use, NULL for default libc + * @param domainRootMode IN: Create %URI with path relative to domain + * root + * @param memory IN: Memory manager to use, NULL for default + * libc * @return Error code or 0 on success * * @see uriRemoveBaseUriA @@ -583,11 +569,10 @@ URI_PUBLIC int URI_FUNC(RemoveBaseUri)(URI_TYPE(Uri) * dest, * @since 0.9.0 */ URI_PUBLIC int URI_FUNC(RemoveBaseUriMm)(URI_TYPE(Uri) * dest, - const URI_TYPE(Uri) * absoluteSource, - const URI_TYPE(Uri) * absoluteBase, - UriBool domainRootMode, UriMemoryManager * memory); - - + const URI_TYPE(Uri) * absoluteSource, + const URI_TYPE(Uri) * absoluteBase, + UriBool domainRootMode, + UriMemoryManager* memory); /** * Checks two URIs for equivalence. Comparison is done @@ -601,9 +586,7 @@ URI_PUBLIC int URI_FUNC(RemoveBaseUriMm)(URI_TYPE(Uri) * dest, * @since 0.4.0 */ URI_PUBLIC UriBool URI_FUNC(EqualsUri)(const URI_TYPE(Uri) * a, - const URI_TYPE(Uri) * b); - - + const URI_TYPE(Uri) * b); /** * Calculates the number of characters needed to store the @@ -611,38 +594,39 @@ URI_PUBLIC UriBool URI_FUNC(EqualsUri)(const URI_TYPE(Uri) * a, * terminator. * * @param uri IN: %URI to measure - * @param charsRequired OUT: Length of the string representation in characters excluding terminator + * @param charsRequired OUT: Length of the string representation in + * characters excluding terminator * @return Error code or 0 on success * * @see uriToStringA * @since 0.5.0 */ URI_PUBLIC int URI_FUNC(ToStringCharsRequired)(const URI_TYPE(Uri) * uri, - int * charsRequired); - - + int* charsRequired); /** * Converts a %URI structure back to text as described in - * section 5.3 of RFC 3986. + * section 5.3 of RFC + * 3986. * * NOTE: Scheme-based normalization - * (section 6.2.3 of RFC 3986) - * is not applied and is considered a responsibility of the application using uriparser. + * (section 6.2.3 of + * RFC 3986) is not applied and is considered a responsibility of the + * application using uriparser. * * @param dest OUT: Output destination * @param uri IN: %URI to convert - * @param maxChars IN: Maximum number of characters to copy including terminator - * @param charsWritten OUT: Number of characters written, can be lower than maxChars even if the %URI is too long! + * @param maxChars IN: Maximum number of characters to copy + * including terminator + * @param charsWritten OUT: Number of characters written, can be lower + * than maxChars even if the %URI is too long! * @return Error code or 0 on success * * @see uriToStringCharsRequiredA * @since 0.4.0 */ -URI_PUBLIC int URI_FUNC(ToString)(URI_CHAR * dest, const URI_TYPE(Uri) * uri, - int maxChars, int * charsWritten); - - +URI_PUBLIC int URI_FUNC(ToString)(URI_CHAR* dest, const URI_TYPE(Uri) * uri, + int maxChars, int* charsWritten); /** * Determines the components of a %URI that are not normalized. @@ -655,12 +639,11 @@ URI_PUBLIC int URI_FUNC(ToString)(URI_CHAR * dest, const URI_TYPE(Uri) * uri, * @see uriNormalizeSyntaxExMmA * @see uriNormalizeSyntaxMaskRequiredExA * @since 0.5.0 - * @deprecated Deprecated since 0.9.0, please migrate to uriNormalizeSyntaxMaskRequiredExA (with "Ex"). + * @deprecated Deprecated since 0.9.0, please migrate to + * uriNormalizeSyntaxMaskRequiredExA (with "Ex"). */ URI_PUBLIC unsigned int URI_FUNC(NormalizeSyntaxMaskRequired)( - const URI_TYPE(Uri) * uri); - - + const URI_TYPE(Uri) * uri); /** * Determines the components of a %URI that are not normalized. @@ -675,10 +658,9 @@ URI_PUBLIC unsigned int URI_FUNC(NormalizeSyntaxMaskRequired)( * @see uriNormalizeSyntaxMaskRequiredA * @since 0.9.0 */ -URI_PUBLIC int URI_FUNC(NormalizeSyntaxMaskRequiredEx)( - const URI_TYPE(Uri) * uri, unsigned int * outMask); - - +URI_PUBLIC int URI_FUNC(NormalizeSyntaxMaskRequiredEx)(const URI_TYPE(Uri) * + uri, + unsigned int* outMask); /** * Normalizes a %URI using a normalization mask. @@ -698,9 +680,7 @@ URI_PUBLIC int URI_FUNC(NormalizeSyntaxMaskRequiredEx)( * @since 0.5.0 */ URI_PUBLIC int URI_FUNC(NormalizeSyntaxEx)(URI_TYPE(Uri) * uri, - unsigned int mask); - - + unsigned int mask); /** * Normalizes a %URI using a normalization mask. @@ -720,9 +700,8 @@ URI_PUBLIC int URI_FUNC(NormalizeSyntaxEx)(URI_TYPE(Uri) * uri, * @since 0.9.0 */ URI_PUBLIC int URI_FUNC(NormalizeSyntaxExMm)(URI_TYPE(Uri) * uri, - unsigned int mask, UriMemoryManager * memory); - - + unsigned int mask, + UriMemoryManager* memory); /** * Normalizes all components of a %URI. @@ -741,8 +720,6 @@ URI_PUBLIC int URI_FUNC(NormalizeSyntaxExMm)(URI_TYPE(Uri) * uri, */ URI_PUBLIC int URI_FUNC(NormalizeSyntax)(URI_TYPE(Uri) * uri); - - /** * Converts a Unix filename to a %URI string. * The destination buffer must be large enough to hold 7 + 3 * len(filename) + 1 @@ -761,10 +738,8 @@ URI_PUBLIC int URI_FUNC(NormalizeSyntax)(URI_TYPE(Uri) * uri); * @see uriWindowsFilenameToUriStringA * @since 0.5.2 */ -URI_PUBLIC int URI_FUNC(UnixFilenameToUriString)(const URI_CHAR * filename, - URI_CHAR * uriString); - - +URI_PUBLIC int URI_FUNC(UnixFilenameToUriString)(const URI_CHAR* filename, + URI_CHAR* uriString); /** * Converts a Windows filename to a %URI string. @@ -784,10 +759,8 @@ URI_PUBLIC int URI_FUNC(UnixFilenameToUriString)(const URI_CHAR * filename, * @see uriUnixFilenameToUriStringA * @since 0.5.2 */ -URI_PUBLIC int URI_FUNC(WindowsFilenameToUriString)(const URI_CHAR * filename, - URI_CHAR * uriString); - - +URI_PUBLIC int URI_FUNC(WindowsFilenameToUriString)(const URI_CHAR* filename, + URI_CHAR* uriString); /** * Extracts a Unix filename from a %URI string. @@ -803,10 +776,8 @@ URI_PUBLIC int URI_FUNC(WindowsFilenameToUriString)(const URI_CHAR * filename, * @see uriUriStringToWindowsFilenameA * @since 0.5.2 */ -URI_PUBLIC int URI_FUNC(UriStringToUnixFilename)(const URI_CHAR * uriString, - URI_CHAR * filename); - - +URI_PUBLIC int URI_FUNC(UriStringToUnixFilename)(const URI_CHAR* uriString, + URI_CHAR* filename); /** * Extracts a Windows filename from a %URI string. @@ -822,10 +793,8 @@ URI_PUBLIC int URI_FUNC(UriStringToUnixFilename)(const URI_CHAR * uriString, * @see uriUriStringToUnixFilenameA * @since 0.5.2 */ -URI_PUBLIC int URI_FUNC(UriStringToWindowsFilename)(const URI_CHAR * uriString, - URI_CHAR * filename); - - +URI_PUBLIC int URI_FUNC(UriStringToWindowsFilename)(const URI_CHAR* uriString, + URI_CHAR* filename); /** * Calculates the number of characters needed to store the @@ -834,17 +803,17 @@ URI_PUBLIC int URI_FUNC(UriStringToWindowsFilename)(const URI_CHAR * uriString, * normalized to "%0D%0A". * * @param queryList IN: Query list to measure - * @param charsRequired OUT: Length of the string representation in characters excluding terminator + * @param charsRequired OUT: Length of the string representation in + * characters excluding terminator * @return Error code or 0 on success * * @see uriComposeQueryCharsRequiredExA * @see uriComposeQueryA * @since 0.7.0 */ -URI_PUBLIC int URI_FUNC(ComposeQueryCharsRequired)( - const URI_TYPE(QueryList) * queryList, int * charsRequired); - - +URI_PUBLIC int URI_FUNC(ComposeQueryCharsRequired)(const URI_TYPE(QueryList) * + queryList, + int* charsRequired); /** * Calculates the number of characters needed to store the @@ -852,20 +821,22 @@ URI_PUBLIC int URI_FUNC(ComposeQueryCharsRequired)( * terminator. * * @param queryList IN: Query list to measure - * @param charsRequired OUT: Length of the string representation in characters excluding terminator + * @param charsRequired OUT: Length of the string representation in + * characters excluding terminator * @param spaceToPlus IN: Whether to convert ' ' to '+' or not - * @param normalizeBreaks IN: Whether to convert CR and LF to CR-LF or not. + * @param normalizeBreaks IN: Whether to convert CR and LF to CR-LF or + * not. * @return Error code or 0 on success * * @see uriComposeQueryCharsRequiredA * @see uriComposeQueryExA * @since 0.7.0 */ -URI_PUBLIC int URI_FUNC(ComposeQueryCharsRequiredEx)( - const URI_TYPE(QueryList) * queryList, - int * charsRequired, UriBool spaceToPlus, UriBool normalizeBreaks); - - +URI_PUBLIC int URI_FUNC(ComposeQueryCharsRequiredEx)(const URI_TYPE(QueryList) * + queryList, + int* charsRequired, + UriBool spaceToPlus, + UriBool normalizeBreaks); /** * Converts a query list structure back to a query string. @@ -875,8 +846,10 @@ URI_PUBLIC int URI_FUNC(ComposeQueryCharsRequiredEx)( * * @param dest OUT: Output destination * @param queryList IN: Query list to convert - * @param maxChars IN: Maximum number of characters to copy including terminator - * @param charsWritten OUT: Number of characters written, can be lower than maxChars even if the query list is too long! + * @param maxChars IN: Maximum number of characters to copy + * including terminator + * @param charsWritten OUT: Number of characters written, can be + * lower than maxChars even if the query list is too long! * @return Error code or 0 on success * * @see uriComposeQueryExA @@ -889,10 +862,9 @@ URI_PUBLIC int URI_FUNC(ComposeQueryCharsRequiredEx)( * @see uriDissectQueryMallocExMmA * @since 0.7.0 */ -URI_PUBLIC int URI_FUNC(ComposeQuery)(URI_CHAR * dest, - const URI_TYPE(QueryList) * queryList, int maxChars, int * charsWritten); - - +URI_PUBLIC int URI_FUNC(ComposeQuery)(URI_CHAR* dest, + const URI_TYPE(QueryList) * queryList, + int maxChars, int* charsWritten); /** * Converts a query list structure back to a query string. @@ -900,10 +872,13 @@ URI_PUBLIC int URI_FUNC(ComposeQuery)(URI_CHAR * dest, * * @param dest OUT: Output destination * @param queryList IN: Query list to convert - * @param maxChars IN: Maximum number of characters to copy including terminator - * @param charsWritten OUT: Number of characters written, can be lower than maxChars even if the query list is too long! + * @param maxChars IN: Maximum number of characters to copy + * including terminator + * @param charsWritten OUT: Number of characters written, can be + * lower than maxChars even if the query list is too long! * @param spaceToPlus IN: Whether to convert ' ' to '+' or not - * @param normalizeBreaks IN: Whether to convert CR and LF to CR-LF or not. + * @param normalizeBreaks IN: Whether to convert CR and LF to CR-LF or + * not. * @return Error code or 0 on success * * @see uriComposeQueryA @@ -916,11 +891,11 @@ URI_PUBLIC int URI_FUNC(ComposeQuery)(URI_CHAR * dest, * @see uriDissectQueryMallocExMmA * @since 0.7.0 */ -URI_PUBLIC int URI_FUNC(ComposeQueryEx)(URI_CHAR * dest, - const URI_TYPE(QueryList) * queryList, int maxChars, int * charsWritten, - UriBool spaceToPlus, UriBool normalizeBreaks); - - +URI_PUBLIC int URI_FUNC(ComposeQueryEx)(URI_CHAR* dest, + const URI_TYPE(QueryList) * queryList, + int maxChars, int* charsWritten, + UriBool spaceToPlus, + UriBool normalizeBreaks); /** * Converts a query list structure back to a query string. @@ -942,10 +917,9 @@ URI_PUBLIC int URI_FUNC(ComposeQueryEx)(URI_CHAR * dest, * @see uriDissectQueryMallocExMmA * @since 0.7.0 */ -URI_PUBLIC int URI_FUNC(ComposeQueryMalloc)(URI_CHAR ** dest, - const URI_TYPE(QueryList) * queryList); - - +URI_PUBLIC int URI_FUNC(ComposeQueryMalloc)(URI_CHAR** dest, + const URI_TYPE(QueryList) * + queryList); /** * Converts a query list structure back to a query string. @@ -956,7 +930,8 @@ URI_PUBLIC int URI_FUNC(ComposeQueryMalloc)(URI_CHAR ** dest, * @param dest OUT: Output destination * @param queryList IN: Query list to convert * @param spaceToPlus IN: Whether to convert ' ' to '+' or not - * @param normalizeBreaks IN: Whether to convert CR and LF to CR-LF or not. + * @param normalizeBreaks IN: Whether to convert CR and LF to CR-LF or + * not. * @return Error code or 0 on success * * @see uriComposeQueryMallocA @@ -967,11 +942,11 @@ URI_PUBLIC int URI_FUNC(ComposeQueryMalloc)(URI_CHAR ** dest, * @see uriDissectQueryMallocExMmA * @since 0.7.0 */ -URI_PUBLIC int URI_FUNC(ComposeQueryMallocEx)(URI_CHAR ** dest, - const URI_TYPE(QueryList) * queryList, - UriBool spaceToPlus, UriBool normalizeBreaks); - - +URI_PUBLIC int URI_FUNC(ComposeQueryMallocEx)(URI_CHAR** dest, + const URI_TYPE(QueryList) * + queryList, + UriBool spaceToPlus, + UriBool normalizeBreaks); /** * Converts a query list structure back to a query string. @@ -981,8 +956,10 @@ URI_PUBLIC int URI_FUNC(ComposeQueryMallocEx)(URI_CHAR ** dest, * @param dest OUT: Output destination * @param queryList IN: Query list to convert * @param spaceToPlus IN: Whether to convert ' ' to '+' or not - * @param normalizeBreaks IN: Whether to convert CR and LF to CR-LF or not. - * @param memory IN: Memory manager to use, NULL for default libc + * @param normalizeBreaks IN: Whether to convert CR and LF to CR-LF or + * not. + * @param memory IN: Memory manager to use, NULL for default + * libc * @return Error code or 0 on success * * @see uriComposeQueryMallocA @@ -993,12 +970,9 @@ URI_PUBLIC int URI_FUNC(ComposeQueryMallocEx)(URI_CHAR ** dest, * @see uriDissectQueryMallocExMmA * @since 0.9.0 */ -URI_PUBLIC int URI_FUNC(ComposeQueryMallocExMm)(URI_CHAR ** dest, - const URI_TYPE(QueryList) * queryList, - UriBool spaceToPlus, UriBool normalizeBreaks, - UriMemoryManager * memory); - - +URI_PUBLIC int URI_FUNC(ComposeQueryMallocExMm)( + URI_CHAR** dest, const URI_TYPE(QueryList) * queryList, UriBool spaceToPlus, + UriBool normalizeBreaks, UriMemoryManager* memory); /** * Constructs a query list from the raw query string of a given URI. @@ -1007,8 +981,10 @@ URI_PUBLIC int URI_FUNC(ComposeQueryMallocExMm)(URI_CHAR ** dest, * * @param dest OUT: Output destination * @param itemCount OUT: Number of items found, can be NULL - * @param first IN: Pointer to first character after '?' - * @param afterLast IN: Pointer to character after the last one still in + * @param first IN: Pointer to first character after + * '?' + * @param afterLast IN: Pointer to character after the last one + * still in * @return Error code or 0 on success * * @see uriDissectQueryMallocExA @@ -1018,10 +994,10 @@ URI_PUBLIC int URI_FUNC(ComposeQueryMallocExMm)(URI_CHAR ** dest, * @see uriFreeQueryListMmA * @since 0.7.0 */ -URI_PUBLIC int URI_FUNC(DissectQueryMalloc)(URI_TYPE(QueryList) ** dest, - int * itemCount, const URI_CHAR * first, const URI_CHAR * afterLast); - - +URI_PUBLIC int URI_FUNC(DissectQueryMalloc)(URI_TYPE(QueryList) * *dest, + int* itemCount, + const URI_CHAR* first, + const URI_CHAR* afterLast); /** * Constructs a query list from the raw query string of a given URI. @@ -1029,8 +1005,10 @@ URI_PUBLIC int URI_FUNC(DissectQueryMalloc)(URI_TYPE(QueryList) ** dest, * * @param dest OUT: Output destination * @param itemCount OUT: Number of items found, can be NULL - * @param first IN: Pointer to first character after '?' - * @param afterLast IN: Pointer to character after the last one still in + * @param first IN: Pointer to first character after + * '?' + * @param afterLast IN: Pointer to character after the last one + * still in * @param plusToSpace IN: Whether to convert '+' to ' ' or not * @param breakConversion IN: Line break conversion mode * @return Error code or 0 on success @@ -1041,22 +1019,24 @@ URI_PUBLIC int URI_FUNC(DissectQueryMalloc)(URI_TYPE(QueryList) ** dest, * @see uriFreeQueryListA * @since 0.7.0 */ -URI_PUBLIC int URI_FUNC(DissectQueryMallocEx)(URI_TYPE(QueryList) ** dest, - int * itemCount, const URI_CHAR * first, const URI_CHAR * afterLast, - UriBool plusToSpace, UriBreakConversion breakConversion); - - +URI_PUBLIC int URI_FUNC(DissectQueryMallocEx)( + URI_TYPE(QueryList) * *dest, int* itemCount, const URI_CHAR* first, + const URI_CHAR* afterLast, UriBool plusToSpace, + UriBreakConversion breakConversion); /** * Constructs a query list from the raw query string of a given URI. * * @param dest OUT: Output destination * @param itemCount OUT: Number of items found, can be NULL - * @param first IN: Pointer to first character after '?' - * @param afterLast IN: Pointer to character after the last one still in + * @param first IN: Pointer to first character after + * '?' + * @param afterLast IN: Pointer to character after the last one + * still in * @param plusToSpace IN: Whether to convert '+' to ' ' or not * @param breakConversion IN: Line break conversion mode - * @param memory IN: Memory manager to use, NULL for default libc + * @param memory IN: Memory manager to use, NULL for default + * libc * @return Error code or 0 on success * * @see uriDissectQueryMallocA @@ -1066,12 +1046,10 @@ URI_PUBLIC int URI_FUNC(DissectQueryMallocEx)(URI_TYPE(QueryList) ** dest, * @see uriFreeQueryListMmA * @since 0.9.0 */ -URI_PUBLIC int URI_FUNC(DissectQueryMallocExMm)(URI_TYPE(QueryList) ** dest, - int * itemCount, const URI_CHAR * first, const URI_CHAR * afterLast, - UriBool plusToSpace, UriBreakConversion breakConversion, - UriMemoryManager * memory); - - +URI_PUBLIC int URI_FUNC(DissectQueryMallocExMm)( + URI_TYPE(QueryList) * *dest, int* itemCount, const URI_CHAR* first, + const URI_CHAR* afterLast, UriBool plusToSpace, + UriBreakConversion breakConversion, UriMemoryManager* memory); /** * Frees all memory associated with the given query list. @@ -1084,8 +1062,6 @@ URI_PUBLIC int URI_FUNC(DissectQueryMallocExMm)(URI_TYPE(QueryList) ** dest, */ URI_PUBLIC void URI_FUNC(FreeQueryList)(URI_TYPE(QueryList) * queryList); - - /** * Frees all memory associated with the given query list. * The structure itself is freed as well. @@ -1098,9 +1074,7 @@ URI_PUBLIC void URI_FUNC(FreeQueryList)(URI_TYPE(QueryList) * queryList); * @since 0.9.0 */ URI_PUBLIC int URI_FUNC(FreeQueryListMm)(URI_TYPE(QueryList) * queryList, - UriMemoryManager * memory); - - + UriMemoryManager* memory); /** * Makes the %URI hold copies of strings so that it no longer depends @@ -1117,8 +1091,6 @@ URI_PUBLIC int URI_FUNC(FreeQueryListMm)(URI_TYPE(QueryList) * queryList, */ URI_PUBLIC int URI_FUNC(MakeOwner)(URI_TYPE(Uri) * uri); - - /** * Makes the %URI hold copies of strings so that it no longer depends * on the original %URI string. If the %URI is already owner of copies, @@ -1132,15 +1104,11 @@ URI_PUBLIC int URI_FUNC(MakeOwner)(URI_TYPE(Uri) * uri); * @since 0.9.4 */ URI_PUBLIC int URI_FUNC(MakeOwnerMm)(URI_TYPE(Uri) * uri, - UriMemoryManager * memory); - - + UriMemoryManager* memory); #ifdef __cplusplus } #endif - - #endif #endif diff --git a/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriBase.h b/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriBase.h index dc3883e6..34222e6e 100644 --- a/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriBase.h +++ b/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriBase.h @@ -45,21 +45,15 @@ #ifndef URI_BASE_H #define URI_BASE_H 1 - - /* Version helper macro */ #define URI_ANSI_TO_UNICODE(x) L##x - - /* Version */ -#define URI_VER_MAJOR 0 -#define URI_VER_MINOR 9 -#define URI_VER_RELEASE 8 -#define URI_VER_SUFFIX_ANSI "" -#define URI_VER_SUFFIX_UNICODE URI_ANSI_TO_UNICODE(URI_VER_SUFFIX_ANSI) - - +#define URI_VER_MAJOR 0 +#define URI_VER_MINOR 9 +#define URI_VER_RELEASE 8 +#define URI_VER_SUFFIX_ANSI "" +#define URI_VER_SUFFIX_UNICODE URI_ANSI_TO_UNICODE(URI_VER_SUFFIX_ANSI) /* More version helper macros */ #define URI_INT_TO_ANSI_HELPER(x) #x @@ -69,142 +63,134 @@ #define URI_INT_TO_UNICODE(x) URI_INT_TO_UNICODE_HELPER(x) #define URI_VER_ANSI_HELPER(ma, mi, r, s) \ - URI_INT_TO_ANSI(ma) "." \ - URI_INT_TO_ANSI(mi) "." \ - URI_INT_TO_ANSI(r) \ - s + URI_INT_TO_ANSI(ma) "." URI_INT_TO_ANSI(mi) "." URI_INT_TO_ANSI(r) s #define URI_VER_UNICODE_HELPER(ma, mi, r, s) \ - URI_INT_TO_UNICODE(ma) L"." \ - URI_INT_TO_UNICODE(mi) L"." \ - URI_INT_TO_UNICODE(r) \ - s - - + URI_INT_TO_UNICODE(ma) \ + L"." URI_INT_TO_UNICODE(mi) L"." URI_INT_TO_UNICODE(r) s /* Full version strings */ -#define URI_VER_ANSI URI_VER_ANSI_HELPER(URI_VER_MAJOR, URI_VER_MINOR, URI_VER_RELEASE, URI_VER_SUFFIX_ANSI) -#define URI_VER_UNICODE URI_VER_UNICODE_HELPER(URI_VER_MAJOR, URI_VER_MINOR, URI_VER_RELEASE, URI_VER_SUFFIX_UNICODE) - - +#define URI_VER_ANSI \ + URI_VER_ANSI_HELPER(URI_VER_MAJOR, URI_VER_MINOR, URI_VER_RELEASE, \ + URI_VER_SUFFIX_ANSI) +#define URI_VER_UNICODE \ + URI_VER_UNICODE_HELPER(URI_VER_MAJOR, URI_VER_MINOR, URI_VER_RELEASE, \ + URI_VER_SUFFIX_UNICODE) /* Unused parameter macro */ #ifdef __GNUC__ -# define URI_UNUSED(x) unused_##x __attribute__((unused)) +#define URI_UNUSED(x) unused_##x __attribute__((unused)) #else -# define URI_UNUSED(x) x +#define URI_UNUSED(x) x #endif - - /* Import/export decorator */ #if defined(_MSC_VER) -# if defined(URI_STATIC_BUILD) -# define URI_PUBLIC -# elif defined(URI_LIBRARY_BUILD) -# define URI_PUBLIC __declspec(dllexport) -# else -# define URI_PUBLIC __declspec(dllimport) -# endif +#if defined(URI_STATIC_BUILD) +#define URI_PUBLIC +#elif defined(URI_LIBRARY_BUILD) +#define URI_PUBLIC __declspec(dllexport) #else -# if ! defined(URI_LIBRARY_BUILD) || ! defined(URI_VISIBILITY) -# define URI_PUBLIC -# else -# define URI_PUBLIC __attribute__ ((visibility("default"))) -# endif +#define URI_PUBLIC __declspec(dllimport) +#endif +#else +#if !defined(URI_LIBRARY_BUILD) || !defined(URI_VISIBILITY) +#define URI_PUBLIC +#else +#define URI_PUBLIC __attribute__((visibility("default"))) +#endif #endif - - typedef int UriBool; /**< Boolean type */ -#define URI_TRUE 1 -#define URI_FALSE 0 - - +#define URI_TRUE 1 +#define URI_FALSE 0 /* Shared errors */ -#define URI_SUCCESS 0 -#define URI_ERROR_SYNTAX 1 /* Parsed text violates expected format */ -#define URI_ERROR_NULL 2 /* One of the params passed was NULL - although it mustn't be */ -#define URI_ERROR_MALLOC 3 /* Requested memory could not be allocated */ -#define URI_ERROR_OUTPUT_TOO_LARGE 4 /* Some output is to large for the receiving buffer */ -#define URI_ERROR_NOT_IMPLEMENTED 8 /* The called function is not implemented yet */ -#define URI_ERROR_RANGE_INVALID 9 /* The parameters passed contained invalid ranges */ -#define URI_ERROR_MEMORY_MANAGER_INCOMPLETE 10 /* [>=0.9.0] The UriMemoryManager passed does not implement all needed functions */ - +#define URI_SUCCESS 0 +#define URI_ERROR_SYNTAX 1 /* Parsed text violates expected format */ +#define URI_ERROR_NULL \ + 2 /* One of the params passed was NULL \ + although it mustn't be */ +#define URI_ERROR_MALLOC 3 /* Requested memory could not be allocated */ +#define URI_ERROR_OUTPUT_TOO_LARGE \ + 4 /* Some output is to large for the receiving buffer */ +#define URI_ERROR_NOT_IMPLEMENTED \ + 8 /* The called function is not implemented yet */ +#define URI_ERROR_RANGE_INVALID \ + 9 /* The parameters passed contained invalid ranges */ +#define URI_ERROR_MEMORY_MANAGER_INCOMPLETE \ + 10 /* [>=0.9.0] The UriMemoryManager passed does not implement all needed \ + functions */ /* Errors specific to ToString */ -#define URI_ERROR_TOSTRING_TOO_LONG URI_ERROR_OUTPUT_TOO_LARGE /* Deprecated, test for URI_ERROR_OUTPUT_TOO_LARGE instead */ +#define URI_ERROR_TOSTRING_TOO_LONG \ + URI_ERROR_OUTPUT_TOO_LARGE /* Deprecated, test for \ + URI_ERROR_OUTPUT_TOO_LARGE instead */ /* Errors specific to AddBaseUri */ -#define URI_ERROR_ADDBASE_REL_BASE 5 /* Given base is not absolute */ +#define URI_ERROR_ADDBASE_REL_BASE 5 /* Given base is not absolute */ /* Errors specific to RemoveBaseUri */ -#define URI_ERROR_REMOVEBASE_REL_BASE 6 /* Given base is not absolute */ -#define URI_ERROR_REMOVEBASE_REL_SOURCE 7 /* Given base is not absolute */ +#define URI_ERROR_REMOVEBASE_REL_BASE 6 /* Given base is not absolute */ +#define URI_ERROR_REMOVEBASE_REL_SOURCE 7 /* Given base is not absolute */ /* Error specific to uriTestMemoryManager */ -#define URI_ERROR_MEMORY_MANAGER_FAULTY 11 /* [>=0.9.0] The UriMemoryManager given did not pass the test suite */ - +#define URI_ERROR_MEMORY_MANAGER_FAULTY \ + 11 /* [>=0.9.0] The UriMemoryManager given did not pass the test suite */ #ifndef URI_DOXYGEN -# include /* For NULL, snprintf */ -# include /* For wchar_t */ -# include /* For strlen, memset, memcpy */ -# include /* For malloc */ -#endif /* URI_DOXYGEN */ - - +#include /* For wchar_t */ +#include /* For NULL, snprintf */ +#include /* For malloc */ +#include /* For strlen, memset, memcpy */ +#endif /* URI_DOXYGEN */ /** * Holds an IPv4 address. */ typedef struct UriIp4Struct { - unsigned char data[4]; /**< Each octet in one byte */ -} UriIp4; /**< @copydoc UriIp4Struct */ - - + unsigned char data[4]; /**< Each octet in one byte */ +} UriIp4; /**< @copydoc UriIp4Struct */ /** * Holds an IPv6 address. */ typedef struct UriIp6Struct { - unsigned char data[16]; /**< Each quad in two bytes */ -} UriIp6; /**< @copydoc UriIp6Struct */ - - -struct UriMemoryManagerStruct; /* foward declaration to break loop */ + unsigned char data[16]; /**< Each quad in two bytes */ +} UriIp6; /**< @copydoc UriIp6Struct */ +struct UriMemoryManagerStruct; /* foward declaration to break loop */ /** * Function signature that custom malloc(3) functions must conform to * * @since 0.9.0 */ -typedef void * (*UriFuncMalloc)(struct UriMemoryManagerStruct *, size_t); +typedef void *(*UriFuncMalloc)(struct UriMemoryManagerStruct *, size_t); /** * Function signature that custom calloc(3) functions must conform to * * @since 0.9.0 */ -typedef void * (*UriFuncCalloc)(struct UriMemoryManagerStruct *, size_t, size_t); +typedef void *(*UriFuncCalloc)(struct UriMemoryManagerStruct *, size_t, size_t); /** * Function signature that custom realloc(3) functions must conform to * * @since 0.9.0 */ -typedef void * (*UriFuncRealloc)(struct UriMemoryManagerStruct *, void *, size_t); +typedef void *(*UriFuncRealloc)(struct UriMemoryManagerStruct *, void *, + size_t); /** * Function signature that custom reallocarray(3) functions must conform to * * @since 0.9.0 */ -typedef void * (*UriFuncReallocarray)(struct UriMemoryManagerStruct *, void *, size_t, size_t); +typedef void *(*UriFuncReallocarray)(struct UriMemoryManagerStruct *, void *, + size_t, size_t); /** * Function signature that custom free(3) functions must conform to @@ -213,7 +199,6 @@ typedef void * (*UriFuncReallocarray)(struct UriMemoryManagerStruct *, void *, s */ typedef void (*UriFuncFree)(struct UriMemoryManagerStruct *, void *); - /** * Class-like interface of custom memory managers * @@ -224,55 +209,63 @@ typedef void (*UriFuncFree)(struct UriMemoryManagerStruct *, void *); * @since 0.9.0 */ typedef struct UriMemoryManagerStruct { - UriFuncMalloc malloc; /**< Pointer to custom malloc(3) */ - UriFuncCalloc calloc; /**< Pointer to custom calloc(3); to emulate using malloc and memset see uriEmulateCalloc */ - UriFuncRealloc realloc; /**< Pointer to custom realloc(3) */ - UriFuncReallocarray reallocarray; /**< Pointer to custom reallocarray(3); to emulate using realloc see uriEmulateReallocarray */ - UriFuncFree free; /**< Pointer to custom free(3) */ - void * userData; /**< Pointer to data that the other function members need access to */ + UriFuncMalloc malloc; /**< Pointer to custom malloc(3) */ + UriFuncCalloc calloc; /**< Pointer to custom calloc(3); to emulate using + malloc and memset see uriEmulateCalloc */ + UriFuncRealloc realloc; /**< Pointer to custom realloc(3) */ + UriFuncReallocarray + reallocarray; /**< Pointer to custom reallocarray(3); to emulate using + realloc see uriEmulateReallocarray */ + UriFuncFree free; /**< Pointer to custom free(3) */ + void *userData; /**< Pointer to data that the other function members need + access to */ } UriMemoryManager; /**< @copydoc UriMemoryManagerStruct */ - /** * Specifies a line break conversion mode. */ typedef enum UriBreakConversionEnum { - URI_BR_TO_LF, /**< Convert to Unix line breaks ("\\x0a") */ - URI_BR_TO_CRLF, /**< Convert to Windows line breaks ("\\x0d\\x0a") */ - URI_BR_TO_CR, /**< Convert to Macintosh line breaks ("\\x0d") */ - URI_BR_TO_UNIX = URI_BR_TO_LF, /**< @copydoc UriBreakConversionEnum::URI_BR_TO_LF */ - URI_BR_TO_WINDOWS = URI_BR_TO_CRLF, /**< @copydoc UriBreakConversionEnum::URI_BR_TO_CRLF */ - URI_BR_TO_MAC = URI_BR_TO_CR, /**< @copydoc UriBreakConversionEnum::URI_BR_TO_CR */ - URI_BR_DONT_TOUCH /**< Copy line breaks unmodified */ + URI_BR_TO_LF, /**< Convert to Unix line breaks ("\\x0a") */ + URI_BR_TO_CRLF, /**< Convert to Windows line breaks ("\\x0d\\x0a") */ + URI_BR_TO_CR, /**< Convert to Macintosh line breaks ("\\x0d") */ + URI_BR_TO_UNIX = + URI_BR_TO_LF, /**< @copydoc UriBreakConversionEnum::URI_BR_TO_LF */ + URI_BR_TO_WINDOWS = + URI_BR_TO_CRLF, /**< @copydoc UriBreakConversionEnum::URI_BR_TO_CRLF */ + URI_BR_TO_MAC = + URI_BR_TO_CR, /**< @copydoc UriBreakConversionEnum::URI_BR_TO_CR */ + URI_BR_DONT_TOUCH /**< Copy line breaks unmodified */ } UriBreakConversion; /**< @copydoc UriBreakConversionEnum */ - - /** * Specifies which component of a %URI has to be normalized. */ typedef enum UriNormalizationMaskEnum { - URI_NORMALIZED = 0, /**< Do not normalize anything */ - URI_NORMALIZE_SCHEME = 1 << 0, /**< Normalize scheme (fix uppercase letters) */ - URI_NORMALIZE_USER_INFO = 1 << 1, /**< Normalize user info (fix uppercase percent-encodings) */ - URI_NORMALIZE_HOST = 1 << 2, /**< Normalize host (fix uppercase letters) */ - URI_NORMALIZE_PATH = 1 << 3, /**< Normalize path (fix uppercase percent-encodings and redundant dot segments) */ - URI_NORMALIZE_QUERY = 1 << 4, /**< Normalize query (fix uppercase percent-encodings) */ - URI_NORMALIZE_FRAGMENT = 1 << 5 /**< Normalize fragment (fix uppercase percent-encodings) */ + URI_NORMALIZED = 0, /**< Do not normalize anything */ + URI_NORMALIZE_SCHEME = + 1 << 0, /**< Normalize scheme (fix uppercase letters) */ + URI_NORMALIZE_USER_INFO = + 1 << 1, /**< Normalize user info (fix uppercase percent-encodings) */ + URI_NORMALIZE_HOST = 1 << 2, /**< Normalize host (fix uppercase letters) */ + URI_NORMALIZE_PATH = + 1 << 3, /**< Normalize path (fix uppercase percent-encodings and redundant + dot segments) */ + URI_NORMALIZE_QUERY = + 1 << 4, /**< Normalize query (fix uppercase percent-encodings) */ + URI_NORMALIZE_FRAGMENT = + 1 << 5 /**< Normalize fragment (fix uppercase percent-encodings) */ } UriNormalizationMask; /**< @copydoc UriNormalizationMaskEnum */ - - /** * Specifies how to resolve %URI references. */ typedef enum UriResolutionOptionsEnum { - URI_RESOLVE_STRICTLY = 0, /**< Full RFC conformance */ - URI_RESOLVE_IDENTICAL_SCHEME_COMPAT = 1 << 0 /**< Treat %URI to resolve with identical scheme as having no scheme */ + URI_RESOLVE_STRICTLY = 0, /**< Full RFC conformance */ + URI_RESOLVE_IDENTICAL_SCHEME_COMPAT = + 1 << 0 /**< Treat %URI to resolve with identical scheme as having no + scheme */ } UriResolutionOptions; /**< @copydoc UriResolutionOptionsEnum */ - - /** * Wraps a memory manager backend that only provides malloc and free * to make a complete memory manager ready to be used. @@ -302,10 +295,8 @@ typedef enum UriResolutionOptionsEnum { * @see UriMemoryManager * @since 0.9.0 */ -URI_PUBLIC int uriCompleteMemoryManager(UriMemoryManager * memory, - UriMemoryManager * backend); - - +URI_PUBLIC int uriCompleteMemoryManager(UriMemoryManager *memory, + UriMemoryManager *backend); /** * Offers emulation of calloc(3) based on memory->malloc and memset. @@ -321,10 +312,8 @@ URI_PUBLIC int uriCompleteMemoryManager(UriMemoryManager * memory, * @see UriMemoryManager * @since 0.9.0 */ -URI_PUBLIC void * uriEmulateCalloc(UriMemoryManager * memory, - size_t nmemb, size_t size); - - +URI_PUBLIC void *uriEmulateCalloc(UriMemoryManager *memory, size_t nmemb, + size_t size); /** * Offers emulation of reallocarray(3) based on memory->realloc. @@ -341,10 +330,8 @@ URI_PUBLIC void * uriEmulateCalloc(UriMemoryManager * memory, * @see UriMemoryManager * @since 0.9.0 */ -URI_PUBLIC void * uriEmulateReallocarray(UriMemoryManager * memory, - void * ptr, size_t nmemb, size_t size); - - +URI_PUBLIC void *uriEmulateReallocarray(UriMemoryManager *memory, void *ptr, + size_t nmemb, size_t size); /** * Run multiple tests against a given memory manager. @@ -366,8 +353,6 @@ URI_PUBLIC void * uriEmulateReallocarray(UriMemoryManager * memory, * @see UriMemoryManager * @since 0.9.0 */ -URI_PUBLIC int uriTestMemoryManager(UriMemoryManager * memory); - - +URI_PUBLIC int uriTestMemoryManager(UriMemoryManager *memory); #endif /* URI_BASE_H */ diff --git a/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriDefsAnsi.h b/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriDefsAnsi.h index af581b91..f8e61c5f 100644 --- a/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriDefsAnsi.h +++ b/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriDefsAnsi.h @@ -46,24 +46,18 @@ /* Allow multi inclusion */ #include "UriDefsConfig.h" - - #undef URI_CHAR #define URI_CHAR char #undef _UT #define _UT(x) x - - #undef URI_FUNC #define URI_FUNC(x) uri##x##A #undef URI_TYPE #define URI_TYPE(x) Uri##x##A - - #undef URI_STRLEN #define URI_STRLEN strlen #undef URI_STRCPY @@ -76,7 +70,7 @@ /* TODO Remove on next source-compatibility break */ #undef URI_SNPRINTF #if (defined(__WIN32__) || defined(_WIN32) || defined(WIN32)) -# define URI_SNPRINTF _snprintf +#define URI_SNPRINTF _snprintf #else -# define URI_SNPRINTF snprintf +#define URI_SNPRINTF snprintf #endif diff --git a/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriDefsConfig.h b/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriDefsConfig.h index 51bc93ee..febb3de9 100644 --- a/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriDefsConfig.h +++ b/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriDefsConfig.h @@ -45,57 +45,49 @@ #ifndef URI_DEFS_CONFIG_H #define URI_DEFS_CONFIG_H 1 - - /* Deny external overriding */ -#undef URI_ENABLE_ANSI /* Internal for !URI_NO_ANSI */ -#undef URI_ENABLE_UNICODE /* Internal for !URI_NO_UNICODE */ - - +#undef URI_ENABLE_ANSI /* Internal for !URI_NO_ANSI */ +#undef URI_ENABLE_UNICODE /* Internal for !URI_NO_UNICODE */ /* Encoding */ #ifdef URI_NO_ANSI -# ifdef URI_NO_UNICODE +#ifdef URI_NO_UNICODE /* No encoding at all */ -# error URI_NO_ANSI and URI_NO_UNICODE cannot go together. -# else +#error URI_NO_ANSI and URI_NO_UNICODE cannot go together. +#else /* Wide strings only */ -# define URI_ENABLE_UNICODE 1 -# endif +#define URI_ENABLE_UNICODE 1 +#endif #else -# ifdef URI_NO_UNICODE +#ifdef URI_NO_UNICODE /* Narrow strings only */ -# define URI_ENABLE_ANSI 1 -# else +#define URI_ENABLE_ANSI 1 +#else /* Both narrow and wide strings */ -# define URI_ENABLE_ANSI 1 -# define URI_ENABLE_UNICODE 1 -# endif +#define URI_ENABLE_ANSI 1 +#define URI_ENABLE_UNICODE 1 +#endif #endif - - /* Function inlining, not ANSI/ISO C! */ #if defined(URI_DOXYGEN) -# define URI_INLINE +#define URI_INLINE #elif defined(__INTEL_COMPILER) /* Intel C/C++ */ /* http://predef.sourceforge.net/precomp.html#sec20 */ /* http://www.intel.com/support/performancetools/c/windows/sb/CS-007751.htm#2 */ -# define URI_INLINE __forceinline +#define URI_INLINE __forceinline #elif defined(_MSC_VER) /* Microsoft Visual C++ */ /* http://predef.sourceforge.net/precomp.html#sec32 */ /* http://msdn2.microsoft.com/en-us/library/ms882281.aspx */ -# define URI_INLINE __forceinline +#define URI_INLINE __forceinline #elif (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) /* C99, "inline" is a keyword */ -# define URI_INLINE inline +#define URI_INLINE inline #else /* No inlining */ -# define URI_INLINE +#define URI_INLINE #endif - - #endif /* URI_DEFS_CONFIG_H */ diff --git a/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriDefsUnicode.h b/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriDefsUnicode.h index 01421f5f..a6404be8 100644 --- a/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriDefsUnicode.h +++ b/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriDefsUnicode.h @@ -46,24 +46,18 @@ /* Allow multi inclusion */ #include "UriDefsConfig.h" - - #undef URI_CHAR #define URI_CHAR wchar_t #undef _UT #define _UT(x) L##x - - #undef URI_FUNC #define URI_FUNC(x) uri##x##W #undef URI_TYPE #define URI_TYPE(x) Uri##x##W - - #undef URI_STRLEN #define URI_STRLEN wcslen #undef URI_STRCPY @@ -76,7 +70,7 @@ /* TODO Remove on next source-compatibility break */ #undef URI_SNPRINTF #if (defined(__WIN32__) || defined(_WIN32) || defined(WIN32)) -# define URI_SNPRINTF _snwprintf +#define URI_SNPRINTF _snwprintf #else -# define URI_SNPRINTF swprintf +#define URI_SNPRINTF swprintf #endif diff --git a/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriIp4.h b/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriIp4.h index c2e59a6b..a9db129b 100644 --- a/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriIp4.h +++ b/vendor/jsontoolkit/vendor/uriparser/include/uriparser/UriIp4.h @@ -43,50 +43,46 @@ * NOTE: This header includes itself twice. */ -#if (defined(URI_PASS_ANSI) && !defined(URI_IP4_TWICE_H_ANSI)) \ - || (defined(URI_PASS_UNICODE) && !defined(URI_IP4_TWICE_H_UNICODE)) \ - || (!defined(URI_PASS_ANSI) && !defined(URI_PASS_UNICODE)) +#if (defined(URI_PASS_ANSI) && !defined(URI_IP4_TWICE_H_ANSI)) || \ + (defined(URI_PASS_UNICODE) && !defined(URI_IP4_TWICE_H_UNICODE)) || \ + (!defined(URI_PASS_ANSI) && !defined(URI_PASS_UNICODE)) /* What encodings are enabled? */ #include "UriDefsConfig.h" #if (!defined(URI_PASS_ANSI) && !defined(URI_PASS_UNICODE)) /* Include SELF twice */ -# ifdef URI_ENABLE_ANSI -# define URI_PASS_ANSI 1 -# include "UriIp4.h" -# undef URI_PASS_ANSI -# endif -# ifdef URI_ENABLE_UNICODE -# define URI_PASS_UNICODE 1 -# include "UriIp4.h" -# undef URI_PASS_UNICODE -# endif +#ifdef URI_ENABLE_ANSI +#define URI_PASS_ANSI 1 +#include "UriIp4.h" +#undef URI_PASS_ANSI +#endif +#ifdef URI_ENABLE_UNICODE +#define URI_PASS_UNICODE 1 +#include "UriIp4.h" +#undef URI_PASS_UNICODE +#endif /* Only one pass for each encoding */ -#elif (defined(URI_PASS_ANSI) && !defined(URI_IP4_TWICE_H_ANSI) \ - && defined(URI_ENABLE_ANSI)) || (defined(URI_PASS_UNICODE) \ - && !defined(URI_IP4_TWICE_H_UNICODE) && defined(URI_ENABLE_UNICODE)) -# ifdef URI_PASS_ANSI -# define URI_IP4_TWICE_H_ANSI 1 -# include "UriDefsAnsi.h" -# else -# define URI_IP4_TWICE_H_UNICODE 1 -# include "UriDefsUnicode.h" -# include -# endif - - +#elif (defined(URI_PASS_ANSI) && !defined(URI_IP4_TWICE_H_ANSI) && \ + defined(URI_ENABLE_ANSI)) || \ + (defined(URI_PASS_UNICODE) && !defined(URI_IP4_TWICE_H_UNICODE) && \ + defined(URI_ENABLE_UNICODE)) +#ifdef URI_PASS_ANSI +#define URI_IP4_TWICE_H_ANSI 1 +#include "UriDefsAnsi.h" +#else +#define URI_IP4_TWICE_H_UNICODE 1 +#include + +#include "UriDefsUnicode.h" +#endif #ifdef __cplusplus extern "C" { #endif - - #ifndef URI_DOXYGEN -# include "UriBase.h" +#include "UriBase.h" #endif - - /** * Converts a IPv4 text representation into four bytes. * @@ -95,16 +91,13 @@ extern "C" { * @param afterLast Position to stop parsing at * @return Error code or 0 on success */ -URI_PUBLIC int URI_FUNC(ParseIpFourAddress)(unsigned char * octetOutput, - const URI_CHAR * first, const URI_CHAR * afterLast); - - +URI_PUBLIC int URI_FUNC(ParseIpFourAddress)(unsigned char* octetOutput, + const URI_CHAR* first, + const URI_CHAR* afterLast); #ifdef __cplusplus } #endif - - #endif #endif diff --git a/vendor/jsontoolkit/vendor/uriparser/src/UriCommon.h b/vendor/jsontoolkit/vendor/uriparser/src/UriCommon.h index 42311ddc..2b811f9b 100644 --- a/vendor/jsontoolkit/vendor/uriparser/src/UriCommon.h +++ b/vendor/jsontoolkit/vendor/uriparser/src/UriCommon.h @@ -37,55 +37,52 @@ * OF THE POSSIBILITY OF SUCH DAMAGE. */ -#if (defined(URI_PASS_ANSI) && !defined(URI_COMMON_H_ANSI)) \ - || (defined(URI_PASS_UNICODE) && !defined(URI_COMMON_H_UNICODE)) \ - || (!defined(URI_PASS_ANSI) && !defined(URI_PASS_UNICODE)) +#if (defined(URI_PASS_ANSI) && !defined(URI_COMMON_H_ANSI)) || \ + (defined(URI_PASS_UNICODE) && !defined(URI_COMMON_H_UNICODE)) || \ + (!defined(URI_PASS_ANSI) && !defined(URI_PASS_UNICODE)) /* What encodings are enabled? */ #include #if (!defined(URI_PASS_ANSI) && !defined(URI_PASS_UNICODE)) /* Include SELF twice */ -# ifdef URI_ENABLE_ANSI -# define URI_PASS_ANSI 1 -# include "UriCommon.h" -# undef URI_PASS_ANSI -# endif -# ifdef URI_ENABLE_UNICODE -# define URI_PASS_UNICODE 1 -# include "UriCommon.h" -# undef URI_PASS_UNICODE -# endif +#ifdef URI_ENABLE_ANSI +#define URI_PASS_ANSI 1 +#include "UriCommon.h" +#undef URI_PASS_ANSI +#endif +#ifdef URI_ENABLE_UNICODE +#define URI_PASS_UNICODE 1 +#include "UriCommon.h" +#undef URI_PASS_UNICODE +#endif /* Only one pass for each encoding */ -#elif (defined(URI_PASS_ANSI) && !defined(URI_COMMON_H_ANSI) \ - && defined(URI_ENABLE_ANSI)) || (defined(URI_PASS_UNICODE) \ - && !defined(URI_COMMON_H_UNICODE) && defined(URI_ENABLE_UNICODE)) -# ifdef URI_PASS_ANSI -# define URI_COMMON_H_ANSI 1 -# include -# else -# define URI_COMMON_H_UNICODE 1 -# include -# endif - - +#elif (defined(URI_PASS_ANSI) && !defined(URI_COMMON_H_ANSI) && \ + defined(URI_ENABLE_ANSI)) || \ + (defined(URI_PASS_UNICODE) && !defined(URI_COMMON_H_UNICODE) && \ + defined(URI_ENABLE_UNICODE)) +#ifdef URI_PASS_ANSI +#define URI_COMMON_H_ANSI 1 +#include +#else +#define URI_COMMON_H_UNICODE 1 +#include +#endif /* Used to point to from empty path segments. * X.first and X.afterLast must be the same non-NULL value then. */ -extern const URI_CHAR * const URI_FUNC(SafeToPointTo); -extern const URI_CHAR * const URI_FUNC(ConstPwd); -extern const URI_CHAR * const URI_FUNC(ConstParent); - - +extern const URI_CHAR* const URI_FUNC(SafeToPointTo); +extern const URI_CHAR* const URI_FUNC(ConstPwd); +extern const URI_CHAR* const URI_FUNC(ConstParent); void URI_FUNC(ResetUri)(URI_TYPE(Uri) * uri); -int URI_FUNC(CompareRange)( - const URI_TYPE(TextRange) * a, - const URI_TYPE(TextRange) * b); +int URI_FUNC(CompareRange)(const URI_TYPE(TextRange) * a, + const URI_TYPE(TextRange) * b); UriBool URI_FUNC(RemoveDotSegmentsAbsolute)(URI_TYPE(Uri) * uri, - UriMemoryManager * memory); -UriBool URI_FUNC(RemoveDotSegmentsEx)(URI_TYPE(Uri) * uri, - UriBool relative, UriBool pathOwned, UriMemoryManager * memory); + UriMemoryManager* memory); +UriBool URI_FUNC(RemoveDotSegmentsEx)(URI_TYPE(Uri) * uri, UriBool relative, + UriBool pathOwned, + UriMemoryManager* memory); unsigned char URI_FUNC(HexdigToInt)(URI_CHAR hexdig); URI_CHAR URI_FUNC(HexToLetter)(unsigned int value); @@ -94,14 +91,14 @@ URI_CHAR URI_FUNC(HexToLetterEx)(unsigned int value, UriBool uppercase); UriBool URI_FUNC(IsHostSet)(const URI_TYPE(Uri) * uri); UriBool URI_FUNC(CopyPath)(URI_TYPE(Uri) * dest, const URI_TYPE(Uri) * source, - UriMemoryManager * memory); + UriMemoryManager* memory); UriBool URI_FUNC(CopyAuthority)(URI_TYPE(Uri) * dest, - const URI_TYPE(Uri) * source, UriMemoryManager * memory); + const URI_TYPE(Uri) * source, + UriMemoryManager* memory); -UriBool URI_FUNC(FixAmbiguity)(URI_TYPE(Uri) * uri, UriMemoryManager * memory); +UriBool URI_FUNC(FixAmbiguity)(URI_TYPE(Uri) * uri, UriMemoryManager* memory); void URI_FUNC(FixEmptyTrailSegment)(URI_TYPE(Uri) * uri, - UriMemoryManager * memory); - + UriMemoryManager* memory); #endif #endif diff --git a/vendor/jsontoolkit/vendor/uriparser/src/UriIp4Base.h b/vendor/jsontoolkit/vendor/uriparser/src/UriIp4Base.h index 48678502..17a090f6 100644 --- a/vendor/jsontoolkit/vendor/uriparser/src/UriIp4Base.h +++ b/vendor/jsontoolkit/vendor/uriparser/src/UriIp4Base.h @@ -40,20 +40,14 @@ #ifndef URI_IP4_BASE_H #define URI_IP4_BASE_H 1 - - typedef struct UriIp4ParserStruct { - unsigned char stackCount; - unsigned char stackOne; - unsigned char stackTwo; - unsigned char stackThree; + unsigned char stackCount; + unsigned char stackOne; + unsigned char stackTwo; + unsigned char stackThree; } UriIp4Parser; - - -void uriPushToStack(UriIp4Parser * parser, unsigned char digit); -void uriStackToOctet(UriIp4Parser * parser, unsigned char * octet); - - +void uriPushToStack(UriIp4Parser* parser, unsigned char digit); +void uriStackToOctet(UriIp4Parser* parser, unsigned char* octet); #endif /* URI_IP4_BASE_H */ diff --git a/vendor/jsontoolkit/vendor/uriparser/src/UriMemory.h b/vendor/jsontoolkit/vendor/uriparser/src/UriMemory.h index a930f93a..5d7a3df6 100644 --- a/vendor/jsontoolkit/vendor/uriparser/src/UriMemory.h +++ b/vendor/jsontoolkit/vendor/uriparser/src/UriMemory.h @@ -40,39 +40,29 @@ #ifndef URI_MEMORY_H #define URI_MEMORY_H 1 - - #ifndef URI_DOXYGEN -# include +#include #endif - - -#define URI_CHECK_MEMORY_MANAGER(memory) \ - do { \ - if (memory == NULL) { \ - memory = &defaultMemoryManager; \ - } else if (uriMemoryManagerIsComplete(memory) != URI_TRUE) { \ - return URI_ERROR_MEMORY_MANAGER_INCOMPLETE; \ - } \ - } while (0) - - +#define URI_CHECK_MEMORY_MANAGER(memory) \ + do { \ + if (memory == NULL) { \ + memory = &defaultMemoryManager; \ + } else if (uriMemoryManagerIsComplete(memory) != URI_TRUE) { \ + return URI_ERROR_MEMORY_MANAGER_INCOMPLETE; \ + } \ + } while (0) #ifdef __cplusplus -# define URIPARSER_EXTERN extern "C" +#define URIPARSER_EXTERN extern "C" #else -# define URIPARSER_EXTERN extern +#define URIPARSER_EXTERN extern #endif URIPARSER_EXTERN UriMemoryManager defaultMemoryManager; #undef URIPARSER_EXTERN - - -UriBool uriMemoryManagerIsComplete(const UriMemoryManager * memory); - - +UriBool uriMemoryManagerIsComplete(const UriMemoryManager* memory); #endif /* URI_MEMORY_H */ diff --git a/vendor/jsontoolkit/vendor/uriparser/src/UriNormalizeBase.h b/vendor/jsontoolkit/vendor/uriparser/src/UriNormalizeBase.h index 8651c861..789fa4b2 100644 --- a/vendor/jsontoolkit/vendor/uriparser/src/UriNormalizeBase.h +++ b/vendor/jsontoolkit/vendor/uriparser/src/UriNormalizeBase.h @@ -40,14 +40,8 @@ #ifndef URI_NORMALIZE_BASE_H #define URI_NORMALIZE_BASE_H 1 - - #include - - UriBool uriIsUnreserved(int code); - - #endif /* URI_NORMALIZE_BASE_H */ diff --git a/vendor/jsontoolkit/vendor/uriparser/src/UriParseBase.h b/vendor/jsontoolkit/vendor/uriparser/src/UriParseBase.h index 6d7379de..af3a9cb4 100644 --- a/vendor/jsontoolkit/vendor/uriparser/src/UriParseBase.h +++ b/vendor/jsontoolkit/vendor/uriparser/src/UriParseBase.h @@ -40,16 +40,10 @@ #ifndef URI_PARSE_BASE_H #define URI_PARSE_BASE_H 1 - - #include - - -void uriWriteQuadToDoubleByte(const unsigned char * hexDigits, int digitCount, - unsigned char * output); -unsigned char uriGetOctetValue(const unsigned char * digits, int digitCount); - - +void uriWriteQuadToDoubleByte(const unsigned char* hexDigits, int digitCount, + unsigned char* output); +unsigned char uriGetOctetValue(const unsigned char* digits, int digitCount); #endif /* URI_PARSE_BASE_H */ diff --git a/vendor/termcolor/include/termcolor/termcolor.hpp b/vendor/termcolor/include/termcolor/termcolor.hpp index d94e991b..25eed41d 100644 --- a/vendor/termcolor/include/termcolor/termcolor.hpp +++ b/vendor/termcolor/include/termcolor/termcolor.hpp @@ -17,923 +17,777 @@ // Detect target's platform and set some macros in order to wrap platform // specific code this library depends on. #if defined(_WIN32) || defined(_WIN64) -# define TERMCOLOR_TARGET_WINDOWS -#elif defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)) -# define TERMCOLOR_TARGET_POSIX +#define TERMCOLOR_TARGET_WINDOWS +#elif defined(__unix__) || defined(__unix) || \ + (defined(__APPLE__) && defined(__MACH__)) +#define TERMCOLOR_TARGET_POSIX #endif // If implementation has not been explicitly set, try to choose one based on // target platform. -#if !defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) && !defined(TERMCOLOR_USE_WINDOWS_API) && !defined(TERMCOLOR_USE_NOOP) -# if defined(TERMCOLOR_TARGET_POSIX) -# define TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES -# define TERMCOLOR_AUTODETECTED_IMPLEMENTATION -# elif defined(TERMCOLOR_TARGET_WINDOWS) -# define TERMCOLOR_USE_WINDOWS_API -# define TERMCOLOR_AUTODETECTED_IMPLEMENTATION -# endif +#if !defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) && \ + !defined(TERMCOLOR_USE_WINDOWS_API) && !defined(TERMCOLOR_USE_NOOP) +#if defined(TERMCOLOR_TARGET_POSIX) +#define TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES +#define TERMCOLOR_AUTODETECTED_IMPLEMENTATION +#elif defined(TERMCOLOR_TARGET_WINDOWS) +#define TERMCOLOR_USE_WINDOWS_API +#define TERMCOLOR_AUTODETECTED_IMPLEMENTATION +#endif #endif // These headers provide isatty()/fileno() functions, which are used for // testing whether a standard stream refers to the terminal. #if defined(TERMCOLOR_TARGET_POSIX) -# include +#include #elif defined(TERMCOLOR_TARGET_WINDOWS) -# include -# include -#endif - - -namespace termcolor -{ - // Forward declaration of the `_internal` namespace. - // All comments are below. - namespace _internal - { - inline int colorize_index(); - inline FILE* get_standard_stream(const std::ostream& stream); - inline FILE* get_standard_stream(const std::wostream& stream); - template - bool is_colorized(std::basic_ostream& stream); - template - bool is_atty(const std::basic_ostream& stream); - - #if defined(TERMCOLOR_TARGET_WINDOWS) - template - void win_change_attributes(std::basic_ostream& stream, int foreground, int background = -1); - #endif - } - - template - std::basic_ostream& colorize(std::basic_ostream& stream) - { - stream.iword(_internal::colorize_index()) = 1L; - return stream; - } - - template - std::basic_ostream& nocolorize(std::basic_ostream& stream) - { - stream.iword(_internal::colorize_index()) = 0L; - return stream; - } - - template - std::basic_ostream& reset(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[00m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, -1); - #endif - } - return stream; - } - - template - std::basic_ostream& bold(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[1m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - template - std::basic_ostream& dark(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[2m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - template - std::basic_ostream& italic(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[3m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - template - std::basic_ostream& underline(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[4m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, COMMON_LVB_UNDERSCORE); - #endif - } - return stream; - } - - template - std::basic_ostream& blink(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[5m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - template - std::basic_ostream& reverse(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[7m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - template - std::basic_ostream& concealed(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[8m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - template - std::basic_ostream& crossed(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[9m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - template - std::basic_ostream& color(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[38;5;" << +code << "m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - template - std::basic_ostream& on_color(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[48;5;" << +code << "m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - template - std::basic_ostream& color(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[38;2;" << +r << ";" << +g << ";" << +b << "m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - template - std::basic_ostream& on_color(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[48;2;" << +r << ";" << +g << ";" << +b << "m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - template - std::basic_ostream& grey(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[30m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - 0 // grey (black) - ); - #endif - } - return stream; - } - - template - std::basic_ostream& red(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[31m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_RED - ); - #endif - } - return stream; - } - - template - std::basic_ostream& green(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[32m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_GREEN - ); - #endif - } - return stream; - } - - template - std::basic_ostream& yellow(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[33m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_GREEN | FOREGROUND_RED - ); - #endif - } - return stream; - } - - template - std::basic_ostream& blue(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[34m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE - ); - #endif - } - return stream; - } - - template - std::basic_ostream& magenta(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[35m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE | FOREGROUND_RED - ); - #endif - } - return stream; - } - - template - std::basic_ostream& cyan(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[36m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE | FOREGROUND_GREEN - ); - #endif - } - return stream; - } - - template - std::basic_ostream& white(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[37m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED - ); - #endif - } - return stream; - } - - - template - std::basic_ostream& bright_grey(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[90m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - 0 | FOREGROUND_INTENSITY // grey (black) - ); - #endif - } - return stream; - } - - template - std::basic_ostream& bright_red(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[91m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_RED | FOREGROUND_INTENSITY - ); - #endif - } - return stream; - } - - template - std::basic_ostream& bright_green(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[92m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_GREEN | FOREGROUND_INTENSITY - ); - #endif - } - return stream; - } - - template - std::basic_ostream& bright_yellow(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[93m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY - ); - #endif - } - return stream; - } - - template - std::basic_ostream& bright_blue(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[94m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE | FOREGROUND_INTENSITY - ); - #endif - } - return stream; - } - - template - std::basic_ostream& bright_magenta(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[95m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY - ); - #endif - } - return stream; - } - - template - std::basic_ostream& bright_cyan(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[96m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY - ); - #endif - } - return stream; - } - - template - std::basic_ostream& bright_white(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[97m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY - ); - #endif - } - return stream; - } - - - template - std::basic_ostream& on_grey(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[40m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - 0 // grey (black) - ); - #endif - } - return stream; - } - - template - std::basic_ostream& on_red(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[41m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_RED - ); - #endif - } - return stream; - } - - template - std::basic_ostream& on_green(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[42m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN - ); - #endif - } - return stream; - } - - template - std::basic_ostream& on_yellow(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[43m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN | BACKGROUND_RED - ); - #endif - } - return stream; - } - - template - std::basic_ostream& on_blue(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[44m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_BLUE - ); - #endif - } - return stream; - } - - template - std::basic_ostream& on_magenta(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[45m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_BLUE | BACKGROUND_RED - ); - #endif - } - return stream; - } - - template - std::basic_ostream& on_cyan(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[46m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN | BACKGROUND_BLUE - ); - #endif - } - return stream; - } - - template - std::basic_ostream& on_white(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[47m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_RED - ); - #endif - } - - return stream; - } - - - template - std::basic_ostream& on_bright_grey(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[100m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - 0 | BACKGROUND_INTENSITY // grey (black) - ); - #endif - } - return stream; - } - - template - std::basic_ostream& on_bright_red(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[101m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_RED | BACKGROUND_INTENSITY - ); - #endif - } - return stream; - } - - template - std::basic_ostream& on_bright_green(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[102m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN | BACKGROUND_INTENSITY - ); - #endif - } - return stream; - } - - template - std::basic_ostream& on_bright_yellow(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[103m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY - ); - #endif - } - return stream; - } - - template - std::basic_ostream& on_bright_blue(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[104m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_BLUE | BACKGROUND_INTENSITY - ); - #endif - } - return stream; - } - - template - std::basic_ostream& on_bright_magenta(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[105m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY - ); - #endif - } - return stream; - } - - template - std::basic_ostream& on_bright_cyan(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[106m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY - ); - #endif - } - return stream; - } - - template - std::basic_ostream& on_bright_white(std::basic_ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[107m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY - ); - #endif - } - - return stream; - } - - - - //! Since C++ hasn't a way to hide something in the header from - //! the outer access, I have to introduce this namespace which - //! is used for internal purpose and should't be access from - //! the user code. - namespace _internal - { - // An index to be used to access a private storage of I/O streams. See - // colorize / nocolorize I/O manipulators for details. Due to the fact - // that static variables ain't shared between translation units, inline - // function with local static variable is used to do the trick and share - // the variable value between translation units. - inline int colorize_index() - { - static int colorize_index = std::ios_base::xalloc(); - return colorize_index; - } - - //! Since C++ hasn't a true way to extract stream handler - //! from the a given `std::ostream` object, I have to write - //! this kind of hack. - inline - FILE* get_standard_stream(const std::ostream& stream) - { - if (&stream == &std::cout) - return stdout; - else if (&stream == &std::cerr || &stream == &std::clog) - return stderr; - - return nullptr; - } - - //! Since C++ hasn't a true way to extract stream handler - //! from the a given `std::wostream` object, I have to write - //! this kind of hack. - inline - FILE* get_standard_stream(const std::wostream& stream) - { - if (&stream == &std::wcout) - return stdout; - else if (&stream == &std::wcerr || &stream == &std::wclog) - return stderr; - - return nullptr; - } - - // Say whether a given stream should be colorized or not. It's always - // true for ATTY streams and may be true for streams marked with - // colorize flag. - template - bool is_colorized(std::basic_ostream& stream) - { - return is_atty(stream) || static_cast(stream.iword(colorize_index())); - } - - //! Test whether a given `std::ostream` object refers to - //! a terminal. - template - bool is_atty(const std::basic_ostream& stream) - { - FILE* std_stream = get_standard_stream(stream); - - // Unfortunately, fileno() ends with segmentation fault - // if invalid file descriptor is passed. So we need to - // handle this case gracefully and assume it's not a tty - // if standard stream is not detected, and 0 is returned. - if (!std_stream) - return false; - - #if defined(TERMCOLOR_TARGET_POSIX) - return ::isatty(fileno(std_stream)); - #elif defined(TERMCOLOR_TARGET_WINDOWS) - return ::_isatty(_fileno(std_stream)); - #else - return false; - #endif - } - - #if defined(TERMCOLOR_TARGET_WINDOWS) - - //! same hack as used in get_standard_stream function, but for Windows with `std::ostream` - inline HANDLE get_terminal_handle(std::ostream& stream) - { - if (&stream == &std::cout) - return GetStdHandle(STD_OUTPUT_HANDLE); - else if (&stream == &std::cerr || &stream == &std::clog) - return GetStdHandle(STD_ERROR_HANDLE); - return nullptr; - } - - //! same hack as used in get_standard_stream function, but for Windows with `std::wostream` - inline HANDLE get_terminal_handle(std::wostream& stream) - { - if (&stream == &std::wcout) - return GetStdHandle(STD_OUTPUT_HANDLE); - else if (&stream == &std::wcerr || &stream == &std::wclog) - return GetStdHandle(STD_ERROR_HANDLE); - return nullptr; - } - - //! Change Windows Terminal colors attribute. If some - //! parameter is `-1` then attribute won't changed. - template - void win_change_attributes(std::basic_ostream& stream, int foreground, int background) - { - // yeah, i know.. it's ugly, it's windows. - static WORD defaultAttributes = 0; - - // Windows doesn't have ANSI escape sequences and so we use special - // API to change Terminal output color. That means we can't - // manipulate colors by means of "std::stringstream" and hence - // should do nothing in this case. - if (!_internal::is_atty(stream)) - return; - - // get terminal handle - HANDLE hTerminal = INVALID_HANDLE_VALUE; - hTerminal = get_terminal_handle(stream); - - // save default terminal attributes if it unsaved - if (!defaultAttributes) - { - CONSOLE_SCREEN_BUFFER_INFO info; - if (!GetConsoleScreenBufferInfo(hTerminal, &info)) - return; - defaultAttributes = info.wAttributes; - } - - // restore all default settings - if (foreground == -1 && background == -1) - { - SetConsoleTextAttribute(hTerminal, defaultAttributes); - return; - } - - // get current settings - CONSOLE_SCREEN_BUFFER_INFO info; - if (!GetConsoleScreenBufferInfo(hTerminal, &info)) - return; - - if (foreground != -1) - { - info.wAttributes &= ~(info.wAttributes & 0x0F); - info.wAttributes |= static_cast(foreground); - } - - if (background != -1) - { - info.wAttributes &= ~(info.wAttributes & 0xF0); - info.wAttributes |= static_cast(background); - } - - SetConsoleTextAttribute(hTerminal, info.wAttributes); - } - #endif // TERMCOLOR_TARGET_WINDOWS - - } // namespace _internal +#include +#include +#endif -} // namespace termcolor +namespace termcolor { +// Forward declaration of the `_internal` namespace. +// All comments are below. +namespace _internal { +inline int colorize_index(); +inline FILE *get_standard_stream(const std::ostream &stream); +inline FILE *get_standard_stream(const std::wostream &stream); +template bool is_colorized(std::basic_ostream &stream); +template bool is_atty(const std::basic_ostream &stream); + +#if defined(TERMCOLOR_TARGET_WINDOWS) +template +void win_change_attributes(std::basic_ostream &stream, int foreground, + int background = -1); +#endif +} // namespace _internal + +template +std::basic_ostream &colorize(std::basic_ostream &stream) { + stream.iword(_internal::colorize_index()) = 1L; + return stream; +} + +template +std::basic_ostream &nocolorize(std::basic_ostream &stream) { + stream.iword(_internal::colorize_index()) = 0L; + return stream; +} + +template +std::basic_ostream &reset(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[00m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, -1); +#endif + } + return stream; +} + +template +std::basic_ostream &bold(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[1m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) +#endif + } + return stream; +} + +template +std::basic_ostream &dark(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[2m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) +#endif + } + return stream; +} + +template +std::basic_ostream &italic(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[3m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) +#endif + } + return stream; +} + +template +std::basic_ostream &underline(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[4m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, COMMON_LVB_UNDERSCORE); +#endif + } + return stream; +} + +template +std::basic_ostream &blink(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[5m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) +#endif + } + return stream; +} + +template +std::basic_ostream &reverse(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[7m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) +#endif + } + return stream; +} + +template +std::basic_ostream &concealed(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[8m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) +#endif + } + return stream; +} + +template +std::basic_ostream &crossed(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[9m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) +#endif + } + return stream; +} + +template +std::basic_ostream &color(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[38;5;" << +code << "m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) +#endif + } + return stream; +} + +template +std::basic_ostream &on_color(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[48;5;" << +code << "m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) +#endif + } + return stream; +} + +template +std::basic_ostream &color(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[38;2;" << +r << ";" << +g << ";" << +b << "m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) +#endif + } + return stream; +} + +template +std::basic_ostream &on_color(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[48;2;" << +r << ";" << +g << ";" << +b << "m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) +#endif + } + return stream; +} + +template +std::basic_ostream &grey(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[30m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + 0 // grey (black) + ); +#endif + } + return stream; +} + +template +std::basic_ostream &red(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[31m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, FOREGROUND_RED); +#endif + } + return stream; +} + +template +std::basic_ostream &green(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[32m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, FOREGROUND_GREEN); +#endif + } + return stream; +} + +template +std::basic_ostream &yellow(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[33m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, FOREGROUND_GREEN | FOREGROUND_RED); +#endif + } + return stream; +} + +template +std::basic_ostream &blue(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[34m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, FOREGROUND_BLUE); +#endif + } + return stream; +} + +template +std::basic_ostream &magenta(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[35m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, FOREGROUND_BLUE | FOREGROUND_RED); +#endif + } + return stream; +} + +template +std::basic_ostream &cyan(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[36m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_BLUE | FOREGROUND_GREEN); +#endif + } + return stream; +} + +template +std::basic_ostream &white(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[37m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes( + stream, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED); +#endif + } + return stream; +} + +template +std::basic_ostream &bright_grey(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[90m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + 0 | FOREGROUND_INTENSITY // grey (black) + ); +#endif + } + return stream; +} + +template +std::basic_ostream &bright_red(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[91m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_RED | FOREGROUND_INTENSITY); +#endif + } + return stream; +} + +template +std::basic_ostream &bright_green(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[92m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_GREEN | FOREGROUND_INTENSITY); +#endif + } + return stream; +} + +template +std::basic_ostream &bright_yellow(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[93m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, FOREGROUND_GREEN | FOREGROUND_RED | + FOREGROUND_INTENSITY); +#endif + } + return stream; +} + +template +std::basic_ostream &bright_blue(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[94m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_BLUE | FOREGROUND_INTENSITY); +#endif + } + return stream; +} + +template +std::basic_ostream &bright_magenta(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[95m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, FOREGROUND_BLUE | FOREGROUND_RED | + FOREGROUND_INTENSITY); +#endif + } + return stream; +} + +template +std::basic_ostream &bright_cyan(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[96m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes( + stream, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY); +#endif + } + return stream; +} + +template +std::basic_ostream &bright_white(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[97m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_BLUE | FOREGROUND_GREEN | + FOREGROUND_RED | FOREGROUND_INTENSITY); +#endif + } + return stream; +} + +template +std::basic_ostream &on_grey(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[40m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + 0 // grey (black) + ); +#endif + } + return stream; +} + +template +std::basic_ostream &on_red(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[41m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, BACKGROUND_RED); +#endif + } + return stream; +} + +template +std::basic_ostream &on_green(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[42m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, BACKGROUND_GREEN); +#endif + } + return stream; +} + +template +std::basic_ostream &on_yellow(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[43m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_GREEN | BACKGROUND_RED); +#endif + } + return stream; +} + +template +std::basic_ostream &on_blue(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[44m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, BACKGROUND_BLUE); +#endif + } + return stream; +} + +template +std::basic_ostream &on_magenta(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[45m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_BLUE | BACKGROUND_RED); +#endif + } + return stream; +} + +template +std::basic_ostream &on_cyan(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[46m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_GREEN | BACKGROUND_BLUE); +#endif + } + return stream; +} + +template +std::basic_ostream &on_white(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[47m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes( + stream, -1, BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_RED); +#endif + } + + return stream; +} + +template +std::basic_ostream &on_bright_grey(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[100m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + 0 | BACKGROUND_INTENSITY // grey (black) + ); +#endif + } + return stream; +} + +template +std::basic_ostream &on_bright_red(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[101m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_RED | BACKGROUND_INTENSITY); +#endif + } + return stream; +} + +template +std::basic_ostream &on_bright_green(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[102m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_GREEN | BACKGROUND_INTENSITY); +#endif + } + return stream; +} + +template +std::basic_ostream &on_bright_yellow(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[103m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes( + stream, -1, BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY); +#endif + } + return stream; +} + +template +std::basic_ostream &on_bright_blue(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[104m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_BLUE | BACKGROUND_INTENSITY); +#endif + } + return stream; +} + +template +std::basic_ostream & +on_bright_magenta(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[105m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes( + stream, -1, BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY); +#endif + } + return stream; +} + +template +std::basic_ostream &on_bright_cyan(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[106m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes( + stream, -1, BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY); +#endif + } + return stream; +} + +template +std::basic_ostream &on_bright_white(std::basic_ostream &stream) { + if (_internal::is_colorized(stream)) { +#if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[107m"; +#elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_GREEN | BACKGROUND_BLUE | + BACKGROUND_RED | BACKGROUND_INTENSITY); +#endif + } + + return stream; +} + +//! Since C++ hasn't a way to hide something in the header from +//! the outer access, I have to introduce this namespace which +//! is used for internal purpose and should't be access from +//! the user code. +namespace _internal { +// An index to be used to access a private storage of I/O streams. See +// colorize / nocolorize I/O manipulators for details. Due to the fact +// that static variables ain't shared between translation units, inline +// function with local static variable is used to do the trick and share +// the variable value between translation units. +inline int colorize_index() { + static int colorize_index = std::ios_base::xalloc(); + return colorize_index; +} + +//! Since C++ hasn't a true way to extract stream handler +//! from the a given `std::ostream` object, I have to write +//! this kind of hack. +inline FILE *get_standard_stream(const std::ostream &stream) { + if (&stream == &std::cout) + return stdout; + else if (&stream == &std::cerr || &stream == &std::clog) + return stderr; + + return nullptr; +} + +//! Since C++ hasn't a true way to extract stream handler +//! from the a given `std::wostream` object, I have to write +//! this kind of hack. +inline FILE *get_standard_stream(const std::wostream &stream) { + if (&stream == &std::wcout) + return stdout; + else if (&stream == &std::wcerr || &stream == &std::wclog) + return stderr; + + return nullptr; +} + +// Say whether a given stream should be colorized or not. It's always +// true for ATTY streams and may be true for streams marked with +// colorize flag. +template bool is_colorized(std::basic_ostream &stream) { + return is_atty(stream) || static_cast(stream.iword(colorize_index())); +} + +//! Test whether a given `std::ostream` object refers to +//! a terminal. +template +bool is_atty(const std::basic_ostream &stream) { + FILE *std_stream = get_standard_stream(stream); + + // Unfortunately, fileno() ends with segmentation fault + // if invalid file descriptor is passed. So we need to + // handle this case gracefully and assume it's not a tty + // if standard stream is not detected, and 0 is returned. + if (!std_stream) + return false; +#if defined(TERMCOLOR_TARGET_POSIX) + return ::isatty(fileno(std_stream)); +#elif defined(TERMCOLOR_TARGET_WINDOWS) + return ::_isatty(_fileno(std_stream)); +#else + return false; +#endif +} + +#if defined(TERMCOLOR_TARGET_WINDOWS) + +//! same hack as used in get_standard_stream function, but for Windows with +//! `std::ostream` +inline HANDLE get_terminal_handle(std::ostream &stream) { + if (&stream == &std::cout) + return GetStdHandle(STD_OUTPUT_HANDLE); + else if (&stream == &std::cerr || &stream == &std::clog) + return GetStdHandle(STD_ERROR_HANDLE); + return nullptr; +} + +//! same hack as used in get_standard_stream function, but for Windows with +//! `std::wostream` +inline HANDLE get_terminal_handle(std::wostream &stream) { + if (&stream == &std::wcout) + return GetStdHandle(STD_OUTPUT_HANDLE); + else if (&stream == &std::wcerr || &stream == &std::wclog) + return GetStdHandle(STD_ERROR_HANDLE); + return nullptr; +} + +//! Change Windows Terminal colors attribute. If some +//! parameter is `-1` then attribute won't changed. +template +void win_change_attributes(std::basic_ostream &stream, int foreground, + int background) { + // yeah, i know.. it's ugly, it's windows. + static WORD defaultAttributes = 0; + + // Windows doesn't have ANSI escape sequences and so we use special + // API to change Terminal output color. That means we can't + // manipulate colors by means of "std::stringstream" and hence + // should do nothing in this case. + if (!_internal::is_atty(stream)) + return; + + // get terminal handle + HANDLE hTerminal = INVALID_HANDLE_VALUE; + hTerminal = get_terminal_handle(stream); + + // save default terminal attributes if it unsaved + if (!defaultAttributes) { + CONSOLE_SCREEN_BUFFER_INFO info; + if (!GetConsoleScreenBufferInfo(hTerminal, &info)) + return; + defaultAttributes = info.wAttributes; + } + + // restore all default settings + if (foreground == -1 && background == -1) { + SetConsoleTextAttribute(hTerminal, defaultAttributes); + return; + } + + // get current settings + CONSOLE_SCREEN_BUFFER_INFO info; + if (!GetConsoleScreenBufferInfo(hTerminal, &info)) + return; + + if (foreground != -1) { + info.wAttributes &= ~(info.wAttributes & 0x0F); + info.wAttributes |= static_cast(foreground); + } + + if (background != -1) { + info.wAttributes &= ~(info.wAttributes & 0xF0); + info.wAttributes |= static_cast(background); + } + + SetConsoleTextAttribute(hTerminal, info.wAttributes); +} +#endif // TERMCOLOR_TARGET_WINDOWS + +} // namespace _internal + +} // namespace termcolor #undef TERMCOLOR_TARGET_POSIX #undef TERMCOLOR_TARGET_WINDOWS #if defined(TERMCOLOR_AUTODETECTED_IMPLEMENTATION) -# undef TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES -# undef TERMCOLOR_USE_WINDOWS_API +#undef TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES +#undef TERMCOLOR_USE_WINDOWS_API #endif #endif // TERMCOLOR_HPP_