1
0
Fork 0
mirror of https://github.com/BLAKE3-team/BLAKE3 synced 2024-05-09 03:26:16 +02:00

Compare commits

...

5 Commits

Author SHA1 Message Date
Jakub Zwolakowski ce3350456f
Merge c97df99108 into 0816badf3a 2024-04-18 21:12:52 -04:00
Javier Blazquez 0816badf3a fix Windows ARM64 build and detect ARM64EC as ARM64 2024-04-07 11:48:02 -04:00
Jakub Zwolakowski c97df99108 Improve the robustness of the TIS CI config. 2020-11-05 10:35:04 +01:00
Jakub Zwolakowski 64d89c74c9 Keep the testing badges together. 2020-11-05 10:26:09 +01:00
Jakub Zwolakowski 3e4085abae Initial TIS-CI configuration, four architectures: x86 and ppc, 32-bit and 64-bit. 2020-11-05 10:26:09 +01:00
253 changed files with 15693 additions and 3 deletions

3
.gitignore vendored
View File

@ -1,2 +1,5 @@
Cargo.lock
target
# TIS-CI
__vfs-tis*.[c|h]

View File

@ -65,6 +65,7 @@ This repository is the official implementation of BLAKE3. It includes:
lengths.
* [![Actions Status](https://github.com/BLAKE3-team/BLAKE3/workflows/tests/badge.svg)](https://github.com/BLAKE3-team/BLAKE3/actions)
[![TrustInSoft CI](https://ci.trust-in-soft.com/projects/BLAKE3-team/BLAKE3.svg?branch=master)](https://ci.trust-in-soft.com/projects/BLAKE3-team/BLAKE3)
BLAKE3 was designed by:

View File

@ -4,9 +4,12 @@
#include "blake3_impl.h"
#if defined(IS_X86)
#if defined(_MSC_VER)
#include <Windows.h>
#endif
#if defined(IS_X86)
#if defined(_MSC_VER)
#include <intrin.h>
#elif defined(__GNUC__)
#include <immintrin.h>

View File

@ -28,7 +28,7 @@ enum blake3_flags {
#define INLINE static inline __attribute__((always_inline))
#endif
#if defined(__x86_64__) || defined(_M_X64)
#if (defined(__x86_64__) || defined(_M_X64)) && !defined(_M_ARM64EC)
#define IS_X86
#define IS_X86_64
#endif
@ -38,7 +38,7 @@ enum blake3_flags {
#define IS_X86_32
#endif
#if defined(__aarch64__) || defined(_M_ARM64)
#if defined(__aarch64__) || defined(_M_ARM64) || defined(_M_ARM64EC)
#define IS_AARCH64
#endif

15006
tis.config Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,9 @@
{
"files": [
"test.c",
"../c/blake3.c",
"../c/blake3_dispatch.c",
"../c/blake3_portable.c"
],
"compilation_cmd": "-I.. -I../c -DBLAKE3_TESTING -DBLAKE3_NO_SSE41 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_AVX512 -U__clang__ -U__GNUC__ -U__x86_64__ -U__i386__"
}

273
trustinsoft/regenerate.py Executable file
View File

@ -0,0 +1,273 @@
#! /usr/bin/env python3
# This script regenerates TrustInSoft CI configuration.
# Run from the root of the BLAKE3 project:
# $ python3 trustinsoft/regenerate.py
import re # sub
import json # dumps, load
import os # path, makedirs
import binascii # hexlify
# Following function copied from c/test.py :
# -----------------------------------------------------------------------------
# Fill the input with a repeating byte pattern. We use a cycle length of 251,
# because that's the largets prime number less than 256. This makes it unlikely
# to swapping any two adjacent input blocks or chunks will give the same
# answer.
def make_test_input(length):
i = 0
buf = bytearray()
while len(buf) < length:
buf.append(i)
i = (i + 1) % 251
return buf
# -----------------------------------------------------------------------------
# Following line copied from c/test.py :
# -----------------------------------------------------------------------------
TEST_VECTORS_PATH = os.path.join("test_vectors", "test_vectors.json")
# -----------------------------------------------------------------------------
# Outputting JSON.
def string_of_json(obj):
# Output standard pretty-printed JSON (RFC 7159) with 4-space indentation.
s = json.dumps(obj, indent=4)
# Sometimes we need to have multiple "include" fields in the outputted
# JSON, which is unfortunately impossible in the internal python
# representation (OK, it is technically possible, but too cumbersome to
# bother implementing it here), so we can name these fields 'include_',
# 'include__', etc, and they are all converted to 'include' before
# outputting as JSON.
s = re.sub(r'"include_+"', '"include"', s)
return s
# --------------------------------------------------------------------------- #
# ---------------------------------- CHECKS --------------------------------- #
# --------------------------------------------------------------------------- #
def check_dir(dir):
if os.path.isdir(dir):
print(" > OK! Directory '%s' exists." % dir)
else:
exit("Directory '%s' not found." % dir)
def check_file(file):
if os.path.isfile(file):
print(" > OK! File '%s' exists." % file)
else:
exit("File '%s' not found." % file)
# Initial check.
print("1. Check if needed directories and files exist...")
check_dir("trustinsoft")
check_file(TEST_VECTORS_PATH)
# --------------------------------------------------------------------------- #
# -------------------- GENERATE trustinsoft/common.config ------------------- #
# --------------------------------------------------------------------------- #
common_config_path = os.path.join("trustinsoft", "common.config")
def string_of_options(options):
s = ''
beginning = True
for option_prefix in options:
for option_val in options[option_prefix]:
if beginning:
beginning = False # No need for a separator at the beginning.
else:
s += ' '
s += option_prefix + option_val
return s
def make_common_config():
# C files.
c_files = [
"blake3.c",
"blake3_dispatch.c",
"blake3_portable.c",
]
# Compilation options.
compilation_cmd = (
{
"-I": [
"..",
os.path.join("..", "c"),
],
"-D": [
"BLAKE3_TESTING",
"BLAKE3_NO_SSE41",
"BLAKE3_NO_AVX2",
"BLAKE3_NO_AVX512",
],
"-U": [
"__clang__",
"__GNUC__",
"__x86_64__",
"__i386__",
],
}
)
# Whole common.config JSON.
return {
"files": [ "test.c" ] +
list(map(lambda file: os.path.join("..", "c", file), c_files)),
"compilation_cmd": string_of_options(compilation_cmd),
}
common_config = make_common_config()
with open(common_config_path, "w") as file:
print("2. Generate the 'trustinsoft/common.config' file.")
file.write(string_of_json(common_config))
# --------------------------------------------------------------------------- #
# -------------------------------- tis.config ------------------------------- #
# --------------------------------------------------------------------------- #
# Following line copied from c/test.py :
# -----------------------------------------------------------------------------
TEST_VECTORS = json.load(open(TEST_VECTORS_PATH))
hex_key = binascii.hexlify(TEST_VECTORS["key"].encode())
context_string = TEST_VECTORS["context_string"]
# -----------------------------------------------------------------------------
machdeps = [
"gcc_x86_32",
"gcc_x86_64",
"gcc_ppc_32",
"gcc_ppc_64",
]
test_vectors_dir = os.path.join("trustinsoft", "test_vectors")
def test_vector_file(vector_no, name):
filename = "%02d_%s" % (vector_no, name)
return os.path.join(test_vectors_dir, filename)
def make_test(vector_no, test_case, machdep):
name = test_case["name"]
args = test_case["args"]
# Base of the single tis.config entry.
test = (
{
"name": ("Test vector %02d: %s (%s)" % (vector_no, name, machdep)),
"include": common_config_path,
"machdep": machdep,
"filesystem": {
"files": [
{
"name": "tis-mkfs-stdin",
"from": test_vector_file(vector_no, "input"),
},
{
"name": "expected",
"from": test_vector_file(vector_no, "expected_" + name),
},
],
},
}
)
# Add the field "val-args" if command line arguments are present.
if args:
test["val-args"] = ("%" + "%".join(args))
# Add field "no-results" for longest tests.
if vector_no >= 35:
test["no-results"] = True
# Done.
return test
def test_cases_of_test_vector(test_vector):
# Following lines copied from c/test.py :
# -------------------------------------------------------------------------
expected_hash_xof = test_vector["hash"]
expected_keyed_hash_xof = test_vector["keyed_hash"]
expected_hash = expected_hash_xof[:64]
expected_keyed_hash = expected_keyed_hash_xof[:64]
expected_derive_key_xof = test_vector["derive_key"]
expected_derive_key = expected_derive_key_xof[:64]
# -------------------------------------------------------------------------
return (
[
# Test the default hash.
{
"name": "hash",
"expected": expected_hash,
"args": [],
},
# Test the extended hash.
{
"name": "hash_xof",
"expected": expected_hash_xof,
"args": ["--length", str(len(expected_hash_xof) // 2)],
},
# Test the default keyed hash.
{
"name": "keyed_hash",
"expected": expected_keyed_hash,
"args": ["--keyed", hex_key.decode()],
},
# Test the extended keyed hash.
{
"name": "keyed_hash_xof",
"expected": expected_keyed_hash_xof,
"args": ["--keyed", hex_key.decode(), "--length",
str(len(expected_keyed_hash_xof) // 2)],
},
# Test the default derive key.
{
"name": "derive_key",
"expected": expected_derive_key,
"args": ["--derive-key", context_string],
},
# Test the extended derive key.
{
"name": "derive_key_xof",
"expected": expected_derive_key_xof,
"args": ["--derive-key", context_string, "--length",
str(len(expected_derive_key_xof) // 2)],
},
]
)
def make_tis_config_and_generate_test_vector_files():
# Prepare.
tis_config = []
os.makedirs(test_vectors_dir, exist_ok=True)
vector_no = 0
# Treat each test vector.
for test_vector in TEST_VECTORS["cases"]:
vector_no += 1
print(" > Test vector %2d" % vector_no) # Debug.
# Write the input file for this test vector.
# Following lines copied from c/test.py :
# ---------------------------------------------------------------------
input_len = test_vector["input_len"]
input = make_test_input(input_len)
# ---------------------------------------------------------------------
input_file = test_vector_file(vector_no, "input")
with open(input_file, "wb") as file:
file.write(input)
# Treat each test case in this test vector.
for test_case in test_cases_of_test_vector(test_vector):
# Write the expected output file for this test case.
expected_name = "expected_" + test_case["name"]
expected_file = test_vector_file(vector_no, expected_name)
with open(expected_file, "w") as file:
file.write(test_case["expected"])
# Generate an entry in the tis.config file.
# (One entry for each vector * case * machdep combination.)
for machdep in machdeps:
test = make_test(vector_no, test_case, machdep)
tis_config.append(test)
# Done.
return tis_config
tis_config = make_tis_config_and_generate_test_vector_files()
with open("tis.config", "w") as file:
print("3. Generate the tis.config file and test vector files.")
file.write(string_of_json(tis_config))

185
trustinsoft/test.c Normal file
View File

@ -0,0 +1,185 @@
/* Based on the c/main.c file. */
#include <assert.h>
#include <errno.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include "blake3.h"
#include "blake3_impl.h"
#define HASH_MODE 0
#define KEYED_HASH_MODE 1
#define DERIVE_KEY_MODE 2
static void hex_char_value(uint8_t c, uint8_t *value, bool *valid) {
if ('0' <= c && c <= '9') {
*value = c - '0';
*valid = true;
} else if ('a' <= c && c <= 'f') {
*value = 10 + c - 'a';
*valid = true;
} else {
*valid = false;
}
}
static int parse_key(char *hex_key, uint8_t out[BLAKE3_KEY_LEN]) {
size_t hex_len = strlen(hex_key);
if (hex_len != 64) {
fprintf(stderr, "Expected a 64-char hexadecimal key, got %zu chars.\n",
hex_len);
return 1;
}
for (size_t i = 0; i < 64; i++) {
uint8_t value;
bool valid;
hex_char_value(hex_key[i], &value, &valid);
if (!valid) {
fprintf(stderr, "Invalid hex char.\n");
return 1;
}
if (i % 2 == 0) {
out[i / 2] = 0;
value <<= 4;
}
out[i / 2] += value;
}
return 0;
}
int test(int argc, char **argv, FILE *fp_output) {
size_t out_len = BLAKE3_OUT_LEN;
uint8_t key[BLAKE3_KEY_LEN];
char *context = "";
uint8_t mode = HASH_MODE;
while (argc > 1) {
if (argc <= 2) {
fprintf(stderr, "Odd number of arguments.\n");
return 1;
}
if (strcmp("--length", argv[1]) == 0) {
char *endptr = NULL;
errno = 0;
unsigned long long out_len_ll = strtoull(argv[2], &endptr, 10);
if (errno != 0 || out_len > SIZE_MAX || endptr == argv[2] ||
*endptr != 0) {
fprintf(stderr, "Bad length argument.\n");
return 1;
}
out_len = (size_t)out_len_ll;
} else if (strcmp("--keyed", argv[1]) == 0) {
mode = KEYED_HASH_MODE;
int ret = parse_key(argv[2], key);
if (ret != 0) {
return ret;
}
} else if (strcmp("--derive-key", argv[1]) == 0) {
mode = DERIVE_KEY_MODE;
context = argv[2];
} else {
fprintf(stderr, "Unknown flag.\n");
return 1;
}
argc -= 2;
argv += 2;
}
/*
* We're going to hash the input multiple times, so we need to buffer it all.
* This is just for test cases, so go ahead and assume that the input is less
* than 1 MiB.
*/
size_t buf_capacity = 1 << 20;
uint8_t *buf = malloc(buf_capacity);
assert(buf != NULL);
size_t buf_len = 0;
while (1) {
size_t n = fread(&buf[buf_len], 1, buf_capacity - buf_len, stdin);
if (n == 0) {
break;
}
buf_len += n;
assert(buf_len < buf_capacity);
}
blake3_hasher hasher;
switch (mode) {
case HASH_MODE:
blake3_hasher_init(&hasher);
break;
case KEYED_HASH_MODE:
blake3_hasher_init_keyed(&hasher, key);
break;
case DERIVE_KEY_MODE:
blake3_hasher_init_derive_key(&hasher, context);
break;
default:
abort();
}
blake3_hasher_update(&hasher, buf, buf_len);
uint8_t *out = malloc(out_len);
if (out_len > 0 && out == NULL) {
fprintf(stderr, "malloc() failed.\n");
return 1;
}
blake3_hasher_finalize(&hasher, out, out_len);
for (size_t i = 0; i < out_len; i++) {
fprintf(fp_output, "%02x", (unsigned int) out[i]);
}
fprintf(fp_output, "\n");
free(out);
free(buf);
return 0;
}
int main(int argc, char **argv) {
/* 1. Prepare the output file. */
FILE *fp_output = fopen("output", "w+");
/* 2. Run the main test function and remember the return value. */
int main_retval = test(argc, argv, fp_output);
/* 3. Check if the actual test output and the expected output are the same. */
FILE *fp_expected = fopen("expected", "r");
int c_output, c_expected;
int ok = 1;
rewind(fp_output);
printf("Checking the output.");
while (1) {
c_output = fgetc(fp_output);
/* If the end of the test output is reached, stop. */
if (c_output == EOF)
break;
/* Each line of the test output should be compared with the same single line
of the expected output. */
if (c_output == '\n') {
rewind(fp_expected);
continue;
}
c_expected = fgetc(fp_expected);
/* Each character read from the test output should be the same as
the character read from the expected output. */
if (c_expected == c_output) {
printf("output = %c, expected = %c", c_output, c_expected);
} else {
ok = 0;
printf("output = %c, expected = %c : WRONG!", c_output, c_expected);
}
};
/*@ assert output_as_expected: ok == 1; */
printf("Done.");
fclose(fp_expected);
fclose(fp_output);
/* 4. Finish up: return the main test function's return value. */
/*@ assert main_returns_zero: main_retval == 0; */
return main_retval;
}

View File

@ -0,0 +1 @@
2cc39783c223154fea8dfb7c1b1660f2ac2dcbd1c1de8277b0b0dd39b7e50d7d

View File

@ -0,0 +1 @@
2cc39783c223154fea8dfb7c1b1660f2ac2dcbd1c1de8277b0b0dd39b7e50d7d905630c8be290dfcf3e6842f13bddd573c098c3f17361f1f206b8cad9d088aa4a3f746752c6b0ce6a83b0da81d59649257cdf8eb3e9f7d4998e41021fac119deefb896224ac99f860011f73609e6e0e4540f93b273e56547dfd3aa1a035ba6689d89a0

View File

@ -0,0 +1 @@
af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262

View File

@ -0,0 +1 @@
af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262e00f03e7b69af26b7faaf09fcd333050338ddfe085b8cc869ca98b206c08243a26f5487789e8f660afe6c99ef9e0c52b92e7393024a80459cf91f476f9ffdbda7001c22e159b402631f277ca96f2defdf1078282314e763699a31c5363165421cce14d

View File

@ -0,0 +1 @@
92b2b75604ed3c761f9d6f62392c8a9227ad0ea3f09573e783f1498a4ed60d26

View File

@ -0,0 +1 @@
92b2b75604ed3c761f9d6f62392c8a9227ad0ea3f09573e783f1498a4ed60d26b18171a2f22a4b94822c701f107153dba24918c4bae4d2945c20ece13387627d3b73cbf97b797d5e59948c7ef788f54372df45e45e4293c7dc18c1d41144a9758be58960856be1eabbe22c2653190de560ca3b2ac4aa692a9210694254c371e851bc8f

View File

View File

@ -0,0 +1 @@
b3e2e340a117a499c6cf2398a19ee0d29cca2bb7404c73063382693bf66cb06c

View File

@ -0,0 +1 @@
b3e2e340a117a499c6cf2398a19ee0d29cca2bb7404c73063382693bf66cb06c5827b91bf889b6b97c5477f535361caefca0b5d8c4746441c57617111933158950670f9aa8a05d791daae10ac683cbef8faf897c84e6114a59d2173c3f417023a35d6983f2c7dfa57e7fc559ad751dbfb9ffab39c2ef8c4aafebc9ae973a64f0c76551

View File

@ -0,0 +1 @@
2d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213

View File

@ -0,0 +1 @@
2d3adedff11b61f14c886e35afa036736dcd87a74d27b5c1510225d0f592e213c3a6cb8bf623e20cdb535f8d1a5ffb86342d9c0b64aca3bce1d31f60adfa137b358ad4d79f97b47c3d5e79f179df87a3b9776ef8325f8329886ba42f07fb138bb502f4081cbcec3195c5871e6c23e2cc97d3c69a613eba131e5f1351f3f1da786545e5

View File

@ -0,0 +1 @@
6d7878dfff2f485635d39013278ae14f1454b8c0a3a2d34bc1ab38228a80c95b

View File

@ -0,0 +1 @@
6d7878dfff2f485635d39013278ae14f1454b8c0a3a2d34bc1ab38228a80c95b6568c0490609413006fbd428eb3fd14e7756d90f73a4725fad147f7bf70fd61c4e0cf7074885e92b0e3f125978b4154986d4fb202a3f331a3fb6cf349a3a70e49990f98fe4289761c8602c4e6ab1138d31d3b62218078b2f3ba9a88e1d08d0dd4cea11

Binary file not shown.

View File

@ -0,0 +1 @@
1f166565a7df0098ee65922d7fea425fb18b9943f19d6161e2d17939356168e6

View File

@ -0,0 +1 @@
1f166565a7df0098ee65922d7fea425fb18b9943f19d6161e2d17939356168e6daa59cae19892b2d54f6fc9f475d26031fd1c22ae0a3e8ef7bdb23f452a15e0027629d2e867b1bb1e6ab21c71297377750826c404dfccc2406bd57a83775f89e0b075e59a7732326715ef912078e213944f490ad68037557518b79c0086de6d6f6cdd2

View File

@ -0,0 +1 @@
7b7015bb92cf0b318037702a6cdd81dee41224f734684c2c122cd6359cb1ee63

View File

@ -0,0 +1 @@
7b7015bb92cf0b318037702a6cdd81dee41224f734684c2c122cd6359cb1ee63d8386b22e2ddc05836b7c1bb693d92af006deb5ffbc4c70fb44d0195d0c6f252faac61659ef86523aa16517f87cb5f1340e723756ab65efb2f91964e14391de2a432263a6faf1d146937b35a33621c12d00be8223a7f1919cec0acd12097ff3ab00ab1

View File

@ -0,0 +1 @@
5392ddae0e0a69d5f40160462cbd9bd889375082ff224ac9c758802b7a6fd20a

View File

@ -0,0 +1 @@
5392ddae0e0a69d5f40160462cbd9bd889375082ff224ac9c758802b7a6fd20a9ffbf7efd13e989a6c246f96d3a96b9d279f2c4e63fb0bdff633957acf50ee1a5f658be144bab0f6f16500dee4aa5967fc2c586d85a04caddec90fffb7633f46a60786024353b9e5cebe277fcd9514217fee2267dcda8f7b31697b7c54fab6a939bf8f

Binary file not shown.

View File

@ -0,0 +1 @@
440aba35cb006b61fc17c0529255de438efc06a8c9ebf3f2ddac3b5a86705797

View File

@ -0,0 +1 @@
440aba35cb006b61fc17c0529255de438efc06a8c9ebf3f2ddac3b5a86705797f27e2e914574f4d87ec04c379e12789eccbfbc15892626042707802dbe4e97c3ff59dca80c1e54246b6d055154f7348a39b7d098b2b4824ebe90e104e763b2a447512132cede16243484a55a4e40a85790038bb0dcf762e8c053cabae41bbe22a5bff7

View File

@ -0,0 +1 @@
e1be4d7a8ab5560aa4199eea339849ba8e293d55ca0a81006726d184519e647f

View File

@ -0,0 +1 @@
e1be4d7a8ab5560aa4199eea339849ba8e293d55ca0a81006726d184519e647f5b49b82f805a538c68915c1ae8035c900fd1d4b13902920fd05e1450822f36de9454b7e9996de4900c8e723512883f93f4345f8a58bfe64ee38d3ad71ab027765d25cdd0e448328a8e7a683b9a6af8b0af94fa09010d9186890b096a08471e4230a134

View File

@ -0,0 +1 @@
39e67b76b5a007d4921969779fe666da67b5213b096084ab674742f0d5ec62b9

View File

@ -0,0 +1 @@
39e67b76b5a007d4921969779fe666da67b5213b096084ab674742f0d5ec62b9b9142d0fab08e1b161efdbb28d18afc64d8f72160c958e53a950cdecf91c1a1bbab1a9c0f01def762a77e2e8545d4dec241e98a89b6db2e9a5b070fc110caae2622690bd7b76c02ab60750a3ea75426a6bb8803c370ffe465f07fb57def95df772c39f

Binary file not shown.

View File

@ -0,0 +1 @@
f46085c8190d69022369ce1a18880e9b369c135eb93f3c63550d3e7630e91060

View File

@ -0,0 +1 @@
f46085c8190d69022369ce1a18880e9b369c135eb93f3c63550d3e7630e91060fbd7d8f4258bec9da4e05044f88b91944f7cab317a2f0c18279629a3867fad0662c9ad4d42c6f27e5b124da17c8c4f3a94a025ba5d1b623686c6099d202a7317a82e3d95dae46a87de0555d727a5df55de44dab799a20dffe239594d6e99ed17950910

View File

@ -0,0 +1 @@
f30f5ab28fe047904037f77b6da4fea1e27241c5d132638d8bedce9d40494f32

View File

@ -0,0 +1 @@
f30f5ab28fe047904037f77b6da4fea1e27241c5d132638d8bedce9d40494f328f603ba4564453e06cdcee6cbe728a4519bbe6f0d41e8a14b5b225174a566dbfa61b56afb1e452dc08c804f8c3143c9e2cc4a31bb738bf8c1917b55830c6e65797211701dc0b98daa1faeaa6ee9e56ab606ce03a1a881e8f14e87a4acf4646272cfd12

View File

@ -0,0 +1 @@
7671dde590c95d5ac9616651ff5aa0a27bee5913a348e053b8aa9108917fe070

View File

@ -0,0 +1 @@
7671dde590c95d5ac9616651ff5aa0a27bee5913a348e053b8aa9108917fe070116c0acff3f0d1fa97ab38d813fd46506089118147d83393019b068a55d646251ecf81105f798d76a10ae413f3d925787d6216a7eb444e510fd56916f1d753a5544ecf0072134a146b2615b42f50c179f56b8fae0788008e3e27c67482349e249cb86a

Binary file not shown.

View File

@ -0,0 +1 @@
1f24eda69dbcb752847ec3ebb5dd42836d86e58500c7c98d906ecd82ed9ae47f

View File

@ -0,0 +1 @@
1f24eda69dbcb752847ec3ebb5dd42836d86e58500c7c98d906ecd82ed9ae47f6f48a3f67e4e43329c9a89b1ca526b9b35cbf7d25c1e353baffb590fd79be58ddb6c711f1a6b60e98620b851c688670412fcb0435657ba6b638d21f0f2a04f2f6b0bd8834837b10e438d5f4c7c2c71299cf7586ea9144ed09253d51f8f54dd6bff719d

View File

@ -0,0 +1 @@
b40b44dfd97e7a84a996a91af8b85188c66c126940ba7aad2e7ae6b385402aa2

View File

@ -0,0 +1 @@
b40b44dfd97e7a84a996a91af8b85188c66c126940ba7aad2e7ae6b385402aa2ebcfdac6c5d32c31209e1f81a454751280db64942ce395104e1e4eaca62607de1c2ca748251754ea5bbe8c20150e7f47efd57012c63b3c6a6632dc1c7cd15f3e1c999904037d60fac2eb9397f2adbe458d7f264e64f1e73aa927b30988e2aed2f03620

View File

@ -0,0 +1 @@
73ac69eecf286894d8102018a6fc729f4b1f4247d3703f69bdc6a5fe3e0c8461

View File

@ -0,0 +1 @@
73ac69eecf286894d8102018a6fc729f4b1f4247d3703f69bdc6a5fe3e0c84616ab199d1f2f3e53bffb17f0a2209fe8b4f7d4c7bae59c2bc7d01f1ff94c67588cc6b38fa6024886f2c078bfe09b5d9e6584cd6c521c3bb52f4de7687b37117a2dbbec0d59e92fa9a8cc3240d4432f91757aabcae03e87431dac003e7d73574bfdd8218

Binary file not shown.

View File

@ -0,0 +1 @@
be96b30b37919fe4379dfbe752ae77b4f7e2ab92f7ff27435f76f2f065f6a5f4

View File

@ -0,0 +1 @@
be96b30b37919fe4379dfbe752ae77b4f7e2ab92f7ff27435f76f2f065f6a5f435ae01a1d14bd5a6b3b69d8cbd35f0b01ef2173ff6f9b640ca0bd4748efa398bf9a9c0acd6a66d9332fdc9b47ffe28ba7ab6090c26747b85f4fab22f936b71eb3f64613d8bd9dfabe9bb68da19de78321b481e5297df9e40ec8a3d662f3e1479c65de0

View File

@ -0,0 +1 @@
06c4e8ffb6872fad96f9aaca5eee1553eb62aed0ad7198cef42e87f6a616c844

View File

@ -0,0 +1 @@
06c4e8ffb6872fad96f9aaca5eee1553eb62aed0ad7198cef42e87f6a616c844611a30c4e4f37fe2fe23c0883cde5cf7059d88b657c7ed2087e3d210925ede716435d6d5d82597a1e52b9553919e804f5656278bd739880692c94bff2824d8e0b48cac1d24682699e4883389dc4f2faa2eb3b4db6e39debd5061ff3609916f3e07529a

View File

@ -0,0 +1 @@
82d3199d0013035682cc7f2a399d4c212544376a839aa863a0f4c91220ca7a6d

View File

@ -0,0 +1 @@
82d3199d0013035682cc7f2a399d4c212544376a839aa863a0f4c91220ca7a6dc2ffb3aa05f2631f0fa9ac19b6e97eb7e6669e5ec254799350c8b8d189e8807800842a5383c4d907c932f34490aaf00064de8cdb157357bde37c1504d2960034930887603abc5ccb9f5247f79224baff6120a3c622a46d7b1bcaee02c5025460941256

Binary file not shown.

View File

@ -0,0 +1 @@
dc3b6485f9d94935329442916b0d059685ba815a1fa2a14107217453a7fc9f0e

View File

@ -0,0 +1 @@
dc3b6485f9d94935329442916b0d059685ba815a1fa2a14107217453a7fc9f0e66266db2ea7c96843f9d8208e600a73f7f45b2f55b9e6d6a7ccf05daae63a3fdd10b25ac0bd2e224ce8291f88c05976d575df998477db86fb2cfbbf91725d62cb57acfeb3c2d973b89b503c2b60dde85a7802b69dc1ac2007d5623cbea8cbfb6b181f5

View File

@ -0,0 +1 @@
3f8770f387faad08faa9d8414e9f449ac68e6ff0417f673f602a646a891419fe

View File

@ -0,0 +1 @@
3f8770f387faad08faa9d8414e9f449ac68e6ff0417f673f602a646a891419fe66036ef6e6d1a8f54baa9fed1fc11c77cfb9cff65bae915045027046ebe0c01bf5a941f3bb0f73791d3fc0b84370f9f30af0cd5b0fc334dd61f70feb60dad785f070fef1f343ed933b49a5ca0d16a503f599a365a4296739248b28d1a20b0e2cc8975c

View File

@ -0,0 +1 @@
af0a7ec382aedc0cfd626e49e7628bc7a353a4cb108855541a5651bf64fbb28a

View File

@ -0,0 +1 @@
af0a7ec382aedc0cfd626e49e7628bc7a353a4cb108855541a5651bf64fbb28a7c5035ba0f48a9c73dabb2be0533d02e8fd5d0d5639a18b2803ba6bf527e1d145d5fd6406c437b79bcaad6c7bdf1cf4bd56a893c3eb9510335a7a798548c6753f74617bede88bef924ba4b334f8852476d90b26c5dc4c3668a2519266a562c6c8034a6

Binary file not shown.

View File

@ -0,0 +1 @@
2b166978cef14d9d438046c720519d8b1cad707e199746f1562d0c87fbd32940

View File

@ -0,0 +1 @@
2b166978cef14d9d438046c720519d8b1cad707e199746f1562d0c87fbd32940f0e2545a96693a66654225ebbaac76d093bfa9cd8f525a53acb92a861a98c42e7d1c4ae82e68ab691d510012edd2a728f98cd4794ef757e94d6546961b4f280a51aac339cc95b64a92b83cc3f26d8af8dfb4c091c240acdb4d47728d23e7148720ef04

View File

@ -0,0 +1 @@
2351207d04fc16ade43ccab08600939c7c1fa70a5c0aaca76063d04c3228eaeb

View File

@ -0,0 +1 @@
2351207d04fc16ade43ccab08600939c7c1fa70a5c0aaca76063d04c3228eaeb725d6d46ceed8f785ab9f2f9b06acfe398c6699c6129da084cb531177445a682894f9685eaf836999221d17c9a64a3a057000524cd2823986db378b074290a1a9b93a22e135ed2c14c7e20c6d045cd00b903400374126676ea78874d79f2dd7883cf5c

View File

@ -0,0 +1 @@
be2f5495c61cba1bb348a34948c004045e3bd4dae8f0fe82bf44d0da245a0600

View File

@ -0,0 +1 @@
be2f5495c61cba1bb348a34948c004045e3bd4dae8f0fe82bf44d0da245a060048eb5e68ce6dea1eb0229e144f578b3aa7e9f4f85febd135df8525e6fe40c6f0340d13dd09b255ccd5112a94238f2be3c0b5b7ecde06580426a93e0708555a265305abf86d874e34b4995b788e37a823491f25127a502fe0704baa6bfdf04e76c13276

Binary file not shown.

View File

@ -0,0 +1 @@
b6451e30b953c206e34644c6803724e9d2725e0893039cfc49584f991f451af3

View File

@ -0,0 +1 @@
b6451e30b953c206e34644c6803724e9d2725e0893039cfc49584f991f451af3b89e8ff572d3da4f4022199b9563b9d70ebb616efff0763e9abec71b550f1371e233319c4c4e74da936ba8e5bbb29a598e007a0bbfa929c99738ca2cc098d59134d11ff300c39f82e2fce9f7f0fa266459503f64ab9913befc65fddc474f6dc1c67669

View File

@ -0,0 +1 @@
e9bc37a594daad83be9470df7f7b3798297c3d834ce80ba85d6e207627b7db7b

View File

@ -0,0 +1 @@
e9bc37a594daad83be9470df7f7b3798297c3d834ce80ba85d6e207627b7db7b1197012b1e7d9af4d7cb7bdd1f3bb49a90a9b5dec3ea2bbc6eaebce77f4e470cbf4687093b5352f04e4a4570fba233164e6acc36900e35d185886a827f7ea9bdc1e5c3ce88b095a200e62c10c043b3e9bc6cb9b6ac4dfa51794b02ace9f98779040755

View File

@ -0,0 +1 @@
bb1eb5d4afa793c1ebdd9fb08def6c36d10096986ae0cfe148cd101170ce37ae

View File

@ -0,0 +1 @@
bb1eb5d4afa793c1ebdd9fb08def6c36d10096986ae0cfe148cd101170ce37aea05a63d74a840aecd514f654f080e51ac50fd617d22610d91780fe6b07a26b0847abb38291058c97474ef6ddd190d30fc318185c09ca1589d2024f0a6f16d45f11678377483fa5c005b2a107cb9943e5da634e7046855eaa888663de55d6471371d55d

Binary file not shown.

View File

@ -0,0 +1 @@
a5c4a7053fa86b64746d4bb688d06ad1f02a18fce9afd3e818fefaa7126bf73e

View File

@ -0,0 +1 @@
a5c4a7053fa86b64746d4bb688d06ad1f02a18fce9afd3e818fefaa7126bf73e9b9493a9befebe0bf0c9509fb3105cfa0e262cde141aa8e3f2c2f77890bb64a4cca96922a21ead111f6338ad5244f2c15c44cb595443ac2ac294231e31be4a4307d0a91e874d36fc9852aeb1265c09b6e0cda7c37ef686fbbcab97e8ff66718be048bb

View File

@ -0,0 +1 @@
4eed7141ea4a5cd4b788606bd23f46e212af9cacebacdc7d1f4c6dc7f2511b98

View File

@ -0,0 +1 @@
4eed7141ea4a5cd4b788606bd23f46e212af9cacebacdc7d1f4c6dc7f2511b98fc9cc56cb831ffe33ea8e7e1d1df09b26efd2767670066aa82d023b1dfe8ab1b2b7fbb5b97592d46ffe3e05a6a9b592e2949c74160e4674301bc3f97e04903f8c6cf95b863174c33228924cdef7ae47559b10b294acd660666c4538833582b43f82d74

View File

@ -0,0 +1 @@
ba8ced36f327700d213f120b1a207a3b8c04330528586f414d09f2f7d9ccb7e6

View File

@ -0,0 +1 @@
ba8ced36f327700d213f120b1a207a3b8c04330528586f414d09f2f7d9ccb7e68244c26010afc3f762615bbac552a1ca909e67c83e2fd5478cf46b9e811efccc93f77a21b17a152ebaca1695733fdb086e23cd0eb48c41c034d52523fc21236e5d8c9255306e48d52ba40b4dac24256460d56573d1312319afcf3ed39d72d0bfc69acb

Binary file not shown.

View File

@ -0,0 +1 @@
51fd05c3c1cfbc8ed67d139ad76f5cf8236cd2acd26627a30c104dfd9d3ff8a8

View File

@ -0,0 +1 @@
51fd05c3c1cfbc8ed67d139ad76f5cf8236cd2acd26627a30c104dfd9d3ff8a82b02e8bd36d8498a75ad8c8e9b15eb386970283d6dd42c8ae7911cc592887fdbe26a0a5f0bf821cd92986c60b2502c9be3f98a9c133a7e8045ea867e0828c7252e739321f7c2d65daee4468eb4429efae469a42763f1f94977435d10dccae3e3dce88d

View File

@ -0,0 +1 @@
de1e5fa0be70df6d2be8fffd0e99ceaa8eb6e8c93a63f2d8d1c30ecb6b263dee

View File

@ -0,0 +1 @@
de1e5fa0be70df6d2be8fffd0e99ceaa8eb6e8c93a63f2d8d1c30ecb6b263dee0e16e0a4749d6811dd1d6d1265c29729b1b75a9ac346cf93f0e1d7296dfcfd4313b3a227faaaaf7757cc95b4e87a49be3b8a270a12020233509b1c3632b3485eef309d0abc4a4a696c9decc6e90454b53b000f456a3f10079072baaf7a981653221f2c

View File

@ -0,0 +1 @@
c0a4edefa2d2accb9277c371ac12fcdbb52988a86edc54f0716e1591b4326e72

View File

@ -0,0 +1 @@
c0a4edefa2d2accb9277c371ac12fcdbb52988a86edc54f0716e1591b4326e72d5e795f46a596b02d3d4bfb43abad1e5d19211152722ec1f20fef2cd413e3c22f2fc5da3d73041275be6ede3517b3b9f0fc67ade5956a672b8b75d96cb43294b9041497de92637ed3f2439225e683910cb3ae923374449ca788fb0f9bea92731bc26ad

Binary file not shown.

View File

@ -0,0 +1 @@
c91c090ceee3a3ac81902da31838012625bbcd73fcb92e7d7e56f78deba4f0c3

View File

@ -0,0 +1 @@
c91c090ceee3a3ac81902da31838012625bbcd73fcb92e7d7e56f78deba4f0c3feeb3974306966ccb3e3c69c337ef8a45660ad02526306fd685c88542ad00f759af6dd1adc2e50c2b8aac9f0c5221ff481565cf6455b772515a69463223202e5c371743e35210bbbbabd89651684107fd9fe493c937be16e39cfa7084a36207c99bea3

View File

@ -0,0 +1 @@
d81293fda863f008c09e92fc382a81f5a0b4a1251cba1634016a0f86a6bd640d

View File

@ -0,0 +1 @@
d81293fda863f008c09e92fc382a81f5a0b4a1251cba1634016a0f86a6bd640de3137d477156d1fde56b0cf36f8ef18b44b2d79897bece12227539ac9ae0a5119da47644d934d26e74dc316145dcb8bb69ac3f2e05c242dd6ee06484fcb0e956dc44355b452c5e2bbb5e2b66e99f5dd443d0cbcaaafd4beebaed24ae2f8bb672bcef78

View File

@ -0,0 +1 @@
c64200ae7dfaf35577ac5a9521c47863fb71514a3bcad18819218b818de85818

View File

@ -0,0 +1 @@
c64200ae7dfaf35577ac5a9521c47863fb71514a3bcad18819218b818de85818ee7a317aaccc1458f78d6f65f3427ec97d9c0adb0d6dacd4471374b621b7b5f35cd54663c64dbe0b9e2d95632f84c611313ea5bd90b71ce97b3cf645776f3adc11e27d135cbadb9875c2bf8d3ae6b02f8a0206aba0c35bfe42574011931c9a255ce6dc

Binary file not shown.

View File

@ -0,0 +1 @@
81720f34452f58a0120a58b6b4608384b5c51d11f39ce97161a0c0e442ca0225

Some files were not shown because too many files have changed in this diff Show More