diff options
Diffstat (limited to 'test')
278 files changed, 15444 insertions, 12075 deletions
diff --git a/test/accel_cal.c b/test/accel_cal.c index 34fd5678c2..840bed00c6 100644 --- a/test/accel_cal.c +++ b/test/accel_cal.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -29,12 +29,12 @@ struct accel_cal cal = { static bool accumulate(float x, float y, float z, float temperature) { - return accel_cal_accumulate(&cal, 0, x, y, z, temperature) - || accel_cal_accumulate(&cal, 200 * MSEC, x, y, z, temperature) - || accel_cal_accumulate(&cal, 400 * MSEC, x, y, z, temperature) - || accel_cal_accumulate(&cal, 600 * MSEC, x, y, z, temperature) - || accel_cal_accumulate(&cal, 800 * MSEC, x, y, z, temperature) - || accel_cal_accumulate(&cal, 1000 * MSEC, x, y, z, temperature); + return accel_cal_accumulate(&cal, 0, x, y, z, temperature) || + accel_cal_accumulate(&cal, 200 * MSEC, x, y, z, temperature) || + accel_cal_accumulate(&cal, 400 * MSEC, x, y, z, temperature) || + accel_cal_accumulate(&cal, 600 * MSEC, x, y, z, temperature) || + accel_cal_accumulate(&cal, 800 * MSEC, x, y, z, temperature) || + accel_cal_accumulate(&cal, 1000 * MSEC, x, y, z, temperature); } DECLARE_EC_TEST(test_calibrated_correctly_with_kasa) @@ -66,20 +66,16 @@ DECLARE_EC_TEST(test_calibrated_correctly_with_newton) float kasa_radius; int i; float data[] = { - 1.00290f, 0.09170f, 0.09649f, - 0.95183f, 0.23626f, 0.25853f, - 0.95023f, 0.15387f, 0.31865f, - 0.97374f, 0.01639f, 0.27675f, - 0.88521f, 0.30212f, 0.39558f, - 0.92787f, 0.35157f, 0.21209f, - 0.95162f, 0.33173f, 0.10924f, - 0.98397f, 0.22644f, 0.07737f, + 1.00290f, 0.09170f, 0.09649f, 0.95183f, 0.23626f, 0.25853f, + 0.95023f, 0.15387f, 0.31865f, 0.97374f, 0.01639f, 0.27675f, + 0.88521f, 0.30212f, 0.39558f, 0.92787f, 0.35157f, 0.21209f, + 0.95162f, 0.33173f, 0.10924f, 0.98397f, 0.22644f, 0.07737f, }; kasa_reset(&kasa); for (i = 0; i < ARRAY_SIZE(data); i += 3) { zassert_false(has_bias, NULL); - kasa_accumulate(&kasa, data[i], data[i + 1], data[i + 2]); + kasa_accumulate(&kasa, data[i], data[i + 1], data[i + 2]); has_bias = accumulate(data[i], data[i + 1], data[i + 2], 21.0f); } @@ -93,9 +89,9 @@ DECLARE_EC_TEST(test_calibrated_correctly_with_newton) zassert_true(sqrtf(powf(cal.bias[X] - 0.01f, 2.0f) + powf(cal.bias[Y] - 0.01f, 2.0f) + powf(cal.bias[Z] - 0.01f, 2.0f)) < - sqrtf(powf(kasa_bias[X] - 0.01f, 2.0f) + - powf(kasa_bias[Y] - 0.01f, 2.0f) + - powf(kasa_bias[Z] - 0.01f, 2.0f)), + sqrtf(powf(kasa_bias[X] - 0.01f, 2.0f) + + powf(kasa_bias[Y] - 0.01f, 2.0f) + + powf(kasa_bias[Z] - 0.01f, 2.0f)), NULL); return EC_SUCCESS; @@ -125,7 +121,9 @@ void before_test(void) accel_cal_reset(&cal); } -void after_test(void) {} +void after_test(void) +{ +} TEST_MAIN() { diff --git a/test/accel_cal.tasklist b/test/accel_cal.tasklist index 0e3696c3f0..d3fcf83121 100644 --- a/test/accel_cal.tasklist +++ b/test/accel_cal.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/aes.c b/test/aes.c index 1c71e2874e..0fc220d997 100644 --- a/test/aes.c +++ b/test/aes.c @@ -1,4 +1,4 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. +/* Copyright 2018 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -16,6 +16,7 @@ #include "aes.h" #include "aes-gcm.h" +#include "builtin/assert.h" #include "console.h" #include "common.h" #include "test_util.h" @@ -29,23 +30,18 @@ static uint8_t tmp[512]; /* * Do encryption, put result in |result|, and compare with |ciphertext|. */ -static int test_aes_gcm_encrypt(uint8_t *result, - const uint8_t *key, - int key_size, - const uint8_t *plaintext, - const uint8_t *ciphertext, - int plaintext_size, - const uint8_t *nonce, - int nonce_size, - const uint8_t *tag, - int tag_size) +static int test_aes_gcm_encrypt(uint8_t *result, const uint8_t *key, + int key_size, const uint8_t *plaintext, + const uint8_t *ciphertext, int plaintext_size, + const uint8_t *nonce, int nonce_size, + const uint8_t *tag, int tag_size) { static AES_KEY aes_key; static GCM128_CONTEXT ctx; TEST_ASSERT(AES_set_encrypt_key(key, 8 * key_size, &aes_key) == 0); - CRYPTO_gcm128_init(&ctx, &aes_key, (block128_f) AES_encrypt, 0); + CRYPTO_gcm128_init(&ctx, &aes_key, (block128_f)AES_encrypt, 0); CRYPTO_gcm128_setiv(&ctx, &aes_key, nonce, nonce_size); TEST_ASSERT(CRYPTO_gcm128_encrypt(&ctx, &aes_key, plaintext, result, plaintext_size)); @@ -58,23 +54,18 @@ static int test_aes_gcm_encrypt(uint8_t *result, /* * Do decryption, put result in |result|, and compare with |plaintext|. */ -static int test_aes_gcm_decrypt(uint8_t *result, - const uint8_t *key, - int key_size, - const uint8_t *plaintext, - const uint8_t *ciphertext, - int plaintext_size, - const uint8_t *nonce, - int nonce_size, - const uint8_t *tag, - int tag_size) +static int test_aes_gcm_decrypt(uint8_t *result, const uint8_t *key, + int key_size, const uint8_t *plaintext, + const uint8_t *ciphertext, int plaintext_size, + const uint8_t *nonce, int nonce_size, + const uint8_t *tag, int tag_size) { static AES_KEY aes_key; static GCM128_CONTEXT ctx; TEST_ASSERT(AES_set_encrypt_key(key, 8 * key_size, &aes_key) == 0); - CRYPTO_gcm128_init(&ctx, &aes_key, (block128_f) AES_encrypt, 0); + CRYPTO_gcm128_init(&ctx, &aes_key, (block128_f)AES_encrypt, 0); CRYPTO_gcm128_setiv(&ctx, &aes_key, nonce, nonce_size); TEST_ASSERT(CRYPTO_gcm128_decrypt(&ctx, &aes_key, ciphertext, result, plaintext_size)); @@ -84,17 +75,13 @@ static int test_aes_gcm_decrypt(uint8_t *result, return EC_SUCCESS; } -static int test_aes_gcm_raw_inplace(const uint8_t *key, - int key_size, +static int test_aes_gcm_raw_inplace(const uint8_t *key, int key_size, const uint8_t *plaintext, const uint8_t *ciphertext, - int plaintext_size, - const uint8_t *nonce, - int nonce_size, - const uint8_t *tag, + int plaintext_size, const uint8_t *nonce, + int nonce_size, const uint8_t *tag, int tag_size) { - /* * Make copies that will be clobbered during in-place encryption or * decryption. @@ -105,95 +92,53 @@ static int test_aes_gcm_raw_inplace(const uint8_t *key, memcpy(plaintext_copy, plaintext, plaintext_size); memcpy(ciphertext_copy, ciphertext, plaintext_size); - TEST_ASSERT(test_aes_gcm_encrypt(plaintext_copy, - key, - key_size, - plaintext_copy, - ciphertext, - plaintext_size, - nonce, - nonce_size, - tag, + TEST_ASSERT(test_aes_gcm_encrypt(plaintext_copy, key, key_size, + plaintext_copy, ciphertext, + plaintext_size, nonce, nonce_size, tag, tag_size) == EC_SUCCESS); - TEST_ASSERT(test_aes_gcm_decrypt(ciphertext_copy, - key, - key_size, - plaintext, - ciphertext_copy, - plaintext_size, - nonce, - nonce_size, - tag, + TEST_ASSERT(test_aes_gcm_decrypt(ciphertext_copy, key, key_size, + plaintext, ciphertext_copy, + plaintext_size, nonce, nonce_size, tag, tag_size) == EC_SUCCESS); return EC_SUCCESS; } -static int test_aes_gcm_raw_non_inplace(const uint8_t *key, - int key_size, +static int test_aes_gcm_raw_non_inplace(const uint8_t *key, int key_size, const uint8_t *plaintext, const uint8_t *ciphertext, int plaintext_size, - const uint8_t *nonce, - int nonce_size, - const uint8_t *tag, - int tag_size) + const uint8_t *nonce, int nonce_size, + const uint8_t *tag, int tag_size) { - TEST_ASSERT(test_aes_gcm_encrypt(tmp, - key, - key_size, - plaintext, - ciphertext, - plaintext_size, - nonce, - nonce_size, - tag, + TEST_ASSERT(test_aes_gcm_encrypt(tmp, key, key_size, plaintext, + ciphertext, plaintext_size, nonce, + nonce_size, tag, tag_size) == EC_SUCCESS); - TEST_ASSERT(test_aes_gcm_decrypt(tmp, - key, - key_size, - plaintext, - ciphertext, - plaintext_size, - nonce, - nonce_size, - tag, + TEST_ASSERT(test_aes_gcm_decrypt(tmp, key, key_size, plaintext, + ciphertext, plaintext_size, nonce, + nonce_size, tag, tag_size) == EC_SUCCESS); return EC_SUCCESS; } -static int test_aes_gcm_raw(const uint8_t *key, - int key_size, - const uint8_t *plaintext, - const uint8_t *ciphertext, - int plaintext_size, - const uint8_t *nonce, - int nonce_size, - const uint8_t *tag, - int tag_size) +static int test_aes_gcm_raw(const uint8_t *key, int key_size, + const uint8_t *plaintext, const uint8_t *ciphertext, + int plaintext_size, const uint8_t *nonce, + int nonce_size, const uint8_t *tag, int tag_size) { TEST_ASSERT(plaintext_size <= sizeof(tmp)); - TEST_ASSERT(test_aes_gcm_raw_non_inplace(key, - key_size, - plaintext, - ciphertext, - plaintext_size, - nonce, - nonce_size, - tag, + TEST_ASSERT(test_aes_gcm_raw_non_inplace(key, key_size, plaintext, + ciphertext, plaintext_size, + nonce, nonce_size, tag, tag_size) == EC_SUCCESS); - TEST_ASSERT(test_aes_gcm_raw_inplace(key, - key_size, - plaintext, - ciphertext, - plaintext_size, - nonce, - nonce_size, - tag, + TEST_ASSERT(test_aes_gcm_raw_inplace(key, key_size, plaintext, + ciphertext, plaintext_size, nonce, + nonce_size, tag, tag_size) == EC_SUCCESS); return EC_SUCCESS; @@ -214,8 +159,8 @@ static int test_aes_gcm(void) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const uint8_t nonce1[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const uint8_t cipher1[] = { 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92, @@ -231,28 +176,26 @@ static int test_aes_gcm(void) 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, }; static const uint8_t plain2[] = { - 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55, + 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, + 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, + 0x15, 0x34, 0xf7, 0xda, 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, + 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, + 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, 0xb1, 0x6a, + 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39, + 0x1a, 0xaf, 0xd2, 0x55, }; static const uint8_t nonce2[] = { - 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, - 0xde, 0xca, 0xf8, 0x88, + 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, + 0xdb, 0xad, 0xde, 0xca, 0xf8, 0x88, }; static const uint8_t cipher2[] = { - 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, - 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, - 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, - 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, - 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, - 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, - 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, - 0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85, + 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, 0x4b, 0x72, + 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, 0xe3, 0xaa, 0x21, 0x2f, + 0x2c, 0x02, 0xa4, 0xe0, 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, + 0xa1, 0x2e, 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, + 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, 0x1b, 0xa3, + 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, 0x3d, 0x58, 0xe0, 0x91, + 0x47, 0x3f, 0x59, 0x85, }; static const uint8_t tag2[] = { 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6, @@ -269,8 +212,8 @@ static int test_aes_gcm(void) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const uint8_t nonce3[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const uint8_t cipher3[] = { 0x98, 0xe7, 0x24, 0x7c, 0x07, 0xf0, 0xfe, 0x41, @@ -287,28 +230,26 @@ static int test_aes_gcm(void) 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, }; static const uint8_t plain4[] = { - 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55, + 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, + 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, + 0x15, 0x34, 0xf7, 0xda, 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, + 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, + 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, 0xb1, 0x6a, + 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39, + 0x1a, 0xaf, 0xd2, 0x55, }; static const uint8_t nonce4[] = { - 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, - 0xde, 0xca, 0xf8, 0x88, + 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, + 0xdb, 0xad, 0xde, 0xca, 0xf8, 0x88, }; static const uint8_t cipher4[] = { - 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, - 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, - 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84, - 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c, - 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, - 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, - 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, - 0xcc, 0xda, 0x27, 0x10, 0xac, 0xad, 0xe2, 0x56, + 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, 0xeb, 0x06, + 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, 0x85, 0x9e, 0x1c, 0xea, + 0xa6, 0xef, 0xd9, 0x84, 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, + 0xe1, 0x9c, 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, + 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, 0x18, 0xe2, + 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, 0xcc, 0xda, 0x27, 0x10, + 0xac, 0xad, 0xe2, 0x56, }; static const uint8_t tag4[] = { 0x99, 0x24, 0xa7, 0xc8, 0x58, 0x73, 0x36, 0xbf, @@ -326,8 +267,8 @@ static int test_aes_gcm(void) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const uint8_t nonce5[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const uint8_t cipher5[] = { 0xce, 0xa7, 0x40, 0x3d, 0x4d, 0x60, 0x6b, 0x6e, @@ -345,28 +286,26 @@ static int test_aes_gcm(void) 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, }; static const uint8_t plain6[] = { - 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55, + 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, 0xa5, 0x59, + 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, 0x86, 0xa7, 0xa9, 0x53, + 0x15, 0x34, 0xf7, 0xda, 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, + 0x8a, 0x72, 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, + 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, 0xb1, 0x6a, + 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, 0xba, 0x63, 0x7b, 0x39, + 0x1a, 0xaf, 0xd2, 0x55, }; static const uint8_t nonce6[] = { - 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, - 0xde, 0xca, 0xf8, 0x88, + 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, + 0xdb, 0xad, 0xde, 0xca, 0xf8, 0x88, }; static const uint8_t cipher6[] = { - 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, - 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, - 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, - 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, - 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, - 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, - 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, - 0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad, + 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, 0xf4, 0x7f, + 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, 0x64, 0x3a, 0x8c, 0xdc, + 0xbf, 0xe5, 0xc0, 0xc9, 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, + 0xd1, 0xaa, 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, + 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, 0xc5, 0xf6, + 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, 0xbc, 0xc9, 0xf6, 0x62, + 0x89, 0x80, 0x15, 0xad, }; static const uint8_t tag6[] = { 0xb0, 0x94, 0xda, 0xc5, 0xd9, 0x34, 0x71, 0xbd, @@ -378,90 +317,75 @@ static int test_aes_gcm(void) 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; static const uint8_t plain7[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; /* This nonce results in 0xfff in counter LSB. */ static const uint8_t nonce7[] = { - 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, }; static const uint8_t cipher7[] = { - 0x56, 0xb3, 0x37, 0x3c, 0xa9, 0xef, 0x6e, 0x4a, - 0x2b, 0x64, 0xfe, 0x1e, 0x9a, 0x17, 0xb6, 0x14, - 0x25, 0xf1, 0x0d, 0x47, 0xa7, 0x5a, 0x5f, 0xce, - 0x13, 0xef, 0xc6, 0xbc, 0x78, 0x4a, 0xf2, 0x4f, - 0x41, 0x41, 0xbd, 0xd4, 0x8c, 0xf7, 0xc7, 0x70, - 0x88, 0x7a, 0xfd, 0x57, 0x3c, 0xca, 0x54, 0x18, - 0xa9, 0xae, 0xff, 0xcd, 0x7c, 0x5c, 0xed, 0xdf, - 0xc6, 0xa7, 0x83, 0x97, 0xb9, 0xa8, 0x5b, 0x49, - 0x9d, 0xa5, 0x58, 0x25, 0x72, 0x67, 0xca, 0xab, - 0x2a, 0xd0, 0xb2, 0x3c, 0xa4, 0x76, 0xa5, 0x3c, - 0xb1, 0x7f, 0xb4, 0x1c, 0x4b, 0x8b, 0x47, 0x5c, - 0xb4, 0xf3, 0xf7, 0x16, 0x50, 0x94, 0xc2, 0x29, - 0xc9, 0xe8, 0xc4, 0xdc, 0x0a, 0x2a, 0x5f, 0xf1, - 0x90, 0x3e, 0x50, 0x15, 0x11, 0x22, 0x13, 0x76, - 0xa1, 0xcd, 0xb8, 0x36, 0x4c, 0x50, 0x61, 0xa2, - 0x0c, 0xae, 0x74, 0xbc, 0x4a, 0xcd, 0x76, 0xce, - 0xb0, 0xab, 0xc9, 0xfd, 0x32, 0x17, 0xef, 0x9f, - 0x8c, 0x90, 0xbe, 0x40, 0x2d, 0xdf, 0x6d, 0x86, - 0x97, 0xf4, 0xf8, 0x80, 0xdf, 0xf1, 0x5b, 0xfb, - 0x7a, 0x6b, 0x28, 0x24, 0x1e, 0xc8, 0xfe, 0x18, - 0x3c, 0x2d, 0x59, 0xe3, 0xf9, 0xdf, 0xff, 0x65, - 0x3c, 0x71, 0x26, 0xf0, 0xac, 0xb9, 0xe6, 0x42, - 0x11, 0xf4, 0x2b, 0xae, 0x12, 0xaf, 0x46, 0x2b, - 0x10, 0x70, 0xbe, 0xf1, 0xab, 0x5e, 0x36, 0x06, - 0x87, 0x2c, 0xa1, 0x0d, 0xee, 0x15, 0xb3, 0x24, - 0x9b, 0x1a, 0x1b, 0x95, 0x8f, 0x23, 0x13, 0x4c, - 0x4b, 0xcc, 0xb7, 0xd0, 0x32, 0x00, 0xbc, 0xe4, - 0x20, 0xa2, 0xf8, 0xeb, 0x66, 0xdc, 0xf3, 0x64, - 0x4d, 0x14, 0x23, 0xc1, 0xb5, 0x69, 0x90, 0x03, - 0xc1, 0x3e, 0xce, 0xf4, 0xbf, 0x38, 0xa3, 0xb6, - 0x0e, 0xed, 0xc3, 0x40, 0x33, 0xba, 0xc1, 0x90, - 0x27, 0x83, 0xdc, 0x6d, 0x89, 0xe2, 0xe7, 0x74, - 0x18, 0x8a, 0x43, 0x9c, 0x7e, 0xbc, 0xc0, 0x67, - 0x2d, 0xbd, 0xa4, 0xdd, 0xcf, 0xb2, 0x79, 0x46, - 0x13, 0xb0, 0xbe, 0x41, 0x31, 0x5e, 0xf7, 0x78, + 0x56, 0xb3, 0x37, 0x3c, 0xa9, 0xef, 0x6e, 0x4a, 0x2b, 0x64, + 0xfe, 0x1e, 0x9a, 0x17, 0xb6, 0x14, 0x25, 0xf1, 0x0d, 0x47, + 0xa7, 0x5a, 0x5f, 0xce, 0x13, 0xef, 0xc6, 0xbc, 0x78, 0x4a, + 0xf2, 0x4f, 0x41, 0x41, 0xbd, 0xd4, 0x8c, 0xf7, 0xc7, 0x70, + 0x88, 0x7a, 0xfd, 0x57, 0x3c, 0xca, 0x54, 0x18, 0xa9, 0xae, + 0xff, 0xcd, 0x7c, 0x5c, 0xed, 0xdf, 0xc6, 0xa7, 0x83, 0x97, + 0xb9, 0xa8, 0x5b, 0x49, 0x9d, 0xa5, 0x58, 0x25, 0x72, 0x67, + 0xca, 0xab, 0x2a, 0xd0, 0xb2, 0x3c, 0xa4, 0x76, 0xa5, 0x3c, + 0xb1, 0x7f, 0xb4, 0x1c, 0x4b, 0x8b, 0x47, 0x5c, 0xb4, 0xf3, + 0xf7, 0x16, 0x50, 0x94, 0xc2, 0x29, 0xc9, 0xe8, 0xc4, 0xdc, + 0x0a, 0x2a, 0x5f, 0xf1, 0x90, 0x3e, 0x50, 0x15, 0x11, 0x22, + 0x13, 0x76, 0xa1, 0xcd, 0xb8, 0x36, 0x4c, 0x50, 0x61, 0xa2, + 0x0c, 0xae, 0x74, 0xbc, 0x4a, 0xcd, 0x76, 0xce, 0xb0, 0xab, + 0xc9, 0xfd, 0x32, 0x17, 0xef, 0x9f, 0x8c, 0x90, 0xbe, 0x40, + 0x2d, 0xdf, 0x6d, 0x86, 0x97, 0xf4, 0xf8, 0x80, 0xdf, 0xf1, + 0x5b, 0xfb, 0x7a, 0x6b, 0x28, 0x24, 0x1e, 0xc8, 0xfe, 0x18, + 0x3c, 0x2d, 0x59, 0xe3, 0xf9, 0xdf, 0xff, 0x65, 0x3c, 0x71, + 0x26, 0xf0, 0xac, 0xb9, 0xe6, 0x42, 0x11, 0xf4, 0x2b, 0xae, + 0x12, 0xaf, 0x46, 0x2b, 0x10, 0x70, 0xbe, 0xf1, 0xab, 0x5e, + 0x36, 0x06, 0x87, 0x2c, 0xa1, 0x0d, 0xee, 0x15, 0xb3, 0x24, + 0x9b, 0x1a, 0x1b, 0x95, 0x8f, 0x23, 0x13, 0x4c, 0x4b, 0xcc, + 0xb7, 0xd0, 0x32, 0x00, 0xbc, 0xe4, 0x20, 0xa2, 0xf8, 0xeb, + 0x66, 0xdc, 0xf3, 0x64, 0x4d, 0x14, 0x23, 0xc1, 0xb5, 0x69, + 0x90, 0x03, 0xc1, 0x3e, 0xce, 0xf4, 0xbf, 0x38, 0xa3, 0xb6, + 0x0e, 0xed, 0xc3, 0x40, 0x33, 0xba, 0xc1, 0x90, 0x27, 0x83, + 0xdc, 0x6d, 0x89, 0xe2, 0xe7, 0x74, 0x18, 0x8a, 0x43, 0x9c, + 0x7e, 0xbc, 0xc0, 0x67, 0x2d, 0xbd, 0xa4, 0xdd, 0xcf, 0xb2, + 0x79, 0x46, 0x13, 0xb0, 0xbe, 0x41, 0x31, 0x5e, 0xf7, 0x78, 0x70, 0x8a, 0x70, 0xee, 0x7d, 0x75, 0x16, 0x5c, }; static const uint8_t tag7[] = { @@ -469,27 +393,27 @@ static int test_aes_gcm(void) 0xb0, 0x26, 0xa9, 0xed, 0x3f, 0xe1, 0xe8, 0x5f, }; - TEST_ASSERT(!test_aes_gcm_raw(key1, sizeof(key1), - plain1, cipher1, sizeof(plain1), - nonce1, sizeof(nonce1), tag1, sizeof(tag1))); - TEST_ASSERT(!test_aes_gcm_raw(key2, sizeof(key2), - plain2, cipher2, sizeof(plain2), - nonce2, sizeof(nonce2), tag2, sizeof(tag2))); - TEST_ASSERT(!test_aes_gcm_raw(key3, sizeof(key3), - plain3, cipher3, sizeof(plain3), - nonce3, sizeof(nonce3), tag3, sizeof(tag3))); - TEST_ASSERT(!test_aes_gcm_raw(key4, sizeof(key4), - plain4, cipher4, sizeof(plain4), - nonce4, sizeof(nonce4), tag4, sizeof(tag4))); - TEST_ASSERT(!test_aes_gcm_raw(key5, sizeof(key5), - plain5, cipher5, sizeof(plain5), - nonce5, sizeof(nonce5), tag5, sizeof(tag5))); - TEST_ASSERT(!test_aes_gcm_raw(key6, sizeof(key6), - plain6, cipher6, sizeof(plain6), - nonce6, sizeof(nonce6), tag6, sizeof(tag6))); - TEST_ASSERT(!test_aes_gcm_raw(key7, sizeof(key7), - plain7, cipher7, sizeof(plain7), - nonce7, sizeof(nonce7), tag7, sizeof(tag7))); + TEST_ASSERT(!test_aes_gcm_raw(key1, sizeof(key1), plain1, cipher1, + sizeof(plain1), nonce1, sizeof(nonce1), + tag1, sizeof(tag1))); + TEST_ASSERT(!test_aes_gcm_raw(key2, sizeof(key2), plain2, cipher2, + sizeof(plain2), nonce2, sizeof(nonce2), + tag2, sizeof(tag2))); + TEST_ASSERT(!test_aes_gcm_raw(key3, sizeof(key3), plain3, cipher3, + sizeof(plain3), nonce3, sizeof(nonce3), + tag3, sizeof(tag3))); + TEST_ASSERT(!test_aes_gcm_raw(key4, sizeof(key4), plain4, cipher4, + sizeof(plain4), nonce4, sizeof(nonce4), + tag4, sizeof(tag4))); + TEST_ASSERT(!test_aes_gcm_raw(key5, sizeof(key5), plain5, cipher5, + sizeof(plain5), nonce5, sizeof(nonce5), + tag5, sizeof(tag5))); + TEST_ASSERT(!test_aes_gcm_raw(key6, sizeof(key6), plain6, cipher6, + sizeof(plain6), nonce6, sizeof(nonce6), + tag6, sizeof(tag6))); + TEST_ASSERT(!test_aes_gcm_raw(key7, sizeof(key7), plain7, cipher7, + sizeof(plain7), nonce7, sizeof(nonce7), + tag7, sizeof(tag7))); return EC_SUCCESS; } @@ -505,11 +429,11 @@ static void test_aes_gcm_speed(void) static const uint8_t plaintext[512] = { 0 }; const int plaintext_size = sizeof(plaintext); static const uint8_t nonce[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; const int nonce_size = sizeof(nonce); - uint8_t tag[16] = {0}; + uint8_t tag[16] = { 0 }; const int tag_size = sizeof(tag); uint8_t *out = tmp; @@ -525,7 +449,7 @@ static void test_aes_gcm_speed(void) CRYPTO_gcm128_init(&ctx, &aes_key, (block128_f)AES_encrypt, 0); CRYPTO_gcm128_setiv(&ctx, &aes_key, nonce, nonce_size); CRYPTO_gcm128_encrypt(&ctx, &aes_key, plaintext, out, - plaintext_size); + plaintext_size); CRYPTO_gcm128_tag(&ctx, tag, tag_size); } t1 = get_time(); @@ -644,7 +568,7 @@ static void test_aes_speed(void) ccprintf("AES duration %lld us\n", (long long)(t1.val - t0.val)); } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { watchdog_reload(); diff --git a/test/aes.tasklist b/test/aes.tasklist index 24870f2abb..86bc8aa2d5 100644 --- a/test/aes.tasklist +++ b/test/aes.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. +/* Copyright 2018 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/base32.c b/test/base32.c index faaefc266f..3559d0dc84 100644 --- a/test/base32.c +++ b/test/base32.c @@ -1,4 +1,4 @@ -/* Copyright 2017 The Chromium OS Authors. All rights reserved. +/* Copyright 2017 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -54,8 +54,7 @@ DECLARE_EC_TEST(test_crc5) return EC_SUCCESS; } -static int enctest(const void *src, int srcbits, int crc_every, - const char *enc) +static int enctest(const void *src, int srcbits, int crc_every, const char *enc) { char dest[32]; @@ -73,7 +72,7 @@ static int enctest(const void *src, int srcbits, int crc_every, DECLARE_EC_TEST(test_encode) { - const uint8_t src1[5] = {0xff, 0x00, 0xff, 0x00, 0xff}; + const uint8_t src1[5] = { 0xff, 0x00, 0xff, 0x00, 0xff }; char enc[32]; /* Test for enough space; error produces null string */ @@ -104,10 +103,9 @@ DECLARE_EC_TEST(test_encode) /* CRC requires exact multiple of symbol count */ ENCTEST("\xff\x00\xff\x00\xff", 40, 4, "96ARU8AH9D"); ENCTEST("\xff\x00\xff\x00\xff", 40, 8, "96AR8AH9L"); - zassert_equal( - base32_encode(enc, 16, (uint8_t *)"\xff\x00\xff\x00\xff", - 40, 6), - EC_ERROR_INVAL, NULL); + zassert_equal(base32_encode(enc, 16, (uint8_t *)"\xff\x00\xff\x00\xff", + 40, 6), + EC_ERROR_INVAL, NULL); /* But what matters is symbol count, not bit count */ ENCTEST("\xff\x00\xff\x00\xfe", 39, 4, "96ARU8AH8P"); @@ -201,8 +199,7 @@ DECLARE_EC_TEST(test_decode) TEST_MAIN() { - ztest_test_suite(test_base32_lib, - ztest_unit_test(test_crc5), + ztest_test_suite(test_base32_lib, ztest_unit_test(test_crc5), ztest_unit_test(test_encode), ztest_unit_test(test_decode)); ztest_run_test_suite(test_base32_lib); diff --git a/test/base32.tasklist b/test/base32.tasklist index 7150f17cbd..6373a70ab1 100644 --- a/test/base32.tasklist +++ b/test/base32.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2017 The Chromium OS Authors. All rights reserved. +/* Copyright 2017 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/battery_get_params_smart.c b/test/battery_get_params_smart.c index 3163fb587e..42582df363 100644 --- a/test/battery_get_params_smart.c +++ b/test/battery_get_params_smart.c @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -19,7 +19,6 @@ static int fail_on_first, fail_on_last; static int read_count, write_count; struct batt_params batt; - void battery_compensate_params(struct batt_params *batt) { } @@ -44,17 +43,14 @@ int sb_read(int cmd, int *param) if (read_count >= fail_on_first && read_count <= fail_on_last) return EC_ERROR_UNKNOWN; - return i2c_read16(I2C_PORT_BATTERY, BATTERY_ADDR_FLAGS, - cmd, param); + return i2c_read16(I2C_PORT_BATTERY, BATTERY_ADDR_FLAGS, cmd, param); } int sb_write(int cmd, int param) { write_count++; - return i2c_write16(I2C_PORT_BATTERY, BATTERY_ADDR_FLAGS, - cmd, param); + return i2c_write16(I2C_PORT_BATTERY, BATTERY_ADDR_FLAGS, cmd, param); } - /* Tests */ static int test_param_failures(void) { @@ -90,7 +86,7 @@ static int test_param_failures(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { RUN_TEST(test_param_failures); diff --git a/test/battery_get_params_smart.tasklist b/test/battery_get_params_smart.tasklist index c2eb8159a9..efcc6883a5 100644 --- a/test/battery_get_params_smart.tasklist +++ b/test/battery_get_params_smart.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/bklight_lid.c b/test/bklight_lid.c index 99167a71a6..52fc91f677 100644 --- a/test/bklight_lid.c +++ b/test/bklight_lid.c @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -95,7 +95,7 @@ static int test_hostcommand(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/bklight_lid.tasklist b/test/bklight_lid.tasklist index da0ab6211a..100cb6b5bd 100644 --- a/test/bklight_lid.tasklist +++ b/test/bklight_lid.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/bklight_passthru.c b/test/bklight_passthru.c index 170cc734cd..2bba2fe713 100644 --- a/test/bklight_passthru.c +++ b/test/bklight_passthru.c @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -129,7 +129,7 @@ static int test_hostcommand(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/bklight_passthru.tasklist b/test/bklight_passthru.tasklist index da0ab6211a..100cb6b5bd 100644 --- a/test/bklight_passthru.tasklist +++ b/test/bklight_passthru.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/body_detection.c b/test/body_detection.c index aa131f0a31..dac2202eac 100644 --- a/test/body_detection.c +++ b/test/body_detection.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -105,8 +105,7 @@ static int test_body_detect(void) return EC_SUCCESS; } - -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/body_detection.tasklist b/test/body_detection.tasklist index 95a30e9973..7926640d53 100644 --- a/test/body_detection.tasklist +++ b/test/body_detection.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/body_detection_data_literals.c b/test/body_detection_data_literals.c index 96a0cc2f8f..cafe1d6ade 100644 --- a/test/body_detection_data_literals.c +++ b/test/body_detection_data_literals.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -6,6208 +6,6208 @@ const struct body_detect_test_data kBodyDetectOnBodyTestData[] = { /* x, y, z, action*/ - {3.233367f, 1.968032f, 8.875299f, 0}, - {3.190272f, 2.127247f, 9.054865f, 0}, - {3.361457f, 2.057815f, 9.054865f, 0}, - {3.377019f, 1.917754f, 9.093172f, 0}, - {3.460816f, 1.817198f, 9.058456f, 0}, - {3.500320f, 1.726218f, 8.900438f, 0}, - {3.715799f, 1.363497f, 8.836992f, 0}, - {3.883393f, 0.884657f, 8.832204f, 0}, - {3.948036f, 0.577002f, 9.016558f, 0}, - {3.600877f, 0.717063f, 9.200911f, 0}, - {3.318361f, 0.854729f, 9.166195f, 0}, - {3.272871f, 0.731428f, 9.149436f, 0}, - {3.452436f, 0.250194f, 9.297876f, 0}, - {3.817552f, -0.353144f, 9.424768f, 0}, - {3.828326f, -0.495599f, 9.284708f, 0}, - {3.312376f, -0.040701f, 9.204502f, 0}, - {3.049014f, 0.515950f, 9.223656f, 0}, - {3.099292f, 0.980425f, 8.882483f, 0}, - {3.153162f, 1.443703f, 8.154645f, 0}, - {3.501518f, 1.487995f, 8.054089f, 0}, - {4.235340f, 1.292868f, 8.480257f, 0}, - {4.284421f, 1.511937f, 8.848964f, 0}, - {3.988737f, 1.928528f, 9.149436f, 0}, - {3.825932f, 2.076969f, 9.576800f, 0}, - {3.903743f, 1.991974f, 10.133451f, 0}, - {3.841494f, 2.000354f, 10.165773f, 0}, - {3.706222f, 1.930922f, 9.649823f, 0}, - {3.949233f, 1.614888f, 9.054865f, 0}, - {4.237734f, 1.272517f, 8.625106f, 0}, - {4.188653f, 1.134851f, 8.268370f, 0}, - {4.242523f, 0.991199f, 8.091199f, 0}, - {4.157528f, 0.970848f, 8.135491f, 0}, - {3.951627f, 0.967257f, 8.353364f, 0}, - {4.073731f, 0.994790f, 8.854949f, 0}, - {3.840297f, 1.124077f, 9.249992f, 0}, - {3.736149f, 1.142033f, 9.491806f, 0}, - {3.809172f, 1.126471f, 9.651020f, 0}, - {3.987540f, 1.173158f, 9.633064f, 0}, - {4.237734f, 1.005564f, 9.467864f, 0}, - {4.308363f, 0.939724f, 9.190137f, 0}, - {4.367021f, 0.986410f, 9.021346f, 0}, - {4.406525f, 1.033097f, 9.074018f, 0}, - {4.185062f, 1.276109f, 9.235627f, 0}, - {3.971978f, 1.363497f, 9.525325f, 0}, - {4.031833f, 1.318007f, 10.833755f, 0}, - {4.214989f, 1.144428f, 10.241191f, 0}, - {4.808751f, 0.590170f, 9.690525f, 0}, - {4.697421f, 0.372298f, 10.245979f, 0}, - {4.490322f, 0.207098f, 9.682145f, 0}, - {4.353853f, 0.494402f, 8.651442f, 0}, - {3.981555f, 1.094149f, 8.230062f, 0}, - {3.933671f, 1.310825f, 8.426387f, 0}, - {4.107250f, 1.189917f, 9.068033f, 0}, - {4.529827f, 0.888248f, 9.501383f, 0}, - {4.699815f, 0.720654f, 9.765942f, 0}, - {4.661508f, 0.647631f, 9.916777f, 0}, - {4.627989f, 0.587776f, 9.925157f, 0}, - {4.413708f, 0.587776f, 9.791081f, 0}, - {4.369415f, 0.466869f, 9.840162f, 0}, - {4.412511f, 0.335188f, 9.932339f, 0}, - {4.234143f, 0.452504f, 9.502580f, 0}, - {3.817552f, 1.055842f, 8.638274f, 0}, - {3.130417f, 1.842337f, 7.748828f, 0}, - {2.511516f, 2.430113f, 7.059299f, 0}, - {2.267308f, 2.840718f, 6.742067f, 0}, - {2.082954f, 3.129220f, 6.706154f, 0}, - {1.653195f, 3.483561f, 6.813893f, 0}, - {1.053448f, 3.797201f, 7.132322f, 0}, - {0.333991f, 4.125207f, 7.364560f, 0}, - {-0.039504f, 4.228158f, 8.018176f, 0}, - {0.403423f, 3.726573f, 8.789108f, 0}, - {1.179144f, 3.120840f, 9.289496f, 0}, - {1.683123f, 2.905362f, 9.911988f, 0}, - {1.442506f, 3.038240f, 10.551240f, 0}, - {1.403001f, 2.936486f, 12.229574f, 0}, - {1.601720f, 2.541443f, 14.815310f, 0}, - {2.233789f, 2.037464f, 14.715951f, 0}, - {2.664745f, 1.736992f, 12.216406f, 0}, - {3.331529f, 1.385045f, 10.475822f, 0}, - {3.337515f, 1.235407f, 9.133873f, 0}, - {3.173512f, 1.292868f, 8.406036f, 0}, - {3.201046f, 1.462856f, 8.306677f, 0}, - {3.157950f, 1.595734f, 9.011769f, 0}, - {2.759315f, 1.777694f, 10.049655f, 0}, - {2.315192f, 2.105699f, 10.682920f, 0}, - {2.063801f, 2.375046f, 10.832559f, 0}, - {2.310403f, 2.485180f, 10.688907f, 0}, - {2.553414f, 2.606087f, 10.153803f, 0}, - {2.475603f, 2.731782f, 9.356534f, 0}, - {2.710234f, 2.529472f, 9.297876f, 0}, - {2.777272f, 2.193087f, 9.394841f, 0}, - {2.938881f, 1.920148f, 9.531310f, 0}, - {3.108869f, 1.635239f, 10.534480f, 0}, - {3.187877f, 1.425746f, 10.899596f, 0}, - {3.448845f, 1.331175f, 10.508144f, 0}, - {3.606862f, 1.470039f, 9.440331f, 0}, - {3.700236f, 1.162384f, 8.781926f, 0}, - {3.713404f, 0.864306f, 8.845372f, 0}, - {3.575738f, 0.404620f, 9.610319f, 0}, - {3.495532f, -0.130484f, 9.526522f, 0}, - {3.403355f, -0.411802f, 8.833401f, 0}, - {3.203440f, -0.380678f, 8.850161f, 0}, - {2.822762f, -0.191536f, 9.560040f, 0}, - {2.488771f, -0.459686f, 9.883258f, 0}, - {3.065773f, -0.764947f, 10.110707f, 0}, - {1.993172f, 1.004367f, 9.798264f, 0}, - {2.426522f, 1.732204f, 10.036487f, 0}, - {3.213017f, 1.238999f, 10.182533f, 0}, - {2.779666f, 2.394200f, 9.916777f, 0}, - {3.187877f, 2.622846f, 9.593559f, 0}, - {4.195836f, 1.867476f, 9.876076f, 0}, - {3.720587f, 2.114079f, 9.998179f, 0}, - {2.948457f, 2.766498f, 9.500186f, 0}, - {3.869027f, 2.822762f, 9.572012f, 0}, - {4.205412f, 2.656365f, 9.753971f, 0}, - {4.151543f, 2.828747f, 9.751576f, 0}, - {4.046198f, 2.905362f, 9.131479f, 0}, - {3.915714f, 3.032254f, 8.237246f, 0}, - {3.864239f, 3.126825f, 8.008599f, 0}, - {3.466802f, 2.999933f, 8.634683f, 0}, - {2.876631f, 2.902968f, 9.473849f, 0}, - {2.329557f, 2.899376f, 10.187322f, 0}, - {2.197876f, 3.608059f, 10.637431f, 0}, - {2.357090f, 4.205412f, 10.235206f, 0}, - {2.716220f, 4.076126f, 9.261963f, 0}, - {3.520671f, 3.847480f, 8.461103f, 0}, - {4.180274f, 3.879801f, 7.758405f, 0}, - {4.691435f, 4.034227f, 7.019794f, 0}, - {4.918884f, 3.915714f, 6.659468f, 0}, - {4.722559f, 4.205412f, 6.113590f, 0}, - {5.349840f, 4.169499f, 5.413286f, 0}, - {6.423639f, 3.742135f, 5.009864f, 0}, - {6.799528f, 3.581723f, 4.843467f, 0}, - {6.915647f, 3.337515f, 4.921278f, 0}, - {7.358574f, 3.173512f, 5.214568f, 0}, - {7.584826f, 2.861069f, 5.182246f, 0}, - {7.077255f, 2.771286f, 5.073310f, 0}, - {7.192177f, 2.306812f, 5.501872f, 0}, - {7.241258f, 2.145203f, 5.888535f, 0}, - {7.599191f, 1.898601f, 6.099225f, 0}, - {7.576446f, 2.138021f, 6.144714f, 0}, - {7.465116f, 1.962047f, 6.021413f, 0}, - {7.677002f, 1.740583f, 5.643129f, 0}, - {7.966701f, 1.648407f, 4.964374f, 0}, - {8.038527f, 1.636436f, 4.419693f, 0}, - {8.176193f, 1.582566f, 4.183865f, 0}, - {8.489834f, 1.460462f, 4.319137f, 0}, - {8.804670f, 1.314416f, 4.444832f, 0}, - {8.803473f, 1.308430f, 4.492716f, 0}, - {8.580813f, 1.392227f, 4.501096f, 0}, - {8.056483f, 1.595734f, 4.428073f, 0}, - {8.418008f, 1.316810f, 4.600455f, 0}, - {8.826219f, 1.170764f, 4.411314f, 0}, - {8.652639f, 1.201888f, 3.910926f, 0}, - {8.285130f, 0.927753f, 3.752909f, 0}, - {8.475469f, 1.027112f, 3.569752f, 0}, - {9.009375f, 0.708683f, 3.605665f, 0}, - {8.797488f, 0.600944f, 3.107672f, 0}, - {8.864526f, 0.620098f, 2.863463f, 0}, - {8.833401f, 0.214281f, 2.640803f, 0}, - {9.212882f, 0.150835f, 2.487574f, 0}, - {9.308650f, 0.226252f, 2.375046f, 0}, - {8.869314f, 0.094571f, 2.142809f, 0}, - {9.208094f, 0.002394f, 2.132035f, 0}, - {9.100354f, 0.015562f, 2.367864f, 0}, - {8.973462f, -0.011971f, 2.602495f, 0}, - {8.872906f, 0.000000f, 2.564188f, 0}, - {8.883679f, 0.092177f, 2.452858f, 0}, - {8.857343f, 0.241814f, 2.480391f, 0}, - {8.919592f, 0.371101f, 2.612072f, 0}, - {9.002192f, 0.483628f, 2.536655f, 0}, - {9.056062f, 0.521936f, 2.335542f, 0}, - {9.023740f, 0.572214f, 2.012325f, 0}, - {9.085989f, 0.592565f, 1.854308f, 0}, - {9.127888f, 0.505176f, 1.783679f, 0}, - {8.968674f, 0.653617f, 1.787270f, 0}, - {8.872906f, 0.650025f, 1.867476f, 0}, - {8.798685f, 0.628478f, 2.148795f, 0}, - {8.841781f, 0.530315f, 2.687490f, 0}, - {8.541308f, 0.642843f, 2.780863f, 0}, - {8.499411f, 0.402226f, 2.566582f, 0}, - {8.734042f, -0.217872f, 2.597707f, 0}, - {8.689749f, -0.295684f, 3.051408f, 0}, - {8.298298f, -0.123301f, 3.968387f, 0}, - {7.545321f, -0.111330f, 4.738122f, 0}, - {6.827062f, -0.112527f, 5.501872f, 0}, - {6.604401f, 0.435744f, 6.827062f, 0}, - {6.572079f, 0.610521f, 7.642287f, 0}, - {6.546940f, 0.383072f, 7.778756f, 0}, - {6.274001f, 0.530315f, 7.600388f, 0}, - {5.847834f, 1.544259f, 7.811078f, 0}, - {5.374979f, 1.781285f, 7.654258f, 0}, - {5.163093f, 1.493981f, 7.372939f, 0}, - {5.104434f, 1.314416f, 7.807487f, 0}, - {5.424060f, 0.847547f, 8.513776f, 0}, - {5.471944f, 0.817619f, 8.461103f, 0}, - {4.618412f, 1.319204f, 8.107959f, 0}, - {4.265267f, 1.634042f, 7.587220f, 0}, - {5.191823f, 1.347935f, 7.196965f, 0}, - {4.748896f, 1.868673f, 7.097606f, 0}, - {4.595667f, 1.187523f, 7.428006f, 0}, - {3.948036f, 1.272517f, 8.262384f, 0}, - {2.280476f, 1.892615f, 8.998601f, 0}, - {2.828747f, 1.725021f, 8.937549f, 0}, - {3.256112f, 1.863885f, 9.101552f, 0}, - {3.264492f, 1.679531f, 8.540112f, 0}, - {3.616439f, 1.237801f, 8.178588f, 0}, - {3.713404f, 1.492784f, 9.411600f, 0}, - {3.654746f, 1.428140f, 10.740381f, 0}, - {3.139993f, 1.246181f, 10.362098f, 0}, - {2.381032f, 1.161187f, 9.357731f, 0}, - {2.602495f, 1.027112f, 11.311399f, 0}, - {2.964020f, 1.120486f, 12.570747f, 0}, - {2.501939f, 1.344343f, 10.244782f, 0}, - {2.152386f, 1.455674f, 9.786293f, 0}, - {1.878250f, 1.450885f, 10.216052f, 0}, - {1.844731f, 1.434126f, 12.245136f, 0}, - {2.011128f, 1.198297f, 13.654123f, 0}, - {1.562216f, 1.192312f, 10.202884f, 0}, - {1.046265f, 1.596931f, 8.796291f, 0}, - {1.344343f, 1.769314f, 9.710876f, 0}, - {1.857899f, 1.845928f, 10.510538f, 0}, - {2.217029f, 1.814804f, 11.314989f, 0}, - {2.341528f, 1.612494f, 11.218024f, 0}, - {2.144006f, 1.527500f, 10.122678f, 0}, - {2.220621f, 1.271320f, 10.222037f, 0}, - {2.487574f, 0.978031f, 10.830164f, 0}, - {2.782060f, 0.950497f, 11.261120f, 0}, - {3.031057f, 0.894234f, 10.802630f, 0}, - {2.880223f, 0.992396f, 9.764745f, 0}, - {2.115276f, 1.447294f, 8.930367f, 0}, - {1.849520f, 1.715444f, 8.956702f, 0}, - {2.313994f, 1.569398f, 9.429557f, 0}, - {2.365470f, 1.504755f, 9.142253f, 0}, - {2.184708f, 1.528697f, 8.570039f, 0}, - {2.346316f, 1.491587f, 8.657428f, 0}, - {2.662350f, 1.338358f, 8.938745f, 0}, - {2.619255f, 1.200691f, 8.894453f, 0}, - {2.372652f, 1.073799f, 8.850161f, 0}, - {2.363075f, 1.012747f, 9.173378f, 0}, - {2.529472f, 1.101332f, 9.485821f, 0}, - {2.730585f, 1.132457f, 9.469061f, 0}, - {2.913742f, 1.120486f, 9.311044f, 0}, - {3.093307f, 1.151610f, 9.610319f, 0}, - {3.087321f, 1.296459f, 10.226826f, 0}, - {2.811988f, 1.377862f, 10.601518f, 0}, - {2.683898f, 1.231816f, 10.516523f, 0}, - {2.584539f, 1.250970f, 10.043670f, 0}, - {2.732979f, 1.283291f, 9.721649f, 0}, - {2.949655f, 1.004367f, 9.597151f, 0}, - {2.908953f, 0.938526f, 9.525325f, 0}, - {2.630029f, 1.124077f, 9.534902f, 0}, - {2.710234f, 0.859518f, 9.769533f, 0}, - {2.574962f, 0.883460f, 9.832980f, 0}, - {2.279279f, 1.092952f, 9.628276f, 0}, - {2.272096f, 1.016338f, 9.598348f, 0}, - {2.448070f, 0.889445f, 9.724044f, 0}, - {2.395397f, 0.984016f, 9.685737f, 0}, - {2.266110f, 1.094149f, 9.788687f, 0}, - {2.366667f, 1.074996f, 9.836571f, 0}, - {2.486377f, 1.023521f, 9.856922f, 0}, - {2.391806f, 1.103726f, 9.935930f, 0}, - {2.179919f, 1.174355f, 9.900018f, 0}, - {2.024296f, 1.203086f, 9.925157f, 0}, - {2.039858f, 1.156399f, 9.900018f, 0}, - {2.087743f, 1.066616f, 9.976632f, 0}, - {2.084151f, 0.975637f, 9.853331f, 0}, - {2.179919f, 0.985213f, 9.618699f, 0}, - {2.300826f, 1.031900f, 9.533705f, 0}, - {2.246957f, 1.083376f, 9.599545f, 0}, - {2.124853f, 0.970848f, 9.703692f, 0}, - {2.005142f, 1.036689f, 9.664188f, 0}, - {2.142809f, 1.047463f, 9.641443f, 0}, - {2.340331f, 0.885854f, 9.666583f, 0}, - {2.238577f, 0.888248f, 9.624684f, 0}, - {2.110487f, 0.960074f, 9.634261f, 0}, - {2.123656f, 1.030703f, 9.668977f, 0}, - {2.196679f, 1.061828f, 9.731226f, 0}, - {2.325965f, 0.931344f, 9.607924f, 0}, - {2.492362f, 0.841561f, 9.391250f, 0}, - {2.663548f, 0.991199f, 9.607924f, 0}, - {2.663548f, 0.933738f, 9.994588f, 0}, - {2.318783f, 0.817619f, 9.791081f, 0}, - {1.841140f, 0.946906f, 9.582786f, 0}, - {1.580172f, 1.162384f, 9.424768f, 0}, - {1.405395f, 1.210268f, 9.209291f, 0}, - {1.625662f, 1.034294f, 9.338577f, 0}, - {1.824380f, 1.120486f, 9.599545f, 0}, - {1.843534f, 1.120486f, 10.004165f, 0}, - {2.057815f, 0.648828f, 10.226826f, 0}, - {2.493559f, 0.673967f, 9.695313f, 0}, - {2.706643f, 0.766144f, 9.198517f, 0}, - {2.315192f, 0.678756f, 8.605952f, 0}, - {1.771708f, 0.752976f, 8.489834f, 0}, - {1.243787f, 0.969651f, 9.085989f, 0}, - {1.102529f, 0.957680f, 9.589969f, 0}, - {0.967257f, 0.730231f, 9.928748f, 0}, - {0.428562f, 0.812831f, 10.267527f, 0}, - {0.254982f, 1.097741f, 10.530889f, 0}, - {0.830787f, 1.238999f, 10.898398f, 0}, - {1.181538f, 1.061828f, 11.079161f, 0}, - {1.320401f, 1.142033f, 11.312595f, 0}, - {1.430535f, 0.967257f, 11.358085f, 0}, - {1.130062f, 0.909796f, 11.218024f, 0}, - {0.805648f, 0.810437f, 11.358085f, 0}, - {0.553060f, 0.751779f, 11.392801f, 0}, - {0.617704f, 0.609324f, 11.170140f, 0}, - {0.879869f, 0.511162f, 11.275485f, 0}, - {0.829590f, 0.587776f, 11.293442f, 0}, - {0.312443f, 0.672770f, 11.064795f, 0}, - {0.293290f, 0.867898f, 10.777492f, 0}, - {0.509965f, 0.920570f, 10.351324f, 0}, - {0.536301f, 1.023521f, 10.133451f, 0}, - {0.774524f, 1.107318f, 10.016136f, 0}, - {1.381453f, 0.903811f, 9.916777f, 0}, - {1.589749f, 0.810437f, 9.695313f, 0}, - {1.593340f, 0.811634f, 9.537296f, 0}, - {1.824380f, 0.887051f, 9.521733f, 0}, - {1.902192f, 0.964863f, 9.576800f, 0}, - {1.674743f, 1.398213f, 9.964661f, 0}, - {1.234210f, 1.440111f, 9.610319f, 0}, - {1.334767f, 1.115697f, 9.568420f, 0}, - {1.393424f, 1.659181f, 9.431952f, 0}, - {1.001973f, 2.656365f, 9.647429f, 0}, - {0.780509f, 3.013101f, 9.451105f, 0}, - {1.270123f, 3.008312f, 9.417586f, 0}, - {1.909375f, 3.031057f, 9.946704f, 0}, - {1.747766f, 3.309982f, 9.271540f, 0}, - {1.356314f, 3.300405f, 8.287523f, 0}, - {0.751779f, 3.156753f, 7.970292f, 0}, - {0.063446f, 3.359063f, 8.893256f, 0}, - {0.136469f, 3.002327f, 8.529338f, 0}, - {0.253785f, 3.015495f, 8.072045f, 0}, - {-0.045490f, 3.882195f, 8.609544f, 0}, - {0.149638f, 4.250902f, 9.435542f, 0}, - {1.071405f, 3.465605f, 9.838965f, 0}, - {1.856702f, 3.051408f, 11.276682f, 0}, - {2.770089f, 2.961626f, 10.789463f, 0}, - {3.514686f, 2.636014f, 7.386107f, 0}, - {3.545810f, 2.828747f, 7.304704f, 0}, - {3.815158f, 3.108869f, 6.725308f, 0}, - {3.323150f, 3.184286f, 4.733334f, 0}, - {2.572568f, 3.155556f, 6.907267f, 0}, - {3.299208f, 2.012325f, 9.501383f, 0}, - {3.531445f, 2.621649f, 8.761575f, 0}, - {4.510673f, 3.228579f, 12.022475f, 0}, - {6.127955f, 1.776496f, 13.516457f, 0}, - {5.631158f, 1.547850f, 11.772282f, 0}, - {5.889732f, -0.058658f, 7.119154f, 0}, - {4.481943f, 1.406592f, 6.591233f, 0}, - {4.230552f, 1.640027f, 9.447514f, 0}, - {4.007891f, 0.654814f, 11.417940f, 0}, - {4.525038f, 0.415394f, 11.757916f, 0}, - {4.125207f, 0.555454f, 10.915158f, 0}, - {3.624819f, 0.526724f, 9.951492f, 0}, - {3.210622f, 0.480037f, 10.086765f, 0}, - {3.298011f, 1.221042f, 9.670174f, 0}, - {3.142388f, 1.479616f, 9.212882f, 0}, - {2.955640f, 1.448491f, 8.816642f, 0}, - {3.101686f, 2.088940f, 9.536098f, 0}, - {3.215411f, 2.460041f, 9.319424f, 0}, - {3.247732f, 2.573765f, 8.180982f, 0}, - {3.251324f, 2.348710f, 8.084017f, 0}, - {3.372231f, 2.255337f, 9.076412f, 0}, - {3.545810f, 2.310403f, 9.700102f, 0}, - {3.739741f, 2.173934f, 9.156618f, 0}, - {3.809172f, 1.825577f, 9.087187f, 0}, - {3.727770f, 1.434126f, 9.709679f, 0}, - {3.596088f, 1.175552f, 10.115496f, 0}, - {3.452436f, 1.128865f, 9.888046f, 0}, - {3.217805f, 1.009155f, 9.366111f, 0}, - {3.197454f, 1.152807f, 9.042893f, 0}, - {3.360260f, 1.312022f, 8.710100f, 0}, - {3.630804f, 1.417366f, 8.561660f, 0}, - {3.858253f, 1.345540f, 8.723268f, 0}, - {4.018665f, 1.070207f, 9.018951f, 0}, - {4.181470f, 0.847547f, 9.135071f, 0}, - {4.359838f, 0.720654f, 9.123099f, 0}, - {4.487928f, 0.720654f, 9.082398f, 0}, - {4.380189f, 0.676362f, 9.085989f, 0}, - {4.357444f, 0.766144f, 9.149436f, 0}, - {4.260479f, 0.820014f, 8.944732f, 0}, - {4.271253f, 0.809240f, 9.156618f, 0}, - {4.315546f, 0.563834f, 9.089581f, 0}, - {4.484337f, 0.366313f, 8.816642f, 1}, - {4.460395f, 0.489614f, 8.925578f, 0}, - {4.448424f, 0.270545f, 9.436740f, 0}, - {4.559754f, 0.149638f, 9.291890f, 0}, - {4.551374f, 0.318429f, 8.737633f, 0}, - {4.523841f, 0.301669f, 8.877694f, 0}, - {4.411314f, 0.075417f, 9.094369f, 0}, - {4.203018f, -0.062249f, 9.162603f, 0}, - {4.171894f, -0.029928f, 8.957899f, 0}, - {4.235340f, -0.195127f, 9.186545f, 0}, - {4.386175f, -0.499191f, 9.753971f, 0}, - {4.505885f, -0.679953f, 10.381251f, 0}, - {4.586090f, -0.547075f, 10.471034f, 0}, - {4.892548f, -0.622492f, 9.931142f, 0}, - {5.498281f, -0.993593f, 9.714467f, 0}, - {5.907689f, -1.383848f, 9.782701f, 0}, - {6.193796f, -1.279700f, 9.963464f, 0}, - {6.526589f, -1.408987f, 8.862131f, 0}, - {6.619963f, -2.099714f, 7.775165f, 0}, - {6.324279f, -2.311600f, 7.964306f, 0}, - {5.984303f, -2.063801f, 9.196122f, 0}, - {5.639538f, -1.571792f, 8.735239f, 0}, - {5.276817f, -1.029506f, 7.680594f, 0}, - {5.011061f, -0.629675f, 7.769179f, 0}, - {4.618412f, -0.131681f, 8.444344f, 0}, - {4.189850f, 0.440533f, 8.780728f, 0}, - {4.214989f, 1.012747f, 8.608346f, 0}, - {4.211398f, 1.684320f, 8.520958f, 0}, - {4.193441f, 2.132035f, 9.264358f, 0}, - {4.256888f, 2.742556f, 9.690525f, 0}, - {4.542994f, 3.782836f, 9.542085f, 0}, - {5.335475f, 4.732136f, 8.649048f, 0}, - {5.679042f, 5.600034f, 7.328646f, 0}, - {5.938813f, 6.015428f, 5.878958f, 0}, - {5.702984f, 5.841848f, 3.946839f, 0}, - {5.978318f, 4.942826f, 2.680307f, 0}, - {6.204569f, 4.444832f, 3.429692f, 0}, - {6.102816f, 4.230552f, 4.288013f, 0}, - {6.244074f, 4.173091f, 4.954797f, 0}, - {6.355404f, 3.830720f, 5.212173f, 0}, - {7.004232f, 3.655943f, 4.850649f, 0}, - {7.965504f, 2.867055f, 4.497505f, 0}, - {8.603558f, 3.070562f, 4.267662f, 0}, - {9.105143f, 4.338291f, 4.809948f, 0}, - {8.657428f, 4.848255f, 3.834311f, 0}, - {7.819458f, 5.075704f, 0.330400f, 0}, - {7.815866f, 5.650312f, -3.190272f, 0}, - {7.144293f, 6.502647f, -10.860091f, 0}, - {7.374136f, 4.941629f, -7.758405f, 0}, - {8.832204f, 3.672703f, 0.448913f, 0}, - {9.153027f, 3.536233f, 0.270545f, 0}, - {8.880088f, 4.343079f, 0.025139f, 0}, - {8.923183f, 4.811145f, -0.472855f, 0}, - {9.080004f, 4.722559f, -0.604536f, 0}, - {9.029726f, 4.490322f, -0.079009f, 0}, - {9.149436f, 4.181470f, -0.168791f, 0}, - {9.192532f, 4.162317f, -0.488417f, 0}, - {9.105143f, 4.446030f, -0.647631f, 0}, - {9.289496f, 4.550177f, -0.691924f, 0}, - {9.198517f, 4.359838f, -0.305261f, 0}, - {8.995009f, 4.213792f, 0.192733f, 0}, - {8.955505f, 4.545389f, -0.177171f, 0}, - {8.451527f, 5.149924f, -1.136048f, 0}, - {7.418429f, 5.443214f, 0.033519f, 0}, - {6.846215f, 5.254072f, 2.087743f, 0}, - {7.192177f, 4.586090f, 3.452436f, 0}, - {7.727281f, 3.658338f, 3.614045f, 0}, - {8.420402f, 3.105278f, 2.424128f, 0}, - {9.446317f, 2.968808f, 1.719036f, 0}, - {9.706087f, 2.862266f, 2.051830f, 0}, - {9.520536f, 2.778469f, 2.466026f, 0}, - {9.439134f, 2.862266f, 3.065773f, 0}, - {8.769955f, 3.287237f, 3.415326f, 0}, - {8.048103f, 3.784033f, 2.977188f, 0}, - {7.817063f, 3.926488f, 1.849520f, 0}, - {8.365335f, 3.857056f, 0.901416f, 0}, - {8.749604f, 3.778048f, 0.855927f, 0}, - {7.741646f, 4.425679f, 1.212662f, 0}, - {6.775586f, 5.135559f, 1.638830f, 0}, - {7.811078f, 4.550177f, 3.052605f, 0}, - {8.285130f, 4.247311f, 3.077744f, 0}, - {8.590390f, 4.511870f, 2.555809f, 0}, - {8.787911f, 4.813539f, 2.319980f, 0}, - {8.252808f, 4.928461f, 1.952470f, 0}, - {7.679397f, 4.880577f, 1.568201f, 0}, - {7.946350f, 4.525038f, 1.531091f, 0}, - {8.236049f, 4.353853f, 1.537076f, 0}, - {8.593981f, 4.235340f, 1.843534f, 0}, - {8.511381f, 4.062957f, 1.691502f, 0}, - {8.268370f, 4.389766f, 1.649604f, 0}, - {8.129506f, 5.080492f, 1.691502f, 0}, - {8.280341f, 5.632356f, 1.444900f, 0}, - {8.936352f, 5.948390f, 1.972821f, 0}, - {10.184927f, 5.974726f, 3.705025f, 0}, - {11.186900f, 5.440820f, 3.477576f, 0}, - {11.239573f, 4.985922f, 1.543062f, 0}, - {11.077964f, 4.748896f, 1.107318f, 0}, - {10.912764f, 4.514264f, 1.528697f, 0}, - {10.890019f, 3.810369f, 1.624465f, 0}, - {9.329000f, 2.948457f, 1.057039f, 0}, - {7.509408f, 2.424128f, 1.201888f, 0}, - {7.207739f, 1.965638f, 1.035492f, 0}, - {7.030569f, 1.936908f, 0.076614f, 0}, - {6.907267f, 2.347513f, -0.646434f, 0}, - {7.483072f, 2.871843f, -0.088585f, 0}, - {8.190558f, 3.590103f, 1.675940f, 0}, - {8.498213f, 3.961204f, 1.974018f, 0}, - {8.552083f, 3.774457f, 1.284488f, 0}, - {8.402445f, 3.895364f, 2.099714f, 0}, - {8.273158f, 4.100068f, 2.432507f, 0}, - {8.030147f, 4.141966f, 1.668757f, 0}, - {7.900860f, 4.010285f, 1.027112f, 0}, - {7.912831f, 3.936065f, 0.803254f, 0}, - {7.878115f, 4.007891f, 0.687135f, 0}, - {7.789530f, 4.050986f, 0.326808f, 0}, - {8.213304f, 3.869027f, 0.050278f, 0}, - {8.558068f, 3.667914f, 0.016759f, 0}, - {8.617923f, 3.523065f, 0.405817f, 0}, - {8.524549f, 3.506306f, 0.683544f, 0}, - {8.438358f, 3.640381f, 0.433350f, 0}, - {8.262384f, 3.952824f, 0.190339f, 0}, - {8.115141f, 4.276042f, 0.306458f, 0}, - {8.386883f, 4.367021f, 0.554257f, 0}, - {8.827415f, 4.244917f, 0.985213f, 0}, - {9.200911f, 4.337093f, 0.806845f, 0}, - {10.524903f, 4.668690f, -0.792480f, 0}, - {11.640601f, 4.612426f, -1.328781f, 0}, - {11.060007f, 4.495111f, -0.488417f, 0}, - {9.582786f, 5.093661f, 0.833182f, 0}, - {9.582786f, 5.696999f, 1.917754f, 0}, - {10.176547f, 5.428849f, 1.911769f, 0}, - {10.186124f, 5.148727f, 2.031479f, 0}, - {9.921565f, 4.803962f, 2.525881f, 0}, - {9.082398f, 3.547007f, 2.503136f, 0}, - {8.127112f, 2.201467f, 3.013101f, 0}, - {8.121126f, 2.080560f, 3.895364f, 0}, - {7.538139f, 3.345895f, 3.219002f, 0}, - {7.010218f, 3.763683f, 2.015916f, 0}, - {7.691368f, 3.278857f, 1.988383f, 0}, - {9.029726f, 2.555809f, 2.470814f, 0}, - {9.815023f, 2.255337f, 1.878250f, 0}, - {9.594757f, 2.603693f, 0.724246f, 0}, - {8.785517f, 3.135205f, 0.660799f, 0}, - {8.186967f, 3.447648f, 1.098938f, 0}, - {7.940364f, 3.257309f, 1.605311f, 0}, - {7.721295f, 2.911347f, 1.705868f, 0}, - {7.763194f, 2.804805f, 1.307233f, 0}, - {8.137886f, 2.965217f, 1.130062f, 0}, - {8.329422f, 3.266886f, 1.200691f, 0}, - {8.224077f, 3.472787f, 1.547850f, 0}, - {7.841005f, 3.687068f, 1.614888f, 0}, - {7.527365f, 4.015073f, 1.435323f, 0}, - {7.979869f, 4.304772f, 1.449688f, 0}, - {6.466734f, 4.948812f, 0.798466f, 0}, - {5.912477f, 5.204991f, 0.487220f, 0}, - {8.413219f, 5.108026f, 3.270477f, 0}, - {9.945507f, 5.396527f, 3.342303f, 0}, - {10.691300f, 5.128376f, 2.308009f, 0}, - {10.842135f, 4.801568f, 1.601720f, 0}, - {9.938325f, 4.821919f, 1.177946f, 0}, - {8.507790f, 4.671084f, 1.237801f, 0}, - {8.838189f, 4.602849f, 2.097319f, 0}, - {10.510538f, 4.817131f, 2.170342f, 0}, - {12.216406f, 4.753684f, 1.561018f, 0}, - {12.654545f, 3.897758f, 0.378284f, 0}, - {11.204856f, 1.860294f, -0.105345f, 0}, - {8.844175f, 0.367510f, 1.064222f, 0}, - {7.511803f, 0.355539f, 1.830366f, 0}, - {7.447159f, 0.761356f, 1.376665f, 0}, - {7.492649f, 1.477221f, 1.074996f, 0}, - {7.439977f, 1.969230f, 1.636436f, 0}, - {8.178588f, 2.361878f, 2.212241f, 0}, - {9.138661f, 2.566582f, 3.772062f, 0}, - {8.628697f, 3.113657f, 5.457579f, 0}, - {7.310690f, 3.958810f, 4.115630f, 0}, - {6.605598f, 3.852268f, -0.732625f, 0}, - {7.333435f, 2.907756f, -0.568623f, 0}, - {7.597994f, 2.693475f, 1.482010f, 0}, - {7.583629f, 2.049435f, 0.691924f, 0}, - {9.470259f, 0.593762f, -0.951695f, 0}, - {10.658978f, 0.784101f, -0.517147f, 0}, - {10.287878f, 1.835154f, 0.626083f, 0}, - {9.807840f, 2.612072f, 1.288080f, 0}, - {8.984236f, 2.947260f, 0.714669f, 0}, - {8.761575f, 2.649182f, -0.256179f, 0}, - {8.923183f, 2.196679f, -0.543483f, 0}, - {8.926775f, 1.908177f, -0.259771f, 0}, - {8.783123f, 2.282870f, 0.343568f, 0}, - {8.637076f, 2.968808f, 0.847547f, 0}, - {9.196122f, 2.409762f, 1.001973f, 0}, - {10.965436f, 2.219424f, -0.040701f, 0}, - {12.228376f, 2.415748f, -2.486377f, 0}, - {11.583140f, 2.370258f, -2.585736f, 0}, - {10.394420f, 2.659956f, -0.113724f, 0}, - {9.483426f, 3.004721f, 1.859096f, 0}, - {9.071624f, 3.149570f, 2.835930f, 0}, - {9.080004f, 3.254915f, 3.105278f, 0}, - {9.205699f, 3.192666f, 3.260900f, 0}, - {9.168590f, 2.627635f, 3.888181f, 0}, - {8.310268f, 1.988383f, 3.989934f, 0}, - {6.813893f, 1.753752f, 3.471590f, 0}, - {6.712140f, 1.843534f, 3.975569f, 0}, - {7.686579f, 1.092952f, 4.849452f, 0}, - {8.225274f, -0.057461f, 5.044580f, 0}, - {9.645035f, -1.168370f, 5.014652f, 0}, - {10.184927f, -1.946485f, 5.219356f, 0}, - {9.691722f, -2.285264f, 4.790794f, 0}, - {9.776716f, -2.582145f, 4.147952f, 0}, - {9.946704f, -2.756921f, 3.651155f, 0}, - {9.209291f, -2.138021f, 3.199848f, 0}, - {8.215697f, -1.181538f, 2.749739f, 0}, - {7.557292f, -0.480037f, 2.457646f, 0}, - {7.584826f, -0.227449f, 2.263716f, 0}, - {8.142674f, 0.092177f, 1.337161f, 0}, - {8.587996f, 0.541089f, -0.260968f, 0}, - {9.088384f, 0.393846f, -1.416169f, 0}, - {9.514551f, 0.010774f, -0.566228f, 0}, - {9.374491f, 0.046687f, 0.678756f, 0}, - {9.302665f, 0.275333f, 0.553060f, 0}, - {9.515748f, 0.501585f, 0.005986f, 0}, - {9.652218f, 0.667982f, -0.077812f, 0}, - {9.983814f, 0.775721f, 0.123301f, 0}, - {10.466246f, 0.855927f, 0.921767f, 0}, - {11.034868f, 0.636857f, 1.392227f, 0}, - {11.848896f, -0.166397f, 0.960074f, 0}, - {12.391183f, -1.085770f, 0.053870f, 0}, - {12.482162f, -1.602917f, -0.912190f, 0}, - {12.077542f, -1.947682f, -1.058236f, 0}, - {11.311399f, -1.833957f, -0.653617f, 0}, - {10.664965f, -1.778891f, 0.350750f, 0}, - {9.764745f, -2.568977f, 2.135627f, 0}, - {8.580813f, -3.081336f, 2.833536f, 0}, - {7.436386f, -2.665942f, 2.202664f, 0}, - {6.769601f, -1.289277f, 2.110487f, 0}, - {7.038948f, 0.441730f, 3.216608f, 0}, - {8.155843f, 1.883038f, 4.080914f, 0}, - {9.284708f, 1.380256f, 3.860648f, 0}, - {9.452302f, -0.167594f, 2.287658f, 0}, - {9.560040f, -0.761356f, 0.659602f, 0}, - {9.497791f, -0.784101f, -0.830787f, 0}, - {9.290693f, -0.700303f, -1.665166f, 0}, - {8.920790f, -0.146046f, -1.515529f, 0}, - {8.766363f, 0.034716f, -0.599747f, 0}, - {8.348576f, -0.287304f, -0.076614f, 0}, - {8.081622f, -0.591367f, 0.045490f, 0}, - {7.095212f, -1.157596f, 1.143231f, 0}, - {6.483494f, -1.507149f, 0.781706f, 0}, - {6.980290f, -1.605311f, 0.519541f, 0}, - {8.282735f, -1.045068f, 1.046265f, 0}, - {7.284354f, -1.468842f, 0.658405f, 0}, - {8.409628f, -2.402580f, -0.105345f, 0}, - {10.058035f, -2.456449f, 2.020705f, 0}, - {11.830939f, -2.476800f, 2.808397f, 0}, - {12.722779f, -1.401804f, 0.846350f, 0}, - {11.550818f, -0.071826f, -3.417721f, 0}, - {10.788265f, -0.575805f, -7.012612f, 0}, - {10.037683f, -1.229422f, -8.307875f, 0}, - {9.273934f, -0.415394f, -6.815091f, 0}, - {9.394841f, 0.909796f, -5.343854f, 0}, - {8.586799f, 1.194706f, -2.789243f, 0}, - {8.435964f, 0.617704f, -0.373495f, 0}, - {8.913607f, -0.415394f, 0.533907f, 0}, - {8.986629f, -1.616085f, 0.727837f, 0}, - {8.663413f, -2.105699f, 1.237801f, 0}, - {8.337802f, -2.239774f, 1.921346f, 0}, - {8.827415f, -2.661153f, 2.705446f, 0}, - {9.233232f, -3.117249f, 3.457225f, 0}, - {9.272737f, -2.991553f, 3.994723f, 0}, - {8.706509f, -2.610875f, 4.343079f, 0}, - {7.984657f, -2.519896f, 4.351459f, 0}, - {8.218092f, -3.441663f, 4.805160f, 0}, - {9.825797f, -4.513067f, 4.161120f, 0}, - {10.711651f, -6.089648f, 4.596864f, 0}, - {11.142607f, -7.103591f, 3.855859f, 0}, - {10.658978f, -6.648694f, 3.931277f, 0}, - {10.046063f, -5.696999f, 4.780020f, 0}, - {9.539690f, -4.680661f, 5.057748f, 0}, - {7.566869f, -3.590103f, 4.860226f, 0}, - {6.440398f, -3.344697f, 4.193441f, 0}, - {6.586444f, -3.541022f, 3.108869f, 0}, - {7.125139f, -3.699039f, 0.994790f, 0}, - {8.431175f, -4.952403f, -2.618058f, 0}, - {9.090777f, -5.112814f, -7.767982f, 0}, - {8.908818f, -3.330332f, -9.904806f, 0}, - {8.309072f, -1.798044f, -7.811078f, 0}, - {8.213304f, -1.308430f, -7.665031f, 0}, - {8.283933f, -1.283291f, -4.946417f, 0}, - {8.704114f, -1.482010f, -1.357511f, 0}, - {8.904030f, -1.138442f, -0.214281f, 0}, - {9.314635f, -1.148019f, -0.150835f, 0}, - {9.588771f, -0.961271f, -1.286883f, 0}, - {9.983814f, -0.888248f, -3.894166f, 0}, - {10.663767f, -0.937329f, -6.470325f, 0}, - {11.098314f, -0.972045f, -6.862975f, 0}, - {10.899596f, -1.125274f, -5.509054f, 0}, - {10.278301f, -1.490390f, -3.240550f, 0}, - {9.907200f, -1.777694f, -0.620098f, 0}, - {8.779531f, -2.339134f, 1.922543f, 0}, - {7.435188f, -2.651577f, 4.188653f, 0}, - {6.859383f, -2.463632f, 5.175064f, 0}, - {6.631934f, -2.347513f, 5.786782f, 0}, - {6.870157f, -2.407368f, 6.654679f, 0}, - {7.872130f, -2.549823f, 6.404485f, 0}, - {9.375688f, -3.722981f, 3.958810f, 0}, - {11.268303f, -5.311533f, -0.108936f, 0}, - {12.009308f, -6.212949f, -5.847834f, 0}, - {10.462654f, -5.131968f, -11.382027f, 0}, - {7.885298f, -2.762907f, -11.698062f, 0}, - {7.011415f, -1.878250f, -9.295482f, 0}, - {6.627146f, -1.376665f, -6.520604f, 0}, - {7.509408f, -1.753752f, -3.491941f, 0}, - {8.297100f, -1.997960f, -0.979228f, 0}, - {8.939943f, -1.666363f, -0.052672f, 0}, - {8.857343f, -0.831985f, 0.451307f, 0}, - {8.007402f, -0.197522f, 1.444900f, 0}, - {7.693762f, 0.035913f, 3.700236f, 0}, - {7.378925f, -0.505176f, 3.415326f, 0}, - {5.979515f, -1.707065f, -0.325611f, 0}, - {7.726084f, -3.241747f, -5.707773f, 0}, - {8.884876f, -3.162738f, -12.425899f, 0}, - {9.512156f, 0.045490f, -13.029237f, 0}, - {8.766363f, 1.078587f, -6.048946f, 0}, - {8.428782f, -0.650025f, -1.023521f, 0}, - {8.790305f, -0.999579f, 1.993172f, 0}, - {9.354139f, -0.804451f, 2.904165f, 0}, - {10.168168f, -1.060631f, -0.969651f, 0}, - {11.595111f, -1.048660f, -4.067746f, 0}, - {13.030434f, -0.831985f, -6.460749f, 0}, - {11.122256f, 0.191536f, -7.928393f, 0}, - {9.040500f, 0.798466f, -6.001062f, 0}, - {8.956702f, 0.328005f, -1.649604f, 0}, - {9.064442f, 0.119710f, 0.561440f, 0}, - {9.356534f, 0.306458f, 0.186748f, 0}, - {10.399208f, -0.664391f, -0.585382f, 0}, - {11.281470f, -1.975215f, -2.223015f, 0}, - {10.011348f, -1.996763f, -4.955994f, 0}, - {9.003389f, -2.169145f, -6.757630f, 0}, - {8.583207f, -2.082954f, -5.573698f, 0}, - {8.798685f, -1.921346f, -2.810791f, 0}, - {8.974659f, -1.520317f, -1.250970f, 0}, - {8.078031f, -0.515950f, 0.366313f, 0}, - {6.692986f, 0.751779f, 2.220621f, 0}, - {6.210555f, 1.480813f, 1.197100f, 0}, - {7.131125f, 0.602141f, -2.041055f, 0}, - {8.007402f, 0.234632f, -4.835087f, 0}, - {8.462300f, 0.919373f, -5.451593f, 0}, - {7.928393f, 1.326387f, -4.395751f, 0}, - {6.871354f, 1.467645f, -2.835930f, 0}, - {6.029793f, 1.558624f, -0.976834f, 0}, - {5.135559f, 1.978806f, 0.028730f, 0}, - {7.839808f, 1.517923f, 0.440533f, 0}, - {11.483781f, 0.501585f, -0.684741f, 0}, - {9.314635f, 0.493205f, -3.245338f, 0}, - {8.585602f, 0.633266f, -4.395751f, 0}, - {9.229641f, 0.914584f, -4.349064f, 0}, - {9.064442f, 0.970848f, -3.658338f, 0}, - {9.977829f, 0.555454f, -2.989159f, 0}, - {9.810235f, 0.744596f, -3.434480f, 0}, - {9.325409f, 1.397016f, -3.568555f, 0}, - {9.496594f, 1.741781f, -3.239353f, 0}, - {10.398011f, 1.367088f, -3.130417f, 0}, - {10.730804f, 0.985213f, -2.704249f, 0}, - {10.894808f, 1.125274f, -1.823183f, 0}, - {11.997336f, 0.918176f, -2.120064f, 0}, - {12.749115f, 0.508767f, -3.248930f, 0}, - {12.022475f, 0.416591f, -3.471590f, 0}, - {10.839741f, 0.440533f, -5.136756f, 0}, - {10.629051f, 0.883460f, -8.376109f, 0}, - {11.104300f, 1.051054f, -8.720874f, 0}, - {10.903187f, 0.842758f, -5.995077f, 0}, - {11.470613f, 0.239420f, -2.959231f, 0}, - {11.871641f, -0.373495f, -0.988805f, 0}, - {9.727634f, -0.487220f, 1.842337f, 0}, - {6.479902f, -0.034716f, 3.007115f, 0}, - {4.198230f, 0.515950f, 3.420115f, 0}, - {2.959231f, 1.742978f, 3.507503f, 0}, - {3.488349f, 2.468420f, 2.369061f, 0}, - {5.433637f, 2.197876f, -2.054224f, 0}, - {6.564897f, 2.667139f, -4.945220f, 0}, - {7.331040f, 3.190272f, -2.327163f, 0}, - {10.497370f, 3.070562f, 0.073023f, 0}, - {10.967831f, 1.744175f, -2.159569f, 0}, - {10.575182f, 0.481234f, -3.937262f, 0}, - {10.111904f, 0.632069f, -2.493559f, 0}, - {9.317030f, 1.003170f, -0.973242f, 0}, - {8.687355f, 1.310825f, -0.208295f, 0}, - {8.713691f, 1.209071f, -0.918176f, 0}, - {8.810657f, 1.183932f, -2.063801f, 0}, - {8.763969f, 1.406592f, -2.553414f, 0}, - {8.019373f, 1.916557f, -2.993947f, 0}, - {7.505817f, 2.184708f, -3.209425f, 0}, - {7.550110f, 2.245760f, -2.833536f, 0}, - {7.843400f, 2.250548f, -2.468420f, 0}, - {8.210909f, 2.315192f, -2.410959f, 0}, - {8.468286f, 2.409762f, -3.126825f, 0}, - {8.376109f, 2.358287f, -3.925291f, 0}, - {8.769955f, 2.191890f, -3.524262f, 0}, - {9.360126f, 2.389412f, -3.094504f, 0}, - {10.235206f, 2.645591f, -4.356247f, 0}, - {10.369281f, 3.308784f, -5.960361f, 0}, - {9.583982f, 3.739741f, -6.137532f, 0}, - {9.226050f, 3.244141f, -4.029438f, 0}, - {9.249992f, 3.345895f, -1.376665f, 0}, - {9.409206f, 3.989934f, 0.690727f, 0}, - {9.866499f, 4.723757f, 1.246181f, 0}, - {11.179717f, 3.829523f, -0.788889f, 0}, - {12.655742f, 2.403777f, -3.202243f, 0}, - {12.897555f, 0.988805f, -4.781218f, 0}, - {11.311399f, 0.092177f, -4.595667f, 0}, - {8.464694f, 0.628478f, -2.196679f, 0}, - {6.581656f, 1.258152f, -0.107739f, 0}, - {6.366178f, 1.856702f, 0.781706f, 0}, - {6.930012f, 1.881841f, 0.209493f, 0}, - {7.776362f, 0.798466f, -0.858321f, 0}, - {8.432373f, -0.011971f, -1.729810f, 0}, - {8.836992f, -0.251391f, -2.906559f, 0}, - {8.950717f, -0.007183f, -3.992329f, 0}, - {8.702917f, 0.239420f, -3.590103f, 0}, - {8.307875f, 0.493205f, -2.304418f, 0}, - {7.890086f, 1.065419f, -1.701079f, 0}, - {7.886495f, 1.557427f, -1.941696f, 0}, - {8.344984f, 1.771708f, -2.163160f, 0}, - {8.882483f, 2.037464f, -2.286461f, 0}, - {8.996207f, 2.401383f, -2.816776f, 0}, - {9.011769f, 2.549823f, -3.086124f, 0}, - {9.118311f, 2.431310f, -3.043028f, 0}, - {9.022543f, 2.371455f, -3.132811f, 0}, - {8.949520f, 2.278081f, -3.059788f, 0}, - {9.159013f, 2.190693f, -2.688687f, 0}, - {9.372096f, 2.074574f, -2.284067f, 0}, - {9.406812f, 2.118867f, -1.695094f, 0}, - {9.403221f, 2.088940f, -1.282094f, 0}, - {9.539690f, 2.345119f, -1.448491f, 0}, - {9.548070f, 2.826353f, -2.069786f, 0}, - {9.326607f, 3.178301f, -2.748542f, 0}, - {9.295482f, 3.290828f, -2.521093f, 0}, - {10.214854f, 3.190272f, -2.946063f, 0}, - {11.439487f, 3.104080f, -4.429270f, 0}, - {12.179296f, 2.619255f, -5.501872f, 0}, - {12.650953f, 1.750160f, -4.109644f, 0}, - {11.921919f, 0.913387f, -1.047463f, 0}, - {10.370478f, 0.256179f, 0.997184f, 0}, - {9.369702f, -0.351947f, 2.355893f, 0}, - {7.855371f, -0.039504f, 2.788046f, 0}, - {6.522998f, 0.343568f, 1.185129f, 0}, - {6.356601f, 0.954089f, -0.673967f, 0}, - {6.839033f, 1.606508f, -1.197100f, 0}, - {8.453920f, 1.814804f, -0.993593f, 0}, - {9.556450f, 1.889024f, -0.434547f, 0}, - {9.387658f, 2.385820f, -0.804451f, 0}, - {9.039303f, 2.761710f, -1.951273f, 0}, - {8.828612f, 2.579751f, -2.316389f, 0}, - {8.649048f, 2.282870f, -2.097319f, 0}, - {8.495819f, 2.323571f, -1.842337f, 0}, - {8.274356f, 2.814382f, -1.483207f, 0}, - {8.022964f, 3.214214f, -1.207874f, 0}, - {7.991840f, 3.224988f, -1.155202f, 0}, - {8.200135f, 3.023875f, -1.380256f, 0}, - {8.465892f, 2.995144f, -1.857899f, 0}, - {8.471877f, 3.099292f, -2.273293f, 0}, - {8.388080f, 3.125628f, -2.305615f, 0}, - {8.433570f, 3.105278f, -2.064998f, 0}, - {8.494622f, 3.213017f, -1.946485f, 0}, - {8.669398f, 3.210622f, -2.211044f, 0}, - {8.773546f, 3.099292f, -2.907756f, 0}, - {8.705312f, 3.130417f, -3.394976f, 0}, - {8.570039f, 3.405750f, -1.821986f, 0}, - {8.820233f, 3.371034f, -1.948879f, 0}, - {9.376884f, 3.290828f, -4.145557f, 0}, - {9.933537f, 3.511094f, -5.504266f, 0}, - {10.266330f, 3.343500f, -4.606441f, 0}, - {10.199292f, 3.286040f, -2.880223f, 0}, - {10.279498f, 3.457225f, -2.645591f, 0}, - {10.939100f, 3.313573f, -3.344697f, 0}, - {11.617856f, 1.872265f, -3.330332f, 0}, - {11.283865f, 0.302866f, -2.816776f, 0}, - {8.844175f, 0.647631f, -0.970848f, 0}, - {6.621161f, 1.608902f, 0.426168f, 0}, - {6.217738f, 2.564188f, 0.738611f, 0}, - {6.973108f, 3.286040f, -0.644040f, 0}, - {8.750801f, 2.173934f, -1.210268f, 0}, - {10.366886f, 0.428562f, -1.189917f, 0}, - {10.743973f, 0.110133f, -1.969230f, 0}, - {10.110707f, 0.746990f, -2.530669f, 0}, - {8.839387f, 1.630450f, -2.548626f, 0}, - {7.795516f, 2.329557f, -2.692278f, 0}, - {7.451948f, 2.700658f, -2.602495f, 0}, - {7.606374f, 2.907756f, -2.309206f, 0}, - {8.056483f, 3.023875f, -2.039858f, 0}, - {8.440752f, 3.139993f, -1.945288f, 0}, - {8.403643f, 3.387793f, -1.736992f, 0}, - {8.280341f, 3.640381f, -1.544259f, 0}, - {8.359349f, 3.767274f, -1.551442f, 0}, - {8.535323f, 3.780442f, -1.817198f, 0}, - {8.860934f, 3.679886f, -2.035070f, 0}, - {9.190137f, 3.599680f, -2.019508f, 0}, - {9.193728f, 3.535036f, -2.249351f, 0}, - {8.997404f, 3.507503f, -2.041055f, 0}, - {8.646653f, 3.554190f, -1.903389f, 0}, - {8.368926f, 3.604468f, -1.539471f, 0}, - {8.249216f, 3.761288f, -1.181538f, 0}, - {8.482651f, 3.960007f, -1.823183f, 0}, - {8.767561f, 3.967190f, -2.565385f, 0}, - {8.783123f, 3.831917f, -3.102883f, 0}, - {8.614332f, 3.810369f, -3.654746f, 0}, - {8.664610f, 3.786427f, -4.390963f, 0}, - {8.987827f, 4.016271f, -5.419272f, 0}, - {9.724044f, 4.271253f, -6.058523f, 0}, - {10.873260f, 3.715799f, -6.293155f, 0}, - {12.078739f, 3.123234f, -5.191823f, 0}, - {12.312174f, 2.310403f, -2.348710f, 0}, - {11.079161f, 1.405395f, 1.435323f, 0}, - {9.323015f, 1.150413f, 2.363075f, 0}, - {7.666229f, 0.990002f, 1.956061f, 0}, - {6.414062f, 1.784876f, 2.576159f, 0}, - {5.781993f, 3.196257f, 2.535458f, 0}, - {6.141123f, 3.886984f, 0.312443f, 0}, - {7.559687f, 3.445254f, -1.547850f, 0}, - {9.400826f, 2.853886f, -1.867476f, 0}, - {9.509763f, 3.022678f, -3.046620f, 0}, - {8.577222f, 3.954021f, -4.252100f, 0}, - {8.172602f, 3.744529f, -3.657140f, 0}, - {8.269567f, 3.207031f, -2.509122f, 0}, - {8.135491f, 3.442860f, -1.326387f, 0}, - {7.990643f, 3.718193f, -0.969651f, 0}, - {8.020570f, 3.763683f, -1.307233f, 0}, - {8.246822f, 3.590103f, -1.707065f, 0}, - {8.331817f, 3.252521f, -1.964441f, 0}, - {8.212107f, 2.896982f, -2.375046f, 0}, - {8.174996f, 2.774878f, -2.712629f, 0}, - {8.511381f, 2.673124f, -2.576159f, 0}, - {8.957899f, 2.570174f, -2.475603f, 0}, - {9.176969f, 2.637211f, -2.371455f, 0}, - {9.011769f, 2.729388f, -2.279279f, 0}, - {8.756786f, 2.636014f, -2.651577f, 0}, - {8.678975f, 2.534261f, -3.602074f, 0}, - {8.603558f, 2.598904f, -3.883393f, 0}, - {8.331817f, 2.859872f, -3.414129f, 0}, - {8.225274f, 3.234564f, -3.913320f, 0}, - {8.254004f, 3.434480f, -4.692632f, 0}, - {7.493846f, 3.796004f, -4.635171f, 0}, - {7.006627f, 4.036621f, -3.604468f, 0}, - {6.774389f, 4.210201f, -2.053027f, 0}, - {7.364560f, 4.368218f, -1.525105f, 0}, - {9.597151f, 3.620030f, -1.552639f, 0}, - {11.402378f, 1.831563f, -2.977188f, 0}, - {12.288232f, 0.525527f, -4.697421f, 0}, - {11.234784f, 0.181959f, -4.031833f, 0}, - {9.607924f, 0.386663f, -1.760934f, 0}, - {9.303862f, 0.387860f, -0.899022f, 0}, - {9.464272f, 0.622492f, -1.006761f, 0}, - {9.558844f, 1.036689f, -1.015141f, 0}, - {9.920368f, 0.829590f, -1.874659f, 0}, - {10.107116f, 0.355539f, -3.119643f, 0}, - {9.897623f, -0.099359f, -4.199427f, 0}, - {9.185349f, -0.276530f, -4.827904f, 0}, - {8.003811f, 0.396240f, -4.807554f, 0}, - {7.156264f, 0.701501f, -5.153516f, 0}, - {7.101197f, 0.053870f, -4.508279f, 0}, - {7.503423f, -0.792480f, -3.005918f, 0}, - {8.105564f, -1.297656f, -1.985989f, 0}, - {8.426387f, -1.464053f, -1.731007f, 0}, - {8.543703f, -1.358709f, -1.970427f, 0}, - {8.645456f, -1.344343f, -2.333148f, 0}, - {8.863329f, -1.558624f, -2.579751f, 0}, - {8.951914f, -1.918951f, -3.125628f, 0}, - {8.690947f, -1.860294f, -3.743332f, 0}, - {8.432373f, -1.956061f, -4.167105f, 0}, - {8.066060f, -2.053027f, -4.120419f, 0}, - {7.721295f, -2.195482f, -3.816355f, 0}, - {8.643063f, -2.871843f, -3.706222f, 0}, - {9.257174f, -3.336318f, -3.749317f, 0}, - {8.542506f, -3.499123f, -4.060563f, 0}, - {7.796712f, -4.046198f, -3.117249f, 0}, - {9.125494f, -4.362233f, -1.403001f, 0}, - {10.022121f, -4.328714f, 0.181959f, 0}, - {9.467864f, -4.274844f, 0.749385f, 0}, - {8.961491f, -3.708616f, -0.160411f, 0}, - {9.466667f, -3.045423f, -1.674743f, 0}, - {10.119086f, -2.406171f, -2.686292f, 0}, - {10.562014f, -1.898601f, -3.098095f, 0}, - {10.864880f, -1.751357f, -2.885011f, 0}, - {11.161760f, -1.505952f, -2.561794f, 0}, - {11.179717f, -1.201888f, -3.112460f, 0}, - {10.089159f, -1.221042f, -4.156332f, 0}, - {7.001838f, -0.794874f, -3.333924f, 0}, - {5.855016f, -0.556652f, -2.070983f, 0}, - {5.731715f, -0.816422f, -1.926134f, 0}, - {5.664677f, -0.999579f, -2.529472f, 0}, - {5.078098f, -0.949300f, -3.558978f, 0}, - {4.414905f, -0.963666f, -4.428073f, 0}, - {4.523841f, -1.501163f, -5.098449f, 0}, - {4.826707f, -2.104502f, -5.495886f, 0}, - {5.408498f, -2.646788f, -4.911702f, 0}, - {7.024583f, -3.204637f, -3.964795f, 0}, - {8.048103f, -3.580526f, -2.898179f, 0}, - {8.647851f, -4.011482f, -2.421733f, 0}, - {8.653836f, -3.981555f, -2.619255f, 0}, - {8.593981f, -3.761288f, -2.304418f, 0}, - {9.291890f, -3.605665f, -1.768117f, 0}, - {10.421953f, -3.653549f, -2.403777f, 0}, - {10.747564f, -4.040213f, -3.653549f, 0}, - {11.080358f, -4.187456f, -3.568555f, 0}, - {11.591519f, -4.479548f, -3.045423f, 0}, - {12.521667f, -4.991907f, -3.197454f, 0}, - {12.606661f, -5.301956f, -3.508700f, 0}, - {12.215209f, -5.559332f, -3.132811f, 0}, - {11.514905f, -5.664677f, -2.713826f, 0}, - {10.378858f, -5.208582f, -2.182313f, 0}, - {9.202108f, -4.546586f, -1.216254f, 0}, - {8.280341f, -4.206610f, -0.418985f, 0}, - {7.450751f, -4.313151f, 0.014365f, 0}, - {7.369348f, -4.450818f, 0.191536f, 0}, - {7.760799f, -4.636368f, 0.500388f, 0}, - {8.317451f, -4.886562f, 0.723048f, 0}, - {9.074018f, -4.566936f, 1.207874f, 0}, - {9.854527f, -4.408919f, 1.930922f, 0}, - {9.587574f, -3.520671f, 2.163160f, 0}, - {7.569263f, -1.774102f, 2.106896f, 0}, - {6.695381f, -1.079784f, 3.076547f, 0}, - {6.536166f, -1.090558f, 2.916136f, 0}, - {7.067678f, -1.138442f, 1.533485f, 0}, - {8.107959f, -0.973242f, -2.732979f, 0}, - {9.166195f, -1.021126f, -7.004232f, 0}, - {9.587574f, -1.686714f, -7.388502f, 0}, - {9.416389f, -1.589749f, -5.742489f, 0}, - {8.761575f, -1.954864f, -2.201467f, 0}, - {8.656230f, -2.102108f, -0.766144f, 0}, - {8.858541f, -2.230197f, -0.316034f, 0}, - {9.175772f, -2.531867f, 0.506373f, 0}, - {9.725241f, -2.759315f, 1.114500f, 0}, - {10.110707f, -2.782060f, 0.573411f, 0}, - {9.934733f, -2.370258f, 0.377087f, 0}, - {9.617501f, -2.214635f, -0.361524f, 0}, - {9.494201f, -2.189496f, -1.580172f, 0}, - {9.704890f, -2.115276f, -2.446872f, 0}, - {9.459484f, -2.057815f, -2.561794f, 0}, - {9.435542f, -2.030282f, -2.092531f, 0}, - {9.346957f, -1.996763f, -1.692699f, 0}, - {9.319424f, -2.132035f, -1.470039f, 0}, - {9.446317f, -2.430113f, -1.489192f, 0}, - {9.703692f, -2.687490f, -1.851914f, 0}, - {9.847345f, -2.719811f, -2.027887f, 0}, - {9.732423f, -2.558203f, -2.355893f, 0}, - {9.549267f, -2.409762f, -2.292447f, 0}, - {9.601939f, -2.473209f, -1.733401f, 0}, - {9.971844f, -2.697066f, -1.748963f, 0}, - {10.626657f, -3.017889f, -1.353920f, 0}, - {11.123453f, -3.641578f, -1.219845f, 0}, - {11.133030f, -4.373006f, -1.596931f, 0}, - {10.457866f, -4.733334f, -2.841915f, 0}, - {9.214079f, -4.768049f, -3.096898f, 0}, - {7.812275f, -4.437650f, -1.672349f, 0}, - {6.750447f, -4.045001f, 0.490811f, 0}, - {6.290761f, -3.907335f, 1.800438f, 0}, - {6.235694f, -4.234143f, 1.041477f, 0}, - {7.199359f, -4.850649f, -2.310403f, 0}, - {8.538915f, -4.039015f, -3.203440f, 0}, - {9.186545f, -2.800017f, -4.298786f, 0}, - {9.197320f, -2.372652f, -4.565740f, 0}, - {9.024938f, -1.969230f, -4.732136f, 0}, - {8.607149f, -1.534682f, -4.993104f, 0}, - {7.957124f, -1.502361f, -4.132390f, 0}, - {7.705733f, -1.678334f, -2.855083f, 0}, - {7.752420f, -1.753752f, -1.508346f, 0}, - {8.034935f, -1.557427f, -0.313640f, 0}, - {7.546519f, -1.106120f, 0.447715f, 0}, - {6.752841f, -0.906205f, 1.265335f, 0}, - {6.906070f, -1.195903f, 1.750160f, 0}, - {7.101197f, -1.496375f, 1.381453f, 0}, - {7.223301f, -1.824380f, 0.837970f, 0}, - {7.374136f, -2.153583f, 0.274136f, 0}, - {7.323858f, -2.404974f, -0.490811f, 0}, - {7.491452f, -2.598904f, -1.482010f, 0}, - {7.899663f, -2.819170f, -2.953246f, 0}, - {8.497016f, -3.117249f, -4.119221f, 0}, - {9.168590f, -3.533839f, -6.064509f, 0}, - {9.417586f, -3.632001f, -6.847412f, 0}, - {9.738409f, -3.272871f, -6.969516f, 0}, - {9.919171f, -2.809594f, -6.331462f, 0}, - {9.987406f, -2.677913f, -4.316743f, 0}, - {9.593559f, -2.616861f, -3.142388f, 0}, - {9.325409f, -2.674321f, -3.335121f, 0}, - {9.167392f, -2.829944f, -3.014298f, 0}, - {9.194925f, -3.105278f, -2.008734f, 0}, - {9.613911f, -3.459619f, -2.535458f, 0}, - {10.720031f, -4.271253f, -3.035846f, 0}, - {11.372450f, -5.182246f, -2.151189f, 0}, - {10.842135f, -5.142742f, -0.895431f, 0}, - {9.220064f, -4.575316f, 0.703895f, 0}, - {7.491452f, -4.206610f, 1.714247f, 0}, - {6.665453f, -4.437650f, 2.238577f, 0}, - {7.479481f, -4.993104f, 3.179498f, 0}, - {8.750801f, -5.791570f, 2.965217f, 0}, - {9.563632f, -6.527786f, 1.649604f, 0}, - {9.215276f, -6.408076f, 0.693121f, 0}, - {8.240837f, -5.831074f, -0.050278f, 0}, - {7.832625f, -5.178655f, -0.134075f, 0}, - {6.849806f, -4.006694f, 0.402226f, 0}, - {6.220132f, -3.184286f, -0.293290f, 0}, - {6.138729f, -3.074153f, 0.524330f, 0}, - {7.079649f, -3.414129f, -1.236604f, 0}, - {7.497437f, -3.640381f, -2.803608f, 0}, - {7.586023f, -3.466802f, -3.118446f, 0}, - {7.608768f, -3.038240f, -3.612848f, 0}, - {7.706930f, -2.804805f, -3.219002f, 0}, - {7.848188f, -2.905362f, -3.991132f, 0}, - {8.244428f, -3.093307f, -4.150346f, 0}, - {8.699326f, -2.829944f, -4.168303f, 0}, - {8.613134f, -2.391806f, -3.326741f, 0}, - {8.754393f, -2.479194f, -2.382229f, 0}, - {9.027331f, -2.700658f, -2.299629f, 0}, - {9.117114f, -2.700658f, -2.309206f, 0}, - {9.198517f, -2.815579f, -1.631647f, 0}, - {9.265554f, -2.861069f, -0.093374f, 0}, - {9.057259f, -2.791637f, 0.238223f, 0}, - {9.398433f, -2.922121f, 0.565031f, 0}, - {9.453499f, -2.892194f, 0.474052f, 0}, - {9.267948f, -2.750936f, 0.118513f, 0}, - {9.593559f, -2.905362f, 0.064643f, 0}, - {9.916777f, -3.290828f, 0.547075f, 0}, - {9.968252f, -3.573344f, 0.733822f, 0}, - {10.299849f, -4.295195f, -2.195482f, 0}, - {10.365689f, -5.293576f, -3.512291f, 0}, - {10.035290f, -6.093239f, -3.232170f, 0}, - {9.386461f, -5.595245f, -0.808043f, 0}, - {7.836217f, -5.037397f, -1.355117f, 0}, - {7.586023f, -4.918884f, -0.707486f, 0}, - {8.003811f, -5.001484f, -1.582566f, 0}, - {8.651442f, -5.248086f, -3.233367f, 0}, - {8.804670f, -4.791991f, -2.944866f, 0}, - {7.832625f, -3.906137f, -2.813185f, 0}, - {6.901282f, -3.084927f, -2.161963f, 0}, - {6.792346f, -2.578553f, -1.455674f, 0}, - {7.048525f, -2.341528f, -1.499966f, 0}, - {7.358574f, -2.551020f, -1.587355f, 0}, - {7.480678f, -2.724600f, -2.063801f, 0}, - {7.368151f, -2.518698f, -1.176749f, 0}, - {7.399275f, -2.738965f, -1.344343f, 0}, - {7.823049f, -2.987962f, -1.318007f, 0}, - {7.832625f, -2.798820f, -1.460462f, 0}, - {7.547716f, -2.303221f, -1.837548f, 0}, - {7.366954f, -2.001551f, -2.175131f, 0}, - {7.653060f, -2.163160f, -2.703052f, 0}, - {7.995431f, -2.481588f, -3.134008f, 0}, - {8.619121f, -2.681504f, -3.325544f, 0}, - {8.935155f, -2.726994f, -4.122813f, 0}, - {9.391250f, -2.748542f, -4.546586f, 0}, - {9.763548f, -2.730585f, -4.378992f, 0}, - {10.044867f, -2.233789f, -5.177458f, 0}, - {10.336959f, -2.200270f, -5.360614f, 0}, - {10.339353f, -2.786849f, -4.867409f, 0}, - {10.545254f, -3.339909f, -4.352656f, 0}, - {10.761930f, -3.875013f, -3.894166f, 0}, - {10.625460f, -4.471169f, -3.217805f, 0}, - {9.902411f, -4.558557f, -2.613269f, 0}, - {8.913607f, -3.739741f, -1.416169f, 0}, - {8.100776f, -3.011904f, 1.066616f, 0}, - {7.064087f, -3.003524f, 3.325544f, 0}, - {6.754038f, -3.834311f, 5.176260f, 0}, - {7.175417f, -4.786006f, 7.241258f, 0}, - {7.382516f, -5.288788f, 6.618766f, 0}, - {8.252808f, -5.669466f, 4.605244f, 0}, - {9.193728f, -6.020216f, 2.553414f, 0}, - {9.549267f, -5.853819f, 0.247800f, 0}, - {8.914804f, -5.385753f, -0.512359f, 0}, - {8.572433f, -4.914096f, -1.824380f, 0}, - {8.161828f, -3.992329f, -3.460816f, 0}, - {7.699748f, -2.631226f, -3.369837f, 0}, - {7.472299f, -2.184708f, -1.789665f, 0}, - {7.617147f, -2.147598f, -1.602917f, 0}, - {7.779953f, -1.984792f, -1.983595f, 0}, - {8.039723f, -1.725021f, -2.574962f, 0}, - {8.286326f, -1.487995f, -2.779666f, 0}, - {8.273158f, -1.437717f, -2.838324f, 0}, - {8.219289f, -1.659181f, -2.960428f, 0}, - {8.444344f, -1.786073f, -2.853886f, 0}, - {8.597572f, -1.544259f, -2.703052f, 0}, - {8.681370f, -1.361103f, -2.530669f, 0}, - {8.962687f, -1.437717f, -2.333148f, 0}, - {9.131479f, -1.589749f, -1.939302f, 0}, - {9.050076f, -1.765723f, -1.616085f, 0}, - {9.041697f, -1.929725f, -1.650801f, 0}, - {9.260766f, -2.108093f, -1.804030f, 0}, - {9.653415f, -2.413354f, -2.396594f, 0}, - {9.742000f, -2.288855f, -1.392227f, 0}, - {9.372096f, -1.877053f, -0.934935f, 0}, - {9.860513f, -2.138021f, -1.429337f, 0}, - {10.694892f, -2.595313f, -1.260546f, 0}, - {11.317384f, -2.925713f, -0.727837f, 0}, - {11.739960f, -3.251324f, -0.887051f, 0}, - {11.595111f, -3.508700f, -2.597707f, 0}, - {10.346536f, -4.009088f, -4.683055f, 0}, - {9.039303f, -4.310757f, -4.425679f, 0}, - {8.474271f, -4.114433f, -2.164357f, 0}, - {8.452724f, -3.538628f, -0.290895f, 0}, - {8.659822f, -3.467999f, 0.682347f, 0}, - {8.937549f, -3.530248f, 0.061052f, 0}, - {8.566448f, -2.431310f, -0.852335f, 0}, - {8.067257f, -1.312022f, -1.903389f, 0}, - {8.377306f, -1.103726f, -1.419761f, 0}, - {8.070848f, -1.212662f, -2.258928f, 0}, - {8.067257f, -1.584960f, -2.608481f, 0}, - {7.800304f, -1.910572f, -3.106475f, 0}, - {7.347800f, -2.184708f, -3.384202f, 0}, - {7.348997f, -2.264913f, -2.862266f, 0}, - {7.765588f, -2.091334f, -1.757343f, 0}, - {7.970292f, -1.810015f, -1.043871f, 0}, - {8.240837f, -1.757343f, -0.768538f, 0}, - {8.485045f, -1.801636f, -0.395043f, 0}, - {8.564054f, -1.716641f, -0.083797f, 0}, - {8.844175f, -1.758540f, -0.086191f, 0}, - {9.075215f, -1.959653f, -0.597353f, 0}, - {9.182955f, -2.019508f, -1.362300f, 0}, - {9.318227f, -2.041055f, -1.719036f, 0}, - {9.363716f, -2.062603f, -2.341528f, 0}, - {9.173378f, -1.891418f, -2.298432f, 0}, - {9.066835f, -1.715444f, -2.759315f, 0}, - {9.272737f, -1.723824f, -2.409762f, 0}, - {9.367308f, -1.574187f, -1.908177f, 0}, - {9.205699f, -1.302445f, -1.863885f, 0}, - {9.190137f, -1.492784f, -1.729810f, 0}, - {9.236824f, -1.769314f, -1.782482f, 0}, - {9.534902f, -2.070983f, -2.035070f, 0}, - {10.097539f, -2.543838f, -1.827972f, 0}, - {10.522510f, -2.759315f, -2.231395f, 0}, - {10.928327f, -2.730585f, -2.249351f, 0}, - {11.123453f, -2.719811f, -1.364694f, 0}, - {10.806222f, -2.395397f, -0.016759f, 0}, - {9.789884f, -1.911769f, 0.586579f, 0}, - {8.809459f, -2.251745f, 0.070629f, 0}, - {8.212107f, -3.077744f, 0.161609f, 0}, - {8.462300f, -3.548204f, 1.023521f, 0}, - {8.960294f, -3.872619f, 1.528697f, 0}, - {9.425965f, -4.192245f, 1.470039f, 0}, - {9.999376f, -4.453212f, 1.244984f, 0}, - {9.986209f, -4.420890f, 0.696712f, 0}, - {9.368505f, -4.025847f, 0.286107f, 0}, - {8.735239f, -3.618833f, 0.021548f, 0}, - {8.062469f, -3.245338f, -0.644040f, 0}, - {7.747632f, -2.964020f, -1.055842f, 0}, - {7.532154f, -2.788046f, -0.582988f, 0}, - {7.694959f, -2.956837f, -0.339976f, 0}, - {8.044512f, -3.439268f, -0.831985f, 0}, - {8.398854f, -3.869027f, -1.472433f, 0}, - {8.674187f, -3.954021f, -1.877053f, 0}, - {8.778335f, -3.669111f, -1.696291f, 0}, - {8.744816f, -3.325544f, -2.801214f, 0}, - {9.170983f, -3.161541f, -2.974794f, 0}, - {8.848964f, -2.875434f, -3.779245f, 0}, - {8.207318f, -2.503136f, -4.129995f, 0}, - {8.026556f, -2.263716f, -4.618412f, 0}, - {8.368926f, -2.215832f, -4.732136f, 0}, - {8.961491f, -2.413354f, -3.232170f, 0}, - {9.333789f, -2.713826f, -1.446097f, 0}, - {9.246401f, -2.952049f, -0.226252f, 0}, - {8.790305f, -2.959231f, 0.460884f, 0}, - {8.155843f, -2.730585f, 0.590170f, 0}, - {7.708127f, -2.560597f, 0.263362f, 0}, - {7.612359f, -2.658759f, 0.471657f, 0}, - {8.567645f, -3.356668f, 0.718260f, 0}, - {10.579970f, -4.683055f, 1.223436f, 0}, - {12.627011f, -5.783190f, 2.347513f, 0}, - {11.851291f, -5.154713f, 2.021902f, 0}, - {8.839387f, -3.144782f, -3.478773f, 0}, - {8.154645f, -3.208228f, -8.307875f, 0}, - {9.410403f, -4.708194f, -0.691924f, 0}, - {9.804249f, -4.711786f, 1.703473f, 0}, - {9.985011f, -4.288013f, -2.111685f, 0}, - {9.917974f, -3.863042f, -0.809240f, 0}, - {9.002192f, -3.196257f, -0.214281f, 0}, - {8.477862f, -2.410959f, -0.794874f, 0}, - {8.450329f, -1.956061f, -0.992396f, 0}, - {8.361744f, -1.842337f, -1.545456f, 0}, - {8.178588f, -1.766920f, -1.849520f, 0}, - {8.061272f, -1.640027f, -2.190693f, 0}, - {7.553701f, -1.369482f, -2.219424f, 0}, - {7.180206f, -1.359906f, -2.621649f, 0}, - {7.414838f, -1.776496f, -3.306390f, 0}, - {7.927197f, -1.954864f, -3.851071f, 0}, - {8.195347f, -1.989580f, -4.341882f, 0}, - {8.341393f, -2.115276f, -4.428073f, 0}, - {8.359349f, -2.343922f, -4.118024f, 0}, - {8.401248f, -2.454055f, -3.053802f, 0}, - {8.487439f, -2.311600f, -2.007537f, 0}, - {8.573630f, -2.114079f, -1.933317f, 0}, - {8.593981f, -2.120064f, -2.171540f, 0}, - {8.409628f, -2.209847f, -2.895785f, 0}, - {8.107959f, -2.146400f, -2.240971f, 0}, - {8.183376f, -1.910572f, -1.847125f, 0}, - {8.455117f, -1.956061f, -1.793256f, 0}, - {8.859737f, -2.144006f, -2.002748f, 0}, - {9.208094f, -2.382229f, -2.218226f, 0}, - {9.277525f, -2.410959f, -2.454055f, 0}, - {9.018951f, -2.202664f, -2.607284f, 0}, - {8.807065f, -1.917754f, -3.163935f, 0}, - {8.732844f, -1.766920f, -3.756500f, 0}, - {8.488636f, -1.750160f, -3.998314f, 0}, - {8.299495f, -1.744175f, -3.921700f, 0}, - {8.184573f, -1.738189f, -3.780442f, 0}, - {8.080425f, -1.723824f, -3.687068f, 0}, - {7.970292f, -1.810015f, -3.618833f, 0}, - {7.970292f, -1.811212f, -3.657140f, 0}, - {7.902057f, -1.886630f, -3.809172f, 0}, - {8.113944f, -2.105699f, -4.045001f, 0}, - {8.355759f, -2.325965f, -3.809172f, 0}, - {8.410825f, -2.215832f, -3.554190f, 0}, - {8.657428f, -2.017113f, -3.271674f, 0}, - {8.823824f, -2.086545f, -2.360681f, 0}, - {8.422796f, -2.122458f, -1.601720f, 0}, - {8.717282f, -1.810015f, -1.653195f, 0}, - {9.615108f, -1.516726f, -1.790862f, 0}, - {9.629473f, -1.593340f, -3.891772f, 0}, - {10.530889f, -2.082954f, -6.175839f, 0}, - {10.994166f, -2.302023f, -4.498702f, 0}, - {9.297876f, -1.614888f, -3.004721f, 0}, - {7.264003f, -0.905008f, -0.735019f, 0}, - {7.615951f, -1.219845f, 0.140061f, 0}, - {8.942337f, -1.484404f, -0.383072f, 0}, - {10.296257f, -2.246957f, -0.167594f, 0}, - {11.376041f, -2.970005f, 0.173579f, 0}, - {10.957057f, -2.890997f, -0.011971f, 0}, - {10.125072f, -2.902968f, -0.169988f, 0}, - {9.543282f, -2.770089f, -0.092177f, 0}, - {9.082398f, -2.452858f, 0.432153f, 0}, - {8.699326f, -1.927331f, 0.356736f, 0}, - {8.416810f, -1.535879f, 0.282516f, 0}, - {7.886495f, -0.933738f, -0.872686f, 0}, - {8.098382f, -0.636857f, 1.728612f, 0}, - {8.451527f, -0.509965f, 1.399410f, 0}, - {9.103946f, -0.675164f, 0.752976f, 0}, - {9.591166f, -0.895431f, 0.257377f, 0}, - {9.684539f, -0.997184f, -0.475249f, 0}, - {9.461879f, -0.949300f, -0.150835f, 0}, - {9.260766f, -0.992396f, -0.387860f, 0}, - {9.248795f, -1.278503f, -0.785298f, 0}, - {9.558844f, -1.503558f, -0.909796f, 0}, - {10.126269f, -1.493981f, -0.755370f, 0}, - {10.194504f, -1.428140f, -0.456095f, 0}, - {10.286680f, -1.380256f, -0.415394f, 0}, - {10.317805f, -1.411381f, -0.383072f, 0}, - {10.150211f, -1.398213f, -0.389058f, 0}, - {9.968252f, -1.315613f, -0.265756f, 0}, - {9.878469f, -1.361103f, -0.398634f, 0}, - {9.900018f, -1.498769f, -0.544681f, 0}, - {9.877273f, -1.466448f, -1.072602f, 0}, - {9.799460f, -1.371877f, -1.558624f, 0}, - {9.544478f, -1.285685f, -1.635239f, 0}, - {9.278723f, -1.120486f, -1.229422f, 0}, - {9.204502f, -1.103726f, -0.731428f, 0}, - {9.202108f, -1.182735f, -0.477643f, 0}, - {9.107537f, -1.255758f, 0.050278f, 0}, - {8.898045f, -1.216254f, 0.428562f, 0}, - {8.766363f, -1.130062f, 0.016759f, 0}, - {8.706509f, -1.060631f, -0.681150f, 0}, - {8.720874f, -1.039083f, -1.149216f, 0}, - {9.220064f, -1.296459f, -1.238999f, 0}, - {10.467443f, -1.696291f, -0.963666f, 0}, - {11.536453f, -1.877053f, -1.309627f, 0}, - {11.785450f, -1.964441f, -2.002748f, 0}, - {11.763902f, -2.772484f, -3.430889f, 0}, - {11.314989f, -3.549402f, -5.012258f, 0}, - {9.746788f, -3.913320f, -4.704603f, 0}, - {8.693340f, -4.775232f, -3.177104f, 0}, - {8.215697f, -5.501872f, -1.019929f, 0}, - {7.824246f, -5.450397f, 0.652420f, 0}, - {7.545321f, -4.419693f, 0.913387f, 0}, - {7.720098f, -3.350683f, -0.903811f, 0}, - {7.936773f, -2.221818f, -3.144782f, 0}, - {8.151054f, -1.693897f, -4.214989f, 0}, - {7.918817f, -1.904586f, -3.973175f, 0}, - {7.843400f, -2.130838f, -3.676294f, 0}, - {7.507014f, -2.142809f, -2.937684f, 0}, - {7.426809f, -2.203861f, -2.422930f, 0}, - {7.520183f, -2.273293f, -2.515107f, 0}, - {7.607571f, -2.073377f, -2.264913f, 0}, - {7.933182f, -1.736992f, -2.202664f, 0}, - {8.366532f, -1.519120f, -2.388215f, 0}, - {8.694537f, -1.306036f, -2.293644f, 0}, - {8.757984f, -1.061828f, -1.953667f, 0}, - {8.790305f, -1.007958f, -1.453279f, 0}, - {8.921987f, -1.209071f, -0.818816f, 0}, - {8.914804f, -1.312022f, -0.050278f, 0}, - {8.711297f, -1.246181f, 0.578199f, 0}, - {8.656230f, -1.249772f, 0.275333f, 0}, - {8.939943f, -1.387439f, -0.482431f, 0}, - {9.241612f, -1.586158f, -0.899022f, 0}, - {9.497791f, -1.592143f, -1.055842f, 0}, - {9.671371f, -1.361103f, -1.174355f, 0}, - {9.715664f, -1.000776f, -1.108515f, 0}, - {9.829389f, -0.665588f, -1.197100f, 0}, - {9.860513f, -0.462081f, -1.599326f, 0}, - {9.821009f, -0.490811f, -2.014719f, 0}, - {9.856922f, -0.694318f, -2.319980f, 0}, - {10.049655f, -1.024718f, -2.524684f, 0}, - {10.514130f, -1.493981f, -1.921346f, 0}, - {10.843332f, -1.666363f, -1.532288f, 0}, - {11.147395f, -1.837548f, -1.659181f, 0}, - {11.727989f, -2.455252f, -1.991974f, 0}, - {12.029658f, -3.106475f, -0.149638f, 0}, - {10.973816f, -3.138796f, 2.298432f, 0}, - {9.229641f, -2.894588f, 2.509122f, 0}, - {8.149857f, -2.712629f, 1.924937f, 0}, - {7.643484f, -3.005918f, 1.844731f, 0}, - {7.934379f, -3.333924f, 1.647210f, 0}, - {8.604755f, -3.669111f, 1.010352f, 0}, - {9.069230f, -3.952824f, 0.132878f, 0}, - {9.255978f, -3.986343f, -0.216675f, 0}, - {9.123099f, -3.824735f, 0.580594f, 0}, - {8.698129f, -3.511094f, 0.641646f, 0}, - {8.346182f, -3.187877f, 1.156399f, 0}, - {8.060075f, -2.959231f, 1.389833f, 0}, - {7.915226f, -2.890997f, 1.458068f, 0}, - {8.005008f, -3.084927f, 1.079784f, 0}, - {7.953533f, -3.286040f, -0.043096f, 0}, - {8.371321f, -3.442860f, -2.762907f, 0}, - {8.309072f, -3.312376f, -4.205412f, 0}, - {8.149857f, -2.729388f, -3.705025f, 0}, - {7.922408f, -2.109290f, -3.027466f, 0}, - {7.881707f, -1.766920f, -3.349486f, 0}, - {7.872130f, -1.252167f, -4.329911f, 0}, - {8.201332f, -0.677559f, -3.967190f, 0}, - {8.599967f, -0.760159f, -3.022678f, 0}, - {8.785517f, -1.183932f, -2.488771f, 0}, - {9.235627f, -1.813607f, -1.701079f, 0}, - {9.714467f, -2.225409f, -0.598550f, 0}, - {9.683342f, -2.312797f, 0.444124f, 0}, - {9.585180f, -2.341528f, 0.554257f, 0}, - {9.459484f, -2.260125f, 0.377087f, 0}, - {9.476244f, -2.183511f, 0.265756f, 0}, - {9.752774f, -2.238577f, 0.000000f, 0}, - {10.631446f, -2.571371f, 0.381875f, 0}, - {11.678908f, -2.847901f, 1.048660f, 0}, - {11.956635f, -2.754527f, 1.926134f, 0}, - {11.179717f, -2.287658f, 1.643618f, 0}, - {9.974237f, -1.684320f, -0.531512f, 0}, - {9.130282f, -1.295262f, 0.968454f, 0}, - {8.774743f, -0.958877f, 1.218648f, 0}, - {8.473074f, -0.690727f, 1.455674f, 0}, - {8.464694f, -0.987608f, 0.141258f, 0}, - {9.175772f, -1.808818f, -3.797201f, 0}, - {10.365689f, -2.500742f, -9.164998f, 0}, - {10.453077f, -1.736992f, -3.761288f, 0}, - {9.622290f, -0.969651f, 0.599747f, 0}, - {8.990221f, -0.987608f, -4.253296f, 0}, - {9.148238f, -1.395819f, -3.313573f, 0}, - {8.651442f, -1.607705f, -1.174355f, 0}, - {7.994234f, -1.643618f, -0.547075f, 0}, - {7.620739f, -1.555033f, -0.290895f, 0}, - {7.387304f, -1.526303f, -0.118513f, 0}, - {7.176615f, -1.487995f, -0.105345f, 0}, - {7.222105f, -1.329978f, -0.065841f, 0}, - {7.553701f, -1.047463f, -0.521936f, 0}, - {7.945153f, -0.768538f, -0.612915f, 0}, - {8.386883f, -0.518344f, -0.260968f, 0}, - {8.783123f, -0.316034f, -0.155623f, 0}, - {9.229641f, -0.201113f, -0.294487f, 0}, - {9.470259f, -0.234632f, -0.818816f, 0}, - {9.665385f, -0.349553f, -0.980425f, 0}, - {9.798264f, -0.347159f, -0.960074f, 0}, - {9.586377f, -0.480037f, -1.021126f, 0}, - {9.587574f, -0.565031f, -0.806845f, 0}, - {9.617501f, -0.590170f, -0.330400f, 0}, - {9.609122f, -0.484826f, 0.050278f, 0}, - {9.691722f, -0.368707f, 0.562637f, 0}, - {9.884455f, -0.318429f, 1.296459f, 0}, - {9.916777f, -0.286107f, 1.254561f, 0}, - {10.086765f, -0.414197f, 0.605733f, 0}, - {10.672147f, -0.663193f, -0.056264f, 0}, - {11.547227f, -0.732625f, -1.089361f, 0}, - {12.741933f, -0.981622f, -1.647210f, 0}, - {13.311752f, -1.082178f, -2.098516f, 0}, - {12.233165f, -1.091755f, -1.170764f, 0}, - {9.745591f, -1.782482f, -1.260546f, 0}, - {6.040567f, -2.230197f, -1.437717f, 0}, - {5.289985f, -2.487574f, 0.503979f, 0}, - {6.959939f, -3.001130f, 3.216608f, 0}, - {8.799882f, -4.107250f, 4.249705f, 0}, - {9.941916f, -4.839875f, 4.045001f, 0}, - {9.454696f, -5.104434f, 3.131614f, 0}, - {8.892059f, -5.509054f, 1.795650f, 0}, - {7.688973f, -5.981909f, 0.606930f, 0}, - {7.673411f, -6.725308f, 0.831985f, 0}, - {8.412022f, -7.346603f, 0.257377f, 0}, - {8.220486f, -6.330265f, -0.105345f, 0}, - {7.586023f, -4.578907f, 0.073023f, 0}, - {7.775165f, -3.556584f, -1.447294f, 0}, - {8.498213f, -3.017889f, -4.783612f, 0}, - {8.949520f, -2.546232f, -4.119221f, 0}, - {8.564054f, -2.585736f, -1.102529f, 0}, - {7.644681f, -3.087321f, -0.313640f, 0}, - {8.555674f, -2.998736f, -0.015562f, 0}, - {9.572012f, -2.636014f, -0.071826f, 0}, - {8.997404f, -2.252942f, 1.218648f, 0}, - {7.629118f, -1.496375f, 0.980425f, 0}, - {7.766785f, -1.379059f, 1.416169f, 0}, - {8.343787f, -1.787270f, 1.284488f, 0}, - {8.748407f, -1.811212f, 0.870292f, 0}, - {9.136268f, -2.027887f, 1.131260f, 0}, - {9.615108f, -2.226606f, 1.380256f, 0}, - {10.127466f, -2.141612f, 0.444124f, 0}, - {10.301045f, -1.841140f, -0.062249f, 0}, - {10.163380f, -1.441308f, -2.595313f, 0}, - {9.898820f, -1.045068f, 1.595734f, 0}, - {9.682145f, -1.219845f, 2.372652f, 0}, - {10.177745f, -1.084573f, 1.078587f, 0}, - {11.180914f, -0.885854f, 0.757764f, 0}, - {12.489345f, -1.234210f, 2.330754f, 0}, - {13.658912f, -2.050632f, 2.142809f, 0}, - {13.063952f, -2.145203f, -0.293290f, 0}, - {9.628276f, -1.520317f, -2.880223f, 0}, - {6.360192f, -1.479616f, -3.886984f, 0}, - {5.079296f, -1.917754f, -2.090137f, 0}, - {6.202175f, -3.551796f, -0.855927f, 0}, - {7.969095f, -4.886562f, -0.975637f, 0}, - {11.101906f, -4.876986f, 0.645237f, 0}, - {11.766296f, -4.067746f, 0.531512f, 0}, - {10.569196f, -3.503912f, -0.644040f, 0}, - {10.237599f, -3.076547f, -0.447715f, 0}, - {9.629473f, -2.752133f, -0.193930f, 0}, - {8.340196f, -1.911769f, -0.742202f, 0}, - {7.272383f, -1.003170f, -1.213859f, 0}, - {6.823470f, -0.739808f, -1.057039f, 0}, - {7.050919f, -0.673967f, -0.834379f, 0}, - {7.595600f, -0.442927f, -0.532710f, 0}, - {8.060075f, -0.168791f, -0.527921f, 0}, - {8.573630f, 0.094571f, -1.207874f, 0}, - {8.899241f, 0.466869f, -1.898601f, 0}, - {9.060850f, 0.805648f, -1.408987f, 0}, - {9.222459f, 0.831985f, -0.489614f, 0}, - {9.290693f, 0.647631f, 0.099359f, 0}, - {8.882483f, 0.517147f, -0.029928f, 0}, - {8.628697f, 0.389058f, -0.817619f, 0}, - {9.248795f, 0.234632f, -1.046265f, 0}, - {9.690525f, -0.081403f, -1.126471f, 0}, - {10.071202f, -0.231040f, -0.632069f, 0}, - {10.299849f, -0.039504f, 0.476446f, 0}, - {10.965436f, 0.278924f, 0.920570f, 0}, - {11.526876f, 0.132878f, -0.335188f, 0}, - {11.572366f, 0.118513f, -0.995987f, 0}, - {12.087119f, 0.074220f, 0.064643f, 0}, - {14.025224f, -0.268150f, 0.715866f, 0}, - {13.812140f, -0.075417f, 2.175131f, 0}, - {10.393223f, 0.955286f, 4.447227f, 0}, - {5.740095f, 2.165554f, 5.378571f, 0}, - {2.682701f, 2.470814f, 4.266465f, 0}, - {2.267308f, 1.452082f, 2.970005f, 0}, - {5.784388f, -0.737414f, 2.178722f, 0}, - {8.700523f, -2.176328f, 0.712274f, 0}, - {8.658625f, -2.545035f, -1.139639f, 0}, - {8.984236f, -3.094504f, -0.059855f, 0}, - {10.274710f, -4.108448f, 2.123656f, 0}, - {11.112679f, -5.146333f, 2.748542f, 0}, - {12.083528f, -5.299562f, -0.111330f, 0}, - {11.859670f, -3.488349f, -2.300826f, 0}, - {10.259148f, -1.679531f, -0.063446f, 0}, - {8.656230f, -1.307233f, 1.798044f, 0}, - {7.996628f, -1.447294f, 1.592143f, 0}, - {8.142674f, -1.909375f, 0.881066f, 0}, - {8.282735f, -2.118867f, 0.978031f, 0}, - {8.382094f, -1.970427f, 1.248575f, 0}, - {8.866920f, -1.735795f, 0.386663f, 0}, - {9.623487f, -1.595734f, -0.269348f, 0}, - {9.806643f, -1.525105f, -0.345962f, 0}, - {9.609122f, -1.367088f, 0.299275f, 0}, - {9.714467f, -1.388636f, 1.693897f, 0}, - {9.576800f, -1.092952f, 2.396594f, 0}, - {9.296679f, -1.480813f, 2.565385f, 0}, - {9.323015f, -0.742202f, 2.341528f, 0}, - {9.384068f, -1.109712f, 1.960850f, 0}, - {9.868893f, -1.590946f, 2.421733f, 0}, - {10.109509f, -1.939302f, 2.955640f, 0}, - {9.973041f, -2.006340f, 3.324347f, 0}, - {9.859316f, -1.581369f, 3.942050f, 0}, - {9.793475f, -0.999579f, 3.818749f, 0}, - {8.820233f, -0.578199f, 2.885011f, 0}, - {7.404064f, -0.547075f, 1.671152f, 0}, - {6.730096f, -0.906205f, 0.976834f, 0}, - {8.153448f, -2.236183f, 0.503979f, 0}, - {9.867696f, -4.234143f, -0.254982f, 0}, - {7.984657f, -2.888602f, -1.261743f, 0}, - {9.093172f, -3.695448f, -2.171540f, 0}, - {9.166195f, -3.958810f, -1.365891f, 0}, - {9.483426f, -4.307166f, -1.432929f, 0}, - {9.564829f, -4.777626f, -2.000354f, 0}, - {9.548070f, -5.154713f, -2.106896f, 0}, - {9.175772f, -5.427651f, -1.608902f, 0}, - {8.127112f, -6.010639f, -1.829169f, 0}, - {8.129506f, -6.432018f, -1.207874f, 0}, - {7.790727f, -5.821497f, 0.189142f, 0}, - {7.073664f, -4.104856f, 2.110487f, 0}, - {7.091620f, -3.636790f, 1.745372f, 0}, - {7.758405f, -3.837903f, 0.458489f, 0}, - {8.832204f, -3.739741f, 0.357933f, 0}, - {9.786293f, -3.177104f, 0.160411f, 0}, - {9.618699f, -2.337936f, -0.683544f, 0}, - {9.124296f, -1.669955f, -0.986410f, 0}, - {8.815445f, -1.297656f, 0.074220f, 0}, - {8.663413f, -1.192312f, 0.752976f, 0}, - {8.526943f, -1.224633f, 0.095768f, 0}, - {8.671793f, -1.508346f, -0.044293f, 0}, - {9.041697f, -1.966835f, -1.302445f, 0}, - {9.320621f, -2.434901f, -0.640449f, 0}, - {9.319424f, -2.719811f, -0.933738f, 0}, - {9.598348f, -2.252942f, 0.096965f, 0}, - {9.272737f, -2.086545f, -0.335188f, 0}, - {9.397235f, -1.977609f, -0.829590f, 0}, - {9.585180f, -1.861491f, -0.963666f, 0}, - {9.563632f, -1.543062f, -1.194706f, 0}, - {9.265554f, -1.262941f, -1.276109f, 0}, - {8.941140f, -0.998381f, -1.148019f, 0}, - {8.711297f, -0.948103f, -1.108515f, 0}, - {8.803473f, -1.259349f, -1.027112f, 0}, - {9.475047f, -2.545035f, -0.591367f, 0}, - {10.941494f, -4.028242f, -0.374692f, 0}, - {11.295835f, -3.961204f, 0.489614f, 0}, - {9.697707f, -2.606087f, 1.587355f, 0}, - {8.414416f, -2.354696f, 1.309627f, 0}, - {8.408431f, -3.039437f, 0.598550f, 0}, - {8.759181f, -3.227382f, 0.460884f, 0}, - {9.191334f, -3.215411f, 0.717063f, 0}, - {9.106340f, -3.286040f, -1.228225f, 0}, - {9.215276f, -3.016692f, -0.532710f, 0}, - {9.226050f, -2.573765f, 1.215057f, 0}, - {9.278723f, -2.743753f, 0.444124f, 0}, - {9.779110f, -3.204637f, 1.349132f, 0}, - {9.914383f, -3.223790f, 1.940499f, 0}, - {9.907200f, -2.806002f, 1.668757f, 0}, - {10.375266f, -2.416945f, 2.098516f, 0}, - {11.027685f, -2.161963f, 2.414551f, 0}, - {11.603491f, -1.948879f, 2.486377f, 0}, - {11.531665f, -1.472433f, 2.813185f, 0}, - {10.983393f, -0.723048f, 2.525881f, 0}, - {9.938325f, 0.086191f, 2.130838f, 0}, - {8.816642f, 0.365116f, 2.731782f, 0}, - {10.491385f, 0.019154f, 3.318361f, 0}, - {10.913961f, -0.289698f, 4.115630f, 0}, - {9.964661f, 0.154426f, 4.765655f, 0}, - {7.896072f, 1.101332f, 4.291604f, 0}, - {7.783545f, 1.666363f, 4.158726f, 0}, - {8.256399f, 1.159990f, 4.963177f, 0}, - {8.441950f, 0.727837f, 5.633553f, 0}, - {7.973883f, 0.981622f, 5.418075f, 0}, - {7.131125f, 1.492784f, 4.759670f, 0}, - {7.067678f, 1.640027f, 4.987119f, 0}, - {7.246047f, 1.323993f, 5.380965f, 0}, - {7.788333f, 1.154004f, 5.783190f, 0}, - {8.256399f, 1.544259f, 6.980290f, 0}, - {8.076834f, 2.169145f, 7.654258f, 0}, - {7.649469f, 2.182313f, 7.368151f, 0}, - {7.462722f, 2.094925f, 6.817485f, 0}, - {6.956348f, 1.817198f, 6.009442f, 0}, - {6.156685f, 1.295262f, 5.595245f, 0}, - {5.171472f, 1.101332f, 5.043383f, 0}, - {4.614820f, 1.007958f, 4.921278f, 0}, - {4.693829f, 0.915781f, 5.402513f, 0}, - {4.863817f, 1.090558f, 5.463564f, 0}, - {4.620806f, 1.468842f, 5.919660f, 0}, - {4.741713f, 1.361103f, 6.609190f, 0}, - {4.047395f, 1.677137f, 6.482296f, 0}, - {4.094082f, 1.859096f, 6.527786f, 0}, - {4.349064f, 1.829169f, 6.309914f, 0}, - {4.477154f, 1.816001f, 6.591233f, 0}, - {4.513067f, 1.195903f, 7.651864f, 0}, - {5.130771f, 0.706289f, 8.787911f, 0}, - {5.143939f, 0.804451f, 8.456315f, 0}, - {4.619609f, 0.244208f, 7.931985f, 0}, - {3.963598f, -0.852335f, 8.146266f, 0}, - {4.163514f, -1.314416f, 8.972264f, 0}, - {4.601653f, -1.395819f, 9.185349f, 0}, - {4.854240f, -1.686714f, 8.943534f, 0}, - {4.542994f, -2.023099f, 8.414416f, 0}, - {3.835509f, -2.602495f, 8.085214f, 0}, - {2.978385f, -2.853886f, 8.039723f, 0}, - {2.686292f, -2.522290f, 7.716507f, 0}, - {2.425325f, -2.989159f, 10.263936f, 0}, - {1.680728f, -3.276463f, 12.568354f, 0}, - {1.449688f, -2.462435f, 9.834177f, 0}, - {1.904586f, -2.296038f, 8.819036f, 0}, - {2.072180f, -2.254139f, 9.337380f, 0}, - {2.197876f, -2.144006f, 9.494201f, 0}, - {2.105699f, -1.899798f, 9.169786f, 0}, - {1.717839f, -1.751357f, 9.096764f, 0}, - {1.574187f, -1.813607f, 9.458287f, 0}, - {1.502361f, -1.717839f, 9.576800f, 0}, - {1.379059f, -1.528697f, 9.473849f, 0}, - {1.168370f, -1.182735f, 9.206897f, 0}, - {1.060631f, -1.138442f, 9.701299f, 0}, - {0.893037f, -1.142033f, 10.007756f, 0}, - {0.729034f, -1.097741f, 10.362098f, 0}, - {0.847547f, -1.270123f, 11.415545f, 0}, - {0.700303f, -1.437717f, 11.802209f, 0}, - {0.657208f, -0.940921f, 10.297455f, 0}, - {0.820014f, -0.262165f, 8.865723f, 0}, - {1.120486f, -0.100556f, 9.303862f, 0}, - {1.000776f, -0.172382f, 10.194504f, 0}, - {0.691924f, 0.026336f, 8.984236f, 0}, - {0.712274f, 0.058658f, 8.265976f, 0}, - {0.530315f, -0.462081f, 10.773900f, 0}, - {0.463278f, -0.685938f, 10.289075f, 0}, - {0.442927f, -0.518344f, 7.893678f, 0}, - {0.445321f, -0.438139f, 7.972686f, 0}, - {0.378284f, -0.450110f, 8.655033f, 0}, - {0.043096f, 0.015562f, 8.980644f, 0}, - {0.220266f, 0.984016f, 9.639050f, 0}, - {0.154426f, 1.146822f, 9.488214f, 0}, - {-0.119710f, 1.325190f, 9.168590f, 0}, - {-0.130484f, 1.334767f, 9.746788f, 0}, - {-0.025139f, 1.310825f, 10.338156f, 0}, - {0.028730f, 1.616085f, 9.712072f, 0}, - {0.044293f, 1.892615f, 8.583207f, 0}, - {0.069432f, 1.480813f, 8.564054f, 0}, - {0.033519f, 1.243787f, 8.768758f, 0}, - {0.373495f, 1.514332f, 8.633486f, 0}, - {0.353144f, 1.561018f, 8.446738f, 0}, - {0.129287f, 1.313219f, 8.616726f, 0}, - {-0.028730f, 0.976834f, 9.123099f, 0}, - {-0.076614f, 0.966060f, 9.351746f, 0}, - {-0.161609f, 1.165975f, 8.965082f, 0}, - {-0.343568f, 1.641224f, 8.194150f, 0}, - {-0.442927f, 1.661575f, 8.437161f, 0}, - {-0.363918f, 1.365891f, 9.854527f, 0}, - {-0.282516f, 1.326387f, 10.666162f, 0}, - {-0.314837f, 1.443703f, 10.433924f, 0}, - {-0.644040f, 1.332372f, 9.327804f, 0}, - {-0.999579f, 1.479616f, 8.036133f, 0}, - {-0.799663f, 1.452082f, 8.346182f, 0}, - {-0.858321f, 1.567004f, 9.868893f, 0}, - {-0.938526f, 1.495178f, 11.599899f, 0}, - {-1.193509f, 1.498769f, 11.905160f, 0}, - {-1.556230f, 1.338358f, 10.947480f, 0}, - {-1.557427f, 1.256955f, 11.003743f, 0}, - {-1.413775f, 1.060631f, 11.848896f, 0}, - {-1.280897f, 0.922964f, 12.215209f, 0}, - {-1.132457f, 0.927753f, 11.399983f, 0}, - {-1.037886f, 0.881066f, 10.413573f, 0}, - {-0.605733f, 0.897825f, 10.074794f, 0}, - {-0.149638f, 0.872686f, 10.181335f, 0}, - {0.278924f, 0.933738f, 10.765521f, 0}, - {0.741005f, 1.137245f, 10.898398f, 0}, - {1.114500f, 1.398213f, 10.672147f, 0}, - {1.337161f, 1.841140f, 11.609476f, 0}, - {1.916557f, 1.922543f, 13.679262f, 0}, - {2.594116f, 1.768117f, 13.814534f, 0}, - {3.088518f, 2.280476f, 12.144580f, 0}, - {3.426100f, 2.173934f, 11.726792f, 0}, - {3.564964f, 1.717839f, 11.662148f, 0}, - {3.779245f, 1.653195f, 11.219221f, 0}, - {3.823538f, 1.709459f, 10.377660f, 0}, + { 3.233367f, 1.968032f, 8.875299f, 0 }, + { 3.190272f, 2.127247f, 9.054865f, 0 }, + { 3.361457f, 2.057815f, 9.054865f, 0 }, + { 3.377019f, 1.917754f, 9.093172f, 0 }, + { 3.460816f, 1.817198f, 9.058456f, 0 }, + { 3.500320f, 1.726218f, 8.900438f, 0 }, + { 3.715799f, 1.363497f, 8.836992f, 0 }, + { 3.883393f, 0.884657f, 8.832204f, 0 }, + { 3.948036f, 0.577002f, 9.016558f, 0 }, + { 3.600877f, 0.717063f, 9.200911f, 0 }, + { 3.318361f, 0.854729f, 9.166195f, 0 }, + { 3.272871f, 0.731428f, 9.149436f, 0 }, + { 3.452436f, 0.250194f, 9.297876f, 0 }, + { 3.817552f, -0.353144f, 9.424768f, 0 }, + { 3.828326f, -0.495599f, 9.284708f, 0 }, + { 3.312376f, -0.040701f, 9.204502f, 0 }, + { 3.049014f, 0.515950f, 9.223656f, 0 }, + { 3.099292f, 0.980425f, 8.882483f, 0 }, + { 3.153162f, 1.443703f, 8.154645f, 0 }, + { 3.501518f, 1.487995f, 8.054089f, 0 }, + { 4.235340f, 1.292868f, 8.480257f, 0 }, + { 4.284421f, 1.511937f, 8.848964f, 0 }, + { 3.988737f, 1.928528f, 9.149436f, 0 }, + { 3.825932f, 2.076969f, 9.576800f, 0 }, + { 3.903743f, 1.991974f, 10.133451f, 0 }, + { 3.841494f, 2.000354f, 10.165773f, 0 }, + { 3.706222f, 1.930922f, 9.649823f, 0 }, + { 3.949233f, 1.614888f, 9.054865f, 0 }, + { 4.237734f, 1.272517f, 8.625106f, 0 }, + { 4.188653f, 1.134851f, 8.268370f, 0 }, + { 4.242523f, 0.991199f, 8.091199f, 0 }, + { 4.157528f, 0.970848f, 8.135491f, 0 }, + { 3.951627f, 0.967257f, 8.353364f, 0 }, + { 4.073731f, 0.994790f, 8.854949f, 0 }, + { 3.840297f, 1.124077f, 9.249992f, 0 }, + { 3.736149f, 1.142033f, 9.491806f, 0 }, + { 3.809172f, 1.126471f, 9.651020f, 0 }, + { 3.987540f, 1.173158f, 9.633064f, 0 }, + { 4.237734f, 1.005564f, 9.467864f, 0 }, + { 4.308363f, 0.939724f, 9.190137f, 0 }, + { 4.367021f, 0.986410f, 9.021346f, 0 }, + { 4.406525f, 1.033097f, 9.074018f, 0 }, + { 4.185062f, 1.276109f, 9.235627f, 0 }, + { 3.971978f, 1.363497f, 9.525325f, 0 }, + { 4.031833f, 1.318007f, 10.833755f, 0 }, + { 4.214989f, 1.144428f, 10.241191f, 0 }, + { 4.808751f, 0.590170f, 9.690525f, 0 }, + { 4.697421f, 0.372298f, 10.245979f, 0 }, + { 4.490322f, 0.207098f, 9.682145f, 0 }, + { 4.353853f, 0.494402f, 8.651442f, 0 }, + { 3.981555f, 1.094149f, 8.230062f, 0 }, + { 3.933671f, 1.310825f, 8.426387f, 0 }, + { 4.107250f, 1.189917f, 9.068033f, 0 }, + { 4.529827f, 0.888248f, 9.501383f, 0 }, + { 4.699815f, 0.720654f, 9.765942f, 0 }, + { 4.661508f, 0.647631f, 9.916777f, 0 }, + { 4.627989f, 0.587776f, 9.925157f, 0 }, + { 4.413708f, 0.587776f, 9.791081f, 0 }, + { 4.369415f, 0.466869f, 9.840162f, 0 }, + { 4.412511f, 0.335188f, 9.932339f, 0 }, + { 4.234143f, 0.452504f, 9.502580f, 0 }, + { 3.817552f, 1.055842f, 8.638274f, 0 }, + { 3.130417f, 1.842337f, 7.748828f, 0 }, + { 2.511516f, 2.430113f, 7.059299f, 0 }, + { 2.267308f, 2.840718f, 6.742067f, 0 }, + { 2.082954f, 3.129220f, 6.706154f, 0 }, + { 1.653195f, 3.483561f, 6.813893f, 0 }, + { 1.053448f, 3.797201f, 7.132322f, 0 }, + { 0.333991f, 4.125207f, 7.364560f, 0 }, + { -0.039504f, 4.228158f, 8.018176f, 0 }, + { 0.403423f, 3.726573f, 8.789108f, 0 }, + { 1.179144f, 3.120840f, 9.289496f, 0 }, + { 1.683123f, 2.905362f, 9.911988f, 0 }, + { 1.442506f, 3.038240f, 10.551240f, 0 }, + { 1.403001f, 2.936486f, 12.229574f, 0 }, + { 1.601720f, 2.541443f, 14.815310f, 0 }, + { 2.233789f, 2.037464f, 14.715951f, 0 }, + { 2.664745f, 1.736992f, 12.216406f, 0 }, + { 3.331529f, 1.385045f, 10.475822f, 0 }, + { 3.337515f, 1.235407f, 9.133873f, 0 }, + { 3.173512f, 1.292868f, 8.406036f, 0 }, + { 3.201046f, 1.462856f, 8.306677f, 0 }, + { 3.157950f, 1.595734f, 9.011769f, 0 }, + { 2.759315f, 1.777694f, 10.049655f, 0 }, + { 2.315192f, 2.105699f, 10.682920f, 0 }, + { 2.063801f, 2.375046f, 10.832559f, 0 }, + { 2.310403f, 2.485180f, 10.688907f, 0 }, + { 2.553414f, 2.606087f, 10.153803f, 0 }, + { 2.475603f, 2.731782f, 9.356534f, 0 }, + { 2.710234f, 2.529472f, 9.297876f, 0 }, + { 2.777272f, 2.193087f, 9.394841f, 0 }, + { 2.938881f, 1.920148f, 9.531310f, 0 }, + { 3.108869f, 1.635239f, 10.534480f, 0 }, + { 3.187877f, 1.425746f, 10.899596f, 0 }, + { 3.448845f, 1.331175f, 10.508144f, 0 }, + { 3.606862f, 1.470039f, 9.440331f, 0 }, + { 3.700236f, 1.162384f, 8.781926f, 0 }, + { 3.713404f, 0.864306f, 8.845372f, 0 }, + { 3.575738f, 0.404620f, 9.610319f, 0 }, + { 3.495532f, -0.130484f, 9.526522f, 0 }, + { 3.403355f, -0.411802f, 8.833401f, 0 }, + { 3.203440f, -0.380678f, 8.850161f, 0 }, + { 2.822762f, -0.191536f, 9.560040f, 0 }, + { 2.488771f, -0.459686f, 9.883258f, 0 }, + { 3.065773f, -0.764947f, 10.110707f, 0 }, + { 1.993172f, 1.004367f, 9.798264f, 0 }, + { 2.426522f, 1.732204f, 10.036487f, 0 }, + { 3.213017f, 1.238999f, 10.182533f, 0 }, + { 2.779666f, 2.394200f, 9.916777f, 0 }, + { 3.187877f, 2.622846f, 9.593559f, 0 }, + { 4.195836f, 1.867476f, 9.876076f, 0 }, + { 3.720587f, 2.114079f, 9.998179f, 0 }, + { 2.948457f, 2.766498f, 9.500186f, 0 }, + { 3.869027f, 2.822762f, 9.572012f, 0 }, + { 4.205412f, 2.656365f, 9.753971f, 0 }, + { 4.151543f, 2.828747f, 9.751576f, 0 }, + { 4.046198f, 2.905362f, 9.131479f, 0 }, + { 3.915714f, 3.032254f, 8.237246f, 0 }, + { 3.864239f, 3.126825f, 8.008599f, 0 }, + { 3.466802f, 2.999933f, 8.634683f, 0 }, + { 2.876631f, 2.902968f, 9.473849f, 0 }, + { 2.329557f, 2.899376f, 10.187322f, 0 }, + { 2.197876f, 3.608059f, 10.637431f, 0 }, + { 2.357090f, 4.205412f, 10.235206f, 0 }, + { 2.716220f, 4.076126f, 9.261963f, 0 }, + { 3.520671f, 3.847480f, 8.461103f, 0 }, + { 4.180274f, 3.879801f, 7.758405f, 0 }, + { 4.691435f, 4.034227f, 7.019794f, 0 }, + { 4.918884f, 3.915714f, 6.659468f, 0 }, + { 4.722559f, 4.205412f, 6.113590f, 0 }, + { 5.349840f, 4.169499f, 5.413286f, 0 }, + { 6.423639f, 3.742135f, 5.009864f, 0 }, + { 6.799528f, 3.581723f, 4.843467f, 0 }, + { 6.915647f, 3.337515f, 4.921278f, 0 }, + { 7.358574f, 3.173512f, 5.214568f, 0 }, + { 7.584826f, 2.861069f, 5.182246f, 0 }, + { 7.077255f, 2.771286f, 5.073310f, 0 }, + { 7.192177f, 2.306812f, 5.501872f, 0 }, + { 7.241258f, 2.145203f, 5.888535f, 0 }, + { 7.599191f, 1.898601f, 6.099225f, 0 }, + { 7.576446f, 2.138021f, 6.144714f, 0 }, + { 7.465116f, 1.962047f, 6.021413f, 0 }, + { 7.677002f, 1.740583f, 5.643129f, 0 }, + { 7.966701f, 1.648407f, 4.964374f, 0 }, + { 8.038527f, 1.636436f, 4.419693f, 0 }, + { 8.176193f, 1.582566f, 4.183865f, 0 }, + { 8.489834f, 1.460462f, 4.319137f, 0 }, + { 8.804670f, 1.314416f, 4.444832f, 0 }, + { 8.803473f, 1.308430f, 4.492716f, 0 }, + { 8.580813f, 1.392227f, 4.501096f, 0 }, + { 8.056483f, 1.595734f, 4.428073f, 0 }, + { 8.418008f, 1.316810f, 4.600455f, 0 }, + { 8.826219f, 1.170764f, 4.411314f, 0 }, + { 8.652639f, 1.201888f, 3.910926f, 0 }, + { 8.285130f, 0.927753f, 3.752909f, 0 }, + { 8.475469f, 1.027112f, 3.569752f, 0 }, + { 9.009375f, 0.708683f, 3.605665f, 0 }, + { 8.797488f, 0.600944f, 3.107672f, 0 }, + { 8.864526f, 0.620098f, 2.863463f, 0 }, + { 8.833401f, 0.214281f, 2.640803f, 0 }, + { 9.212882f, 0.150835f, 2.487574f, 0 }, + { 9.308650f, 0.226252f, 2.375046f, 0 }, + { 8.869314f, 0.094571f, 2.142809f, 0 }, + { 9.208094f, 0.002394f, 2.132035f, 0 }, + { 9.100354f, 0.015562f, 2.367864f, 0 }, + { 8.973462f, -0.011971f, 2.602495f, 0 }, + { 8.872906f, 0.000000f, 2.564188f, 0 }, + { 8.883679f, 0.092177f, 2.452858f, 0 }, + { 8.857343f, 0.241814f, 2.480391f, 0 }, + { 8.919592f, 0.371101f, 2.612072f, 0 }, + { 9.002192f, 0.483628f, 2.536655f, 0 }, + { 9.056062f, 0.521936f, 2.335542f, 0 }, + { 9.023740f, 0.572214f, 2.012325f, 0 }, + { 9.085989f, 0.592565f, 1.854308f, 0 }, + { 9.127888f, 0.505176f, 1.783679f, 0 }, + { 8.968674f, 0.653617f, 1.787270f, 0 }, + { 8.872906f, 0.650025f, 1.867476f, 0 }, + { 8.798685f, 0.628478f, 2.148795f, 0 }, + { 8.841781f, 0.530315f, 2.687490f, 0 }, + { 8.541308f, 0.642843f, 2.780863f, 0 }, + { 8.499411f, 0.402226f, 2.566582f, 0 }, + { 8.734042f, -0.217872f, 2.597707f, 0 }, + { 8.689749f, -0.295684f, 3.051408f, 0 }, + { 8.298298f, -0.123301f, 3.968387f, 0 }, + { 7.545321f, -0.111330f, 4.738122f, 0 }, + { 6.827062f, -0.112527f, 5.501872f, 0 }, + { 6.604401f, 0.435744f, 6.827062f, 0 }, + { 6.572079f, 0.610521f, 7.642287f, 0 }, + { 6.546940f, 0.383072f, 7.778756f, 0 }, + { 6.274001f, 0.530315f, 7.600388f, 0 }, + { 5.847834f, 1.544259f, 7.811078f, 0 }, + { 5.374979f, 1.781285f, 7.654258f, 0 }, + { 5.163093f, 1.493981f, 7.372939f, 0 }, + { 5.104434f, 1.314416f, 7.807487f, 0 }, + { 5.424060f, 0.847547f, 8.513776f, 0 }, + { 5.471944f, 0.817619f, 8.461103f, 0 }, + { 4.618412f, 1.319204f, 8.107959f, 0 }, + { 4.265267f, 1.634042f, 7.587220f, 0 }, + { 5.191823f, 1.347935f, 7.196965f, 0 }, + { 4.748896f, 1.868673f, 7.097606f, 0 }, + { 4.595667f, 1.187523f, 7.428006f, 0 }, + { 3.948036f, 1.272517f, 8.262384f, 0 }, + { 2.280476f, 1.892615f, 8.998601f, 0 }, + { 2.828747f, 1.725021f, 8.937549f, 0 }, + { 3.256112f, 1.863885f, 9.101552f, 0 }, + { 3.264492f, 1.679531f, 8.540112f, 0 }, + { 3.616439f, 1.237801f, 8.178588f, 0 }, + { 3.713404f, 1.492784f, 9.411600f, 0 }, + { 3.654746f, 1.428140f, 10.740381f, 0 }, + { 3.139993f, 1.246181f, 10.362098f, 0 }, + { 2.381032f, 1.161187f, 9.357731f, 0 }, + { 2.602495f, 1.027112f, 11.311399f, 0 }, + { 2.964020f, 1.120486f, 12.570747f, 0 }, + { 2.501939f, 1.344343f, 10.244782f, 0 }, + { 2.152386f, 1.455674f, 9.786293f, 0 }, + { 1.878250f, 1.450885f, 10.216052f, 0 }, + { 1.844731f, 1.434126f, 12.245136f, 0 }, + { 2.011128f, 1.198297f, 13.654123f, 0 }, + { 1.562216f, 1.192312f, 10.202884f, 0 }, + { 1.046265f, 1.596931f, 8.796291f, 0 }, + { 1.344343f, 1.769314f, 9.710876f, 0 }, + { 1.857899f, 1.845928f, 10.510538f, 0 }, + { 2.217029f, 1.814804f, 11.314989f, 0 }, + { 2.341528f, 1.612494f, 11.218024f, 0 }, + { 2.144006f, 1.527500f, 10.122678f, 0 }, + { 2.220621f, 1.271320f, 10.222037f, 0 }, + { 2.487574f, 0.978031f, 10.830164f, 0 }, + { 2.782060f, 0.950497f, 11.261120f, 0 }, + { 3.031057f, 0.894234f, 10.802630f, 0 }, + { 2.880223f, 0.992396f, 9.764745f, 0 }, + { 2.115276f, 1.447294f, 8.930367f, 0 }, + { 1.849520f, 1.715444f, 8.956702f, 0 }, + { 2.313994f, 1.569398f, 9.429557f, 0 }, + { 2.365470f, 1.504755f, 9.142253f, 0 }, + { 2.184708f, 1.528697f, 8.570039f, 0 }, + { 2.346316f, 1.491587f, 8.657428f, 0 }, + { 2.662350f, 1.338358f, 8.938745f, 0 }, + { 2.619255f, 1.200691f, 8.894453f, 0 }, + { 2.372652f, 1.073799f, 8.850161f, 0 }, + { 2.363075f, 1.012747f, 9.173378f, 0 }, + { 2.529472f, 1.101332f, 9.485821f, 0 }, + { 2.730585f, 1.132457f, 9.469061f, 0 }, + { 2.913742f, 1.120486f, 9.311044f, 0 }, + { 3.093307f, 1.151610f, 9.610319f, 0 }, + { 3.087321f, 1.296459f, 10.226826f, 0 }, + { 2.811988f, 1.377862f, 10.601518f, 0 }, + { 2.683898f, 1.231816f, 10.516523f, 0 }, + { 2.584539f, 1.250970f, 10.043670f, 0 }, + { 2.732979f, 1.283291f, 9.721649f, 0 }, + { 2.949655f, 1.004367f, 9.597151f, 0 }, + { 2.908953f, 0.938526f, 9.525325f, 0 }, + { 2.630029f, 1.124077f, 9.534902f, 0 }, + { 2.710234f, 0.859518f, 9.769533f, 0 }, + { 2.574962f, 0.883460f, 9.832980f, 0 }, + { 2.279279f, 1.092952f, 9.628276f, 0 }, + { 2.272096f, 1.016338f, 9.598348f, 0 }, + { 2.448070f, 0.889445f, 9.724044f, 0 }, + { 2.395397f, 0.984016f, 9.685737f, 0 }, + { 2.266110f, 1.094149f, 9.788687f, 0 }, + { 2.366667f, 1.074996f, 9.836571f, 0 }, + { 2.486377f, 1.023521f, 9.856922f, 0 }, + { 2.391806f, 1.103726f, 9.935930f, 0 }, + { 2.179919f, 1.174355f, 9.900018f, 0 }, + { 2.024296f, 1.203086f, 9.925157f, 0 }, + { 2.039858f, 1.156399f, 9.900018f, 0 }, + { 2.087743f, 1.066616f, 9.976632f, 0 }, + { 2.084151f, 0.975637f, 9.853331f, 0 }, + { 2.179919f, 0.985213f, 9.618699f, 0 }, + { 2.300826f, 1.031900f, 9.533705f, 0 }, + { 2.246957f, 1.083376f, 9.599545f, 0 }, + { 2.124853f, 0.970848f, 9.703692f, 0 }, + { 2.005142f, 1.036689f, 9.664188f, 0 }, + { 2.142809f, 1.047463f, 9.641443f, 0 }, + { 2.340331f, 0.885854f, 9.666583f, 0 }, + { 2.238577f, 0.888248f, 9.624684f, 0 }, + { 2.110487f, 0.960074f, 9.634261f, 0 }, + { 2.123656f, 1.030703f, 9.668977f, 0 }, + { 2.196679f, 1.061828f, 9.731226f, 0 }, + { 2.325965f, 0.931344f, 9.607924f, 0 }, + { 2.492362f, 0.841561f, 9.391250f, 0 }, + { 2.663548f, 0.991199f, 9.607924f, 0 }, + { 2.663548f, 0.933738f, 9.994588f, 0 }, + { 2.318783f, 0.817619f, 9.791081f, 0 }, + { 1.841140f, 0.946906f, 9.582786f, 0 }, + { 1.580172f, 1.162384f, 9.424768f, 0 }, + { 1.405395f, 1.210268f, 9.209291f, 0 }, + { 1.625662f, 1.034294f, 9.338577f, 0 }, + { 1.824380f, 1.120486f, 9.599545f, 0 }, + { 1.843534f, 1.120486f, 10.004165f, 0 }, + { 2.057815f, 0.648828f, 10.226826f, 0 }, + { 2.493559f, 0.673967f, 9.695313f, 0 }, + { 2.706643f, 0.766144f, 9.198517f, 0 }, + { 2.315192f, 0.678756f, 8.605952f, 0 }, + { 1.771708f, 0.752976f, 8.489834f, 0 }, + { 1.243787f, 0.969651f, 9.085989f, 0 }, + { 1.102529f, 0.957680f, 9.589969f, 0 }, + { 0.967257f, 0.730231f, 9.928748f, 0 }, + { 0.428562f, 0.812831f, 10.267527f, 0 }, + { 0.254982f, 1.097741f, 10.530889f, 0 }, + { 0.830787f, 1.238999f, 10.898398f, 0 }, + { 1.181538f, 1.061828f, 11.079161f, 0 }, + { 1.320401f, 1.142033f, 11.312595f, 0 }, + { 1.430535f, 0.967257f, 11.358085f, 0 }, + { 1.130062f, 0.909796f, 11.218024f, 0 }, + { 0.805648f, 0.810437f, 11.358085f, 0 }, + { 0.553060f, 0.751779f, 11.392801f, 0 }, + { 0.617704f, 0.609324f, 11.170140f, 0 }, + { 0.879869f, 0.511162f, 11.275485f, 0 }, + { 0.829590f, 0.587776f, 11.293442f, 0 }, + { 0.312443f, 0.672770f, 11.064795f, 0 }, + { 0.293290f, 0.867898f, 10.777492f, 0 }, + { 0.509965f, 0.920570f, 10.351324f, 0 }, + { 0.536301f, 1.023521f, 10.133451f, 0 }, + { 0.774524f, 1.107318f, 10.016136f, 0 }, + { 1.381453f, 0.903811f, 9.916777f, 0 }, + { 1.589749f, 0.810437f, 9.695313f, 0 }, + { 1.593340f, 0.811634f, 9.537296f, 0 }, + { 1.824380f, 0.887051f, 9.521733f, 0 }, + { 1.902192f, 0.964863f, 9.576800f, 0 }, + { 1.674743f, 1.398213f, 9.964661f, 0 }, + { 1.234210f, 1.440111f, 9.610319f, 0 }, + { 1.334767f, 1.115697f, 9.568420f, 0 }, + { 1.393424f, 1.659181f, 9.431952f, 0 }, + { 1.001973f, 2.656365f, 9.647429f, 0 }, + { 0.780509f, 3.013101f, 9.451105f, 0 }, + { 1.270123f, 3.008312f, 9.417586f, 0 }, + { 1.909375f, 3.031057f, 9.946704f, 0 }, + { 1.747766f, 3.309982f, 9.271540f, 0 }, + { 1.356314f, 3.300405f, 8.287523f, 0 }, + { 0.751779f, 3.156753f, 7.970292f, 0 }, + { 0.063446f, 3.359063f, 8.893256f, 0 }, + { 0.136469f, 3.002327f, 8.529338f, 0 }, + { 0.253785f, 3.015495f, 8.072045f, 0 }, + { -0.045490f, 3.882195f, 8.609544f, 0 }, + { 0.149638f, 4.250902f, 9.435542f, 0 }, + { 1.071405f, 3.465605f, 9.838965f, 0 }, + { 1.856702f, 3.051408f, 11.276682f, 0 }, + { 2.770089f, 2.961626f, 10.789463f, 0 }, + { 3.514686f, 2.636014f, 7.386107f, 0 }, + { 3.545810f, 2.828747f, 7.304704f, 0 }, + { 3.815158f, 3.108869f, 6.725308f, 0 }, + { 3.323150f, 3.184286f, 4.733334f, 0 }, + { 2.572568f, 3.155556f, 6.907267f, 0 }, + { 3.299208f, 2.012325f, 9.501383f, 0 }, + { 3.531445f, 2.621649f, 8.761575f, 0 }, + { 4.510673f, 3.228579f, 12.022475f, 0 }, + { 6.127955f, 1.776496f, 13.516457f, 0 }, + { 5.631158f, 1.547850f, 11.772282f, 0 }, + { 5.889732f, -0.058658f, 7.119154f, 0 }, + { 4.481943f, 1.406592f, 6.591233f, 0 }, + { 4.230552f, 1.640027f, 9.447514f, 0 }, + { 4.007891f, 0.654814f, 11.417940f, 0 }, + { 4.525038f, 0.415394f, 11.757916f, 0 }, + { 4.125207f, 0.555454f, 10.915158f, 0 }, + { 3.624819f, 0.526724f, 9.951492f, 0 }, + { 3.210622f, 0.480037f, 10.086765f, 0 }, + { 3.298011f, 1.221042f, 9.670174f, 0 }, + { 3.142388f, 1.479616f, 9.212882f, 0 }, + { 2.955640f, 1.448491f, 8.816642f, 0 }, + { 3.101686f, 2.088940f, 9.536098f, 0 }, + { 3.215411f, 2.460041f, 9.319424f, 0 }, + { 3.247732f, 2.573765f, 8.180982f, 0 }, + { 3.251324f, 2.348710f, 8.084017f, 0 }, + { 3.372231f, 2.255337f, 9.076412f, 0 }, + { 3.545810f, 2.310403f, 9.700102f, 0 }, + { 3.739741f, 2.173934f, 9.156618f, 0 }, + { 3.809172f, 1.825577f, 9.087187f, 0 }, + { 3.727770f, 1.434126f, 9.709679f, 0 }, + { 3.596088f, 1.175552f, 10.115496f, 0 }, + { 3.452436f, 1.128865f, 9.888046f, 0 }, + { 3.217805f, 1.009155f, 9.366111f, 0 }, + { 3.197454f, 1.152807f, 9.042893f, 0 }, + { 3.360260f, 1.312022f, 8.710100f, 0 }, + { 3.630804f, 1.417366f, 8.561660f, 0 }, + { 3.858253f, 1.345540f, 8.723268f, 0 }, + { 4.018665f, 1.070207f, 9.018951f, 0 }, + { 4.181470f, 0.847547f, 9.135071f, 0 }, + { 4.359838f, 0.720654f, 9.123099f, 0 }, + { 4.487928f, 0.720654f, 9.082398f, 0 }, + { 4.380189f, 0.676362f, 9.085989f, 0 }, + { 4.357444f, 0.766144f, 9.149436f, 0 }, + { 4.260479f, 0.820014f, 8.944732f, 0 }, + { 4.271253f, 0.809240f, 9.156618f, 0 }, + { 4.315546f, 0.563834f, 9.089581f, 0 }, + { 4.484337f, 0.366313f, 8.816642f, 1 }, + { 4.460395f, 0.489614f, 8.925578f, 0 }, + { 4.448424f, 0.270545f, 9.436740f, 0 }, + { 4.559754f, 0.149638f, 9.291890f, 0 }, + { 4.551374f, 0.318429f, 8.737633f, 0 }, + { 4.523841f, 0.301669f, 8.877694f, 0 }, + { 4.411314f, 0.075417f, 9.094369f, 0 }, + { 4.203018f, -0.062249f, 9.162603f, 0 }, + { 4.171894f, -0.029928f, 8.957899f, 0 }, + { 4.235340f, -0.195127f, 9.186545f, 0 }, + { 4.386175f, -0.499191f, 9.753971f, 0 }, + { 4.505885f, -0.679953f, 10.381251f, 0 }, + { 4.586090f, -0.547075f, 10.471034f, 0 }, + { 4.892548f, -0.622492f, 9.931142f, 0 }, + { 5.498281f, -0.993593f, 9.714467f, 0 }, + { 5.907689f, -1.383848f, 9.782701f, 0 }, + { 6.193796f, -1.279700f, 9.963464f, 0 }, + { 6.526589f, -1.408987f, 8.862131f, 0 }, + { 6.619963f, -2.099714f, 7.775165f, 0 }, + { 6.324279f, -2.311600f, 7.964306f, 0 }, + { 5.984303f, -2.063801f, 9.196122f, 0 }, + { 5.639538f, -1.571792f, 8.735239f, 0 }, + { 5.276817f, -1.029506f, 7.680594f, 0 }, + { 5.011061f, -0.629675f, 7.769179f, 0 }, + { 4.618412f, -0.131681f, 8.444344f, 0 }, + { 4.189850f, 0.440533f, 8.780728f, 0 }, + { 4.214989f, 1.012747f, 8.608346f, 0 }, + { 4.211398f, 1.684320f, 8.520958f, 0 }, + { 4.193441f, 2.132035f, 9.264358f, 0 }, + { 4.256888f, 2.742556f, 9.690525f, 0 }, + { 4.542994f, 3.782836f, 9.542085f, 0 }, + { 5.335475f, 4.732136f, 8.649048f, 0 }, + { 5.679042f, 5.600034f, 7.328646f, 0 }, + { 5.938813f, 6.015428f, 5.878958f, 0 }, + { 5.702984f, 5.841848f, 3.946839f, 0 }, + { 5.978318f, 4.942826f, 2.680307f, 0 }, + { 6.204569f, 4.444832f, 3.429692f, 0 }, + { 6.102816f, 4.230552f, 4.288013f, 0 }, + { 6.244074f, 4.173091f, 4.954797f, 0 }, + { 6.355404f, 3.830720f, 5.212173f, 0 }, + { 7.004232f, 3.655943f, 4.850649f, 0 }, + { 7.965504f, 2.867055f, 4.497505f, 0 }, + { 8.603558f, 3.070562f, 4.267662f, 0 }, + { 9.105143f, 4.338291f, 4.809948f, 0 }, + { 8.657428f, 4.848255f, 3.834311f, 0 }, + { 7.819458f, 5.075704f, 0.330400f, 0 }, + { 7.815866f, 5.650312f, -3.190272f, 0 }, + { 7.144293f, 6.502647f, -10.860091f, 0 }, + { 7.374136f, 4.941629f, -7.758405f, 0 }, + { 8.832204f, 3.672703f, 0.448913f, 0 }, + { 9.153027f, 3.536233f, 0.270545f, 0 }, + { 8.880088f, 4.343079f, 0.025139f, 0 }, + { 8.923183f, 4.811145f, -0.472855f, 0 }, + { 9.080004f, 4.722559f, -0.604536f, 0 }, + { 9.029726f, 4.490322f, -0.079009f, 0 }, + { 9.149436f, 4.181470f, -0.168791f, 0 }, + { 9.192532f, 4.162317f, -0.488417f, 0 }, + { 9.105143f, 4.446030f, -0.647631f, 0 }, + { 9.289496f, 4.550177f, -0.691924f, 0 }, + { 9.198517f, 4.359838f, -0.305261f, 0 }, + { 8.995009f, 4.213792f, 0.192733f, 0 }, + { 8.955505f, 4.545389f, -0.177171f, 0 }, + { 8.451527f, 5.149924f, -1.136048f, 0 }, + { 7.418429f, 5.443214f, 0.033519f, 0 }, + { 6.846215f, 5.254072f, 2.087743f, 0 }, + { 7.192177f, 4.586090f, 3.452436f, 0 }, + { 7.727281f, 3.658338f, 3.614045f, 0 }, + { 8.420402f, 3.105278f, 2.424128f, 0 }, + { 9.446317f, 2.968808f, 1.719036f, 0 }, + { 9.706087f, 2.862266f, 2.051830f, 0 }, + { 9.520536f, 2.778469f, 2.466026f, 0 }, + { 9.439134f, 2.862266f, 3.065773f, 0 }, + { 8.769955f, 3.287237f, 3.415326f, 0 }, + { 8.048103f, 3.784033f, 2.977188f, 0 }, + { 7.817063f, 3.926488f, 1.849520f, 0 }, + { 8.365335f, 3.857056f, 0.901416f, 0 }, + { 8.749604f, 3.778048f, 0.855927f, 0 }, + { 7.741646f, 4.425679f, 1.212662f, 0 }, + { 6.775586f, 5.135559f, 1.638830f, 0 }, + { 7.811078f, 4.550177f, 3.052605f, 0 }, + { 8.285130f, 4.247311f, 3.077744f, 0 }, + { 8.590390f, 4.511870f, 2.555809f, 0 }, + { 8.787911f, 4.813539f, 2.319980f, 0 }, + { 8.252808f, 4.928461f, 1.952470f, 0 }, + { 7.679397f, 4.880577f, 1.568201f, 0 }, + { 7.946350f, 4.525038f, 1.531091f, 0 }, + { 8.236049f, 4.353853f, 1.537076f, 0 }, + { 8.593981f, 4.235340f, 1.843534f, 0 }, + { 8.511381f, 4.062957f, 1.691502f, 0 }, + { 8.268370f, 4.389766f, 1.649604f, 0 }, + { 8.129506f, 5.080492f, 1.691502f, 0 }, + { 8.280341f, 5.632356f, 1.444900f, 0 }, + { 8.936352f, 5.948390f, 1.972821f, 0 }, + { 10.184927f, 5.974726f, 3.705025f, 0 }, + { 11.186900f, 5.440820f, 3.477576f, 0 }, + { 11.239573f, 4.985922f, 1.543062f, 0 }, + { 11.077964f, 4.748896f, 1.107318f, 0 }, + { 10.912764f, 4.514264f, 1.528697f, 0 }, + { 10.890019f, 3.810369f, 1.624465f, 0 }, + { 9.329000f, 2.948457f, 1.057039f, 0 }, + { 7.509408f, 2.424128f, 1.201888f, 0 }, + { 7.207739f, 1.965638f, 1.035492f, 0 }, + { 7.030569f, 1.936908f, 0.076614f, 0 }, + { 6.907267f, 2.347513f, -0.646434f, 0 }, + { 7.483072f, 2.871843f, -0.088585f, 0 }, + { 8.190558f, 3.590103f, 1.675940f, 0 }, + { 8.498213f, 3.961204f, 1.974018f, 0 }, + { 8.552083f, 3.774457f, 1.284488f, 0 }, + { 8.402445f, 3.895364f, 2.099714f, 0 }, + { 8.273158f, 4.100068f, 2.432507f, 0 }, + { 8.030147f, 4.141966f, 1.668757f, 0 }, + { 7.900860f, 4.010285f, 1.027112f, 0 }, + { 7.912831f, 3.936065f, 0.803254f, 0 }, + { 7.878115f, 4.007891f, 0.687135f, 0 }, + { 7.789530f, 4.050986f, 0.326808f, 0 }, + { 8.213304f, 3.869027f, 0.050278f, 0 }, + { 8.558068f, 3.667914f, 0.016759f, 0 }, + { 8.617923f, 3.523065f, 0.405817f, 0 }, + { 8.524549f, 3.506306f, 0.683544f, 0 }, + { 8.438358f, 3.640381f, 0.433350f, 0 }, + { 8.262384f, 3.952824f, 0.190339f, 0 }, + { 8.115141f, 4.276042f, 0.306458f, 0 }, + { 8.386883f, 4.367021f, 0.554257f, 0 }, + { 8.827415f, 4.244917f, 0.985213f, 0 }, + { 9.200911f, 4.337093f, 0.806845f, 0 }, + { 10.524903f, 4.668690f, -0.792480f, 0 }, + { 11.640601f, 4.612426f, -1.328781f, 0 }, + { 11.060007f, 4.495111f, -0.488417f, 0 }, + { 9.582786f, 5.093661f, 0.833182f, 0 }, + { 9.582786f, 5.696999f, 1.917754f, 0 }, + { 10.176547f, 5.428849f, 1.911769f, 0 }, + { 10.186124f, 5.148727f, 2.031479f, 0 }, + { 9.921565f, 4.803962f, 2.525881f, 0 }, + { 9.082398f, 3.547007f, 2.503136f, 0 }, + { 8.127112f, 2.201467f, 3.013101f, 0 }, + { 8.121126f, 2.080560f, 3.895364f, 0 }, + { 7.538139f, 3.345895f, 3.219002f, 0 }, + { 7.010218f, 3.763683f, 2.015916f, 0 }, + { 7.691368f, 3.278857f, 1.988383f, 0 }, + { 9.029726f, 2.555809f, 2.470814f, 0 }, + { 9.815023f, 2.255337f, 1.878250f, 0 }, + { 9.594757f, 2.603693f, 0.724246f, 0 }, + { 8.785517f, 3.135205f, 0.660799f, 0 }, + { 8.186967f, 3.447648f, 1.098938f, 0 }, + { 7.940364f, 3.257309f, 1.605311f, 0 }, + { 7.721295f, 2.911347f, 1.705868f, 0 }, + { 7.763194f, 2.804805f, 1.307233f, 0 }, + { 8.137886f, 2.965217f, 1.130062f, 0 }, + { 8.329422f, 3.266886f, 1.200691f, 0 }, + { 8.224077f, 3.472787f, 1.547850f, 0 }, + { 7.841005f, 3.687068f, 1.614888f, 0 }, + { 7.527365f, 4.015073f, 1.435323f, 0 }, + { 7.979869f, 4.304772f, 1.449688f, 0 }, + { 6.466734f, 4.948812f, 0.798466f, 0 }, + { 5.912477f, 5.204991f, 0.487220f, 0 }, + { 8.413219f, 5.108026f, 3.270477f, 0 }, + { 9.945507f, 5.396527f, 3.342303f, 0 }, + { 10.691300f, 5.128376f, 2.308009f, 0 }, + { 10.842135f, 4.801568f, 1.601720f, 0 }, + { 9.938325f, 4.821919f, 1.177946f, 0 }, + { 8.507790f, 4.671084f, 1.237801f, 0 }, + { 8.838189f, 4.602849f, 2.097319f, 0 }, + { 10.510538f, 4.817131f, 2.170342f, 0 }, + { 12.216406f, 4.753684f, 1.561018f, 0 }, + { 12.654545f, 3.897758f, 0.378284f, 0 }, + { 11.204856f, 1.860294f, -0.105345f, 0 }, + { 8.844175f, 0.367510f, 1.064222f, 0 }, + { 7.511803f, 0.355539f, 1.830366f, 0 }, + { 7.447159f, 0.761356f, 1.376665f, 0 }, + { 7.492649f, 1.477221f, 1.074996f, 0 }, + { 7.439977f, 1.969230f, 1.636436f, 0 }, + { 8.178588f, 2.361878f, 2.212241f, 0 }, + { 9.138661f, 2.566582f, 3.772062f, 0 }, + { 8.628697f, 3.113657f, 5.457579f, 0 }, + { 7.310690f, 3.958810f, 4.115630f, 0 }, + { 6.605598f, 3.852268f, -0.732625f, 0 }, + { 7.333435f, 2.907756f, -0.568623f, 0 }, + { 7.597994f, 2.693475f, 1.482010f, 0 }, + { 7.583629f, 2.049435f, 0.691924f, 0 }, + { 9.470259f, 0.593762f, -0.951695f, 0 }, + { 10.658978f, 0.784101f, -0.517147f, 0 }, + { 10.287878f, 1.835154f, 0.626083f, 0 }, + { 9.807840f, 2.612072f, 1.288080f, 0 }, + { 8.984236f, 2.947260f, 0.714669f, 0 }, + { 8.761575f, 2.649182f, -0.256179f, 0 }, + { 8.923183f, 2.196679f, -0.543483f, 0 }, + { 8.926775f, 1.908177f, -0.259771f, 0 }, + { 8.783123f, 2.282870f, 0.343568f, 0 }, + { 8.637076f, 2.968808f, 0.847547f, 0 }, + { 9.196122f, 2.409762f, 1.001973f, 0 }, + { 10.965436f, 2.219424f, -0.040701f, 0 }, + { 12.228376f, 2.415748f, -2.486377f, 0 }, + { 11.583140f, 2.370258f, -2.585736f, 0 }, + { 10.394420f, 2.659956f, -0.113724f, 0 }, + { 9.483426f, 3.004721f, 1.859096f, 0 }, + { 9.071624f, 3.149570f, 2.835930f, 0 }, + { 9.080004f, 3.254915f, 3.105278f, 0 }, + { 9.205699f, 3.192666f, 3.260900f, 0 }, + { 9.168590f, 2.627635f, 3.888181f, 0 }, + { 8.310268f, 1.988383f, 3.989934f, 0 }, + { 6.813893f, 1.753752f, 3.471590f, 0 }, + { 6.712140f, 1.843534f, 3.975569f, 0 }, + { 7.686579f, 1.092952f, 4.849452f, 0 }, + { 8.225274f, -0.057461f, 5.044580f, 0 }, + { 9.645035f, -1.168370f, 5.014652f, 0 }, + { 10.184927f, -1.946485f, 5.219356f, 0 }, + { 9.691722f, -2.285264f, 4.790794f, 0 }, + { 9.776716f, -2.582145f, 4.147952f, 0 }, + { 9.946704f, -2.756921f, 3.651155f, 0 }, + { 9.209291f, -2.138021f, 3.199848f, 0 }, + { 8.215697f, -1.181538f, 2.749739f, 0 }, + { 7.557292f, -0.480037f, 2.457646f, 0 }, + { 7.584826f, -0.227449f, 2.263716f, 0 }, + { 8.142674f, 0.092177f, 1.337161f, 0 }, + { 8.587996f, 0.541089f, -0.260968f, 0 }, + { 9.088384f, 0.393846f, -1.416169f, 0 }, + { 9.514551f, 0.010774f, -0.566228f, 0 }, + { 9.374491f, 0.046687f, 0.678756f, 0 }, + { 9.302665f, 0.275333f, 0.553060f, 0 }, + { 9.515748f, 0.501585f, 0.005986f, 0 }, + { 9.652218f, 0.667982f, -0.077812f, 0 }, + { 9.983814f, 0.775721f, 0.123301f, 0 }, + { 10.466246f, 0.855927f, 0.921767f, 0 }, + { 11.034868f, 0.636857f, 1.392227f, 0 }, + { 11.848896f, -0.166397f, 0.960074f, 0 }, + { 12.391183f, -1.085770f, 0.053870f, 0 }, + { 12.482162f, -1.602917f, -0.912190f, 0 }, + { 12.077542f, -1.947682f, -1.058236f, 0 }, + { 11.311399f, -1.833957f, -0.653617f, 0 }, + { 10.664965f, -1.778891f, 0.350750f, 0 }, + { 9.764745f, -2.568977f, 2.135627f, 0 }, + { 8.580813f, -3.081336f, 2.833536f, 0 }, + { 7.436386f, -2.665942f, 2.202664f, 0 }, + { 6.769601f, -1.289277f, 2.110487f, 0 }, + { 7.038948f, 0.441730f, 3.216608f, 0 }, + { 8.155843f, 1.883038f, 4.080914f, 0 }, + { 9.284708f, 1.380256f, 3.860648f, 0 }, + { 9.452302f, -0.167594f, 2.287658f, 0 }, + { 9.560040f, -0.761356f, 0.659602f, 0 }, + { 9.497791f, -0.784101f, -0.830787f, 0 }, + { 9.290693f, -0.700303f, -1.665166f, 0 }, + { 8.920790f, -0.146046f, -1.515529f, 0 }, + { 8.766363f, 0.034716f, -0.599747f, 0 }, + { 8.348576f, -0.287304f, -0.076614f, 0 }, + { 8.081622f, -0.591367f, 0.045490f, 0 }, + { 7.095212f, -1.157596f, 1.143231f, 0 }, + { 6.483494f, -1.507149f, 0.781706f, 0 }, + { 6.980290f, -1.605311f, 0.519541f, 0 }, + { 8.282735f, -1.045068f, 1.046265f, 0 }, + { 7.284354f, -1.468842f, 0.658405f, 0 }, + { 8.409628f, -2.402580f, -0.105345f, 0 }, + { 10.058035f, -2.456449f, 2.020705f, 0 }, + { 11.830939f, -2.476800f, 2.808397f, 0 }, + { 12.722779f, -1.401804f, 0.846350f, 0 }, + { 11.550818f, -0.071826f, -3.417721f, 0 }, + { 10.788265f, -0.575805f, -7.012612f, 0 }, + { 10.037683f, -1.229422f, -8.307875f, 0 }, + { 9.273934f, -0.415394f, -6.815091f, 0 }, + { 9.394841f, 0.909796f, -5.343854f, 0 }, + { 8.586799f, 1.194706f, -2.789243f, 0 }, + { 8.435964f, 0.617704f, -0.373495f, 0 }, + { 8.913607f, -0.415394f, 0.533907f, 0 }, + { 8.986629f, -1.616085f, 0.727837f, 0 }, + { 8.663413f, -2.105699f, 1.237801f, 0 }, + { 8.337802f, -2.239774f, 1.921346f, 0 }, + { 8.827415f, -2.661153f, 2.705446f, 0 }, + { 9.233232f, -3.117249f, 3.457225f, 0 }, + { 9.272737f, -2.991553f, 3.994723f, 0 }, + { 8.706509f, -2.610875f, 4.343079f, 0 }, + { 7.984657f, -2.519896f, 4.351459f, 0 }, + { 8.218092f, -3.441663f, 4.805160f, 0 }, + { 9.825797f, -4.513067f, 4.161120f, 0 }, + { 10.711651f, -6.089648f, 4.596864f, 0 }, + { 11.142607f, -7.103591f, 3.855859f, 0 }, + { 10.658978f, -6.648694f, 3.931277f, 0 }, + { 10.046063f, -5.696999f, 4.780020f, 0 }, + { 9.539690f, -4.680661f, 5.057748f, 0 }, + { 7.566869f, -3.590103f, 4.860226f, 0 }, + { 6.440398f, -3.344697f, 4.193441f, 0 }, + { 6.586444f, -3.541022f, 3.108869f, 0 }, + { 7.125139f, -3.699039f, 0.994790f, 0 }, + { 8.431175f, -4.952403f, -2.618058f, 0 }, + { 9.090777f, -5.112814f, -7.767982f, 0 }, + { 8.908818f, -3.330332f, -9.904806f, 0 }, + { 8.309072f, -1.798044f, -7.811078f, 0 }, + { 8.213304f, -1.308430f, -7.665031f, 0 }, + { 8.283933f, -1.283291f, -4.946417f, 0 }, + { 8.704114f, -1.482010f, -1.357511f, 0 }, + { 8.904030f, -1.138442f, -0.214281f, 0 }, + { 9.314635f, -1.148019f, -0.150835f, 0 }, + { 9.588771f, -0.961271f, -1.286883f, 0 }, + { 9.983814f, -0.888248f, -3.894166f, 0 }, + { 10.663767f, -0.937329f, -6.470325f, 0 }, + { 11.098314f, -0.972045f, -6.862975f, 0 }, + { 10.899596f, -1.125274f, -5.509054f, 0 }, + { 10.278301f, -1.490390f, -3.240550f, 0 }, + { 9.907200f, -1.777694f, -0.620098f, 0 }, + { 8.779531f, -2.339134f, 1.922543f, 0 }, + { 7.435188f, -2.651577f, 4.188653f, 0 }, + { 6.859383f, -2.463632f, 5.175064f, 0 }, + { 6.631934f, -2.347513f, 5.786782f, 0 }, + { 6.870157f, -2.407368f, 6.654679f, 0 }, + { 7.872130f, -2.549823f, 6.404485f, 0 }, + { 9.375688f, -3.722981f, 3.958810f, 0 }, + { 11.268303f, -5.311533f, -0.108936f, 0 }, + { 12.009308f, -6.212949f, -5.847834f, 0 }, + { 10.462654f, -5.131968f, -11.382027f, 0 }, + { 7.885298f, -2.762907f, -11.698062f, 0 }, + { 7.011415f, -1.878250f, -9.295482f, 0 }, + { 6.627146f, -1.376665f, -6.520604f, 0 }, + { 7.509408f, -1.753752f, -3.491941f, 0 }, + { 8.297100f, -1.997960f, -0.979228f, 0 }, + { 8.939943f, -1.666363f, -0.052672f, 0 }, + { 8.857343f, -0.831985f, 0.451307f, 0 }, + { 8.007402f, -0.197522f, 1.444900f, 0 }, + { 7.693762f, 0.035913f, 3.700236f, 0 }, + { 7.378925f, -0.505176f, 3.415326f, 0 }, + { 5.979515f, -1.707065f, -0.325611f, 0 }, + { 7.726084f, -3.241747f, -5.707773f, 0 }, + { 8.884876f, -3.162738f, -12.425899f, 0 }, + { 9.512156f, 0.045490f, -13.029237f, 0 }, + { 8.766363f, 1.078587f, -6.048946f, 0 }, + { 8.428782f, -0.650025f, -1.023521f, 0 }, + { 8.790305f, -0.999579f, 1.993172f, 0 }, + { 9.354139f, -0.804451f, 2.904165f, 0 }, + { 10.168168f, -1.060631f, -0.969651f, 0 }, + { 11.595111f, -1.048660f, -4.067746f, 0 }, + { 13.030434f, -0.831985f, -6.460749f, 0 }, + { 11.122256f, 0.191536f, -7.928393f, 0 }, + { 9.040500f, 0.798466f, -6.001062f, 0 }, + { 8.956702f, 0.328005f, -1.649604f, 0 }, + { 9.064442f, 0.119710f, 0.561440f, 0 }, + { 9.356534f, 0.306458f, 0.186748f, 0 }, + { 10.399208f, -0.664391f, -0.585382f, 0 }, + { 11.281470f, -1.975215f, -2.223015f, 0 }, + { 10.011348f, -1.996763f, -4.955994f, 0 }, + { 9.003389f, -2.169145f, -6.757630f, 0 }, + { 8.583207f, -2.082954f, -5.573698f, 0 }, + { 8.798685f, -1.921346f, -2.810791f, 0 }, + { 8.974659f, -1.520317f, -1.250970f, 0 }, + { 8.078031f, -0.515950f, 0.366313f, 0 }, + { 6.692986f, 0.751779f, 2.220621f, 0 }, + { 6.210555f, 1.480813f, 1.197100f, 0 }, + { 7.131125f, 0.602141f, -2.041055f, 0 }, + { 8.007402f, 0.234632f, -4.835087f, 0 }, + { 8.462300f, 0.919373f, -5.451593f, 0 }, + { 7.928393f, 1.326387f, -4.395751f, 0 }, + { 6.871354f, 1.467645f, -2.835930f, 0 }, + { 6.029793f, 1.558624f, -0.976834f, 0 }, + { 5.135559f, 1.978806f, 0.028730f, 0 }, + { 7.839808f, 1.517923f, 0.440533f, 0 }, + { 11.483781f, 0.501585f, -0.684741f, 0 }, + { 9.314635f, 0.493205f, -3.245338f, 0 }, + { 8.585602f, 0.633266f, -4.395751f, 0 }, + { 9.229641f, 0.914584f, -4.349064f, 0 }, + { 9.064442f, 0.970848f, -3.658338f, 0 }, + { 9.977829f, 0.555454f, -2.989159f, 0 }, + { 9.810235f, 0.744596f, -3.434480f, 0 }, + { 9.325409f, 1.397016f, -3.568555f, 0 }, + { 9.496594f, 1.741781f, -3.239353f, 0 }, + { 10.398011f, 1.367088f, -3.130417f, 0 }, + { 10.730804f, 0.985213f, -2.704249f, 0 }, + { 10.894808f, 1.125274f, -1.823183f, 0 }, + { 11.997336f, 0.918176f, -2.120064f, 0 }, + { 12.749115f, 0.508767f, -3.248930f, 0 }, + { 12.022475f, 0.416591f, -3.471590f, 0 }, + { 10.839741f, 0.440533f, -5.136756f, 0 }, + { 10.629051f, 0.883460f, -8.376109f, 0 }, + { 11.104300f, 1.051054f, -8.720874f, 0 }, + { 10.903187f, 0.842758f, -5.995077f, 0 }, + { 11.470613f, 0.239420f, -2.959231f, 0 }, + { 11.871641f, -0.373495f, -0.988805f, 0 }, + { 9.727634f, -0.487220f, 1.842337f, 0 }, + { 6.479902f, -0.034716f, 3.007115f, 0 }, + { 4.198230f, 0.515950f, 3.420115f, 0 }, + { 2.959231f, 1.742978f, 3.507503f, 0 }, + { 3.488349f, 2.468420f, 2.369061f, 0 }, + { 5.433637f, 2.197876f, -2.054224f, 0 }, + { 6.564897f, 2.667139f, -4.945220f, 0 }, + { 7.331040f, 3.190272f, -2.327163f, 0 }, + { 10.497370f, 3.070562f, 0.073023f, 0 }, + { 10.967831f, 1.744175f, -2.159569f, 0 }, + { 10.575182f, 0.481234f, -3.937262f, 0 }, + { 10.111904f, 0.632069f, -2.493559f, 0 }, + { 9.317030f, 1.003170f, -0.973242f, 0 }, + { 8.687355f, 1.310825f, -0.208295f, 0 }, + { 8.713691f, 1.209071f, -0.918176f, 0 }, + { 8.810657f, 1.183932f, -2.063801f, 0 }, + { 8.763969f, 1.406592f, -2.553414f, 0 }, + { 8.019373f, 1.916557f, -2.993947f, 0 }, + { 7.505817f, 2.184708f, -3.209425f, 0 }, + { 7.550110f, 2.245760f, -2.833536f, 0 }, + { 7.843400f, 2.250548f, -2.468420f, 0 }, + { 8.210909f, 2.315192f, -2.410959f, 0 }, + { 8.468286f, 2.409762f, -3.126825f, 0 }, + { 8.376109f, 2.358287f, -3.925291f, 0 }, + { 8.769955f, 2.191890f, -3.524262f, 0 }, + { 9.360126f, 2.389412f, -3.094504f, 0 }, + { 10.235206f, 2.645591f, -4.356247f, 0 }, + { 10.369281f, 3.308784f, -5.960361f, 0 }, + { 9.583982f, 3.739741f, -6.137532f, 0 }, + { 9.226050f, 3.244141f, -4.029438f, 0 }, + { 9.249992f, 3.345895f, -1.376665f, 0 }, + { 9.409206f, 3.989934f, 0.690727f, 0 }, + { 9.866499f, 4.723757f, 1.246181f, 0 }, + { 11.179717f, 3.829523f, -0.788889f, 0 }, + { 12.655742f, 2.403777f, -3.202243f, 0 }, + { 12.897555f, 0.988805f, -4.781218f, 0 }, + { 11.311399f, 0.092177f, -4.595667f, 0 }, + { 8.464694f, 0.628478f, -2.196679f, 0 }, + { 6.581656f, 1.258152f, -0.107739f, 0 }, + { 6.366178f, 1.856702f, 0.781706f, 0 }, + { 6.930012f, 1.881841f, 0.209493f, 0 }, + { 7.776362f, 0.798466f, -0.858321f, 0 }, + { 8.432373f, -0.011971f, -1.729810f, 0 }, + { 8.836992f, -0.251391f, -2.906559f, 0 }, + { 8.950717f, -0.007183f, -3.992329f, 0 }, + { 8.702917f, 0.239420f, -3.590103f, 0 }, + { 8.307875f, 0.493205f, -2.304418f, 0 }, + { 7.890086f, 1.065419f, -1.701079f, 0 }, + { 7.886495f, 1.557427f, -1.941696f, 0 }, + { 8.344984f, 1.771708f, -2.163160f, 0 }, + { 8.882483f, 2.037464f, -2.286461f, 0 }, + { 8.996207f, 2.401383f, -2.816776f, 0 }, + { 9.011769f, 2.549823f, -3.086124f, 0 }, + { 9.118311f, 2.431310f, -3.043028f, 0 }, + { 9.022543f, 2.371455f, -3.132811f, 0 }, + { 8.949520f, 2.278081f, -3.059788f, 0 }, + { 9.159013f, 2.190693f, -2.688687f, 0 }, + { 9.372096f, 2.074574f, -2.284067f, 0 }, + { 9.406812f, 2.118867f, -1.695094f, 0 }, + { 9.403221f, 2.088940f, -1.282094f, 0 }, + { 9.539690f, 2.345119f, -1.448491f, 0 }, + { 9.548070f, 2.826353f, -2.069786f, 0 }, + { 9.326607f, 3.178301f, -2.748542f, 0 }, + { 9.295482f, 3.290828f, -2.521093f, 0 }, + { 10.214854f, 3.190272f, -2.946063f, 0 }, + { 11.439487f, 3.104080f, -4.429270f, 0 }, + { 12.179296f, 2.619255f, -5.501872f, 0 }, + { 12.650953f, 1.750160f, -4.109644f, 0 }, + { 11.921919f, 0.913387f, -1.047463f, 0 }, + { 10.370478f, 0.256179f, 0.997184f, 0 }, + { 9.369702f, -0.351947f, 2.355893f, 0 }, + { 7.855371f, -0.039504f, 2.788046f, 0 }, + { 6.522998f, 0.343568f, 1.185129f, 0 }, + { 6.356601f, 0.954089f, -0.673967f, 0 }, + { 6.839033f, 1.606508f, -1.197100f, 0 }, + { 8.453920f, 1.814804f, -0.993593f, 0 }, + { 9.556450f, 1.889024f, -0.434547f, 0 }, + { 9.387658f, 2.385820f, -0.804451f, 0 }, + { 9.039303f, 2.761710f, -1.951273f, 0 }, + { 8.828612f, 2.579751f, -2.316389f, 0 }, + { 8.649048f, 2.282870f, -2.097319f, 0 }, + { 8.495819f, 2.323571f, -1.842337f, 0 }, + { 8.274356f, 2.814382f, -1.483207f, 0 }, + { 8.022964f, 3.214214f, -1.207874f, 0 }, + { 7.991840f, 3.224988f, -1.155202f, 0 }, + { 8.200135f, 3.023875f, -1.380256f, 0 }, + { 8.465892f, 2.995144f, -1.857899f, 0 }, + { 8.471877f, 3.099292f, -2.273293f, 0 }, + { 8.388080f, 3.125628f, -2.305615f, 0 }, + { 8.433570f, 3.105278f, -2.064998f, 0 }, + { 8.494622f, 3.213017f, -1.946485f, 0 }, + { 8.669398f, 3.210622f, -2.211044f, 0 }, + { 8.773546f, 3.099292f, -2.907756f, 0 }, + { 8.705312f, 3.130417f, -3.394976f, 0 }, + { 8.570039f, 3.405750f, -1.821986f, 0 }, + { 8.820233f, 3.371034f, -1.948879f, 0 }, + { 9.376884f, 3.290828f, -4.145557f, 0 }, + { 9.933537f, 3.511094f, -5.504266f, 0 }, + { 10.266330f, 3.343500f, -4.606441f, 0 }, + { 10.199292f, 3.286040f, -2.880223f, 0 }, + { 10.279498f, 3.457225f, -2.645591f, 0 }, + { 10.939100f, 3.313573f, -3.344697f, 0 }, + { 11.617856f, 1.872265f, -3.330332f, 0 }, + { 11.283865f, 0.302866f, -2.816776f, 0 }, + { 8.844175f, 0.647631f, -0.970848f, 0 }, + { 6.621161f, 1.608902f, 0.426168f, 0 }, + { 6.217738f, 2.564188f, 0.738611f, 0 }, + { 6.973108f, 3.286040f, -0.644040f, 0 }, + { 8.750801f, 2.173934f, -1.210268f, 0 }, + { 10.366886f, 0.428562f, -1.189917f, 0 }, + { 10.743973f, 0.110133f, -1.969230f, 0 }, + { 10.110707f, 0.746990f, -2.530669f, 0 }, + { 8.839387f, 1.630450f, -2.548626f, 0 }, + { 7.795516f, 2.329557f, -2.692278f, 0 }, + { 7.451948f, 2.700658f, -2.602495f, 0 }, + { 7.606374f, 2.907756f, -2.309206f, 0 }, + { 8.056483f, 3.023875f, -2.039858f, 0 }, + { 8.440752f, 3.139993f, -1.945288f, 0 }, + { 8.403643f, 3.387793f, -1.736992f, 0 }, + { 8.280341f, 3.640381f, -1.544259f, 0 }, + { 8.359349f, 3.767274f, -1.551442f, 0 }, + { 8.535323f, 3.780442f, -1.817198f, 0 }, + { 8.860934f, 3.679886f, -2.035070f, 0 }, + { 9.190137f, 3.599680f, -2.019508f, 0 }, + { 9.193728f, 3.535036f, -2.249351f, 0 }, + { 8.997404f, 3.507503f, -2.041055f, 0 }, + { 8.646653f, 3.554190f, -1.903389f, 0 }, + { 8.368926f, 3.604468f, -1.539471f, 0 }, + { 8.249216f, 3.761288f, -1.181538f, 0 }, + { 8.482651f, 3.960007f, -1.823183f, 0 }, + { 8.767561f, 3.967190f, -2.565385f, 0 }, + { 8.783123f, 3.831917f, -3.102883f, 0 }, + { 8.614332f, 3.810369f, -3.654746f, 0 }, + { 8.664610f, 3.786427f, -4.390963f, 0 }, + { 8.987827f, 4.016271f, -5.419272f, 0 }, + { 9.724044f, 4.271253f, -6.058523f, 0 }, + { 10.873260f, 3.715799f, -6.293155f, 0 }, + { 12.078739f, 3.123234f, -5.191823f, 0 }, + { 12.312174f, 2.310403f, -2.348710f, 0 }, + { 11.079161f, 1.405395f, 1.435323f, 0 }, + { 9.323015f, 1.150413f, 2.363075f, 0 }, + { 7.666229f, 0.990002f, 1.956061f, 0 }, + { 6.414062f, 1.784876f, 2.576159f, 0 }, + { 5.781993f, 3.196257f, 2.535458f, 0 }, + { 6.141123f, 3.886984f, 0.312443f, 0 }, + { 7.559687f, 3.445254f, -1.547850f, 0 }, + { 9.400826f, 2.853886f, -1.867476f, 0 }, + { 9.509763f, 3.022678f, -3.046620f, 0 }, + { 8.577222f, 3.954021f, -4.252100f, 0 }, + { 8.172602f, 3.744529f, -3.657140f, 0 }, + { 8.269567f, 3.207031f, -2.509122f, 0 }, + { 8.135491f, 3.442860f, -1.326387f, 0 }, + { 7.990643f, 3.718193f, -0.969651f, 0 }, + { 8.020570f, 3.763683f, -1.307233f, 0 }, + { 8.246822f, 3.590103f, -1.707065f, 0 }, + { 8.331817f, 3.252521f, -1.964441f, 0 }, + { 8.212107f, 2.896982f, -2.375046f, 0 }, + { 8.174996f, 2.774878f, -2.712629f, 0 }, + { 8.511381f, 2.673124f, -2.576159f, 0 }, + { 8.957899f, 2.570174f, -2.475603f, 0 }, + { 9.176969f, 2.637211f, -2.371455f, 0 }, + { 9.011769f, 2.729388f, -2.279279f, 0 }, + { 8.756786f, 2.636014f, -2.651577f, 0 }, + { 8.678975f, 2.534261f, -3.602074f, 0 }, + { 8.603558f, 2.598904f, -3.883393f, 0 }, + { 8.331817f, 2.859872f, -3.414129f, 0 }, + { 8.225274f, 3.234564f, -3.913320f, 0 }, + { 8.254004f, 3.434480f, -4.692632f, 0 }, + { 7.493846f, 3.796004f, -4.635171f, 0 }, + { 7.006627f, 4.036621f, -3.604468f, 0 }, + { 6.774389f, 4.210201f, -2.053027f, 0 }, + { 7.364560f, 4.368218f, -1.525105f, 0 }, + { 9.597151f, 3.620030f, -1.552639f, 0 }, + { 11.402378f, 1.831563f, -2.977188f, 0 }, + { 12.288232f, 0.525527f, -4.697421f, 0 }, + { 11.234784f, 0.181959f, -4.031833f, 0 }, + { 9.607924f, 0.386663f, -1.760934f, 0 }, + { 9.303862f, 0.387860f, -0.899022f, 0 }, + { 9.464272f, 0.622492f, -1.006761f, 0 }, + { 9.558844f, 1.036689f, -1.015141f, 0 }, + { 9.920368f, 0.829590f, -1.874659f, 0 }, + { 10.107116f, 0.355539f, -3.119643f, 0 }, + { 9.897623f, -0.099359f, -4.199427f, 0 }, + { 9.185349f, -0.276530f, -4.827904f, 0 }, + { 8.003811f, 0.396240f, -4.807554f, 0 }, + { 7.156264f, 0.701501f, -5.153516f, 0 }, + { 7.101197f, 0.053870f, -4.508279f, 0 }, + { 7.503423f, -0.792480f, -3.005918f, 0 }, + { 8.105564f, -1.297656f, -1.985989f, 0 }, + { 8.426387f, -1.464053f, -1.731007f, 0 }, + { 8.543703f, -1.358709f, -1.970427f, 0 }, + { 8.645456f, -1.344343f, -2.333148f, 0 }, + { 8.863329f, -1.558624f, -2.579751f, 0 }, + { 8.951914f, -1.918951f, -3.125628f, 0 }, + { 8.690947f, -1.860294f, -3.743332f, 0 }, + { 8.432373f, -1.956061f, -4.167105f, 0 }, + { 8.066060f, -2.053027f, -4.120419f, 0 }, + { 7.721295f, -2.195482f, -3.816355f, 0 }, + { 8.643063f, -2.871843f, -3.706222f, 0 }, + { 9.257174f, -3.336318f, -3.749317f, 0 }, + { 8.542506f, -3.499123f, -4.060563f, 0 }, + { 7.796712f, -4.046198f, -3.117249f, 0 }, + { 9.125494f, -4.362233f, -1.403001f, 0 }, + { 10.022121f, -4.328714f, 0.181959f, 0 }, + { 9.467864f, -4.274844f, 0.749385f, 0 }, + { 8.961491f, -3.708616f, -0.160411f, 0 }, + { 9.466667f, -3.045423f, -1.674743f, 0 }, + { 10.119086f, -2.406171f, -2.686292f, 0 }, + { 10.562014f, -1.898601f, -3.098095f, 0 }, + { 10.864880f, -1.751357f, -2.885011f, 0 }, + { 11.161760f, -1.505952f, -2.561794f, 0 }, + { 11.179717f, -1.201888f, -3.112460f, 0 }, + { 10.089159f, -1.221042f, -4.156332f, 0 }, + { 7.001838f, -0.794874f, -3.333924f, 0 }, + { 5.855016f, -0.556652f, -2.070983f, 0 }, + { 5.731715f, -0.816422f, -1.926134f, 0 }, + { 5.664677f, -0.999579f, -2.529472f, 0 }, + { 5.078098f, -0.949300f, -3.558978f, 0 }, + { 4.414905f, -0.963666f, -4.428073f, 0 }, + { 4.523841f, -1.501163f, -5.098449f, 0 }, + { 4.826707f, -2.104502f, -5.495886f, 0 }, + { 5.408498f, -2.646788f, -4.911702f, 0 }, + { 7.024583f, -3.204637f, -3.964795f, 0 }, + { 8.048103f, -3.580526f, -2.898179f, 0 }, + { 8.647851f, -4.011482f, -2.421733f, 0 }, + { 8.653836f, -3.981555f, -2.619255f, 0 }, + { 8.593981f, -3.761288f, -2.304418f, 0 }, + { 9.291890f, -3.605665f, -1.768117f, 0 }, + { 10.421953f, -3.653549f, -2.403777f, 0 }, + { 10.747564f, -4.040213f, -3.653549f, 0 }, + { 11.080358f, -4.187456f, -3.568555f, 0 }, + { 11.591519f, -4.479548f, -3.045423f, 0 }, + { 12.521667f, -4.991907f, -3.197454f, 0 }, + { 12.606661f, -5.301956f, -3.508700f, 0 }, + { 12.215209f, -5.559332f, -3.132811f, 0 }, + { 11.514905f, -5.664677f, -2.713826f, 0 }, + { 10.378858f, -5.208582f, -2.182313f, 0 }, + { 9.202108f, -4.546586f, -1.216254f, 0 }, + { 8.280341f, -4.206610f, -0.418985f, 0 }, + { 7.450751f, -4.313151f, 0.014365f, 0 }, + { 7.369348f, -4.450818f, 0.191536f, 0 }, + { 7.760799f, -4.636368f, 0.500388f, 0 }, + { 8.317451f, -4.886562f, 0.723048f, 0 }, + { 9.074018f, -4.566936f, 1.207874f, 0 }, + { 9.854527f, -4.408919f, 1.930922f, 0 }, + { 9.587574f, -3.520671f, 2.163160f, 0 }, + { 7.569263f, -1.774102f, 2.106896f, 0 }, + { 6.695381f, -1.079784f, 3.076547f, 0 }, + { 6.536166f, -1.090558f, 2.916136f, 0 }, + { 7.067678f, -1.138442f, 1.533485f, 0 }, + { 8.107959f, -0.973242f, -2.732979f, 0 }, + { 9.166195f, -1.021126f, -7.004232f, 0 }, + { 9.587574f, -1.686714f, -7.388502f, 0 }, + { 9.416389f, -1.589749f, -5.742489f, 0 }, + { 8.761575f, -1.954864f, -2.201467f, 0 }, + { 8.656230f, -2.102108f, -0.766144f, 0 }, + { 8.858541f, -2.230197f, -0.316034f, 0 }, + { 9.175772f, -2.531867f, 0.506373f, 0 }, + { 9.725241f, -2.759315f, 1.114500f, 0 }, + { 10.110707f, -2.782060f, 0.573411f, 0 }, + { 9.934733f, -2.370258f, 0.377087f, 0 }, + { 9.617501f, -2.214635f, -0.361524f, 0 }, + { 9.494201f, -2.189496f, -1.580172f, 0 }, + { 9.704890f, -2.115276f, -2.446872f, 0 }, + { 9.459484f, -2.057815f, -2.561794f, 0 }, + { 9.435542f, -2.030282f, -2.092531f, 0 }, + { 9.346957f, -1.996763f, -1.692699f, 0 }, + { 9.319424f, -2.132035f, -1.470039f, 0 }, + { 9.446317f, -2.430113f, -1.489192f, 0 }, + { 9.703692f, -2.687490f, -1.851914f, 0 }, + { 9.847345f, -2.719811f, -2.027887f, 0 }, + { 9.732423f, -2.558203f, -2.355893f, 0 }, + { 9.549267f, -2.409762f, -2.292447f, 0 }, + { 9.601939f, -2.473209f, -1.733401f, 0 }, + { 9.971844f, -2.697066f, -1.748963f, 0 }, + { 10.626657f, -3.017889f, -1.353920f, 0 }, + { 11.123453f, -3.641578f, -1.219845f, 0 }, + { 11.133030f, -4.373006f, -1.596931f, 0 }, + { 10.457866f, -4.733334f, -2.841915f, 0 }, + { 9.214079f, -4.768049f, -3.096898f, 0 }, + { 7.812275f, -4.437650f, -1.672349f, 0 }, + { 6.750447f, -4.045001f, 0.490811f, 0 }, + { 6.290761f, -3.907335f, 1.800438f, 0 }, + { 6.235694f, -4.234143f, 1.041477f, 0 }, + { 7.199359f, -4.850649f, -2.310403f, 0 }, + { 8.538915f, -4.039015f, -3.203440f, 0 }, + { 9.186545f, -2.800017f, -4.298786f, 0 }, + { 9.197320f, -2.372652f, -4.565740f, 0 }, + { 9.024938f, -1.969230f, -4.732136f, 0 }, + { 8.607149f, -1.534682f, -4.993104f, 0 }, + { 7.957124f, -1.502361f, -4.132390f, 0 }, + { 7.705733f, -1.678334f, -2.855083f, 0 }, + { 7.752420f, -1.753752f, -1.508346f, 0 }, + { 8.034935f, -1.557427f, -0.313640f, 0 }, + { 7.546519f, -1.106120f, 0.447715f, 0 }, + { 6.752841f, -0.906205f, 1.265335f, 0 }, + { 6.906070f, -1.195903f, 1.750160f, 0 }, + { 7.101197f, -1.496375f, 1.381453f, 0 }, + { 7.223301f, -1.824380f, 0.837970f, 0 }, + { 7.374136f, -2.153583f, 0.274136f, 0 }, + { 7.323858f, -2.404974f, -0.490811f, 0 }, + { 7.491452f, -2.598904f, -1.482010f, 0 }, + { 7.899663f, -2.819170f, -2.953246f, 0 }, + { 8.497016f, -3.117249f, -4.119221f, 0 }, + { 9.168590f, -3.533839f, -6.064509f, 0 }, + { 9.417586f, -3.632001f, -6.847412f, 0 }, + { 9.738409f, -3.272871f, -6.969516f, 0 }, + { 9.919171f, -2.809594f, -6.331462f, 0 }, + { 9.987406f, -2.677913f, -4.316743f, 0 }, + { 9.593559f, -2.616861f, -3.142388f, 0 }, + { 9.325409f, -2.674321f, -3.335121f, 0 }, + { 9.167392f, -2.829944f, -3.014298f, 0 }, + { 9.194925f, -3.105278f, -2.008734f, 0 }, + { 9.613911f, -3.459619f, -2.535458f, 0 }, + { 10.720031f, -4.271253f, -3.035846f, 0 }, + { 11.372450f, -5.182246f, -2.151189f, 0 }, + { 10.842135f, -5.142742f, -0.895431f, 0 }, + { 9.220064f, -4.575316f, 0.703895f, 0 }, + { 7.491452f, -4.206610f, 1.714247f, 0 }, + { 6.665453f, -4.437650f, 2.238577f, 0 }, + { 7.479481f, -4.993104f, 3.179498f, 0 }, + { 8.750801f, -5.791570f, 2.965217f, 0 }, + { 9.563632f, -6.527786f, 1.649604f, 0 }, + { 9.215276f, -6.408076f, 0.693121f, 0 }, + { 8.240837f, -5.831074f, -0.050278f, 0 }, + { 7.832625f, -5.178655f, -0.134075f, 0 }, + { 6.849806f, -4.006694f, 0.402226f, 0 }, + { 6.220132f, -3.184286f, -0.293290f, 0 }, + { 6.138729f, -3.074153f, 0.524330f, 0 }, + { 7.079649f, -3.414129f, -1.236604f, 0 }, + { 7.497437f, -3.640381f, -2.803608f, 0 }, + { 7.586023f, -3.466802f, -3.118446f, 0 }, + { 7.608768f, -3.038240f, -3.612848f, 0 }, + { 7.706930f, -2.804805f, -3.219002f, 0 }, + { 7.848188f, -2.905362f, -3.991132f, 0 }, + { 8.244428f, -3.093307f, -4.150346f, 0 }, + { 8.699326f, -2.829944f, -4.168303f, 0 }, + { 8.613134f, -2.391806f, -3.326741f, 0 }, + { 8.754393f, -2.479194f, -2.382229f, 0 }, + { 9.027331f, -2.700658f, -2.299629f, 0 }, + { 9.117114f, -2.700658f, -2.309206f, 0 }, + { 9.198517f, -2.815579f, -1.631647f, 0 }, + { 9.265554f, -2.861069f, -0.093374f, 0 }, + { 9.057259f, -2.791637f, 0.238223f, 0 }, + { 9.398433f, -2.922121f, 0.565031f, 0 }, + { 9.453499f, -2.892194f, 0.474052f, 0 }, + { 9.267948f, -2.750936f, 0.118513f, 0 }, + { 9.593559f, -2.905362f, 0.064643f, 0 }, + { 9.916777f, -3.290828f, 0.547075f, 0 }, + { 9.968252f, -3.573344f, 0.733822f, 0 }, + { 10.299849f, -4.295195f, -2.195482f, 0 }, + { 10.365689f, -5.293576f, -3.512291f, 0 }, + { 10.035290f, -6.093239f, -3.232170f, 0 }, + { 9.386461f, -5.595245f, -0.808043f, 0 }, + { 7.836217f, -5.037397f, -1.355117f, 0 }, + { 7.586023f, -4.918884f, -0.707486f, 0 }, + { 8.003811f, -5.001484f, -1.582566f, 0 }, + { 8.651442f, -5.248086f, -3.233367f, 0 }, + { 8.804670f, -4.791991f, -2.944866f, 0 }, + { 7.832625f, -3.906137f, -2.813185f, 0 }, + { 6.901282f, -3.084927f, -2.161963f, 0 }, + { 6.792346f, -2.578553f, -1.455674f, 0 }, + { 7.048525f, -2.341528f, -1.499966f, 0 }, + { 7.358574f, -2.551020f, -1.587355f, 0 }, + { 7.480678f, -2.724600f, -2.063801f, 0 }, + { 7.368151f, -2.518698f, -1.176749f, 0 }, + { 7.399275f, -2.738965f, -1.344343f, 0 }, + { 7.823049f, -2.987962f, -1.318007f, 0 }, + { 7.832625f, -2.798820f, -1.460462f, 0 }, + { 7.547716f, -2.303221f, -1.837548f, 0 }, + { 7.366954f, -2.001551f, -2.175131f, 0 }, + { 7.653060f, -2.163160f, -2.703052f, 0 }, + { 7.995431f, -2.481588f, -3.134008f, 0 }, + { 8.619121f, -2.681504f, -3.325544f, 0 }, + { 8.935155f, -2.726994f, -4.122813f, 0 }, + { 9.391250f, -2.748542f, -4.546586f, 0 }, + { 9.763548f, -2.730585f, -4.378992f, 0 }, + { 10.044867f, -2.233789f, -5.177458f, 0 }, + { 10.336959f, -2.200270f, -5.360614f, 0 }, + { 10.339353f, -2.786849f, -4.867409f, 0 }, + { 10.545254f, -3.339909f, -4.352656f, 0 }, + { 10.761930f, -3.875013f, -3.894166f, 0 }, + { 10.625460f, -4.471169f, -3.217805f, 0 }, + { 9.902411f, -4.558557f, -2.613269f, 0 }, + { 8.913607f, -3.739741f, -1.416169f, 0 }, + { 8.100776f, -3.011904f, 1.066616f, 0 }, + { 7.064087f, -3.003524f, 3.325544f, 0 }, + { 6.754038f, -3.834311f, 5.176260f, 0 }, + { 7.175417f, -4.786006f, 7.241258f, 0 }, + { 7.382516f, -5.288788f, 6.618766f, 0 }, + { 8.252808f, -5.669466f, 4.605244f, 0 }, + { 9.193728f, -6.020216f, 2.553414f, 0 }, + { 9.549267f, -5.853819f, 0.247800f, 0 }, + { 8.914804f, -5.385753f, -0.512359f, 0 }, + { 8.572433f, -4.914096f, -1.824380f, 0 }, + { 8.161828f, -3.992329f, -3.460816f, 0 }, + { 7.699748f, -2.631226f, -3.369837f, 0 }, + { 7.472299f, -2.184708f, -1.789665f, 0 }, + { 7.617147f, -2.147598f, -1.602917f, 0 }, + { 7.779953f, -1.984792f, -1.983595f, 0 }, + { 8.039723f, -1.725021f, -2.574962f, 0 }, + { 8.286326f, -1.487995f, -2.779666f, 0 }, + { 8.273158f, -1.437717f, -2.838324f, 0 }, + { 8.219289f, -1.659181f, -2.960428f, 0 }, + { 8.444344f, -1.786073f, -2.853886f, 0 }, + { 8.597572f, -1.544259f, -2.703052f, 0 }, + { 8.681370f, -1.361103f, -2.530669f, 0 }, + { 8.962687f, -1.437717f, -2.333148f, 0 }, + { 9.131479f, -1.589749f, -1.939302f, 0 }, + { 9.050076f, -1.765723f, -1.616085f, 0 }, + { 9.041697f, -1.929725f, -1.650801f, 0 }, + { 9.260766f, -2.108093f, -1.804030f, 0 }, + { 9.653415f, -2.413354f, -2.396594f, 0 }, + { 9.742000f, -2.288855f, -1.392227f, 0 }, + { 9.372096f, -1.877053f, -0.934935f, 0 }, + { 9.860513f, -2.138021f, -1.429337f, 0 }, + { 10.694892f, -2.595313f, -1.260546f, 0 }, + { 11.317384f, -2.925713f, -0.727837f, 0 }, + { 11.739960f, -3.251324f, -0.887051f, 0 }, + { 11.595111f, -3.508700f, -2.597707f, 0 }, + { 10.346536f, -4.009088f, -4.683055f, 0 }, + { 9.039303f, -4.310757f, -4.425679f, 0 }, + { 8.474271f, -4.114433f, -2.164357f, 0 }, + { 8.452724f, -3.538628f, -0.290895f, 0 }, + { 8.659822f, -3.467999f, 0.682347f, 0 }, + { 8.937549f, -3.530248f, 0.061052f, 0 }, + { 8.566448f, -2.431310f, -0.852335f, 0 }, + { 8.067257f, -1.312022f, -1.903389f, 0 }, + { 8.377306f, -1.103726f, -1.419761f, 0 }, + { 8.070848f, -1.212662f, -2.258928f, 0 }, + { 8.067257f, -1.584960f, -2.608481f, 0 }, + { 7.800304f, -1.910572f, -3.106475f, 0 }, + { 7.347800f, -2.184708f, -3.384202f, 0 }, + { 7.348997f, -2.264913f, -2.862266f, 0 }, + { 7.765588f, -2.091334f, -1.757343f, 0 }, + { 7.970292f, -1.810015f, -1.043871f, 0 }, + { 8.240837f, -1.757343f, -0.768538f, 0 }, + { 8.485045f, -1.801636f, -0.395043f, 0 }, + { 8.564054f, -1.716641f, -0.083797f, 0 }, + { 8.844175f, -1.758540f, -0.086191f, 0 }, + { 9.075215f, -1.959653f, -0.597353f, 0 }, + { 9.182955f, -2.019508f, -1.362300f, 0 }, + { 9.318227f, -2.041055f, -1.719036f, 0 }, + { 9.363716f, -2.062603f, -2.341528f, 0 }, + { 9.173378f, -1.891418f, -2.298432f, 0 }, + { 9.066835f, -1.715444f, -2.759315f, 0 }, + { 9.272737f, -1.723824f, -2.409762f, 0 }, + { 9.367308f, -1.574187f, -1.908177f, 0 }, + { 9.205699f, -1.302445f, -1.863885f, 0 }, + { 9.190137f, -1.492784f, -1.729810f, 0 }, + { 9.236824f, -1.769314f, -1.782482f, 0 }, + { 9.534902f, -2.070983f, -2.035070f, 0 }, + { 10.097539f, -2.543838f, -1.827972f, 0 }, + { 10.522510f, -2.759315f, -2.231395f, 0 }, + { 10.928327f, -2.730585f, -2.249351f, 0 }, + { 11.123453f, -2.719811f, -1.364694f, 0 }, + { 10.806222f, -2.395397f, -0.016759f, 0 }, + { 9.789884f, -1.911769f, 0.586579f, 0 }, + { 8.809459f, -2.251745f, 0.070629f, 0 }, + { 8.212107f, -3.077744f, 0.161609f, 0 }, + { 8.462300f, -3.548204f, 1.023521f, 0 }, + { 8.960294f, -3.872619f, 1.528697f, 0 }, + { 9.425965f, -4.192245f, 1.470039f, 0 }, + { 9.999376f, -4.453212f, 1.244984f, 0 }, + { 9.986209f, -4.420890f, 0.696712f, 0 }, + { 9.368505f, -4.025847f, 0.286107f, 0 }, + { 8.735239f, -3.618833f, 0.021548f, 0 }, + { 8.062469f, -3.245338f, -0.644040f, 0 }, + { 7.747632f, -2.964020f, -1.055842f, 0 }, + { 7.532154f, -2.788046f, -0.582988f, 0 }, + { 7.694959f, -2.956837f, -0.339976f, 0 }, + { 8.044512f, -3.439268f, -0.831985f, 0 }, + { 8.398854f, -3.869027f, -1.472433f, 0 }, + { 8.674187f, -3.954021f, -1.877053f, 0 }, + { 8.778335f, -3.669111f, -1.696291f, 0 }, + { 8.744816f, -3.325544f, -2.801214f, 0 }, + { 9.170983f, -3.161541f, -2.974794f, 0 }, + { 8.848964f, -2.875434f, -3.779245f, 0 }, + { 8.207318f, -2.503136f, -4.129995f, 0 }, + { 8.026556f, -2.263716f, -4.618412f, 0 }, + { 8.368926f, -2.215832f, -4.732136f, 0 }, + { 8.961491f, -2.413354f, -3.232170f, 0 }, + { 9.333789f, -2.713826f, -1.446097f, 0 }, + { 9.246401f, -2.952049f, -0.226252f, 0 }, + { 8.790305f, -2.959231f, 0.460884f, 0 }, + { 8.155843f, -2.730585f, 0.590170f, 0 }, + { 7.708127f, -2.560597f, 0.263362f, 0 }, + { 7.612359f, -2.658759f, 0.471657f, 0 }, + { 8.567645f, -3.356668f, 0.718260f, 0 }, + { 10.579970f, -4.683055f, 1.223436f, 0 }, + { 12.627011f, -5.783190f, 2.347513f, 0 }, + { 11.851291f, -5.154713f, 2.021902f, 0 }, + { 8.839387f, -3.144782f, -3.478773f, 0 }, + { 8.154645f, -3.208228f, -8.307875f, 0 }, + { 9.410403f, -4.708194f, -0.691924f, 0 }, + { 9.804249f, -4.711786f, 1.703473f, 0 }, + { 9.985011f, -4.288013f, -2.111685f, 0 }, + { 9.917974f, -3.863042f, -0.809240f, 0 }, + { 9.002192f, -3.196257f, -0.214281f, 0 }, + { 8.477862f, -2.410959f, -0.794874f, 0 }, + { 8.450329f, -1.956061f, -0.992396f, 0 }, + { 8.361744f, -1.842337f, -1.545456f, 0 }, + { 8.178588f, -1.766920f, -1.849520f, 0 }, + { 8.061272f, -1.640027f, -2.190693f, 0 }, + { 7.553701f, -1.369482f, -2.219424f, 0 }, + { 7.180206f, -1.359906f, -2.621649f, 0 }, + { 7.414838f, -1.776496f, -3.306390f, 0 }, + { 7.927197f, -1.954864f, -3.851071f, 0 }, + { 8.195347f, -1.989580f, -4.341882f, 0 }, + { 8.341393f, -2.115276f, -4.428073f, 0 }, + { 8.359349f, -2.343922f, -4.118024f, 0 }, + { 8.401248f, -2.454055f, -3.053802f, 0 }, + { 8.487439f, -2.311600f, -2.007537f, 0 }, + { 8.573630f, -2.114079f, -1.933317f, 0 }, + { 8.593981f, -2.120064f, -2.171540f, 0 }, + { 8.409628f, -2.209847f, -2.895785f, 0 }, + { 8.107959f, -2.146400f, -2.240971f, 0 }, + { 8.183376f, -1.910572f, -1.847125f, 0 }, + { 8.455117f, -1.956061f, -1.793256f, 0 }, + { 8.859737f, -2.144006f, -2.002748f, 0 }, + { 9.208094f, -2.382229f, -2.218226f, 0 }, + { 9.277525f, -2.410959f, -2.454055f, 0 }, + { 9.018951f, -2.202664f, -2.607284f, 0 }, + { 8.807065f, -1.917754f, -3.163935f, 0 }, + { 8.732844f, -1.766920f, -3.756500f, 0 }, + { 8.488636f, -1.750160f, -3.998314f, 0 }, + { 8.299495f, -1.744175f, -3.921700f, 0 }, + { 8.184573f, -1.738189f, -3.780442f, 0 }, + { 8.080425f, -1.723824f, -3.687068f, 0 }, + { 7.970292f, -1.810015f, -3.618833f, 0 }, + { 7.970292f, -1.811212f, -3.657140f, 0 }, + { 7.902057f, -1.886630f, -3.809172f, 0 }, + { 8.113944f, -2.105699f, -4.045001f, 0 }, + { 8.355759f, -2.325965f, -3.809172f, 0 }, + { 8.410825f, -2.215832f, -3.554190f, 0 }, + { 8.657428f, -2.017113f, -3.271674f, 0 }, + { 8.823824f, -2.086545f, -2.360681f, 0 }, + { 8.422796f, -2.122458f, -1.601720f, 0 }, + { 8.717282f, -1.810015f, -1.653195f, 0 }, + { 9.615108f, -1.516726f, -1.790862f, 0 }, + { 9.629473f, -1.593340f, -3.891772f, 0 }, + { 10.530889f, -2.082954f, -6.175839f, 0 }, + { 10.994166f, -2.302023f, -4.498702f, 0 }, + { 9.297876f, -1.614888f, -3.004721f, 0 }, + { 7.264003f, -0.905008f, -0.735019f, 0 }, + { 7.615951f, -1.219845f, 0.140061f, 0 }, + { 8.942337f, -1.484404f, -0.383072f, 0 }, + { 10.296257f, -2.246957f, -0.167594f, 0 }, + { 11.376041f, -2.970005f, 0.173579f, 0 }, + { 10.957057f, -2.890997f, -0.011971f, 0 }, + { 10.125072f, -2.902968f, -0.169988f, 0 }, + { 9.543282f, -2.770089f, -0.092177f, 0 }, + { 9.082398f, -2.452858f, 0.432153f, 0 }, + { 8.699326f, -1.927331f, 0.356736f, 0 }, + { 8.416810f, -1.535879f, 0.282516f, 0 }, + { 7.886495f, -0.933738f, -0.872686f, 0 }, + { 8.098382f, -0.636857f, 1.728612f, 0 }, + { 8.451527f, -0.509965f, 1.399410f, 0 }, + { 9.103946f, -0.675164f, 0.752976f, 0 }, + { 9.591166f, -0.895431f, 0.257377f, 0 }, + { 9.684539f, -0.997184f, -0.475249f, 0 }, + { 9.461879f, -0.949300f, -0.150835f, 0 }, + { 9.260766f, -0.992396f, -0.387860f, 0 }, + { 9.248795f, -1.278503f, -0.785298f, 0 }, + { 9.558844f, -1.503558f, -0.909796f, 0 }, + { 10.126269f, -1.493981f, -0.755370f, 0 }, + { 10.194504f, -1.428140f, -0.456095f, 0 }, + { 10.286680f, -1.380256f, -0.415394f, 0 }, + { 10.317805f, -1.411381f, -0.383072f, 0 }, + { 10.150211f, -1.398213f, -0.389058f, 0 }, + { 9.968252f, -1.315613f, -0.265756f, 0 }, + { 9.878469f, -1.361103f, -0.398634f, 0 }, + { 9.900018f, -1.498769f, -0.544681f, 0 }, + { 9.877273f, -1.466448f, -1.072602f, 0 }, + { 9.799460f, -1.371877f, -1.558624f, 0 }, + { 9.544478f, -1.285685f, -1.635239f, 0 }, + { 9.278723f, -1.120486f, -1.229422f, 0 }, + { 9.204502f, -1.103726f, -0.731428f, 0 }, + { 9.202108f, -1.182735f, -0.477643f, 0 }, + { 9.107537f, -1.255758f, 0.050278f, 0 }, + { 8.898045f, -1.216254f, 0.428562f, 0 }, + { 8.766363f, -1.130062f, 0.016759f, 0 }, + { 8.706509f, -1.060631f, -0.681150f, 0 }, + { 8.720874f, -1.039083f, -1.149216f, 0 }, + { 9.220064f, -1.296459f, -1.238999f, 0 }, + { 10.467443f, -1.696291f, -0.963666f, 0 }, + { 11.536453f, -1.877053f, -1.309627f, 0 }, + { 11.785450f, -1.964441f, -2.002748f, 0 }, + { 11.763902f, -2.772484f, -3.430889f, 0 }, + { 11.314989f, -3.549402f, -5.012258f, 0 }, + { 9.746788f, -3.913320f, -4.704603f, 0 }, + { 8.693340f, -4.775232f, -3.177104f, 0 }, + { 8.215697f, -5.501872f, -1.019929f, 0 }, + { 7.824246f, -5.450397f, 0.652420f, 0 }, + { 7.545321f, -4.419693f, 0.913387f, 0 }, + { 7.720098f, -3.350683f, -0.903811f, 0 }, + { 7.936773f, -2.221818f, -3.144782f, 0 }, + { 8.151054f, -1.693897f, -4.214989f, 0 }, + { 7.918817f, -1.904586f, -3.973175f, 0 }, + { 7.843400f, -2.130838f, -3.676294f, 0 }, + { 7.507014f, -2.142809f, -2.937684f, 0 }, + { 7.426809f, -2.203861f, -2.422930f, 0 }, + { 7.520183f, -2.273293f, -2.515107f, 0 }, + { 7.607571f, -2.073377f, -2.264913f, 0 }, + { 7.933182f, -1.736992f, -2.202664f, 0 }, + { 8.366532f, -1.519120f, -2.388215f, 0 }, + { 8.694537f, -1.306036f, -2.293644f, 0 }, + { 8.757984f, -1.061828f, -1.953667f, 0 }, + { 8.790305f, -1.007958f, -1.453279f, 0 }, + { 8.921987f, -1.209071f, -0.818816f, 0 }, + { 8.914804f, -1.312022f, -0.050278f, 0 }, + { 8.711297f, -1.246181f, 0.578199f, 0 }, + { 8.656230f, -1.249772f, 0.275333f, 0 }, + { 8.939943f, -1.387439f, -0.482431f, 0 }, + { 9.241612f, -1.586158f, -0.899022f, 0 }, + { 9.497791f, -1.592143f, -1.055842f, 0 }, + { 9.671371f, -1.361103f, -1.174355f, 0 }, + { 9.715664f, -1.000776f, -1.108515f, 0 }, + { 9.829389f, -0.665588f, -1.197100f, 0 }, + { 9.860513f, -0.462081f, -1.599326f, 0 }, + { 9.821009f, -0.490811f, -2.014719f, 0 }, + { 9.856922f, -0.694318f, -2.319980f, 0 }, + { 10.049655f, -1.024718f, -2.524684f, 0 }, + { 10.514130f, -1.493981f, -1.921346f, 0 }, + { 10.843332f, -1.666363f, -1.532288f, 0 }, + { 11.147395f, -1.837548f, -1.659181f, 0 }, + { 11.727989f, -2.455252f, -1.991974f, 0 }, + { 12.029658f, -3.106475f, -0.149638f, 0 }, + { 10.973816f, -3.138796f, 2.298432f, 0 }, + { 9.229641f, -2.894588f, 2.509122f, 0 }, + { 8.149857f, -2.712629f, 1.924937f, 0 }, + { 7.643484f, -3.005918f, 1.844731f, 0 }, + { 7.934379f, -3.333924f, 1.647210f, 0 }, + { 8.604755f, -3.669111f, 1.010352f, 0 }, + { 9.069230f, -3.952824f, 0.132878f, 0 }, + { 9.255978f, -3.986343f, -0.216675f, 0 }, + { 9.123099f, -3.824735f, 0.580594f, 0 }, + { 8.698129f, -3.511094f, 0.641646f, 0 }, + { 8.346182f, -3.187877f, 1.156399f, 0 }, + { 8.060075f, -2.959231f, 1.389833f, 0 }, + { 7.915226f, -2.890997f, 1.458068f, 0 }, + { 8.005008f, -3.084927f, 1.079784f, 0 }, + { 7.953533f, -3.286040f, -0.043096f, 0 }, + { 8.371321f, -3.442860f, -2.762907f, 0 }, + { 8.309072f, -3.312376f, -4.205412f, 0 }, + { 8.149857f, -2.729388f, -3.705025f, 0 }, + { 7.922408f, -2.109290f, -3.027466f, 0 }, + { 7.881707f, -1.766920f, -3.349486f, 0 }, + { 7.872130f, -1.252167f, -4.329911f, 0 }, + { 8.201332f, -0.677559f, -3.967190f, 0 }, + { 8.599967f, -0.760159f, -3.022678f, 0 }, + { 8.785517f, -1.183932f, -2.488771f, 0 }, + { 9.235627f, -1.813607f, -1.701079f, 0 }, + { 9.714467f, -2.225409f, -0.598550f, 0 }, + { 9.683342f, -2.312797f, 0.444124f, 0 }, + { 9.585180f, -2.341528f, 0.554257f, 0 }, + { 9.459484f, -2.260125f, 0.377087f, 0 }, + { 9.476244f, -2.183511f, 0.265756f, 0 }, + { 9.752774f, -2.238577f, 0.000000f, 0 }, + { 10.631446f, -2.571371f, 0.381875f, 0 }, + { 11.678908f, -2.847901f, 1.048660f, 0 }, + { 11.956635f, -2.754527f, 1.926134f, 0 }, + { 11.179717f, -2.287658f, 1.643618f, 0 }, + { 9.974237f, -1.684320f, -0.531512f, 0 }, + { 9.130282f, -1.295262f, 0.968454f, 0 }, + { 8.774743f, -0.958877f, 1.218648f, 0 }, + { 8.473074f, -0.690727f, 1.455674f, 0 }, + { 8.464694f, -0.987608f, 0.141258f, 0 }, + { 9.175772f, -1.808818f, -3.797201f, 0 }, + { 10.365689f, -2.500742f, -9.164998f, 0 }, + { 10.453077f, -1.736992f, -3.761288f, 0 }, + { 9.622290f, -0.969651f, 0.599747f, 0 }, + { 8.990221f, -0.987608f, -4.253296f, 0 }, + { 9.148238f, -1.395819f, -3.313573f, 0 }, + { 8.651442f, -1.607705f, -1.174355f, 0 }, + { 7.994234f, -1.643618f, -0.547075f, 0 }, + { 7.620739f, -1.555033f, -0.290895f, 0 }, + { 7.387304f, -1.526303f, -0.118513f, 0 }, + { 7.176615f, -1.487995f, -0.105345f, 0 }, + { 7.222105f, -1.329978f, -0.065841f, 0 }, + { 7.553701f, -1.047463f, -0.521936f, 0 }, + { 7.945153f, -0.768538f, -0.612915f, 0 }, + { 8.386883f, -0.518344f, -0.260968f, 0 }, + { 8.783123f, -0.316034f, -0.155623f, 0 }, + { 9.229641f, -0.201113f, -0.294487f, 0 }, + { 9.470259f, -0.234632f, -0.818816f, 0 }, + { 9.665385f, -0.349553f, -0.980425f, 0 }, + { 9.798264f, -0.347159f, -0.960074f, 0 }, + { 9.586377f, -0.480037f, -1.021126f, 0 }, + { 9.587574f, -0.565031f, -0.806845f, 0 }, + { 9.617501f, -0.590170f, -0.330400f, 0 }, + { 9.609122f, -0.484826f, 0.050278f, 0 }, + { 9.691722f, -0.368707f, 0.562637f, 0 }, + { 9.884455f, -0.318429f, 1.296459f, 0 }, + { 9.916777f, -0.286107f, 1.254561f, 0 }, + { 10.086765f, -0.414197f, 0.605733f, 0 }, + { 10.672147f, -0.663193f, -0.056264f, 0 }, + { 11.547227f, -0.732625f, -1.089361f, 0 }, + { 12.741933f, -0.981622f, -1.647210f, 0 }, + { 13.311752f, -1.082178f, -2.098516f, 0 }, + { 12.233165f, -1.091755f, -1.170764f, 0 }, + { 9.745591f, -1.782482f, -1.260546f, 0 }, + { 6.040567f, -2.230197f, -1.437717f, 0 }, + { 5.289985f, -2.487574f, 0.503979f, 0 }, + { 6.959939f, -3.001130f, 3.216608f, 0 }, + { 8.799882f, -4.107250f, 4.249705f, 0 }, + { 9.941916f, -4.839875f, 4.045001f, 0 }, + { 9.454696f, -5.104434f, 3.131614f, 0 }, + { 8.892059f, -5.509054f, 1.795650f, 0 }, + { 7.688973f, -5.981909f, 0.606930f, 0 }, + { 7.673411f, -6.725308f, 0.831985f, 0 }, + { 8.412022f, -7.346603f, 0.257377f, 0 }, + { 8.220486f, -6.330265f, -0.105345f, 0 }, + { 7.586023f, -4.578907f, 0.073023f, 0 }, + { 7.775165f, -3.556584f, -1.447294f, 0 }, + { 8.498213f, -3.017889f, -4.783612f, 0 }, + { 8.949520f, -2.546232f, -4.119221f, 0 }, + { 8.564054f, -2.585736f, -1.102529f, 0 }, + { 7.644681f, -3.087321f, -0.313640f, 0 }, + { 8.555674f, -2.998736f, -0.015562f, 0 }, + { 9.572012f, -2.636014f, -0.071826f, 0 }, + { 8.997404f, -2.252942f, 1.218648f, 0 }, + { 7.629118f, -1.496375f, 0.980425f, 0 }, + { 7.766785f, -1.379059f, 1.416169f, 0 }, + { 8.343787f, -1.787270f, 1.284488f, 0 }, + { 8.748407f, -1.811212f, 0.870292f, 0 }, + { 9.136268f, -2.027887f, 1.131260f, 0 }, + { 9.615108f, -2.226606f, 1.380256f, 0 }, + { 10.127466f, -2.141612f, 0.444124f, 0 }, + { 10.301045f, -1.841140f, -0.062249f, 0 }, + { 10.163380f, -1.441308f, -2.595313f, 0 }, + { 9.898820f, -1.045068f, 1.595734f, 0 }, + { 9.682145f, -1.219845f, 2.372652f, 0 }, + { 10.177745f, -1.084573f, 1.078587f, 0 }, + { 11.180914f, -0.885854f, 0.757764f, 0 }, + { 12.489345f, -1.234210f, 2.330754f, 0 }, + { 13.658912f, -2.050632f, 2.142809f, 0 }, + { 13.063952f, -2.145203f, -0.293290f, 0 }, + { 9.628276f, -1.520317f, -2.880223f, 0 }, + { 6.360192f, -1.479616f, -3.886984f, 0 }, + { 5.079296f, -1.917754f, -2.090137f, 0 }, + { 6.202175f, -3.551796f, -0.855927f, 0 }, + { 7.969095f, -4.886562f, -0.975637f, 0 }, + { 11.101906f, -4.876986f, 0.645237f, 0 }, + { 11.766296f, -4.067746f, 0.531512f, 0 }, + { 10.569196f, -3.503912f, -0.644040f, 0 }, + { 10.237599f, -3.076547f, -0.447715f, 0 }, + { 9.629473f, -2.752133f, -0.193930f, 0 }, + { 8.340196f, -1.911769f, -0.742202f, 0 }, + { 7.272383f, -1.003170f, -1.213859f, 0 }, + { 6.823470f, -0.739808f, -1.057039f, 0 }, + { 7.050919f, -0.673967f, -0.834379f, 0 }, + { 7.595600f, -0.442927f, -0.532710f, 0 }, + { 8.060075f, -0.168791f, -0.527921f, 0 }, + { 8.573630f, 0.094571f, -1.207874f, 0 }, + { 8.899241f, 0.466869f, -1.898601f, 0 }, + { 9.060850f, 0.805648f, -1.408987f, 0 }, + { 9.222459f, 0.831985f, -0.489614f, 0 }, + { 9.290693f, 0.647631f, 0.099359f, 0 }, + { 8.882483f, 0.517147f, -0.029928f, 0 }, + { 8.628697f, 0.389058f, -0.817619f, 0 }, + { 9.248795f, 0.234632f, -1.046265f, 0 }, + { 9.690525f, -0.081403f, -1.126471f, 0 }, + { 10.071202f, -0.231040f, -0.632069f, 0 }, + { 10.299849f, -0.039504f, 0.476446f, 0 }, + { 10.965436f, 0.278924f, 0.920570f, 0 }, + { 11.526876f, 0.132878f, -0.335188f, 0 }, + { 11.572366f, 0.118513f, -0.995987f, 0 }, + { 12.087119f, 0.074220f, 0.064643f, 0 }, + { 14.025224f, -0.268150f, 0.715866f, 0 }, + { 13.812140f, -0.075417f, 2.175131f, 0 }, + { 10.393223f, 0.955286f, 4.447227f, 0 }, + { 5.740095f, 2.165554f, 5.378571f, 0 }, + { 2.682701f, 2.470814f, 4.266465f, 0 }, + { 2.267308f, 1.452082f, 2.970005f, 0 }, + { 5.784388f, -0.737414f, 2.178722f, 0 }, + { 8.700523f, -2.176328f, 0.712274f, 0 }, + { 8.658625f, -2.545035f, -1.139639f, 0 }, + { 8.984236f, -3.094504f, -0.059855f, 0 }, + { 10.274710f, -4.108448f, 2.123656f, 0 }, + { 11.112679f, -5.146333f, 2.748542f, 0 }, + { 12.083528f, -5.299562f, -0.111330f, 0 }, + { 11.859670f, -3.488349f, -2.300826f, 0 }, + { 10.259148f, -1.679531f, -0.063446f, 0 }, + { 8.656230f, -1.307233f, 1.798044f, 0 }, + { 7.996628f, -1.447294f, 1.592143f, 0 }, + { 8.142674f, -1.909375f, 0.881066f, 0 }, + { 8.282735f, -2.118867f, 0.978031f, 0 }, + { 8.382094f, -1.970427f, 1.248575f, 0 }, + { 8.866920f, -1.735795f, 0.386663f, 0 }, + { 9.623487f, -1.595734f, -0.269348f, 0 }, + { 9.806643f, -1.525105f, -0.345962f, 0 }, + { 9.609122f, -1.367088f, 0.299275f, 0 }, + { 9.714467f, -1.388636f, 1.693897f, 0 }, + { 9.576800f, -1.092952f, 2.396594f, 0 }, + { 9.296679f, -1.480813f, 2.565385f, 0 }, + { 9.323015f, -0.742202f, 2.341528f, 0 }, + { 9.384068f, -1.109712f, 1.960850f, 0 }, + { 9.868893f, -1.590946f, 2.421733f, 0 }, + { 10.109509f, -1.939302f, 2.955640f, 0 }, + { 9.973041f, -2.006340f, 3.324347f, 0 }, + { 9.859316f, -1.581369f, 3.942050f, 0 }, + { 9.793475f, -0.999579f, 3.818749f, 0 }, + { 8.820233f, -0.578199f, 2.885011f, 0 }, + { 7.404064f, -0.547075f, 1.671152f, 0 }, + { 6.730096f, -0.906205f, 0.976834f, 0 }, + { 8.153448f, -2.236183f, 0.503979f, 0 }, + { 9.867696f, -4.234143f, -0.254982f, 0 }, + { 7.984657f, -2.888602f, -1.261743f, 0 }, + { 9.093172f, -3.695448f, -2.171540f, 0 }, + { 9.166195f, -3.958810f, -1.365891f, 0 }, + { 9.483426f, -4.307166f, -1.432929f, 0 }, + { 9.564829f, -4.777626f, -2.000354f, 0 }, + { 9.548070f, -5.154713f, -2.106896f, 0 }, + { 9.175772f, -5.427651f, -1.608902f, 0 }, + { 8.127112f, -6.010639f, -1.829169f, 0 }, + { 8.129506f, -6.432018f, -1.207874f, 0 }, + { 7.790727f, -5.821497f, 0.189142f, 0 }, + { 7.073664f, -4.104856f, 2.110487f, 0 }, + { 7.091620f, -3.636790f, 1.745372f, 0 }, + { 7.758405f, -3.837903f, 0.458489f, 0 }, + { 8.832204f, -3.739741f, 0.357933f, 0 }, + { 9.786293f, -3.177104f, 0.160411f, 0 }, + { 9.618699f, -2.337936f, -0.683544f, 0 }, + { 9.124296f, -1.669955f, -0.986410f, 0 }, + { 8.815445f, -1.297656f, 0.074220f, 0 }, + { 8.663413f, -1.192312f, 0.752976f, 0 }, + { 8.526943f, -1.224633f, 0.095768f, 0 }, + { 8.671793f, -1.508346f, -0.044293f, 0 }, + { 9.041697f, -1.966835f, -1.302445f, 0 }, + { 9.320621f, -2.434901f, -0.640449f, 0 }, + { 9.319424f, -2.719811f, -0.933738f, 0 }, + { 9.598348f, -2.252942f, 0.096965f, 0 }, + { 9.272737f, -2.086545f, -0.335188f, 0 }, + { 9.397235f, -1.977609f, -0.829590f, 0 }, + { 9.585180f, -1.861491f, -0.963666f, 0 }, + { 9.563632f, -1.543062f, -1.194706f, 0 }, + { 9.265554f, -1.262941f, -1.276109f, 0 }, + { 8.941140f, -0.998381f, -1.148019f, 0 }, + { 8.711297f, -0.948103f, -1.108515f, 0 }, + { 8.803473f, -1.259349f, -1.027112f, 0 }, + { 9.475047f, -2.545035f, -0.591367f, 0 }, + { 10.941494f, -4.028242f, -0.374692f, 0 }, + { 11.295835f, -3.961204f, 0.489614f, 0 }, + { 9.697707f, -2.606087f, 1.587355f, 0 }, + { 8.414416f, -2.354696f, 1.309627f, 0 }, + { 8.408431f, -3.039437f, 0.598550f, 0 }, + { 8.759181f, -3.227382f, 0.460884f, 0 }, + { 9.191334f, -3.215411f, 0.717063f, 0 }, + { 9.106340f, -3.286040f, -1.228225f, 0 }, + { 9.215276f, -3.016692f, -0.532710f, 0 }, + { 9.226050f, -2.573765f, 1.215057f, 0 }, + { 9.278723f, -2.743753f, 0.444124f, 0 }, + { 9.779110f, -3.204637f, 1.349132f, 0 }, + { 9.914383f, -3.223790f, 1.940499f, 0 }, + { 9.907200f, -2.806002f, 1.668757f, 0 }, + { 10.375266f, -2.416945f, 2.098516f, 0 }, + { 11.027685f, -2.161963f, 2.414551f, 0 }, + { 11.603491f, -1.948879f, 2.486377f, 0 }, + { 11.531665f, -1.472433f, 2.813185f, 0 }, + { 10.983393f, -0.723048f, 2.525881f, 0 }, + { 9.938325f, 0.086191f, 2.130838f, 0 }, + { 8.816642f, 0.365116f, 2.731782f, 0 }, + { 10.491385f, 0.019154f, 3.318361f, 0 }, + { 10.913961f, -0.289698f, 4.115630f, 0 }, + { 9.964661f, 0.154426f, 4.765655f, 0 }, + { 7.896072f, 1.101332f, 4.291604f, 0 }, + { 7.783545f, 1.666363f, 4.158726f, 0 }, + { 8.256399f, 1.159990f, 4.963177f, 0 }, + { 8.441950f, 0.727837f, 5.633553f, 0 }, + { 7.973883f, 0.981622f, 5.418075f, 0 }, + { 7.131125f, 1.492784f, 4.759670f, 0 }, + { 7.067678f, 1.640027f, 4.987119f, 0 }, + { 7.246047f, 1.323993f, 5.380965f, 0 }, + { 7.788333f, 1.154004f, 5.783190f, 0 }, + { 8.256399f, 1.544259f, 6.980290f, 0 }, + { 8.076834f, 2.169145f, 7.654258f, 0 }, + { 7.649469f, 2.182313f, 7.368151f, 0 }, + { 7.462722f, 2.094925f, 6.817485f, 0 }, + { 6.956348f, 1.817198f, 6.009442f, 0 }, + { 6.156685f, 1.295262f, 5.595245f, 0 }, + { 5.171472f, 1.101332f, 5.043383f, 0 }, + { 4.614820f, 1.007958f, 4.921278f, 0 }, + { 4.693829f, 0.915781f, 5.402513f, 0 }, + { 4.863817f, 1.090558f, 5.463564f, 0 }, + { 4.620806f, 1.468842f, 5.919660f, 0 }, + { 4.741713f, 1.361103f, 6.609190f, 0 }, + { 4.047395f, 1.677137f, 6.482296f, 0 }, + { 4.094082f, 1.859096f, 6.527786f, 0 }, + { 4.349064f, 1.829169f, 6.309914f, 0 }, + { 4.477154f, 1.816001f, 6.591233f, 0 }, + { 4.513067f, 1.195903f, 7.651864f, 0 }, + { 5.130771f, 0.706289f, 8.787911f, 0 }, + { 5.143939f, 0.804451f, 8.456315f, 0 }, + { 4.619609f, 0.244208f, 7.931985f, 0 }, + { 3.963598f, -0.852335f, 8.146266f, 0 }, + { 4.163514f, -1.314416f, 8.972264f, 0 }, + { 4.601653f, -1.395819f, 9.185349f, 0 }, + { 4.854240f, -1.686714f, 8.943534f, 0 }, + { 4.542994f, -2.023099f, 8.414416f, 0 }, + { 3.835509f, -2.602495f, 8.085214f, 0 }, + { 2.978385f, -2.853886f, 8.039723f, 0 }, + { 2.686292f, -2.522290f, 7.716507f, 0 }, + { 2.425325f, -2.989159f, 10.263936f, 0 }, + { 1.680728f, -3.276463f, 12.568354f, 0 }, + { 1.449688f, -2.462435f, 9.834177f, 0 }, + { 1.904586f, -2.296038f, 8.819036f, 0 }, + { 2.072180f, -2.254139f, 9.337380f, 0 }, + { 2.197876f, -2.144006f, 9.494201f, 0 }, + { 2.105699f, -1.899798f, 9.169786f, 0 }, + { 1.717839f, -1.751357f, 9.096764f, 0 }, + { 1.574187f, -1.813607f, 9.458287f, 0 }, + { 1.502361f, -1.717839f, 9.576800f, 0 }, + { 1.379059f, -1.528697f, 9.473849f, 0 }, + { 1.168370f, -1.182735f, 9.206897f, 0 }, + { 1.060631f, -1.138442f, 9.701299f, 0 }, + { 0.893037f, -1.142033f, 10.007756f, 0 }, + { 0.729034f, -1.097741f, 10.362098f, 0 }, + { 0.847547f, -1.270123f, 11.415545f, 0 }, + { 0.700303f, -1.437717f, 11.802209f, 0 }, + { 0.657208f, -0.940921f, 10.297455f, 0 }, + { 0.820014f, -0.262165f, 8.865723f, 0 }, + { 1.120486f, -0.100556f, 9.303862f, 0 }, + { 1.000776f, -0.172382f, 10.194504f, 0 }, + { 0.691924f, 0.026336f, 8.984236f, 0 }, + { 0.712274f, 0.058658f, 8.265976f, 0 }, + { 0.530315f, -0.462081f, 10.773900f, 0 }, + { 0.463278f, -0.685938f, 10.289075f, 0 }, + { 0.442927f, -0.518344f, 7.893678f, 0 }, + { 0.445321f, -0.438139f, 7.972686f, 0 }, + { 0.378284f, -0.450110f, 8.655033f, 0 }, + { 0.043096f, 0.015562f, 8.980644f, 0 }, + { 0.220266f, 0.984016f, 9.639050f, 0 }, + { 0.154426f, 1.146822f, 9.488214f, 0 }, + { -0.119710f, 1.325190f, 9.168590f, 0 }, + { -0.130484f, 1.334767f, 9.746788f, 0 }, + { -0.025139f, 1.310825f, 10.338156f, 0 }, + { 0.028730f, 1.616085f, 9.712072f, 0 }, + { 0.044293f, 1.892615f, 8.583207f, 0 }, + { 0.069432f, 1.480813f, 8.564054f, 0 }, + { 0.033519f, 1.243787f, 8.768758f, 0 }, + { 0.373495f, 1.514332f, 8.633486f, 0 }, + { 0.353144f, 1.561018f, 8.446738f, 0 }, + { 0.129287f, 1.313219f, 8.616726f, 0 }, + { -0.028730f, 0.976834f, 9.123099f, 0 }, + { -0.076614f, 0.966060f, 9.351746f, 0 }, + { -0.161609f, 1.165975f, 8.965082f, 0 }, + { -0.343568f, 1.641224f, 8.194150f, 0 }, + { -0.442927f, 1.661575f, 8.437161f, 0 }, + { -0.363918f, 1.365891f, 9.854527f, 0 }, + { -0.282516f, 1.326387f, 10.666162f, 0 }, + { -0.314837f, 1.443703f, 10.433924f, 0 }, + { -0.644040f, 1.332372f, 9.327804f, 0 }, + { -0.999579f, 1.479616f, 8.036133f, 0 }, + { -0.799663f, 1.452082f, 8.346182f, 0 }, + { -0.858321f, 1.567004f, 9.868893f, 0 }, + { -0.938526f, 1.495178f, 11.599899f, 0 }, + { -1.193509f, 1.498769f, 11.905160f, 0 }, + { -1.556230f, 1.338358f, 10.947480f, 0 }, + { -1.557427f, 1.256955f, 11.003743f, 0 }, + { -1.413775f, 1.060631f, 11.848896f, 0 }, + { -1.280897f, 0.922964f, 12.215209f, 0 }, + { -1.132457f, 0.927753f, 11.399983f, 0 }, + { -1.037886f, 0.881066f, 10.413573f, 0 }, + { -0.605733f, 0.897825f, 10.074794f, 0 }, + { -0.149638f, 0.872686f, 10.181335f, 0 }, + { 0.278924f, 0.933738f, 10.765521f, 0 }, + { 0.741005f, 1.137245f, 10.898398f, 0 }, + { 1.114500f, 1.398213f, 10.672147f, 0 }, + { 1.337161f, 1.841140f, 11.609476f, 0 }, + { 1.916557f, 1.922543f, 13.679262f, 0 }, + { 2.594116f, 1.768117f, 13.814534f, 0 }, + { 3.088518f, 2.280476f, 12.144580f, 0 }, + { 3.426100f, 2.173934f, 11.726792f, 0 }, + { 3.564964f, 1.717839f, 11.662148f, 0 }, + { 3.779245f, 1.653195f, 11.219221f, 0 }, + { 3.823538f, 1.709459f, 10.377660f, 0 }, }; const size_t kBodyDetectOnBodyTestDataLength = ARRAY_SIZE(kBodyDetectOnBodyTestData); const struct body_detect_test_data kBodyDetectOffOnTestData[] = { - {-0.269348, 0.220266, 10.030501, 0}, - {-0.259771, 0.216675, 10.113101, 0}, - {-0.253785, 0.213084, 10.096342, 0}, - {-0.262165, 0.201113, 10.098736, 0}, - {-0.257377, 0.210690, 10.093947, 0}, - {-0.253785, 0.202310, 10.096342, 0}, - {-0.257377, 0.213084, 10.113101, 0}, - {-0.257377, 0.221464, 10.096342, 0}, - {-0.262165, 0.217872, 10.115496, 0}, - {-0.258574, 0.219069, 10.102327, 0}, - {-0.275333, 0.205901, 10.123875, 0}, - {-0.262165, 0.209493, 10.085567, 0}, - {-0.271742, 0.209493, 10.110707, 0}, - {-0.275333, 0.220266, 10.096342, 0}, - {-0.251391, 0.210690, 10.097539, 0}, - {-0.262165, 0.210690, 10.090356, 0}, - {-0.268150, 0.208295, 10.108313, 0}, - {-0.258574, 0.210690, 10.098736, 0}, - {-0.270545, 0.219069, 10.097539, 0}, - {-0.263362, 0.211887, 10.102327, 0}, - {-0.264559, 0.211887, 10.097539, 0}, - {-0.262165, 0.204704, 10.090356, 0}, - {-0.246603, 0.203507, 10.089159, 0}, - {-0.250194, 0.215478, 10.099933, 0}, - {-0.270545, 0.225055, 10.109509, 0}, - {-0.256179, 0.213084, 10.097539, 0}, - {-0.248997, 0.207098, 10.086765, 0}, - {-0.248997, 0.210690, 10.087962, 0}, - {-0.256179, 0.201113, 10.089159, 0}, - {-0.258574, 0.203507, 10.104721, 0}, - {-0.262165, 0.208295, 10.093947, 0}, - {-0.246603, 0.204704, 10.086765, 0}, - {-0.247800, 0.208295, 10.108313, 0}, - {-0.252588, 0.220266, 10.099933, 0}, - {-0.264559, 0.210690, 10.098736, 0}, - {-0.266953, 0.185551, 10.084371, 0}, - {-0.253785, 0.213084, 10.109509, 0}, - {-0.256179, 0.231040, 10.099933, 0}, - {-0.252588, 0.205901, 10.091554, 0}, - {-0.259771, 0.207098, 10.095144, 0}, - {-0.260968, 0.203507, 10.096342, 0}, - {-0.253785, 0.205901, 10.095144, 0}, - {-0.256179, 0.217872, 10.093947, 0}, - {-0.265756, 0.209493, 10.083174, 0}, - {-0.263362, 0.204704, 10.103524, 0}, - {-0.253785, 0.198719, 10.095144, 0}, - {-0.252588, 0.209493, 10.103524, 0}, - {-0.260968, 0.205901, 10.098736, 0}, - {-0.259771, 0.205901, 10.083174, 0}, - {-0.266953, 0.216675, 10.090356, 0}, - {-0.265756, 0.207098, 10.101130, 0}, - {-0.262165, 0.204704, 10.111904, 0}, - {-0.248997, 0.199916, 10.101130, 0}, - {-0.263362, 0.207098, 10.096342, 0}, - {-0.281319, 0.227449, 10.108313, 0}, - {-0.259771, 0.219069, 10.087962, 0}, - {-0.258574, 0.214281, 10.079582, 0}, - {-0.268150, 0.204704, 10.108313, 0}, - {-0.277727, 0.204704, 10.114298, 0}, - {-0.257377, 0.208295, 10.115496, 0}, - {-0.260968, 0.222661, 10.104721, 0}, - {-0.265756, 0.213084, 10.102327, 0}, - {-0.256179, 0.210690, 10.099933, 0}, - {-0.253785, 0.203507, 10.109509, 0}, - {-0.270545, 0.201113, 10.103524, 0}, - {-0.259771, 0.209493, 10.115496, 0}, - {-0.264559, 0.207098, 10.103524, 0}, - {-0.263362, 0.202310, 10.105919, 0}, - {-0.260968, 0.220266, 10.110707, 0}, - {-0.257377, 0.216675, 10.110707, 0}, - {-0.259771, 0.195127, 10.093947, 0}, - {-0.271742, 0.209493, 10.104721, 0}, - {-0.257377, 0.223858, 10.108313, 0}, - {-0.265756, 0.205901, 10.101130, 0}, - {-0.270545, 0.196324, 10.101130, 0}, - {-0.254982, 0.202310, 10.115496, 0}, - {-0.248997, 0.214281, 10.116693, 0}, - {-0.268150, 0.207098, 10.111904, 0}, - {-0.263362, 0.204704, 10.091554, 0}, - {-0.270545, 0.210690, 10.091554, 0}, - {-0.268150, 0.215478, 10.102327, 0}, - {-0.264559, 0.223858, 10.096342, 0}, - {-0.262165, 0.203507, 10.099933, 0}, - {-0.259771, 0.203507, 10.103524, 0}, - {-0.269348, 0.204704, 10.119086, 0}, - {-0.265756, 0.202310, 10.091554, 0}, - {-0.260968, 0.201113, 10.092751, 0}, - {-0.260968, 0.210690, 10.092751, 0}, - {-0.266953, 0.205901, 10.109509, 0}, - {-0.269348, 0.203507, 10.105919, 0}, - {-0.264559, 0.193930, 10.114298, 0}, - {-0.263362, 0.216675, 10.093947, 0}, - {-0.256179, 0.208295, 10.095144, 0}, - {-0.271742, 0.203507, 10.103524, 0}, - {-0.259771, 0.208295, 10.089159, 0}, - {-0.257377, 0.220266, 10.108313, 0}, - {-0.266953, 0.207098, 10.101130, 0}, - {-0.268150, 0.198719, 10.117889, 0}, - {-0.258574, 0.204704, 10.091554, 0}, - {-0.266953, 0.201113, 10.104721, 0}, - {-0.265756, 0.205901, 10.091554, 0}, - {-0.277727, 0.203507, 10.102327, 0}, - {-0.266953, 0.204704, 10.093947, 0}, - {-0.265756, 0.215478, 10.107116, 0}, - {-0.254982, 0.215478, 10.110707, 0}, - {-0.269348, 0.217872, 10.095144, 0}, - {-0.265756, 0.229843, 10.109509, 0}, - {-0.260968, 0.226252, 10.098736, 0}, - {-0.253785, 0.208295, 10.095144, 0}, - {-0.253785, 0.211887, 10.085567, 0}, - {-0.268150, 0.214281, 10.109509, 0}, - {-0.258574, 0.201113, 10.107116, 0}, - {-0.265756, 0.211887, 10.103524, 0}, - {-0.256179, 0.215478, 10.093947, 0}, - {-0.263362, 0.204704, 10.107116, 0}, - {-0.260968, 0.214281, 10.098736, 0}, - {-0.259771, 0.213084, 10.110707, 0}, - {-0.276530, 0.215478, 10.095144, 0}, - {-0.263362, 0.211887, 10.084371, 0}, - {-0.245406, 0.217872, 10.110707, 0}, - {-0.251391, 0.209493, 10.105919, 0}, - {-0.269348, 0.205901, 10.093947, 0}, - {-0.271742, 0.201113, 10.099933, 0}, - {-0.270545, 0.228646, 10.099933, 0}, - {-0.262165, 0.217872, 10.096342, 0}, - {-0.259771, 0.209493, 10.099933, 0}, - {-0.260968, 0.210690, 10.105919, 0}, - {-0.252588, 0.203507, 10.099933, 0}, - {-0.263362, 0.197522, 10.095144, 0}, - {-0.271742, 0.213084, 10.101130, 0}, - {-0.268150, 0.196324, 10.110707, 0}, - {-0.248997, 0.213084, 10.108313, 0}, - {-0.254982, 0.215478, 10.095144, 0}, - {-0.260968, 0.208295, 10.107116, 0}, - {-0.259771, 0.219069, 10.108313, 0}, - {-0.266953, 0.214281, 10.098736, 0}, - {-0.269348, 0.202310, 10.090356, 0}, - {-0.258574, 0.204704, 10.113101, 0}, - {-0.263362, 0.226252, 10.086765, 0}, - {-0.264559, 0.204704, 10.096342, 0}, - {-0.271742, 0.219069, 10.096342, 0}, - {-0.252588, 0.210690, 10.104721, 0}, - {-0.258574, 0.211887, 10.113101, 0}, - {-0.264559, 0.210690, 10.104721, 0}, - {-0.269348, 0.214281, 10.103524, 0}, - {-0.253785, 0.211887, 10.093947, 0}, - {-0.256179, 0.223858, 10.110707, 0}, - {-0.274136, 0.207098, 10.098736, 0}, - {-0.274136, 0.207098, 10.092751, 0}, - {-0.254982, 0.210690, 10.091554, 0}, - {-0.257377, 0.204704, 10.098736, 0}, - {-0.257377, 0.209493, 10.108313, 0}, - {-0.257377, 0.211887, 10.095144, 0}, - {-0.259771, 0.199916, 10.095144, 0}, - {-0.257377, 0.214281, 10.101130, 0}, - {-0.270545, 0.217872, 10.103524, 0}, - {-0.281319, 0.204704, 10.104721, 0}, - {-0.271742, 0.208295, 10.103524, 0}, - {-0.258574, 0.211887, 10.104721, 0}, - {-0.264559, 0.204704, 10.126269, 0}, - {-0.262165, 0.201113, 10.101130, 0}, - {-0.258574, 0.219069, 10.096342, 0}, - {-0.263362, 0.211887, 10.107116, 0}, - {-0.265756, 0.203507, 10.091554, 0}, - {-0.264559, 0.205901, 10.107116, 0}, - {-0.256179, 0.214281, 10.095144, 0}, - {-0.263362, 0.202310, 10.097539, 0}, - {-0.271742, 0.207098, 10.104721, 0}, - {-0.272939, 0.210690, 10.101130, 0}, - {-0.262165, 0.205901, 10.096342, 0}, - {-0.260968, 0.209493, 10.107116, 0}, - {-0.269348, 0.217872, 10.093947, 0}, - {-0.256179, 0.220266, 10.087962, 0}, - {-0.264559, 0.208295, 10.092751, 0}, - {-0.265756, 0.208295, 10.095144, 0}, - {-0.262165, 0.199916, 10.098736, 0}, - {-0.259771, 0.215478, 10.101130, 0}, - {-0.263362, 0.217872, 10.097539, 0}, - {-0.263362, 0.204704, 10.095144, 0}, - {-0.248997, 0.202310, 10.096342, 0}, - {-0.260968, 0.226252, 10.097539, 0}, - {-0.259771, 0.216675, 10.103524, 0}, - {-0.270545, 0.205901, 10.090356, 0}, - {-0.250194, 0.219069, 10.089159, 0}, - {-0.254982, 0.213084, 10.098736, 0}, - {-0.268150, 0.204704, 10.102327, 0}, - {-0.258574, 0.215478, 10.104721, 0}, - {-0.250194, 0.217872, 10.102327, 0}, - {-0.250194, 0.215478, 10.097539, 0}, - {-0.251391, 0.213084, 10.086765, 0}, - {-0.266953, 0.204704, 10.108313, 0}, - {-0.270545, 0.199916, 10.099933, 0}, - {-0.271742, 0.208295, 10.092751, 0}, - {-0.268150, 0.222661, 10.098736, 0}, - {-0.252588, 0.213084, 10.096342, 0}, - {-0.266953, 0.213084, 10.092751, 0}, - {-0.265756, 0.205901, 10.105919, 0}, - {-0.258574, 0.209493, 10.103524, 0}, - {-0.263362, 0.203507, 10.103524, 0}, - {-0.265756, 0.213084, 10.092751, 0}, - {-0.266953, 0.209493, 10.097539, 0}, - {-0.272939, 0.193930, 10.110707, 0}, - {-0.258574, 0.209493, 10.109509, 0}, - {-0.259771, 0.213084, 10.101130, 0}, - {-0.274136, 0.215478, 10.101130, 0}, - {-0.259771, 0.207098, 10.091554, 0}, - {-0.265756, 0.208295, 10.101130, 0}, - {-0.263362, 0.210690, 10.109509, 0}, - {-0.264559, 0.216675, 10.110707, 0}, - {-0.266953, 0.211887, 10.099933, 0}, - {-0.268150, 0.199916, 10.093947, 0}, - {-0.265756, 0.216675, 10.105919, 0}, - {-0.262165, 0.204704, 10.081977, 0}, - {-0.263362, 0.214281, 10.086765, 0}, - {-0.263362, 0.210690, 10.084371, 0}, - {-0.257377, 0.201113, 10.104721, 0}, - {-0.262165, 0.203507, 10.109509, 0}, - {-0.266953, 0.217872, 10.113101, 0}, - {-0.252588, 0.209493, 10.102327, 0}, - {-0.257377, 0.213084, 10.096342, 0}, - {-0.260968, 0.211887, 10.101130, 0}, - {-0.263362, 0.197522, 10.114298, 0}, - {-0.272939, 0.192733, 10.103524, 0}, - {-0.250194, 0.207098, 10.079582, 0}, - {-0.253785, 0.214281, 10.107116, 0}, - {-0.254982, 0.205901, 10.095144, 0}, - {-0.256179, 0.209493, 10.103524, 0}, - {-0.265756, 0.222661, 10.111904, 0}, - {-0.259771, 0.211887, 10.101130, 0}, - {-0.256179, 0.202310, 10.115496, 0}, - {-0.260968, 0.209493, 10.109509, 0}, - {-0.243011, 0.203507, 10.101130, 0}, - {-0.252588, 0.205901, 10.096342, 0}, - {-0.253785, 0.225055, 10.095144, 0}, - {-0.258574, 0.225055, 10.096342, 0}, - {-0.264559, 0.215478, 10.092751, 0}, - {-0.265756, 0.205901, 10.114298, 0}, - {-0.266953, 0.220266, 10.108313, 0}, - {-0.268150, 0.208295, 10.109509, 0}, - {-0.259771, 0.210690, 10.103524, 0}, - {-0.253785, 0.210690, 10.109509, 0}, - {-0.268150, 0.213084, 10.097539, 0}, - {-0.268150, 0.215478, 10.102327, 0}, - {-0.269348, 0.201113, 10.103524, 0}, - {-0.262165, 0.199916, 10.107116, 0}, - {-0.260968, 0.205901, 10.120284, 0}, - {-0.257377, 0.193930, 10.102327, 0}, - {-0.264559, 0.203507, 10.104721, 0}, - {-0.265756, 0.210690, 10.093947, 0}, - {-0.256179, 0.209493, 10.097539, 0}, - {-0.257377, 0.204704, 10.107116, 0}, - {-0.260968, 0.208295, 10.093947, 0}, - {-0.258574, 0.204704, 10.102327, 0}, - {-0.263362, 0.211887, 10.107116, 0}, - {-0.263362, 0.191536, 10.097539, 0}, - {-0.253785, 0.209493, 10.107116, 0}, - {-0.254982, 0.217872, 10.105919, 0}, - {-0.259771, 0.207098, 10.096342, 0}, - {-0.265756, 0.204704, 10.114298, 0}, - {-0.270545, 0.208295, 10.099933, 0}, - {-0.262165, 0.214281, 10.104721, 0}, - {-0.257377, 0.205901, 10.095144, 0}, - {-0.266953, 0.214281, 10.096342, 0}, - {-0.274136, 0.225055, 10.093947, 0}, - {-0.266953, 0.216675, 10.099933, 0}, - {-0.269348, 0.208295, 10.099933, 0}, - {-0.266953, 0.222661, 10.105919, 0}, - {-0.246603, 0.204704, 10.090356, 0}, - {-0.257377, 0.202310, 10.102327, 0}, - {-0.258574, 0.217872, 10.114298, 0}, - {-0.268150, 0.225055, 10.099933, 0}, - {-0.278924, 0.210690, 10.097539, 0}, - {-0.263362, 0.203507, 10.104721, 0}, - {-0.252588, 0.221464, 10.089159, 0}, - {-0.252588, 0.208295, 10.073597, 0}, - {-0.252588, 0.213084, 10.091554, 0}, - {-0.256179, 0.210690, 10.087962, 0}, - {-0.272939, 0.214281, 10.097539, 0}, - {-0.259771, 0.203507, 10.097539, 0}, - {-0.271742, 0.208295, 10.102327, 0}, - {-0.262165, 0.216675, 10.095144, 0}, - {-0.264559, 0.215478, 10.095144, 0}, - {-0.265756, 0.214281, 10.103524, 0}, - {-0.268150, 0.217872, 10.096342, 0}, - {-0.262165, 0.221464, 10.104721, 0}, - {-0.274136, 0.219069, 10.101130, 0}, - {-0.264559, 0.208295, 10.097539, 0}, - {-0.265756, 0.203507, 10.089159, 0}, - {-0.269348, 0.204704, 10.110707, 0}, - {-0.268150, 0.214281, 10.116693, 0}, - {-0.250194, 0.199916, 10.102327, 0}, - {-0.266953, 0.197522, 10.105919, 0}, - {-0.268150, 0.199916, 10.108313, 0}, - {-0.259771, 0.195127, 10.093947, 0}, - {-0.262165, 0.215478, 10.085567, 0}, - {-0.263362, 0.216675, 10.101130, 0}, - {-0.252588, 0.227449, 10.037683, 0}, - {-0.276530, 0.208295, 10.177745, 0}, - {-0.254982, 0.205901, 10.175350, 0}, - {-0.257377, 0.204704, 10.041275, 0}, - {-0.258574, 0.210690, 10.117889, 1}, - {-0.243011, 0.209493, 10.085567, 0}, - {-0.254982, 0.196324, 10.109509, 0}, - {-0.248997, 0.193930, 10.097539, 0}, - {-0.269348, 0.207098, 10.098736, 0}, - {-0.262165, 0.213084, 10.098736, 0}, - {-0.262165, 0.201113, 10.066414, 0}, - {-0.264559, 0.208295, 10.103524, 0}, - {-0.264559, 0.208295, 10.101130, 0}, - {-0.257377, 0.210690, 10.119086, 0}, - {-0.256179, 0.198719, 10.093947, 0}, - {-0.253785, 0.198719, 10.113101, 0}, - {-0.254982, 0.215478, 10.081977, 0}, - {-0.259771, 0.210690, 10.092751, 0}, - {-0.264559, 0.214281, 10.090356, 0}, - {-0.260968, 0.187945, 10.144226, 0}, - {-0.268150, 0.245406, 10.073597, 0}, - {-0.408211, 0.396240, 10.056837, 0}, - {-2.020705, 2.340331, 10.170562, 0}, - {-0.186748, 1.916557, 10.966634, 0}, - {7.234076, -2.675519, 16.133318, 0}, - {7.775165, 0.863109, 11.798618, 0}, - {3.503912, -1.510740, 2.634817, 0}, - {-3.895364, -5.768825, 9.538493, 0}, - {-4.587287, -2.717417, 26.975452, 0}, - {-3.013101, 4.329911, 32.156502, 0}, - {-4.693829, -1.854308, 19.993965, 0}, - {-5.236115, -2.634817, 18.126490, 0}, - {-6.558911, 1.010352, 20.283663, 0}, - {-8.033738, 0.130484, 22.203812, 0}, - {-7.487861, -0.525527, 18.705885, 0}, - {-6.692986, 0.266953, 15.228310, 0}, - {-6.151897, 0.128090, 10.176547, 0}, - {-6.020216, 0.745793, 5.400118, 0}, - {-5.798753, 1.690305, 1.695094, 0}, - {-3.584117, 1.229422, -1.827972, 0}, - {-0.386663, 1.133654, -4.835087, 0}, - {0.955286, 1.742978, -4.969162, 0}, - {3.201046, 1.059434, -6.075283, 0}, - {7.366954, -0.312443, -7.837414, 0}, - {8.429978, -0.656011, -6.296746, 0}, - {6.950363, -0.164003, -3.179498, 0}, - {6.801922, -0.415394, -0.955286, 0}, - {7.827837, -0.814028, 1.152807, 0}, - {7.793121, -0.723048, 3.940853, 0}, - {7.422020, -0.292092, 6.720520, 0}, - {7.978672, -0.298078, 7.856567, 0}, - {8.202530, -0.122104, 7.301113, 0}, - {7.778756, 0.360327, 6.107605, 0}, - {7.892480, 0.318429, 5.987895, 0}, - {8.950717, 0.108936, 6.327871, 0}, - {8.798685, 0.319626, 7.009021, 0}, - {7.748828, 0.839167, 7.133519, 0}, - {7.795516, 0.958877, 6.597219, 0}, - {7.850582, 1.035492, 5.942405, 0}, - {7.547716, 1.152807, 5.074507, 0}, - {7.116760, 1.128865, 4.546586, 0}, - {7.422020, 0.805648, 4.566936, 0}, - {7.937970, 0.517147, 4.827904, 0}, - {8.088805, 0.418985, 5.172669, 0}, - {8.329422, 0.415394, 5.573698, 0}, - {8.099579, 0.739808, 5.117603, 0}, - {7.973883, 0.805648, 4.387372, 0}, - {7.833823, 1.048660, 3.857056, 0}, - {8.100776, 1.177946, 3.950430, 0}, - {8.722071, 1.122880, 4.909307, 0}, - {9.400826, 0.921767, 5.566515, 0}, - {9.440331, 0.920570, 5.175064, 0}, - {8.723268, 1.022323, 4.551374, 0}, - {8.115141, 1.175552, 4.096477, 0}, - {8.135491, 1.387439, 3.754106, 0}, - {8.602361, 1.533485, 3.762486, 0}, - {8.884876, 1.289277, 4.268859, 0}, - {8.775940, 0.867898, 4.517856, 0}, - {8.434767, 0.647631, 4.377795, 0}, - {8.220486, 0.623689, 4.394554, 0}, - {7.817063, 0.945709, 4.226960, 0}, - {8.021768, 1.249772, 3.598483, 0}, - {9.108734, 0.667982, 3.156753, 0}, - {9.658203, 0.177171, 2.748542, 0}, - {9.301467, 0.393846, 2.639606, 0}, - {9.026134, 0.736217, 3.105278, 0}, - {8.865723, 0.814028, 3.799596, 0}, - {8.759181, 0.849941, 4.060563, 0}, - {8.493424, 0.964863, 4.404131, 0}, - {8.276750, 1.033097, 4.540600, 0}, - {8.324634, 0.908599, 4.672281, 0}, - {8.778335, 0.644040, 4.946417, 0}, - {8.558068, 0.827196, 5.007470, 0}, - {8.507790, 0.703895, 4.434059, 0}, - {8.688552, 0.684741, 3.661929, 0}, - {8.784320, 0.820014, 3.207031, 0}, - {8.844175, 0.839167, 3.385399, 0}, - {8.908818, 0.858321, 3.974372, 0}, - {9.044091, 0.907402, 4.442438, 0}, - {8.989024, 0.899022, 4.399343, 0}, - {8.925578, 0.815225, 4.141966, 0}, - {9.033317, 0.615309, 3.840297, 0}, - {9.083595, 0.436942, 3.727770, 0}, - {9.020149, 0.338779, 3.928882, 0}, - {8.930367, 0.299275, 4.174288, 0}, - {8.963885, 0.246603, 4.288013, 0}, - {8.842978, 0.304063, 4.236537, 0}, - {8.641865, 0.396240, 4.152740, 0}, - {8.591587, 0.466869, 4.163514, 0}, - {8.656230, 0.460884, 4.255691, 0}, - {8.836992, 0.398634, 4.118024, 0}, - {8.957899, 0.453701, 3.754106, 0}, - {9.045288, 0.502782, 3.326741, 0}, - {9.083595, 0.586579, 3.045423, 0}, - {9.033317, 0.705092, 3.004721, 0}, - {8.968674, 0.715866, 3.072956, 0}, - {8.899241, 0.684741, 3.071759, 0}, - {8.809459, 0.632069, 3.072956, 0}, - {8.832204, 0.585382, 3.138796, 0}, - {8.825022, 0.575805, 3.143585, 0}, - {8.761575, 0.556652, 3.064576, 0}, - {8.750801, 0.594959, 3.092109, 0}, - {8.817839, 0.633266, 3.129220, 0}, - {8.913607, 0.640449, 3.046620, 0}, - {8.998601, 0.658405, 2.869449, 0}, - {9.095566, 0.684741, 2.670730, 0}, - {9.133873, 0.694318, 2.789243, 0}, - {9.126691, 0.676362, 3.256112, 0}, - {9.041697, 0.723048, 3.632001, 0}, - {8.827415, 0.763750, 3.794807, 0}, - {8.853752, 0.694318, 3.775654, 0}, - {9.000996, 0.618901, 3.673900, 0}, - {9.066835, 0.561440, 3.708616, 0}, - {9.075215, 0.497994, 3.767274, 0}, - {9.064442, 0.417788, 3.775654, 0}, - {9.003389, 0.444124, 3.676294, 0}, - {8.943534, 0.500388, 3.551796, 0}, - {8.961491, 0.505176, 3.343500, 0}, - {8.789108, 0.600944, 3.191469, 0}, - {8.816642, 0.596156, 3.118446, 0}, - {8.889665, 0.549469, 3.131614, 0}, - {8.881285, 0.533907, 3.242944, 0}, - {8.783123, 0.590170, 3.416523, 0}, - {8.716085, 0.642843, 3.600877, 0}, - {8.719677, 0.612915, 3.694251, 0}, - {8.792700, 0.532710, 3.641578, 0}, - {8.895650, 0.470460, 3.475181, 0}, - {8.902833, 0.453701, 3.179498, 0}, - {8.833401, 0.399831, 2.855083, 0}, - {8.759181, 0.278924, 2.383426, 0}, - {8.670595, 0.118513, 1.875856, 0}, - {8.531732, -0.013168, 1.414972, 0}, - {8.376109, -0.057461, 1.115697, 0}, - {8.304283, -0.015562, 1.341949, 0}, - {7.916422, 0.159214, 1.878250, 0}, - {7.595600, 0.270545, 3.086124, 0}, - {7.516591, 0.349553, 4.906913, 0}, - {7.881707, 0.061052, 6.694183, 0}, - {8.112747, -0.235829, 7.243652, 0}, - {8.034935, -0.387860, 7.001838, 0}, - {8.052892, -0.222661, 6.254848, 0}, - {7.948744, 0.203507, 5.623976, 0}, - {7.327449, 0.853532, 5.892127, 0}, - {6.556517, 1.406592, 6.268016, 0}, - {6.993458, 1.375468, 6.548137, 0}, - {7.503423, 1.138442, 6.823470, 0}, - {7.237667, 1.118091, 7.408852, 0}, - {7.144293, 1.031900, 8.170208, 0}, - {7.127533, 0.927753, 8.361744, 0}, - {6.883325, 0.820014, 8.204924, 0}, - {6.708549, 0.644040, 7.923605, 0}, - {6.877340, 0.410605, 7.595600, 0}, - {7.054511, 0.339976, 7.395684, 0}, - {7.176615, 0.295684, 7.271185, 0}, - {7.182600, 0.259771, 7.201754, 0}, - {6.823470, 0.384269, 7.207739, 0}, - {6.624752, 0.464475, 7.419626, 0}, - {6.767207, 0.436942, 7.730872, 0}, - {6.834244, 0.386663, 7.971489, 0}, - {6.795937, 0.344765, 7.827837, 0}, - {6.531378, 0.404620, 7.354982, 0}, - {6.513421, 0.317232, 7.140702, 0}, - {6.649891, 0.192733, 7.065284, 0}, - {6.544546, 0.299275, 6.846215, 0}, - {6.555320, 0.381875, 6.678621, 0}, - {6.630737, 0.332794, 6.690592, 0}, - {6.636723, 0.199916, 6.915647, 0}, - {6.590036, 0.169988, 7.594403, 0}, - {6.248862, 0.393846, 8.506593, 0}, - {6.199781, 0.445321, 8.953111, 0}, - {6.538560, 0.023942, 8.977053, 0}, - {6.251256, 0.074220, 8.766363, 0}, - {6.154291, 0.337582, 8.178588, 0}, - {6.550531, 0.281319, 7.522577, 0}, - {6.397303, 0.652420, 7.284354, 0}, - {6.174642, 0.914584, 7.181403, 0}, - {6.265622, 0.825999, 6.584050, 0}, - {6.449975, 0.812831, 6.244074, 0}, - {6.738476, 0.641646, 6.549335, 0}, - {6.904873, 0.591367, 6.961137, 0}, - {6.669044, 0.671573, 7.244849, 0}, - {6.514618, 0.677559, 7.499832, 0}, - {6.716928, 0.464475, 7.510606, 0}, - {6.792346, 0.463278, 7.596797, 0}, - {6.734885, 0.585382, 7.791924, 0}, - {6.658270, 0.447715, 7.554898, 0}, - {6.463143, 0.486023, 7.091620, 0}, - {6.501450, 0.563834, 6.517013, 0}, - {6.488282, 0.654814, 6.062115, 0}, - {6.436807, 0.670376, 6.069297, 0}, - {6.479902, 0.659602, 6.549335, 0}, - {6.368572, 0.628478, 7.060496, 0}, - {6.446383, 0.487220, 7.497437, 0}, - {6.628343, 0.423773, 7.789530, 0}, - {6.636723, 0.460884, 7.996628, 0}, - {6.369769, 0.560243, 8.149857, 0}, - {6.105210, 0.602141, 8.106761, 0}, - {6.810302, 0.294487, 8.166616, 0}, - {7.140702, 0.201113, 8.110353, 0}, - {6.691789, 0.211887, 7.706930, 0}, - {6.524195, 0.271742, 7.422020, 0}, - {6.406879, 0.363918, 7.422020, 0}, - {6.278790, 0.423773, 7.556096, 0}, - {6.175839, 0.460884, 7.661440, 0}, - {6.229709, 0.451307, 7.507014, 0}, - {6.511027, 0.403423, 6.991064, 0}, - {6.872551, 0.345962, 6.734885, 0}, - {6.777980, 0.488417, 6.701366, 0}, - {6.730096, 0.620098, 6.682212, 0}, - {6.818682, 0.694318, 6.673833, 0}, - {6.897690, 0.634463, 6.702563, 0}, - {6.824667, 0.557849, 6.743265, 0}, - {6.700169, 0.621295, 6.815091, 0}, - {6.441595, 0.687135, 6.744462, 0}, - {6.476311, 0.812831, 6.872551, 0}, - {7.070073, 0.621295, 7.327449, 0}, - {6.791149, 0.446518, 7.169432, 0}, - {6.742067, 0.513556, 7.479481, 0}, - {6.738476, 0.420182, 7.603980, 0}, - {6.797134, 0.195127, 7.705733, 0}, - {6.882128, 0.363918, 7.593205, 0}, - {6.769601, 0.568623, 7.325055, 0}, - {6.915647, 0.465672, 7.016203, 0}, - {7.165841, 0.305261, 6.475114, 0}, - {7.277171, 0.234632, 5.893323, 0}, - {7.274777, 0.275333, 5.352234, 0}, - {6.994656, 0.428562, 5.149924, 0}, - {6.801922, 0.456095, 5.353431, 0}, - {6.751644, 0.354342, 5.864593, 0}, - {6.592430, 0.339976, 6.321885, 0}, - {6.416456, 0.262165, 6.567291, 0}, - {6.847412, -0.142455, 7.101197, 0}, - {7.248441, -0.061052, 7.084438, 0}, - {6.556517, 0.310049, 7.459130, 0}, - {6.555320, 0.251391, 7.558490, 0}, - {6.552926, 0.347159, 7.578840, 0}, - {6.534969, 0.442927, 7.498635, 0}, - {6.439201, 0.484826, 7.303507, 0}, - {6.555320, 0.341173, 7.278368, 0}, - {6.587642, 0.209493, 7.347800, 0}, - {6.563700, 0.135272, 7.492649, 0}, - {6.603204, 0.100556, 7.559687, 0}, - {6.515815, 0.198719, 7.558490, 0}, - {6.441595, 0.270545, 7.536942, 0}, - {6.330265, 0.298078, 7.629118, 0}, - {6.339842, 0.277727, 7.694959, 0}, - {6.260833, 0.245406, 7.636301, 0}, - {6.145912, 0.185551, 7.546519, 0}, - {6.068100, 0.132878, 7.322661, 0}, - {5.987895, 0.122104, 7.220907, 0}, - {5.989091, 0.123301, 7.357377, 0}, - {5.981909, 0.122104, 7.590811, 0}, - {6.020216, 0.088585, 7.677002, 0}, - {6.030990, 0.148440, 7.593205, 0}, - {6.063312, 0.219069, 7.480678, 0}, - {6.089648, 0.265756, 7.527365, 0}, - {6.050144, 0.359130, 7.862553, 0}, - {6.011837, 0.365116, 8.170208, 0}, - {6.011837, 0.265756, 8.222880, 0}, - {5.893323, 0.202310, 8.207318, 0}, - {5.845439, 0.137667, 8.021768, 0}, - {5.822695, 0.196324, 8.021768, 0}, - {5.906492, 0.239420, 8.250414, 0}, - {5.809526, 0.296881, 8.378503, 0}, - {5.810724, 0.222661, 8.389277, 0}, - {5.754460, 0.226252, 8.317451, 0}, - {5.809526, 0.104148, 8.396460, 0}, - {5.810724, 0.187945, 8.570039, 0}, - {6.063312, 0.287304, 8.530535, 0}, - {6.098028, 0.141258, 8.274356, 0}, - {5.651509, 0.290895, 8.311465, 0}, - {5.661086, 0.392649, 8.327028, 0}, - {5.258861, 0.590170, 8.374912, 0}, - {6.062115, 0.117316, 7.928393, 0}, - {6.623555, -0.246603, 7.491452, 0}, - {6.019019, 0.135272, 7.080847, 0}, - {6.084859, 0.463278, 7.062890, 0}, - {5.912477, 0.451307, 7.258018, 0}, - {5.827483, 0.532710, 7.372939, 0}, - {5.821497, 0.537498, 7.540533, 0}, - {5.737700, 0.536301, 7.648272, 0}, - {5.851425, 0.383072, 7.718901, 0}, - {6.072888, 0.365116, 7.699748, 0}, - {5.929236, 0.392649, 7.878115, 0}, - {5.967544, 0.354342, 8.107959, 0}, - {6.045355, 0.253785, 8.421598, 0}, - {5.923251, 0.323217, 8.574827, 0}, - {5.803541, 0.372298, 8.486242, 0}, - {5.785584, 0.416591, 8.215697, 0}, - {5.768825, 0.496797, 7.946350, 0}, - {5.838257, 0.527921, 7.711719, 0}, - {5.963953, 0.471657, 7.472299, 0}, - {5.986697, 0.430956, 7.435188, 0}, - {5.928040, 0.436942, 7.484270, 0}, - {5.907689, 0.472855, 7.449553, 0}, - {5.935222, 0.456095, 7.354982, 0}, - {5.959164, 0.450110, 7.420823, 0}, - {5.960361, 0.391452, 7.717704, 0}, - {5.880156, 0.399831, 7.902057, 0}, - {5.771219, 0.411802, 7.936773, 0}, - {5.997471, 0.266953, 8.137886, 0}, - {5.945996, 0.380678, 8.301888, 0}, - {5.877761, 0.434547, 8.265976, 0}, - {5.904098, 0.408211, 7.947547, 0}, - {5.918463, 0.432153, 7.615951, 0}, - {5.869381, 0.438139, 7.486664, 0}, - {5.837060, 0.451307, 7.556096, 0}, - {5.900506, 0.465672, 7.654258, 0}, - {5.870579, 0.454898, 7.651864, 0}, - {5.875367, 0.454898, 7.615951, 0}, - {5.887338, 0.451307, 7.697353, 0}, - {5.850228, 0.456095, 7.779953, 0}, - {5.858608, 0.477643, 7.884101, 0}, - {5.749671, 0.506373, 7.787136, 0}, - {5.683831, 0.507570, 7.660243, 0}, - {5.740095, 0.469263, 7.811078, 0}, - {5.766431, 0.405817, 8.002614, 0}, - {5.714955, 0.442927, 8.042118, 0}, - {5.723335, 0.399831, 8.002614, 0}, - {5.712561, 0.343568, 7.995431, 0}, - {5.741292, 0.323217, 8.110353, 0}, - {5.766431, 0.349553, 8.237246, 0}, - {5.704182, 0.367510, 8.276750, 0}, - {5.651509, 0.348356, 8.161828, 0}, - {5.655100, 0.367510, 7.977475, 0}, - {5.770022, 0.269348, 8.037330, 0}, - {5.765234, 0.149638, 8.125915, 0}, - {5.671860, 0.073023, 7.973883, 0}, - {5.667071, 0.105345, 7.836217, 0}, - {5.662283, 0.092177, 7.824246, 0}, - {5.702984, 0.031125, 7.970292, 0}, - {5.731715, -0.005986, 8.169010, 0}, - {5.705379, -0.038307, 8.178588, 0}, - {5.635947, -0.082600, 8.060075, 0}, - {5.614399, -0.087388, 7.846991, 0}, - {5.607216, -0.051475, 7.807487, 0}, - {5.610808, -0.033519, 7.864947, 0}, - {5.594049, 0.014365, 7.959518, 0}, - {5.595245, 0.070629, 8.085214, 0}, - {5.577289, 0.046687, 8.267173, 0}, - {5.512646, -0.061052, 8.195347, 0}, - {5.414484, -0.068235, 7.988248, 0}, - {5.358220, 0.023942, 7.862553, 0}, - {5.412089, 0.094571, 7.925999, 0}, - {5.420469, 0.159214, 8.106761, 0}, - {5.276817, 0.208295, 8.341393, 0}, - {5.264846, 0.239420, 8.215697, 0}, - {5.281605, 0.105345, 8.564054, 0}, - {5.311533, -0.020351, 8.683764, 0}, - {5.209779, 0.087388, 8.489834, 0}, - {5.149924, 0.135272, 8.765166, 0}, - {5.169078, 0.017957, 9.282313, 0}, - {5.274423, -0.105345, 9.628276, 0}, - {5.270832, -0.059855, 9.247598, 0}, - {5.166684, 0.098162, 8.629894, 0}, - {5.128376, 0.126893, 8.294706, 0}, - {5.119997, 0.088585, 8.373714, 0}, - {5.146333, 0.090980, 8.540112, 0}, - {5.112814, 0.226252, 8.293509, 0}, - {5.086478, 0.238223, 8.079228, 0}, - {5.076901, 0.137667, 8.086411, 0}, - {5.064930, 0.064643, 8.396460, 0}, - {5.090069, 0.101754, 8.791503, 0}, - {5.090069, 0.272939, 9.018951, 0}, - {5.106829, 0.399831, 8.947125, 0}, - {5.129574, 0.401029, 8.738831, 0}, - {5.143939, 0.233435, 8.713691, 0}, - {5.165487, 0.124498, 8.570039, 0}, - {5.170275, 0.147243, 8.276750, 0}, - {5.114011, 0.207098, 7.818260, 0}, - {5.033806, 0.308852, 7.491452, 0}, - {5.043383, 0.314837, 7.789530, 0}, - {5.061339, 0.219069, 8.386883, 0}, - {5.069719, 0.137667, 8.644259, 0}, - {5.058945, 0.147243, 8.481454, 0}, - {5.007470, 0.186748, 8.107959, 0}, - {4.957191, 0.214281, 8.024161, 0}, - {5.048171, 0.130484, 8.451527, 0}, - {5.088872, 0.058658, 8.924380, 0}, - {5.104434, -0.016759, 9.154224, 0}, - {5.117603, -0.027533, 8.935155, 0}, - {5.018243, 0.071826, 8.637076, 0}, - {4.983528, 0.090980, 8.604755, 0}, - {5.019441, 0.026336, 8.650245, 0}, - {5.030214, -0.013168, 8.646653, 0}, - {4.939235, -0.026336, 8.565250, 0}, - {4.879380, -0.089783, 8.562857, 0}, - {4.832693, -0.186748, 8.906425, 0}, - {4.851846, -0.294487, 9.361322, 0}, - {4.910504, -0.284910, 9.572012, 0}, - {4.920081, -0.166397, 9.233232, 0}, - {4.865015, -0.051475, 8.621514, 0}, - {4.821919, -0.007183, 8.482651, 0}, - {4.851846, -0.021548, 8.792700, 0}, - {4.916490, -0.056264, 9.081201, 0}, - {4.939235, -0.034716, 8.680172, 0}, - {4.878182, 0.039504, 8.130703, 0}, - {4.825510, 0.070629, 8.079228, 0}, - {4.854240, 0.033519, 8.445540, 0}, - {4.932052, -0.016759, 8.767561, 0}, - {4.988316, -0.080206, 8.864526, 0}, - {5.024229, -0.152032, 8.710100, 0}, - {5.026623, -0.175974, 8.593981, 0}, - {5.011061, -0.119710, 8.465892, 0}, - {5.051762, -0.058658, 8.503001, 0}, - {5.104434, 0.028730, 8.389277, 0}, - {5.108026, 0.174777, 8.304283, 0}, - {5.121194, 0.207098, 8.368926, 0}, - {5.137953, 0.177171, 8.186967, 0}, - {5.123588, 0.141258, 8.036133, 0}, - {5.098449, 0.186748, 8.031344, 0}, - {5.036200, 0.240617, 8.049300, 0}, - {4.977542, 0.316034, 8.190558, 0}, - {4.978739, 0.294487, 8.428782, 0}, - {5.046974, 0.195127, 8.704114, 0}, - {5.042185, 0.211887, 8.719677, 0}, - {4.927264, 0.299275, 8.538915, 0}, - {4.918884, 0.241814, 8.495819, 0}, - {4.897336, 0.189142, 8.492228, 0}, - {4.878182, 0.237026, 8.601164, 0}, - {4.818327, 0.262165, 8.705312, 0}, - {4.871000, 0.172382, 8.791503, 0}, - {4.924870, 0.119710, 8.872906, 0}, - {4.873394, 0.243011, 8.825022, 0}, - {4.832693, 0.408211, 8.659822, 0}, - {4.838678, 0.367510, 8.619121, 0}, - {4.904519, 0.169988, 8.809459, 0}, - {4.926067, 0.071826, 9.058456, 0}, - {4.940432, 0.058658, 8.823824, 0}, - {4.930855, 0.167594, 8.331817, 0}, - {4.918884, 0.266953, 8.265976, 0}, - {4.941629, 0.207098, 8.900438, 0}, - {4.957191, 0.129287, 9.339774, 0}, - {4.915293, 0.180762, 9.089581, 0}, - {4.930855, 0.190339, 8.826219, 0}, - {5.080492, 0.038307, 8.766363, 0}, - {5.204991, -0.108936, 8.631091, 0}, - {5.202597, -0.047884, 8.157040, 0}, - {5.157107, 0.095768, 7.870933, 0}, - {5.164289, 0.168791, 8.019373, 0}, - {5.199006, 0.167594, 8.428782, 0}, - {5.215765, 0.180762, 8.804670, 0}, - {5.201400, 0.278924, 8.614332, 0}, - {5.171472, 0.433350, 8.225274, 0}, - {5.199006, 0.466869, 8.068454, 0}, - {5.245692, 0.434547, 8.081622, 0}, - {5.252875, 0.493205, 8.092396, 0}, - {5.194217, 0.633266, 8.359349, 0}, - {5.155910, 0.772130, 8.494622, 0}, - {5.196611, 0.809240, 8.324634, 0}, - {5.245692, 0.724246, 8.206120, 0}, - {5.252875, 0.677559, 8.295903, 0}, - {5.234919, 0.689530, 8.449132, 0}, - {5.256466, 0.666785, 8.635880, 0}, - {5.276817, 0.672770, 8.653836, 0}, - {5.300759, 0.682347, 8.694537, 0}, - {5.352234, 0.640449, 8.677778, 0}, - {5.373782, 0.659602, 8.445540, 0}, - {5.371388, 0.752976, 8.093594, 0}, - {5.348643, 0.889445, 7.916422, 0}, - {5.337869, 0.974439, 8.097184, 0}, - {5.346249, 0.991199, 8.227669, 0}, - {5.382162, 0.978031, 8.289918, 0}, - {5.436031, 0.922964, 8.264779, 0}, - {5.408498, 0.940921, 8.136689, 0}, - {5.376176, 0.939724, 8.165420, 0}, - {5.364205, 0.924161, 8.331817, 0}, - {5.351037, 0.873883, 8.446738, 0}, - {5.334278, 0.855927, 8.334210, 0}, - {5.292379, 0.861912, 8.178588, 0}, - {5.298365, 0.858321, 8.146266, 0}, - {5.319912, 0.841561, 8.136689, 0}, - {5.353431, 0.793677, 8.121126, 0}, - {5.378571, 0.736217, 8.218092, 0}, - {5.397724, 0.694318, 8.354561, 0}, - {5.367796, 0.709880, 8.420402, 0}, - {5.335475, 0.749385, 8.528141, 0}, - {5.313927, 0.818816, 8.493424, 0}, - {5.306745, 0.889445, 8.315057, 0}, - {5.333081, 0.893037, 8.216895, 0}, - {5.345052, 0.899022, 8.208515, 0}, - {5.348643, 0.920570, 8.322240, 0}, - {5.346249, 0.955286, 8.494622, 0}, - {5.325898, 0.984016, 8.801080, 0}, - {5.355825, 0.998381, 9.132676, 0}, - {5.388147, 0.967257, 9.349351, 0}, - {5.489901, 0.889445, 9.421177, 0}, - {5.553347, 0.900219, 9.010572, 0}, - {5.532996, 1.004367, 8.176193, 0}, - {5.509054, 1.109712, 7.471101, 0}, - {5.504266, 1.175552, 7.400473, 0}, - {5.482718, 1.159990, 7.684185, 0}, - {5.443214, 1.177946, 8.027753, 0}, - {5.426455, 1.201888, 8.292312, 0}, - {5.492295, 1.139639, 8.359349, 0}, - {5.532996, 1.092952, 8.263581, 0}, - {5.522223, 1.072602, 7.959518, 0}, - {5.504266, 1.033097, 7.606374, 0}, - {5.524617, 0.958877, 7.461524, 0}, - {5.505463, 0.876277, 7.580038, 0}, - {5.458776, 0.823605, 7.835020, 0}, - {5.432440, 0.756567, 8.016979, 0}, - {5.386950, 0.760159, 8.174996, 0}, - {5.400118, 0.748188, 8.362941, 0}, - {5.449199, 0.687135, 8.324634, 0}, - {5.426455, 0.701501, 7.993037, 0}, - {5.407301, 0.751779, 7.637498, 0}, - {5.455185, 0.737414, 7.868538, 0}, - {5.456382, 0.735019, 8.342590, 0}, - {5.409695, 0.805648, 8.420402, 0}, - {5.379767, 0.878671, 8.323437, 0}, - {5.433637, 0.877474, 8.230062, 0}, - {5.477930, 0.864306, 8.248019, 0}, - {5.511448, 0.831985, 8.370124, 0}, - {5.525814, 0.817619, 8.439555, 0}, - {5.498281, 0.797269, 8.486242, 0}, - {5.485112, 0.806845, 8.465892, 0}, - {5.480324, 0.830787, 8.364138, 0}, - {5.485112, 0.831985, 8.337802, 0}, - {5.487506, 0.854729, 8.340196, 0}, - {5.434834, 0.873883, 8.372518, 0}, - {5.397724, 0.854729, 8.346182, 0}, - {5.392936, 0.869095, 8.216895, 0}, - {5.373782, 0.891840, 8.018176, 0}, - {5.401315, 0.872686, 7.902057, 0}, - {5.448002, 0.833182, 7.929591, 0}, - {5.425257, 0.835576, 8.146266, 0}, - {5.413286, 0.849941, 8.409628, 0}, - {5.421666, 0.837970, 8.495819, 0}, - {5.434834, 0.802057, 8.402445, 0}, - {5.456382, 0.772130, 8.238442, 0}, - {5.482718, 0.749385, 8.231260, 0}, - {5.497083, 0.744596, 8.304283, 0}, - {5.479127, 0.781706, 8.298298, 0}, - {5.432440, 0.882263, 8.295903, 0}, - {5.404907, 0.958877, 8.201332, 0}, - {5.397724, 0.944512, 8.110353, 0}, - {5.394133, 0.920570, 8.216895, 0}, - {5.437228, 0.899022, 8.328225, 0}, - {5.474339, 0.902613, 8.413219, 0}, - {5.529405, 0.889445, 8.447935, 0}, - {5.590457, 0.873883, 8.355759, 0}, - {5.612005, 0.877474, 8.292312, 0}, - {5.613202, 0.870292, 8.209712, 0}, - {5.585669, 0.913387, 8.025358, 0}, - {5.511448, 0.933738, 7.991840, 0}, - {5.475535, 0.949300, 8.026556, 0}, - {5.463564, 0.999579, 8.031344, 0}, - {5.469550, 0.994790, 7.918817, 0}, - {5.504266, 0.974439, 7.881707, 0}, - {5.546165, 0.991199, 7.955927, 0}, - {5.553347, 0.997184, 8.128309, 0}, - {5.567712, 1.010352, 8.230062, 0}, - {5.553347, 1.048660, 8.279144, 0}, - {5.578486, 1.033097, 8.268370, 0}, - {5.571303, 1.016338, 8.101973, 0}, - {5.543770, 0.985213, 7.933182, 0}, - {5.550953, 0.909796, 7.971489, 0}, - {5.547361, 0.855927, 7.951138, 0}, - {5.540179, 0.840364, 7.978672, 0}, - {5.523419, 0.848744, 8.152251, 0}, - {5.491098, 0.853532, 8.298298, 0}, - {5.420469, 0.901416, 8.333014, 0}, - {5.403709, 0.937329, 8.419205, 0}, - {5.440820, 0.964863, 8.601164, 0}, - {5.465959, 0.991199, 8.426387, 0}, - {5.457579, 1.051054, 8.109156, 0}, - {5.437228, 1.104923, 7.977475, 0}, - {5.428849, 1.102529, 8.027753, 0}, - {5.433637, 1.090558, 8.195347, 0}, - {5.432440, 1.100135, 8.276750, 0}, - {5.461170, 1.134851, 8.309072, 0}, - {5.511448, 1.119289, 8.292312, 0}, - {5.540179, 1.089361, 8.316254, 0}, - {5.518631, 1.103726, 8.358152, 0}, - {5.528208, 1.112106, 8.343787, 0}, - {5.527011, 1.094149, 8.257596, 0}, - {5.495886, 1.116894, 8.154645, 0}, - {5.510252, 1.092952, 8.208515, 0}, - {5.538982, 1.058236, 8.158237, 0}, - {5.511448, 1.088164, 7.948744, 0}, - {5.515040, 1.084573, 7.852976, 0}, - {5.507857, 1.104923, 7.959518, 0}, - {5.468353, 1.138442, 8.188165, 0}, - {5.468353, 1.148019, 8.327028, 0}, - {5.481521, 1.133654, 8.289918, 0}, - {5.511448, 1.120486, 8.226472, 0}, - {5.530602, 1.086967, 8.198938, 0}, - {5.529405, 1.065419, 8.166616, 0}, - {5.469550, 1.060631, 8.221684, 0}, - {5.440820, 1.053448, 8.240837, 0}, - {5.396527, 1.053448, 8.213304, 0}, - {5.386950, 1.055842, 8.234851, 0}, - {5.421666, 1.046265, 8.246822, 0}, - {5.431243, 1.029506, 8.155843, 0}, - {5.298365, 1.292868, 5.756854, 0}, - {5.191823, 1.255758, 8.088805, 0}, - {5.204991, 1.169567, 10.260345, 0} + { -0.269348, 0.220266, 10.030501, 0 }, + { -0.259771, 0.216675, 10.113101, 0 }, + { -0.253785, 0.213084, 10.096342, 0 }, + { -0.262165, 0.201113, 10.098736, 0 }, + { -0.257377, 0.210690, 10.093947, 0 }, + { -0.253785, 0.202310, 10.096342, 0 }, + { -0.257377, 0.213084, 10.113101, 0 }, + { -0.257377, 0.221464, 10.096342, 0 }, + { -0.262165, 0.217872, 10.115496, 0 }, + { -0.258574, 0.219069, 10.102327, 0 }, + { -0.275333, 0.205901, 10.123875, 0 }, + { -0.262165, 0.209493, 10.085567, 0 }, + { -0.271742, 0.209493, 10.110707, 0 }, + { -0.275333, 0.220266, 10.096342, 0 }, + { -0.251391, 0.210690, 10.097539, 0 }, + { -0.262165, 0.210690, 10.090356, 0 }, + { -0.268150, 0.208295, 10.108313, 0 }, + { -0.258574, 0.210690, 10.098736, 0 }, + { -0.270545, 0.219069, 10.097539, 0 }, + { -0.263362, 0.211887, 10.102327, 0 }, + { -0.264559, 0.211887, 10.097539, 0 }, + { -0.262165, 0.204704, 10.090356, 0 }, + { -0.246603, 0.203507, 10.089159, 0 }, + { -0.250194, 0.215478, 10.099933, 0 }, + { -0.270545, 0.225055, 10.109509, 0 }, + { -0.256179, 0.213084, 10.097539, 0 }, + { -0.248997, 0.207098, 10.086765, 0 }, + { -0.248997, 0.210690, 10.087962, 0 }, + { -0.256179, 0.201113, 10.089159, 0 }, + { -0.258574, 0.203507, 10.104721, 0 }, + { -0.262165, 0.208295, 10.093947, 0 }, + { -0.246603, 0.204704, 10.086765, 0 }, + { -0.247800, 0.208295, 10.108313, 0 }, + { -0.252588, 0.220266, 10.099933, 0 }, + { -0.264559, 0.210690, 10.098736, 0 }, + { -0.266953, 0.185551, 10.084371, 0 }, + { -0.253785, 0.213084, 10.109509, 0 }, + { -0.256179, 0.231040, 10.099933, 0 }, + { -0.252588, 0.205901, 10.091554, 0 }, + { -0.259771, 0.207098, 10.095144, 0 }, + { -0.260968, 0.203507, 10.096342, 0 }, + { -0.253785, 0.205901, 10.095144, 0 }, + { -0.256179, 0.217872, 10.093947, 0 }, + { -0.265756, 0.209493, 10.083174, 0 }, + { -0.263362, 0.204704, 10.103524, 0 }, + { -0.253785, 0.198719, 10.095144, 0 }, + { -0.252588, 0.209493, 10.103524, 0 }, + { -0.260968, 0.205901, 10.098736, 0 }, + { -0.259771, 0.205901, 10.083174, 0 }, + { -0.266953, 0.216675, 10.090356, 0 }, + { -0.265756, 0.207098, 10.101130, 0 }, + { -0.262165, 0.204704, 10.111904, 0 }, + { -0.248997, 0.199916, 10.101130, 0 }, + { -0.263362, 0.207098, 10.096342, 0 }, + { -0.281319, 0.227449, 10.108313, 0 }, + { -0.259771, 0.219069, 10.087962, 0 }, + { -0.258574, 0.214281, 10.079582, 0 }, + { -0.268150, 0.204704, 10.108313, 0 }, + { -0.277727, 0.204704, 10.114298, 0 }, + { -0.257377, 0.208295, 10.115496, 0 }, + { -0.260968, 0.222661, 10.104721, 0 }, + { -0.265756, 0.213084, 10.102327, 0 }, + { -0.256179, 0.210690, 10.099933, 0 }, + { -0.253785, 0.203507, 10.109509, 0 }, + { -0.270545, 0.201113, 10.103524, 0 }, + { -0.259771, 0.209493, 10.115496, 0 }, + { -0.264559, 0.207098, 10.103524, 0 }, + { -0.263362, 0.202310, 10.105919, 0 }, + { -0.260968, 0.220266, 10.110707, 0 }, + { -0.257377, 0.216675, 10.110707, 0 }, + { -0.259771, 0.195127, 10.093947, 0 }, + { -0.271742, 0.209493, 10.104721, 0 }, + { -0.257377, 0.223858, 10.108313, 0 }, + { -0.265756, 0.205901, 10.101130, 0 }, + { -0.270545, 0.196324, 10.101130, 0 }, + { -0.254982, 0.202310, 10.115496, 0 }, + { -0.248997, 0.214281, 10.116693, 0 }, + { -0.268150, 0.207098, 10.111904, 0 }, + { -0.263362, 0.204704, 10.091554, 0 }, + { -0.270545, 0.210690, 10.091554, 0 }, + { -0.268150, 0.215478, 10.102327, 0 }, + { -0.264559, 0.223858, 10.096342, 0 }, + { -0.262165, 0.203507, 10.099933, 0 }, + { -0.259771, 0.203507, 10.103524, 0 }, + { -0.269348, 0.204704, 10.119086, 0 }, + { -0.265756, 0.202310, 10.091554, 0 }, + { -0.260968, 0.201113, 10.092751, 0 }, + { -0.260968, 0.210690, 10.092751, 0 }, + { -0.266953, 0.205901, 10.109509, 0 }, + { -0.269348, 0.203507, 10.105919, 0 }, + { -0.264559, 0.193930, 10.114298, 0 }, + { -0.263362, 0.216675, 10.093947, 0 }, + { -0.256179, 0.208295, 10.095144, 0 }, + { -0.271742, 0.203507, 10.103524, 0 }, + { -0.259771, 0.208295, 10.089159, 0 }, + { -0.257377, 0.220266, 10.108313, 0 }, + { -0.266953, 0.207098, 10.101130, 0 }, + { -0.268150, 0.198719, 10.117889, 0 }, + { -0.258574, 0.204704, 10.091554, 0 }, + { -0.266953, 0.201113, 10.104721, 0 }, + { -0.265756, 0.205901, 10.091554, 0 }, + { -0.277727, 0.203507, 10.102327, 0 }, + { -0.266953, 0.204704, 10.093947, 0 }, + { -0.265756, 0.215478, 10.107116, 0 }, + { -0.254982, 0.215478, 10.110707, 0 }, + { -0.269348, 0.217872, 10.095144, 0 }, + { -0.265756, 0.229843, 10.109509, 0 }, + { -0.260968, 0.226252, 10.098736, 0 }, + { -0.253785, 0.208295, 10.095144, 0 }, + { -0.253785, 0.211887, 10.085567, 0 }, + { -0.268150, 0.214281, 10.109509, 0 }, + { -0.258574, 0.201113, 10.107116, 0 }, + { -0.265756, 0.211887, 10.103524, 0 }, + { -0.256179, 0.215478, 10.093947, 0 }, + { -0.263362, 0.204704, 10.107116, 0 }, + { -0.260968, 0.214281, 10.098736, 0 }, + { -0.259771, 0.213084, 10.110707, 0 }, + { -0.276530, 0.215478, 10.095144, 0 }, + { -0.263362, 0.211887, 10.084371, 0 }, + { -0.245406, 0.217872, 10.110707, 0 }, + { -0.251391, 0.209493, 10.105919, 0 }, + { -0.269348, 0.205901, 10.093947, 0 }, + { -0.271742, 0.201113, 10.099933, 0 }, + { -0.270545, 0.228646, 10.099933, 0 }, + { -0.262165, 0.217872, 10.096342, 0 }, + { -0.259771, 0.209493, 10.099933, 0 }, + { -0.260968, 0.210690, 10.105919, 0 }, + { -0.252588, 0.203507, 10.099933, 0 }, + { -0.263362, 0.197522, 10.095144, 0 }, + { -0.271742, 0.213084, 10.101130, 0 }, + { -0.268150, 0.196324, 10.110707, 0 }, + { -0.248997, 0.213084, 10.108313, 0 }, + { -0.254982, 0.215478, 10.095144, 0 }, + { -0.260968, 0.208295, 10.107116, 0 }, + { -0.259771, 0.219069, 10.108313, 0 }, + { -0.266953, 0.214281, 10.098736, 0 }, + { -0.269348, 0.202310, 10.090356, 0 }, + { -0.258574, 0.204704, 10.113101, 0 }, + { -0.263362, 0.226252, 10.086765, 0 }, + { -0.264559, 0.204704, 10.096342, 0 }, + { -0.271742, 0.219069, 10.096342, 0 }, + { -0.252588, 0.210690, 10.104721, 0 }, + { -0.258574, 0.211887, 10.113101, 0 }, + { -0.264559, 0.210690, 10.104721, 0 }, + { -0.269348, 0.214281, 10.103524, 0 }, + { -0.253785, 0.211887, 10.093947, 0 }, + { -0.256179, 0.223858, 10.110707, 0 }, + { -0.274136, 0.207098, 10.098736, 0 }, + { -0.274136, 0.207098, 10.092751, 0 }, + { -0.254982, 0.210690, 10.091554, 0 }, + { -0.257377, 0.204704, 10.098736, 0 }, + { -0.257377, 0.209493, 10.108313, 0 }, + { -0.257377, 0.211887, 10.095144, 0 }, + { -0.259771, 0.199916, 10.095144, 0 }, + { -0.257377, 0.214281, 10.101130, 0 }, + { -0.270545, 0.217872, 10.103524, 0 }, + { -0.281319, 0.204704, 10.104721, 0 }, + { -0.271742, 0.208295, 10.103524, 0 }, + { -0.258574, 0.211887, 10.104721, 0 }, + { -0.264559, 0.204704, 10.126269, 0 }, + { -0.262165, 0.201113, 10.101130, 0 }, + { -0.258574, 0.219069, 10.096342, 0 }, + { -0.263362, 0.211887, 10.107116, 0 }, + { -0.265756, 0.203507, 10.091554, 0 }, + { -0.264559, 0.205901, 10.107116, 0 }, + { -0.256179, 0.214281, 10.095144, 0 }, + { -0.263362, 0.202310, 10.097539, 0 }, + { -0.271742, 0.207098, 10.104721, 0 }, + { -0.272939, 0.210690, 10.101130, 0 }, + { -0.262165, 0.205901, 10.096342, 0 }, + { -0.260968, 0.209493, 10.107116, 0 }, + { -0.269348, 0.217872, 10.093947, 0 }, + { -0.256179, 0.220266, 10.087962, 0 }, + { -0.264559, 0.208295, 10.092751, 0 }, + { -0.265756, 0.208295, 10.095144, 0 }, + { -0.262165, 0.199916, 10.098736, 0 }, + { -0.259771, 0.215478, 10.101130, 0 }, + { -0.263362, 0.217872, 10.097539, 0 }, + { -0.263362, 0.204704, 10.095144, 0 }, + { -0.248997, 0.202310, 10.096342, 0 }, + { -0.260968, 0.226252, 10.097539, 0 }, + { -0.259771, 0.216675, 10.103524, 0 }, + { -0.270545, 0.205901, 10.090356, 0 }, + { -0.250194, 0.219069, 10.089159, 0 }, + { -0.254982, 0.213084, 10.098736, 0 }, + { -0.268150, 0.204704, 10.102327, 0 }, + { -0.258574, 0.215478, 10.104721, 0 }, + { -0.250194, 0.217872, 10.102327, 0 }, + { -0.250194, 0.215478, 10.097539, 0 }, + { -0.251391, 0.213084, 10.086765, 0 }, + { -0.266953, 0.204704, 10.108313, 0 }, + { -0.270545, 0.199916, 10.099933, 0 }, + { -0.271742, 0.208295, 10.092751, 0 }, + { -0.268150, 0.222661, 10.098736, 0 }, + { -0.252588, 0.213084, 10.096342, 0 }, + { -0.266953, 0.213084, 10.092751, 0 }, + { -0.265756, 0.205901, 10.105919, 0 }, + { -0.258574, 0.209493, 10.103524, 0 }, + { -0.263362, 0.203507, 10.103524, 0 }, + { -0.265756, 0.213084, 10.092751, 0 }, + { -0.266953, 0.209493, 10.097539, 0 }, + { -0.272939, 0.193930, 10.110707, 0 }, + { -0.258574, 0.209493, 10.109509, 0 }, + { -0.259771, 0.213084, 10.101130, 0 }, + { -0.274136, 0.215478, 10.101130, 0 }, + { -0.259771, 0.207098, 10.091554, 0 }, + { -0.265756, 0.208295, 10.101130, 0 }, + { -0.263362, 0.210690, 10.109509, 0 }, + { -0.264559, 0.216675, 10.110707, 0 }, + { -0.266953, 0.211887, 10.099933, 0 }, + { -0.268150, 0.199916, 10.093947, 0 }, + { -0.265756, 0.216675, 10.105919, 0 }, + { -0.262165, 0.204704, 10.081977, 0 }, + { -0.263362, 0.214281, 10.086765, 0 }, + { -0.263362, 0.210690, 10.084371, 0 }, + { -0.257377, 0.201113, 10.104721, 0 }, + { -0.262165, 0.203507, 10.109509, 0 }, + { -0.266953, 0.217872, 10.113101, 0 }, + { -0.252588, 0.209493, 10.102327, 0 }, + { -0.257377, 0.213084, 10.096342, 0 }, + { -0.260968, 0.211887, 10.101130, 0 }, + { -0.263362, 0.197522, 10.114298, 0 }, + { -0.272939, 0.192733, 10.103524, 0 }, + { -0.250194, 0.207098, 10.079582, 0 }, + { -0.253785, 0.214281, 10.107116, 0 }, + { -0.254982, 0.205901, 10.095144, 0 }, + { -0.256179, 0.209493, 10.103524, 0 }, + { -0.265756, 0.222661, 10.111904, 0 }, + { -0.259771, 0.211887, 10.101130, 0 }, + { -0.256179, 0.202310, 10.115496, 0 }, + { -0.260968, 0.209493, 10.109509, 0 }, + { -0.243011, 0.203507, 10.101130, 0 }, + { -0.252588, 0.205901, 10.096342, 0 }, + { -0.253785, 0.225055, 10.095144, 0 }, + { -0.258574, 0.225055, 10.096342, 0 }, + { -0.264559, 0.215478, 10.092751, 0 }, + { -0.265756, 0.205901, 10.114298, 0 }, + { -0.266953, 0.220266, 10.108313, 0 }, + { -0.268150, 0.208295, 10.109509, 0 }, + { -0.259771, 0.210690, 10.103524, 0 }, + { -0.253785, 0.210690, 10.109509, 0 }, + { -0.268150, 0.213084, 10.097539, 0 }, + { -0.268150, 0.215478, 10.102327, 0 }, + { -0.269348, 0.201113, 10.103524, 0 }, + { -0.262165, 0.199916, 10.107116, 0 }, + { -0.260968, 0.205901, 10.120284, 0 }, + { -0.257377, 0.193930, 10.102327, 0 }, + { -0.264559, 0.203507, 10.104721, 0 }, + { -0.265756, 0.210690, 10.093947, 0 }, + { -0.256179, 0.209493, 10.097539, 0 }, + { -0.257377, 0.204704, 10.107116, 0 }, + { -0.260968, 0.208295, 10.093947, 0 }, + { -0.258574, 0.204704, 10.102327, 0 }, + { -0.263362, 0.211887, 10.107116, 0 }, + { -0.263362, 0.191536, 10.097539, 0 }, + { -0.253785, 0.209493, 10.107116, 0 }, + { -0.254982, 0.217872, 10.105919, 0 }, + { -0.259771, 0.207098, 10.096342, 0 }, + { -0.265756, 0.204704, 10.114298, 0 }, + { -0.270545, 0.208295, 10.099933, 0 }, + { -0.262165, 0.214281, 10.104721, 0 }, + { -0.257377, 0.205901, 10.095144, 0 }, + { -0.266953, 0.214281, 10.096342, 0 }, + { -0.274136, 0.225055, 10.093947, 0 }, + { -0.266953, 0.216675, 10.099933, 0 }, + { -0.269348, 0.208295, 10.099933, 0 }, + { -0.266953, 0.222661, 10.105919, 0 }, + { -0.246603, 0.204704, 10.090356, 0 }, + { -0.257377, 0.202310, 10.102327, 0 }, + { -0.258574, 0.217872, 10.114298, 0 }, + { -0.268150, 0.225055, 10.099933, 0 }, + { -0.278924, 0.210690, 10.097539, 0 }, + { -0.263362, 0.203507, 10.104721, 0 }, + { -0.252588, 0.221464, 10.089159, 0 }, + { -0.252588, 0.208295, 10.073597, 0 }, + { -0.252588, 0.213084, 10.091554, 0 }, + { -0.256179, 0.210690, 10.087962, 0 }, + { -0.272939, 0.214281, 10.097539, 0 }, + { -0.259771, 0.203507, 10.097539, 0 }, + { -0.271742, 0.208295, 10.102327, 0 }, + { -0.262165, 0.216675, 10.095144, 0 }, + { -0.264559, 0.215478, 10.095144, 0 }, + { -0.265756, 0.214281, 10.103524, 0 }, + { -0.268150, 0.217872, 10.096342, 0 }, + { -0.262165, 0.221464, 10.104721, 0 }, + { -0.274136, 0.219069, 10.101130, 0 }, + { -0.264559, 0.208295, 10.097539, 0 }, + { -0.265756, 0.203507, 10.089159, 0 }, + { -0.269348, 0.204704, 10.110707, 0 }, + { -0.268150, 0.214281, 10.116693, 0 }, + { -0.250194, 0.199916, 10.102327, 0 }, + { -0.266953, 0.197522, 10.105919, 0 }, + { -0.268150, 0.199916, 10.108313, 0 }, + { -0.259771, 0.195127, 10.093947, 0 }, + { -0.262165, 0.215478, 10.085567, 0 }, + { -0.263362, 0.216675, 10.101130, 0 }, + { -0.252588, 0.227449, 10.037683, 0 }, + { -0.276530, 0.208295, 10.177745, 0 }, + { -0.254982, 0.205901, 10.175350, 0 }, + { -0.257377, 0.204704, 10.041275, 0 }, + { -0.258574, 0.210690, 10.117889, 1 }, + { -0.243011, 0.209493, 10.085567, 0 }, + { -0.254982, 0.196324, 10.109509, 0 }, + { -0.248997, 0.193930, 10.097539, 0 }, + { -0.269348, 0.207098, 10.098736, 0 }, + { -0.262165, 0.213084, 10.098736, 0 }, + { -0.262165, 0.201113, 10.066414, 0 }, + { -0.264559, 0.208295, 10.103524, 0 }, + { -0.264559, 0.208295, 10.101130, 0 }, + { -0.257377, 0.210690, 10.119086, 0 }, + { -0.256179, 0.198719, 10.093947, 0 }, + { -0.253785, 0.198719, 10.113101, 0 }, + { -0.254982, 0.215478, 10.081977, 0 }, + { -0.259771, 0.210690, 10.092751, 0 }, + { -0.264559, 0.214281, 10.090356, 0 }, + { -0.260968, 0.187945, 10.144226, 0 }, + { -0.268150, 0.245406, 10.073597, 0 }, + { -0.408211, 0.396240, 10.056837, 0 }, + { -2.020705, 2.340331, 10.170562, 0 }, + { -0.186748, 1.916557, 10.966634, 0 }, + { 7.234076, -2.675519, 16.133318, 0 }, + { 7.775165, 0.863109, 11.798618, 0 }, + { 3.503912, -1.510740, 2.634817, 0 }, + { -3.895364, -5.768825, 9.538493, 0 }, + { -4.587287, -2.717417, 26.975452, 0 }, + { -3.013101, 4.329911, 32.156502, 0 }, + { -4.693829, -1.854308, 19.993965, 0 }, + { -5.236115, -2.634817, 18.126490, 0 }, + { -6.558911, 1.010352, 20.283663, 0 }, + { -8.033738, 0.130484, 22.203812, 0 }, + { -7.487861, -0.525527, 18.705885, 0 }, + { -6.692986, 0.266953, 15.228310, 0 }, + { -6.151897, 0.128090, 10.176547, 0 }, + { -6.020216, 0.745793, 5.400118, 0 }, + { -5.798753, 1.690305, 1.695094, 0 }, + { -3.584117, 1.229422, -1.827972, 0 }, + { -0.386663, 1.133654, -4.835087, 0 }, + { 0.955286, 1.742978, -4.969162, 0 }, + { 3.201046, 1.059434, -6.075283, 0 }, + { 7.366954, -0.312443, -7.837414, 0 }, + { 8.429978, -0.656011, -6.296746, 0 }, + { 6.950363, -0.164003, -3.179498, 0 }, + { 6.801922, -0.415394, -0.955286, 0 }, + { 7.827837, -0.814028, 1.152807, 0 }, + { 7.793121, -0.723048, 3.940853, 0 }, + { 7.422020, -0.292092, 6.720520, 0 }, + { 7.978672, -0.298078, 7.856567, 0 }, + { 8.202530, -0.122104, 7.301113, 0 }, + { 7.778756, 0.360327, 6.107605, 0 }, + { 7.892480, 0.318429, 5.987895, 0 }, + { 8.950717, 0.108936, 6.327871, 0 }, + { 8.798685, 0.319626, 7.009021, 0 }, + { 7.748828, 0.839167, 7.133519, 0 }, + { 7.795516, 0.958877, 6.597219, 0 }, + { 7.850582, 1.035492, 5.942405, 0 }, + { 7.547716, 1.152807, 5.074507, 0 }, + { 7.116760, 1.128865, 4.546586, 0 }, + { 7.422020, 0.805648, 4.566936, 0 }, + { 7.937970, 0.517147, 4.827904, 0 }, + { 8.088805, 0.418985, 5.172669, 0 }, + { 8.329422, 0.415394, 5.573698, 0 }, + { 8.099579, 0.739808, 5.117603, 0 }, + { 7.973883, 0.805648, 4.387372, 0 }, + { 7.833823, 1.048660, 3.857056, 0 }, + { 8.100776, 1.177946, 3.950430, 0 }, + { 8.722071, 1.122880, 4.909307, 0 }, + { 9.400826, 0.921767, 5.566515, 0 }, + { 9.440331, 0.920570, 5.175064, 0 }, + { 8.723268, 1.022323, 4.551374, 0 }, + { 8.115141, 1.175552, 4.096477, 0 }, + { 8.135491, 1.387439, 3.754106, 0 }, + { 8.602361, 1.533485, 3.762486, 0 }, + { 8.884876, 1.289277, 4.268859, 0 }, + { 8.775940, 0.867898, 4.517856, 0 }, + { 8.434767, 0.647631, 4.377795, 0 }, + { 8.220486, 0.623689, 4.394554, 0 }, + { 7.817063, 0.945709, 4.226960, 0 }, + { 8.021768, 1.249772, 3.598483, 0 }, + { 9.108734, 0.667982, 3.156753, 0 }, + { 9.658203, 0.177171, 2.748542, 0 }, + { 9.301467, 0.393846, 2.639606, 0 }, + { 9.026134, 0.736217, 3.105278, 0 }, + { 8.865723, 0.814028, 3.799596, 0 }, + { 8.759181, 0.849941, 4.060563, 0 }, + { 8.493424, 0.964863, 4.404131, 0 }, + { 8.276750, 1.033097, 4.540600, 0 }, + { 8.324634, 0.908599, 4.672281, 0 }, + { 8.778335, 0.644040, 4.946417, 0 }, + { 8.558068, 0.827196, 5.007470, 0 }, + { 8.507790, 0.703895, 4.434059, 0 }, + { 8.688552, 0.684741, 3.661929, 0 }, + { 8.784320, 0.820014, 3.207031, 0 }, + { 8.844175, 0.839167, 3.385399, 0 }, + { 8.908818, 0.858321, 3.974372, 0 }, + { 9.044091, 0.907402, 4.442438, 0 }, + { 8.989024, 0.899022, 4.399343, 0 }, + { 8.925578, 0.815225, 4.141966, 0 }, + { 9.033317, 0.615309, 3.840297, 0 }, + { 9.083595, 0.436942, 3.727770, 0 }, + { 9.020149, 0.338779, 3.928882, 0 }, + { 8.930367, 0.299275, 4.174288, 0 }, + { 8.963885, 0.246603, 4.288013, 0 }, + { 8.842978, 0.304063, 4.236537, 0 }, + { 8.641865, 0.396240, 4.152740, 0 }, + { 8.591587, 0.466869, 4.163514, 0 }, + { 8.656230, 0.460884, 4.255691, 0 }, + { 8.836992, 0.398634, 4.118024, 0 }, + { 8.957899, 0.453701, 3.754106, 0 }, + { 9.045288, 0.502782, 3.326741, 0 }, + { 9.083595, 0.586579, 3.045423, 0 }, + { 9.033317, 0.705092, 3.004721, 0 }, + { 8.968674, 0.715866, 3.072956, 0 }, + { 8.899241, 0.684741, 3.071759, 0 }, + { 8.809459, 0.632069, 3.072956, 0 }, + { 8.832204, 0.585382, 3.138796, 0 }, + { 8.825022, 0.575805, 3.143585, 0 }, + { 8.761575, 0.556652, 3.064576, 0 }, + { 8.750801, 0.594959, 3.092109, 0 }, + { 8.817839, 0.633266, 3.129220, 0 }, + { 8.913607, 0.640449, 3.046620, 0 }, + { 8.998601, 0.658405, 2.869449, 0 }, + { 9.095566, 0.684741, 2.670730, 0 }, + { 9.133873, 0.694318, 2.789243, 0 }, + { 9.126691, 0.676362, 3.256112, 0 }, + { 9.041697, 0.723048, 3.632001, 0 }, + { 8.827415, 0.763750, 3.794807, 0 }, + { 8.853752, 0.694318, 3.775654, 0 }, + { 9.000996, 0.618901, 3.673900, 0 }, + { 9.066835, 0.561440, 3.708616, 0 }, + { 9.075215, 0.497994, 3.767274, 0 }, + { 9.064442, 0.417788, 3.775654, 0 }, + { 9.003389, 0.444124, 3.676294, 0 }, + { 8.943534, 0.500388, 3.551796, 0 }, + { 8.961491, 0.505176, 3.343500, 0 }, + { 8.789108, 0.600944, 3.191469, 0 }, + { 8.816642, 0.596156, 3.118446, 0 }, + { 8.889665, 0.549469, 3.131614, 0 }, + { 8.881285, 0.533907, 3.242944, 0 }, + { 8.783123, 0.590170, 3.416523, 0 }, + { 8.716085, 0.642843, 3.600877, 0 }, + { 8.719677, 0.612915, 3.694251, 0 }, + { 8.792700, 0.532710, 3.641578, 0 }, + { 8.895650, 0.470460, 3.475181, 0 }, + { 8.902833, 0.453701, 3.179498, 0 }, + { 8.833401, 0.399831, 2.855083, 0 }, + { 8.759181, 0.278924, 2.383426, 0 }, + { 8.670595, 0.118513, 1.875856, 0 }, + { 8.531732, -0.013168, 1.414972, 0 }, + { 8.376109, -0.057461, 1.115697, 0 }, + { 8.304283, -0.015562, 1.341949, 0 }, + { 7.916422, 0.159214, 1.878250, 0 }, + { 7.595600, 0.270545, 3.086124, 0 }, + { 7.516591, 0.349553, 4.906913, 0 }, + { 7.881707, 0.061052, 6.694183, 0 }, + { 8.112747, -0.235829, 7.243652, 0 }, + { 8.034935, -0.387860, 7.001838, 0 }, + { 8.052892, -0.222661, 6.254848, 0 }, + { 7.948744, 0.203507, 5.623976, 0 }, + { 7.327449, 0.853532, 5.892127, 0 }, + { 6.556517, 1.406592, 6.268016, 0 }, + { 6.993458, 1.375468, 6.548137, 0 }, + { 7.503423, 1.138442, 6.823470, 0 }, + { 7.237667, 1.118091, 7.408852, 0 }, + { 7.144293, 1.031900, 8.170208, 0 }, + { 7.127533, 0.927753, 8.361744, 0 }, + { 6.883325, 0.820014, 8.204924, 0 }, + { 6.708549, 0.644040, 7.923605, 0 }, + { 6.877340, 0.410605, 7.595600, 0 }, + { 7.054511, 0.339976, 7.395684, 0 }, + { 7.176615, 0.295684, 7.271185, 0 }, + { 7.182600, 0.259771, 7.201754, 0 }, + { 6.823470, 0.384269, 7.207739, 0 }, + { 6.624752, 0.464475, 7.419626, 0 }, + { 6.767207, 0.436942, 7.730872, 0 }, + { 6.834244, 0.386663, 7.971489, 0 }, + { 6.795937, 0.344765, 7.827837, 0 }, + { 6.531378, 0.404620, 7.354982, 0 }, + { 6.513421, 0.317232, 7.140702, 0 }, + { 6.649891, 0.192733, 7.065284, 0 }, + { 6.544546, 0.299275, 6.846215, 0 }, + { 6.555320, 0.381875, 6.678621, 0 }, + { 6.630737, 0.332794, 6.690592, 0 }, + { 6.636723, 0.199916, 6.915647, 0 }, + { 6.590036, 0.169988, 7.594403, 0 }, + { 6.248862, 0.393846, 8.506593, 0 }, + { 6.199781, 0.445321, 8.953111, 0 }, + { 6.538560, 0.023942, 8.977053, 0 }, + { 6.251256, 0.074220, 8.766363, 0 }, + { 6.154291, 0.337582, 8.178588, 0 }, + { 6.550531, 0.281319, 7.522577, 0 }, + { 6.397303, 0.652420, 7.284354, 0 }, + { 6.174642, 0.914584, 7.181403, 0 }, + { 6.265622, 0.825999, 6.584050, 0 }, + { 6.449975, 0.812831, 6.244074, 0 }, + { 6.738476, 0.641646, 6.549335, 0 }, + { 6.904873, 0.591367, 6.961137, 0 }, + { 6.669044, 0.671573, 7.244849, 0 }, + { 6.514618, 0.677559, 7.499832, 0 }, + { 6.716928, 0.464475, 7.510606, 0 }, + { 6.792346, 0.463278, 7.596797, 0 }, + { 6.734885, 0.585382, 7.791924, 0 }, + { 6.658270, 0.447715, 7.554898, 0 }, + { 6.463143, 0.486023, 7.091620, 0 }, + { 6.501450, 0.563834, 6.517013, 0 }, + { 6.488282, 0.654814, 6.062115, 0 }, + { 6.436807, 0.670376, 6.069297, 0 }, + { 6.479902, 0.659602, 6.549335, 0 }, + { 6.368572, 0.628478, 7.060496, 0 }, + { 6.446383, 0.487220, 7.497437, 0 }, + { 6.628343, 0.423773, 7.789530, 0 }, + { 6.636723, 0.460884, 7.996628, 0 }, + { 6.369769, 0.560243, 8.149857, 0 }, + { 6.105210, 0.602141, 8.106761, 0 }, + { 6.810302, 0.294487, 8.166616, 0 }, + { 7.140702, 0.201113, 8.110353, 0 }, + { 6.691789, 0.211887, 7.706930, 0 }, + { 6.524195, 0.271742, 7.422020, 0 }, + { 6.406879, 0.363918, 7.422020, 0 }, + { 6.278790, 0.423773, 7.556096, 0 }, + { 6.175839, 0.460884, 7.661440, 0 }, + { 6.229709, 0.451307, 7.507014, 0 }, + { 6.511027, 0.403423, 6.991064, 0 }, + { 6.872551, 0.345962, 6.734885, 0 }, + { 6.777980, 0.488417, 6.701366, 0 }, + { 6.730096, 0.620098, 6.682212, 0 }, + { 6.818682, 0.694318, 6.673833, 0 }, + { 6.897690, 0.634463, 6.702563, 0 }, + { 6.824667, 0.557849, 6.743265, 0 }, + { 6.700169, 0.621295, 6.815091, 0 }, + { 6.441595, 0.687135, 6.744462, 0 }, + { 6.476311, 0.812831, 6.872551, 0 }, + { 7.070073, 0.621295, 7.327449, 0 }, + { 6.791149, 0.446518, 7.169432, 0 }, + { 6.742067, 0.513556, 7.479481, 0 }, + { 6.738476, 0.420182, 7.603980, 0 }, + { 6.797134, 0.195127, 7.705733, 0 }, + { 6.882128, 0.363918, 7.593205, 0 }, + { 6.769601, 0.568623, 7.325055, 0 }, + { 6.915647, 0.465672, 7.016203, 0 }, + { 7.165841, 0.305261, 6.475114, 0 }, + { 7.277171, 0.234632, 5.893323, 0 }, + { 7.274777, 0.275333, 5.352234, 0 }, + { 6.994656, 0.428562, 5.149924, 0 }, + { 6.801922, 0.456095, 5.353431, 0 }, + { 6.751644, 0.354342, 5.864593, 0 }, + { 6.592430, 0.339976, 6.321885, 0 }, + { 6.416456, 0.262165, 6.567291, 0 }, + { 6.847412, -0.142455, 7.101197, 0 }, + { 7.248441, -0.061052, 7.084438, 0 }, + { 6.556517, 0.310049, 7.459130, 0 }, + { 6.555320, 0.251391, 7.558490, 0 }, + { 6.552926, 0.347159, 7.578840, 0 }, + { 6.534969, 0.442927, 7.498635, 0 }, + { 6.439201, 0.484826, 7.303507, 0 }, + { 6.555320, 0.341173, 7.278368, 0 }, + { 6.587642, 0.209493, 7.347800, 0 }, + { 6.563700, 0.135272, 7.492649, 0 }, + { 6.603204, 0.100556, 7.559687, 0 }, + { 6.515815, 0.198719, 7.558490, 0 }, + { 6.441595, 0.270545, 7.536942, 0 }, + { 6.330265, 0.298078, 7.629118, 0 }, + { 6.339842, 0.277727, 7.694959, 0 }, + { 6.260833, 0.245406, 7.636301, 0 }, + { 6.145912, 0.185551, 7.546519, 0 }, + { 6.068100, 0.132878, 7.322661, 0 }, + { 5.987895, 0.122104, 7.220907, 0 }, + { 5.989091, 0.123301, 7.357377, 0 }, + { 5.981909, 0.122104, 7.590811, 0 }, + { 6.020216, 0.088585, 7.677002, 0 }, + { 6.030990, 0.148440, 7.593205, 0 }, + { 6.063312, 0.219069, 7.480678, 0 }, + { 6.089648, 0.265756, 7.527365, 0 }, + { 6.050144, 0.359130, 7.862553, 0 }, + { 6.011837, 0.365116, 8.170208, 0 }, + { 6.011837, 0.265756, 8.222880, 0 }, + { 5.893323, 0.202310, 8.207318, 0 }, + { 5.845439, 0.137667, 8.021768, 0 }, + { 5.822695, 0.196324, 8.021768, 0 }, + { 5.906492, 0.239420, 8.250414, 0 }, + { 5.809526, 0.296881, 8.378503, 0 }, + { 5.810724, 0.222661, 8.389277, 0 }, + { 5.754460, 0.226252, 8.317451, 0 }, + { 5.809526, 0.104148, 8.396460, 0 }, + { 5.810724, 0.187945, 8.570039, 0 }, + { 6.063312, 0.287304, 8.530535, 0 }, + { 6.098028, 0.141258, 8.274356, 0 }, + { 5.651509, 0.290895, 8.311465, 0 }, + { 5.661086, 0.392649, 8.327028, 0 }, + { 5.258861, 0.590170, 8.374912, 0 }, + { 6.062115, 0.117316, 7.928393, 0 }, + { 6.623555, -0.246603, 7.491452, 0 }, + { 6.019019, 0.135272, 7.080847, 0 }, + { 6.084859, 0.463278, 7.062890, 0 }, + { 5.912477, 0.451307, 7.258018, 0 }, + { 5.827483, 0.532710, 7.372939, 0 }, + { 5.821497, 0.537498, 7.540533, 0 }, + { 5.737700, 0.536301, 7.648272, 0 }, + { 5.851425, 0.383072, 7.718901, 0 }, + { 6.072888, 0.365116, 7.699748, 0 }, + { 5.929236, 0.392649, 7.878115, 0 }, + { 5.967544, 0.354342, 8.107959, 0 }, + { 6.045355, 0.253785, 8.421598, 0 }, + { 5.923251, 0.323217, 8.574827, 0 }, + { 5.803541, 0.372298, 8.486242, 0 }, + { 5.785584, 0.416591, 8.215697, 0 }, + { 5.768825, 0.496797, 7.946350, 0 }, + { 5.838257, 0.527921, 7.711719, 0 }, + { 5.963953, 0.471657, 7.472299, 0 }, + { 5.986697, 0.430956, 7.435188, 0 }, + { 5.928040, 0.436942, 7.484270, 0 }, + { 5.907689, 0.472855, 7.449553, 0 }, + { 5.935222, 0.456095, 7.354982, 0 }, + { 5.959164, 0.450110, 7.420823, 0 }, + { 5.960361, 0.391452, 7.717704, 0 }, + { 5.880156, 0.399831, 7.902057, 0 }, + { 5.771219, 0.411802, 7.936773, 0 }, + { 5.997471, 0.266953, 8.137886, 0 }, + { 5.945996, 0.380678, 8.301888, 0 }, + { 5.877761, 0.434547, 8.265976, 0 }, + { 5.904098, 0.408211, 7.947547, 0 }, + { 5.918463, 0.432153, 7.615951, 0 }, + { 5.869381, 0.438139, 7.486664, 0 }, + { 5.837060, 0.451307, 7.556096, 0 }, + { 5.900506, 0.465672, 7.654258, 0 }, + { 5.870579, 0.454898, 7.651864, 0 }, + { 5.875367, 0.454898, 7.615951, 0 }, + { 5.887338, 0.451307, 7.697353, 0 }, + { 5.850228, 0.456095, 7.779953, 0 }, + { 5.858608, 0.477643, 7.884101, 0 }, + { 5.749671, 0.506373, 7.787136, 0 }, + { 5.683831, 0.507570, 7.660243, 0 }, + { 5.740095, 0.469263, 7.811078, 0 }, + { 5.766431, 0.405817, 8.002614, 0 }, + { 5.714955, 0.442927, 8.042118, 0 }, + { 5.723335, 0.399831, 8.002614, 0 }, + { 5.712561, 0.343568, 7.995431, 0 }, + { 5.741292, 0.323217, 8.110353, 0 }, + { 5.766431, 0.349553, 8.237246, 0 }, + { 5.704182, 0.367510, 8.276750, 0 }, + { 5.651509, 0.348356, 8.161828, 0 }, + { 5.655100, 0.367510, 7.977475, 0 }, + { 5.770022, 0.269348, 8.037330, 0 }, + { 5.765234, 0.149638, 8.125915, 0 }, + { 5.671860, 0.073023, 7.973883, 0 }, + { 5.667071, 0.105345, 7.836217, 0 }, + { 5.662283, 0.092177, 7.824246, 0 }, + { 5.702984, 0.031125, 7.970292, 0 }, + { 5.731715, -0.005986, 8.169010, 0 }, + { 5.705379, -0.038307, 8.178588, 0 }, + { 5.635947, -0.082600, 8.060075, 0 }, + { 5.614399, -0.087388, 7.846991, 0 }, + { 5.607216, -0.051475, 7.807487, 0 }, + { 5.610808, -0.033519, 7.864947, 0 }, + { 5.594049, 0.014365, 7.959518, 0 }, + { 5.595245, 0.070629, 8.085214, 0 }, + { 5.577289, 0.046687, 8.267173, 0 }, + { 5.512646, -0.061052, 8.195347, 0 }, + { 5.414484, -0.068235, 7.988248, 0 }, + { 5.358220, 0.023942, 7.862553, 0 }, + { 5.412089, 0.094571, 7.925999, 0 }, + { 5.420469, 0.159214, 8.106761, 0 }, + { 5.276817, 0.208295, 8.341393, 0 }, + { 5.264846, 0.239420, 8.215697, 0 }, + { 5.281605, 0.105345, 8.564054, 0 }, + { 5.311533, -0.020351, 8.683764, 0 }, + { 5.209779, 0.087388, 8.489834, 0 }, + { 5.149924, 0.135272, 8.765166, 0 }, + { 5.169078, 0.017957, 9.282313, 0 }, + { 5.274423, -0.105345, 9.628276, 0 }, + { 5.270832, -0.059855, 9.247598, 0 }, + { 5.166684, 0.098162, 8.629894, 0 }, + { 5.128376, 0.126893, 8.294706, 0 }, + { 5.119997, 0.088585, 8.373714, 0 }, + { 5.146333, 0.090980, 8.540112, 0 }, + { 5.112814, 0.226252, 8.293509, 0 }, + { 5.086478, 0.238223, 8.079228, 0 }, + { 5.076901, 0.137667, 8.086411, 0 }, + { 5.064930, 0.064643, 8.396460, 0 }, + { 5.090069, 0.101754, 8.791503, 0 }, + { 5.090069, 0.272939, 9.018951, 0 }, + { 5.106829, 0.399831, 8.947125, 0 }, + { 5.129574, 0.401029, 8.738831, 0 }, + { 5.143939, 0.233435, 8.713691, 0 }, + { 5.165487, 0.124498, 8.570039, 0 }, + { 5.170275, 0.147243, 8.276750, 0 }, + { 5.114011, 0.207098, 7.818260, 0 }, + { 5.033806, 0.308852, 7.491452, 0 }, + { 5.043383, 0.314837, 7.789530, 0 }, + { 5.061339, 0.219069, 8.386883, 0 }, + { 5.069719, 0.137667, 8.644259, 0 }, + { 5.058945, 0.147243, 8.481454, 0 }, + { 5.007470, 0.186748, 8.107959, 0 }, + { 4.957191, 0.214281, 8.024161, 0 }, + { 5.048171, 0.130484, 8.451527, 0 }, + { 5.088872, 0.058658, 8.924380, 0 }, + { 5.104434, -0.016759, 9.154224, 0 }, + { 5.117603, -0.027533, 8.935155, 0 }, + { 5.018243, 0.071826, 8.637076, 0 }, + { 4.983528, 0.090980, 8.604755, 0 }, + { 5.019441, 0.026336, 8.650245, 0 }, + { 5.030214, -0.013168, 8.646653, 0 }, + { 4.939235, -0.026336, 8.565250, 0 }, + { 4.879380, -0.089783, 8.562857, 0 }, + { 4.832693, -0.186748, 8.906425, 0 }, + { 4.851846, -0.294487, 9.361322, 0 }, + { 4.910504, -0.284910, 9.572012, 0 }, + { 4.920081, -0.166397, 9.233232, 0 }, + { 4.865015, -0.051475, 8.621514, 0 }, + { 4.821919, -0.007183, 8.482651, 0 }, + { 4.851846, -0.021548, 8.792700, 0 }, + { 4.916490, -0.056264, 9.081201, 0 }, + { 4.939235, -0.034716, 8.680172, 0 }, + { 4.878182, 0.039504, 8.130703, 0 }, + { 4.825510, 0.070629, 8.079228, 0 }, + { 4.854240, 0.033519, 8.445540, 0 }, + { 4.932052, -0.016759, 8.767561, 0 }, + { 4.988316, -0.080206, 8.864526, 0 }, + { 5.024229, -0.152032, 8.710100, 0 }, + { 5.026623, -0.175974, 8.593981, 0 }, + { 5.011061, -0.119710, 8.465892, 0 }, + { 5.051762, -0.058658, 8.503001, 0 }, + { 5.104434, 0.028730, 8.389277, 0 }, + { 5.108026, 0.174777, 8.304283, 0 }, + { 5.121194, 0.207098, 8.368926, 0 }, + { 5.137953, 0.177171, 8.186967, 0 }, + { 5.123588, 0.141258, 8.036133, 0 }, + { 5.098449, 0.186748, 8.031344, 0 }, + { 5.036200, 0.240617, 8.049300, 0 }, + { 4.977542, 0.316034, 8.190558, 0 }, + { 4.978739, 0.294487, 8.428782, 0 }, + { 5.046974, 0.195127, 8.704114, 0 }, + { 5.042185, 0.211887, 8.719677, 0 }, + { 4.927264, 0.299275, 8.538915, 0 }, + { 4.918884, 0.241814, 8.495819, 0 }, + { 4.897336, 0.189142, 8.492228, 0 }, + { 4.878182, 0.237026, 8.601164, 0 }, + { 4.818327, 0.262165, 8.705312, 0 }, + { 4.871000, 0.172382, 8.791503, 0 }, + { 4.924870, 0.119710, 8.872906, 0 }, + { 4.873394, 0.243011, 8.825022, 0 }, + { 4.832693, 0.408211, 8.659822, 0 }, + { 4.838678, 0.367510, 8.619121, 0 }, + { 4.904519, 0.169988, 8.809459, 0 }, + { 4.926067, 0.071826, 9.058456, 0 }, + { 4.940432, 0.058658, 8.823824, 0 }, + { 4.930855, 0.167594, 8.331817, 0 }, + { 4.918884, 0.266953, 8.265976, 0 }, + { 4.941629, 0.207098, 8.900438, 0 }, + { 4.957191, 0.129287, 9.339774, 0 }, + { 4.915293, 0.180762, 9.089581, 0 }, + { 4.930855, 0.190339, 8.826219, 0 }, + { 5.080492, 0.038307, 8.766363, 0 }, + { 5.204991, -0.108936, 8.631091, 0 }, + { 5.202597, -0.047884, 8.157040, 0 }, + { 5.157107, 0.095768, 7.870933, 0 }, + { 5.164289, 0.168791, 8.019373, 0 }, + { 5.199006, 0.167594, 8.428782, 0 }, + { 5.215765, 0.180762, 8.804670, 0 }, + { 5.201400, 0.278924, 8.614332, 0 }, + { 5.171472, 0.433350, 8.225274, 0 }, + { 5.199006, 0.466869, 8.068454, 0 }, + { 5.245692, 0.434547, 8.081622, 0 }, + { 5.252875, 0.493205, 8.092396, 0 }, + { 5.194217, 0.633266, 8.359349, 0 }, + { 5.155910, 0.772130, 8.494622, 0 }, + { 5.196611, 0.809240, 8.324634, 0 }, + { 5.245692, 0.724246, 8.206120, 0 }, + { 5.252875, 0.677559, 8.295903, 0 }, + { 5.234919, 0.689530, 8.449132, 0 }, + { 5.256466, 0.666785, 8.635880, 0 }, + { 5.276817, 0.672770, 8.653836, 0 }, + { 5.300759, 0.682347, 8.694537, 0 }, + { 5.352234, 0.640449, 8.677778, 0 }, + { 5.373782, 0.659602, 8.445540, 0 }, + { 5.371388, 0.752976, 8.093594, 0 }, + { 5.348643, 0.889445, 7.916422, 0 }, + { 5.337869, 0.974439, 8.097184, 0 }, + { 5.346249, 0.991199, 8.227669, 0 }, + { 5.382162, 0.978031, 8.289918, 0 }, + { 5.436031, 0.922964, 8.264779, 0 }, + { 5.408498, 0.940921, 8.136689, 0 }, + { 5.376176, 0.939724, 8.165420, 0 }, + { 5.364205, 0.924161, 8.331817, 0 }, + { 5.351037, 0.873883, 8.446738, 0 }, + { 5.334278, 0.855927, 8.334210, 0 }, + { 5.292379, 0.861912, 8.178588, 0 }, + { 5.298365, 0.858321, 8.146266, 0 }, + { 5.319912, 0.841561, 8.136689, 0 }, + { 5.353431, 0.793677, 8.121126, 0 }, + { 5.378571, 0.736217, 8.218092, 0 }, + { 5.397724, 0.694318, 8.354561, 0 }, + { 5.367796, 0.709880, 8.420402, 0 }, + { 5.335475, 0.749385, 8.528141, 0 }, + { 5.313927, 0.818816, 8.493424, 0 }, + { 5.306745, 0.889445, 8.315057, 0 }, + { 5.333081, 0.893037, 8.216895, 0 }, + { 5.345052, 0.899022, 8.208515, 0 }, + { 5.348643, 0.920570, 8.322240, 0 }, + { 5.346249, 0.955286, 8.494622, 0 }, + { 5.325898, 0.984016, 8.801080, 0 }, + { 5.355825, 0.998381, 9.132676, 0 }, + { 5.388147, 0.967257, 9.349351, 0 }, + { 5.489901, 0.889445, 9.421177, 0 }, + { 5.553347, 0.900219, 9.010572, 0 }, + { 5.532996, 1.004367, 8.176193, 0 }, + { 5.509054, 1.109712, 7.471101, 0 }, + { 5.504266, 1.175552, 7.400473, 0 }, + { 5.482718, 1.159990, 7.684185, 0 }, + { 5.443214, 1.177946, 8.027753, 0 }, + { 5.426455, 1.201888, 8.292312, 0 }, + { 5.492295, 1.139639, 8.359349, 0 }, + { 5.532996, 1.092952, 8.263581, 0 }, + { 5.522223, 1.072602, 7.959518, 0 }, + { 5.504266, 1.033097, 7.606374, 0 }, + { 5.524617, 0.958877, 7.461524, 0 }, + { 5.505463, 0.876277, 7.580038, 0 }, + { 5.458776, 0.823605, 7.835020, 0 }, + { 5.432440, 0.756567, 8.016979, 0 }, + { 5.386950, 0.760159, 8.174996, 0 }, + { 5.400118, 0.748188, 8.362941, 0 }, + { 5.449199, 0.687135, 8.324634, 0 }, + { 5.426455, 0.701501, 7.993037, 0 }, + { 5.407301, 0.751779, 7.637498, 0 }, + { 5.455185, 0.737414, 7.868538, 0 }, + { 5.456382, 0.735019, 8.342590, 0 }, + { 5.409695, 0.805648, 8.420402, 0 }, + { 5.379767, 0.878671, 8.323437, 0 }, + { 5.433637, 0.877474, 8.230062, 0 }, + { 5.477930, 0.864306, 8.248019, 0 }, + { 5.511448, 0.831985, 8.370124, 0 }, + { 5.525814, 0.817619, 8.439555, 0 }, + { 5.498281, 0.797269, 8.486242, 0 }, + { 5.485112, 0.806845, 8.465892, 0 }, + { 5.480324, 0.830787, 8.364138, 0 }, + { 5.485112, 0.831985, 8.337802, 0 }, + { 5.487506, 0.854729, 8.340196, 0 }, + { 5.434834, 0.873883, 8.372518, 0 }, + { 5.397724, 0.854729, 8.346182, 0 }, + { 5.392936, 0.869095, 8.216895, 0 }, + { 5.373782, 0.891840, 8.018176, 0 }, + { 5.401315, 0.872686, 7.902057, 0 }, + { 5.448002, 0.833182, 7.929591, 0 }, + { 5.425257, 0.835576, 8.146266, 0 }, + { 5.413286, 0.849941, 8.409628, 0 }, + { 5.421666, 0.837970, 8.495819, 0 }, + { 5.434834, 0.802057, 8.402445, 0 }, + { 5.456382, 0.772130, 8.238442, 0 }, + { 5.482718, 0.749385, 8.231260, 0 }, + { 5.497083, 0.744596, 8.304283, 0 }, + { 5.479127, 0.781706, 8.298298, 0 }, + { 5.432440, 0.882263, 8.295903, 0 }, + { 5.404907, 0.958877, 8.201332, 0 }, + { 5.397724, 0.944512, 8.110353, 0 }, + { 5.394133, 0.920570, 8.216895, 0 }, + { 5.437228, 0.899022, 8.328225, 0 }, + { 5.474339, 0.902613, 8.413219, 0 }, + { 5.529405, 0.889445, 8.447935, 0 }, + { 5.590457, 0.873883, 8.355759, 0 }, + { 5.612005, 0.877474, 8.292312, 0 }, + { 5.613202, 0.870292, 8.209712, 0 }, + { 5.585669, 0.913387, 8.025358, 0 }, + { 5.511448, 0.933738, 7.991840, 0 }, + { 5.475535, 0.949300, 8.026556, 0 }, + { 5.463564, 0.999579, 8.031344, 0 }, + { 5.469550, 0.994790, 7.918817, 0 }, + { 5.504266, 0.974439, 7.881707, 0 }, + { 5.546165, 0.991199, 7.955927, 0 }, + { 5.553347, 0.997184, 8.128309, 0 }, + { 5.567712, 1.010352, 8.230062, 0 }, + { 5.553347, 1.048660, 8.279144, 0 }, + { 5.578486, 1.033097, 8.268370, 0 }, + { 5.571303, 1.016338, 8.101973, 0 }, + { 5.543770, 0.985213, 7.933182, 0 }, + { 5.550953, 0.909796, 7.971489, 0 }, + { 5.547361, 0.855927, 7.951138, 0 }, + { 5.540179, 0.840364, 7.978672, 0 }, + { 5.523419, 0.848744, 8.152251, 0 }, + { 5.491098, 0.853532, 8.298298, 0 }, + { 5.420469, 0.901416, 8.333014, 0 }, + { 5.403709, 0.937329, 8.419205, 0 }, + { 5.440820, 0.964863, 8.601164, 0 }, + { 5.465959, 0.991199, 8.426387, 0 }, + { 5.457579, 1.051054, 8.109156, 0 }, + { 5.437228, 1.104923, 7.977475, 0 }, + { 5.428849, 1.102529, 8.027753, 0 }, + { 5.433637, 1.090558, 8.195347, 0 }, + { 5.432440, 1.100135, 8.276750, 0 }, + { 5.461170, 1.134851, 8.309072, 0 }, + { 5.511448, 1.119289, 8.292312, 0 }, + { 5.540179, 1.089361, 8.316254, 0 }, + { 5.518631, 1.103726, 8.358152, 0 }, + { 5.528208, 1.112106, 8.343787, 0 }, + { 5.527011, 1.094149, 8.257596, 0 }, + { 5.495886, 1.116894, 8.154645, 0 }, + { 5.510252, 1.092952, 8.208515, 0 }, + { 5.538982, 1.058236, 8.158237, 0 }, + { 5.511448, 1.088164, 7.948744, 0 }, + { 5.515040, 1.084573, 7.852976, 0 }, + { 5.507857, 1.104923, 7.959518, 0 }, + { 5.468353, 1.138442, 8.188165, 0 }, + { 5.468353, 1.148019, 8.327028, 0 }, + { 5.481521, 1.133654, 8.289918, 0 }, + { 5.511448, 1.120486, 8.226472, 0 }, + { 5.530602, 1.086967, 8.198938, 0 }, + { 5.529405, 1.065419, 8.166616, 0 }, + { 5.469550, 1.060631, 8.221684, 0 }, + { 5.440820, 1.053448, 8.240837, 0 }, + { 5.396527, 1.053448, 8.213304, 0 }, + { 5.386950, 1.055842, 8.234851, 0 }, + { 5.421666, 1.046265, 8.246822, 0 }, + { 5.431243, 1.029506, 8.155843, 0 }, + { 5.298365, 1.292868, 5.756854, 0 }, + { 5.191823, 1.255758, 8.088805, 0 }, + { 5.204991, 1.169567, 10.260345, 0 } }; const size_t kBodyDetectOffOnTestDataLength = ARRAY_SIZE(kBodyDetectOffOnTestData); const struct body_detect_test_data kBodyDetectOnOffTestData[] = { - {-6.536166, 0.264559, 7.560884, 0}, - {-6.253651, 0.108936, 8.167813, 0}, - {-5.890929, -0.029928, 8.061272, 0}, - {-5.833468, -0.045490, 8.250414, 0}, - {-5.932828, 0.038307, 8.573630, 0}, - {-5.995077, 0.104148, 8.634683, 0}, - {-6.080071, 0.181959, 8.317451, 0}, - {-6.069297, 0.177171, 8.151054, 0}, - {-5.978318, 0.113724, 8.407233, 0}, - {-5.895718, 0.033519, 8.592784, 0}, - {-5.828680, -0.022745, 8.299495, 0}, - {-5.768825, -0.070629, 7.958321, 0}, - {-5.770022, -0.089783, 8.028950, 0}, - {-5.832272, -0.074220, 8.360547, 0}, - {-5.880156, -0.067038, 8.488636, 0}, - {-5.987895, -0.017957, 8.342590, 0}, - {-6.148306, 0.014365, 8.317451, 0}, - {-6.337448, 0.102951, 8.492228, 0}, - {-6.411668, 0.148440, 8.571237, 0}, - {-6.341039, 0.099359, 8.250414, 0}, - {-6.232103, 0.067038, 7.899663, 0}, - {-6.172248, 0.100556, 8.152251, 0}, - {-6.095634, 0.111330, 8.632288, 0}, - {-6.033384, 0.126893, 8.614332, 0}, - {-5.936419, 0.131681, 8.136689, 0}, - {-5.931631, 0.205901, 7.739252, 0}, - {-5.986697, 0.271742, 7.870933, 0}, - {-6.040567, 0.250194, 8.099579, 0}, - {-6.077677, 0.244208, 8.191755, 0}, - {-6.071692, 0.277727, 8.146266, 0}, - {-5.953178, 0.292092, 8.025358, 0}, - {-5.847834, 0.330400, 7.942759, 0}, - {-5.776008, 0.392649, 8.036133, 0}, - {-5.680240, 0.417788, 7.892480, 0}, - {-5.617990, 0.458489, 7.609965, 0}, - {-5.550953, 0.496797, 7.418429, 0}, - {-5.301956, 0.369904, 8.050498, 0}, - {-5.276817, 0.290895, 9.167392, 0}, - {-5.890929, 0.215478, 9.044091, 0}, - {-6.495465, 0.108936, 9.111129, 0}, - {-6.545743, -0.049081, 9.390053, 0}, - {-5.966347, -0.161609, 9.362519, 0}, - {-5.325898, -0.117316, 8.969871, 0}, - {-5.263649, 0.105345, 8.404840, 0}, - {-5.620385, 0.336385, 8.085214, 0}, - {-5.886141, 0.472855, 8.037330, 0}, - {-5.704182, 0.427365, 8.032541, 0}, - {-5.359417, 0.301669, 7.813472, 0}, - {-5.331883, 0.329203, 7.632710, 0}, - {-5.483915, 0.433350, 7.621936, 0}, - {-5.862199, 0.703895, 8.079228, 0}, - {-5.808330, 0.616507, 9.142253, 0}, - {-5.513843, 0.481234, 9.751576, 0}, - {-5.365402, 0.470460, 9.706087, 0}, - {-5.378571, 0.440533, 9.333789, 0}, - {-5.637144, 0.565031, 8.905227, 0}, - {-5.776008, 0.560243, 8.019373, 0}, - {-5.779599, 0.676362, 7.132322, 0}, - {-5.549756, 0.760159, 7.116760, 0}, - {-5.303153, 0.730231, 7.817063, 0}, - {-5.206188, 0.831985, 8.506593, 0}, - {-5.151122, 0.725443, 8.941140, 0}, - {-5.292379, 0.556652, 9.176969, 0}, - {-5.622779, 0.563834, 9.362519, 0}, - {-5.481521, 0.433350, 9.410403, 0}, - {-5.045777, -0.074220, 9.109931, 0}, - {-5.035003, -0.328005, 8.900438, 0}, - {-5.307941, -0.389058, 9.000996, 0}, - {-5.561727, -0.269348, 9.169786, 0}, - {-5.603625, 0.213084, 9.216474, 0}, - {-5.357023, 0.697909, 9.339774, 0}, - {-5.081690, 0.764947, 9.429557, 0}, - {-5.063733, 0.520739, 9.349351, 0}, - {-5.212173, 0.463278, 9.210487, 0}, - {-5.079296, 0.622492, 9.057259, 0}, - {-4.827904, 0.758961, 8.755589, 0}, - {-4.689041, 0.723048, 8.749604, 0}, - {-4.681858, 0.731428, 9.129085, 0}, - {-4.598061, 0.723048, 9.536098, 0}, - {-4.378992, 0.730231, 9.668977, 0}, - {-4.214989, 0.672770, 9.102749, 0}, - {-4.241325, 0.641646, 8.643063, 0}, - {-4.289209, 0.708683, 8.941140, 0}, - {-4.304772, 0.984016, 9.394841, 0}, - {-4.106053, 0.980425, 9.239218, 0}, - {-3.926488, 0.615309, 8.754393, 0}, - {-4.012679, 0.414197, 8.646653, 0}, - {-4.191047, 0.730231, 9.080004, 0}, - {-4.211398, 1.057039, 9.763548, 0}, - {-4.055775, 0.944512, 9.933537, 0}, - {-3.976766, 0.493205, 9.303862, 0}, - {-4.319137, 0.397437, 8.835795, 0}, - {-4.368218, 0.577002, 9.014163, 0}, - {-4.213792, 0.700303, 9.281116, 0}, - {-4.164711, 0.563834, 9.527719, 0}, - {-4.132390, 0.458489, 9.472652, 0}, - {-4.106053, 0.392649, 9.238021, 0}, - {-4.090491, 0.524330, 9.093172, 0}, - {-4.052184, 0.738611, 9.153027, 0}, - {-4.015073, 0.524330, 9.047682, 0}, - {-4.149149, 0.454898, 8.930367, 0}, - {-4.250902, 0.724246, 9.131479, 0}, - {-4.231749, 0.701501, 9.166195, 0}, - {-4.356247, 0.757764, 9.208094, 0}, - {-4.443635, 0.785298, 9.235627, 0}, - {-4.355050, 0.804451, 9.149436, 0}, - {-4.307166, 0.567425, 9.187743, 0}, - {-4.550177, 0.476446, 9.249992, 0}, - {-4.790794, 0.457292, 9.175772, 0}, - {-4.935644, 0.417788, 9.200911, 0}, - {-4.940432, 0.588973, 9.419980, 0}, - {-4.709392, 0.357933, 9.624684, 0}, - {-4.763261, 0.093374, 9.773125, 0}, - {-5.021835, 0.171185, 9.756365, 0}, - {-5.087675, 0.294487, 9.680948, 0}, - {-4.916490, 0.357933, 9.610319, 0}, - {-4.729742, 0.360327, 9.296679, 0}, - {-4.635171, 0.266953, 8.780728, 0}, - {-4.843467, 0.410605, 8.383291, 0}, - {-4.898533, 0.500388, 8.177390, 0}, - {-4.692632, 0.489614, 8.313860, 0}, - {-4.566936, 0.451307, 8.595179, 0}, - {-4.624397, 0.457292, 8.774743, 0}, - {-4.781218, 0.441730, 8.777138, 0}, - {-4.916490, 0.410605, 8.816642, 0}, - {-5.014652, 0.482431, 8.795094, 0}, - {-4.830298, 0.306458, 8.991419, 0}, - {-5.154713, 0.448913, 8.974659, 0}, - {-5.114011, 0.424971, 8.789108, 0}, - {-4.894942, 0.238223, 8.692143, 0}, - {-4.979936, 0.184353, 8.980644, 0}, - {-5.267240, 0.381875, 9.326607, 0}, - {-5.289985, 0.413000, 9.498989, 0}, - {-5.128376, 0.320823, 9.273934, 0}, - {-4.978739, 0.312443, 8.930367, 0}, - {-5.054156, 0.391452, 8.816642, 0}, - {-5.224144, 0.409408, 8.898045, 0}, - {-5.287591, 0.392649, 8.862131, 0}, - {-5.182246, 0.426168, 8.808262, 0}, - {-5.039791, 0.471657, 8.797488, 0}, - {-4.969162, 0.490811, 8.793897, 0}, - {-5.032609, 0.511162, 8.804670, 0}, - {-5.021835, 0.465672, 8.822627, 0}, - {-4.967965, 0.496797, 8.820233, 0}, - {-4.969162, 0.571017, 8.796291, 0}, - {-4.904519, 0.560243, 8.785517, 0}, - {-4.750093, 0.547075, 8.775940, 0}, - {-4.687844, 0.500388, 8.554477, 0}, - {-4.741713, 0.487220, 8.224077, 0}, - {-4.880577, 0.569820, 8.147463, 0}, - {-4.959586, 0.610521, 8.506593, 0}, - {-4.977542, 0.555454, 8.856146, 0}, - {-4.910504, 0.424971, 8.870511, 0}, - {-4.947615, 0.316034, 8.845372, 0}, - {-5.177458, 0.336385, 9.156618, 0}, - {-5.345052, 0.371101, 9.455894, 0}, - {-5.370191, 0.402226, 9.381673, 0}, - {-5.357023, 0.372298, 9.232036, 0}, - {-5.309139, 0.289698, 9.148238, 0}, - {-5.236115, 0.247800, 9.085989, 0}, - {-5.159501, 0.211887, 9.010572, 0}, - {-5.081690, 0.173579, 8.878891, 0}, - {-5.049368, 0.208295, 8.710100, 0}, - {-5.026623, 0.229843, 8.664610, 0}, - {-5.032609, 0.237026, 8.772349, 0}, - {-4.967965, 0.233435, 8.868117, 0}, - {-4.844664, 0.164003, 8.799882, 0}, - {-4.906913, 0.155623, 8.500607, 0}, - {-5.141545, 0.264559, 8.359349, 0}, - {-5.264846, 0.310049, 8.640668, 0}, - {-5.348643, 0.306458, 8.961491, 0}, - {-5.366600, 0.301669, 8.968674, 0}, - {-5.404907, 0.298078, 8.802277, 0}, - {-5.386950, 0.259771, 8.801080, 0}, - {-5.335475, 0.208295, 8.759181, 0}, - {-5.300759, 0.174777, 8.723268, 0}, - {-5.237313, 0.147243, 8.762773, 0}, - {-5.303153, 0.185551, 8.772349, 0}, - {-5.394133, 0.204704, 8.888468, 0}, - {-5.383359, 0.167594, 8.965082, 0}, - {-5.257663, 0.110133, 8.893256, 0}, - {-5.116405, 0.039504, 8.738831, 0}, - {-5.194217, 0.044293, 8.644259, 0}, - {-5.336672, 0.111330, 8.772349, 0}, - {-5.389344, 0.132878, 8.972264, 0}, - {-5.400118, 0.136469, 8.959097, 0}, - {-5.455185, 0.185551, 8.850161, 0}, - {-5.519828, 0.210690, 8.804670, 0}, - {-5.555741, 0.210690, 8.898045, 0}, - {-5.507857, 0.222661, 8.835795, 0}, - {-5.402513, 0.205901, 8.598769, 0}, - {-5.368994, 0.257377, 8.353364, 0}, - {-5.437228, 0.366313, 8.394066, 0}, - {-5.401315, 0.345962, 8.656230, 0}, - {-5.341460, 0.350750, 8.723268, 0}, - {-5.272028, 0.362721, 8.585602, 0}, - {-5.282803, 0.387860, 8.337802, 0}, - {-5.285197, 0.420182, 8.268370, 0}, - {-5.250481, 0.415394, 8.337802, 0}, - {-5.185837, 0.379481, 8.416810, 0}, - {-5.161895, 0.356736, 8.468286, 0}, - {-5.203794, 0.344765, 8.577222, 0}, - {-5.272028, 0.306458, 8.719677, 0}, - {-5.315124, 0.271742, 8.868117, 0}, - {-5.337869, 0.296881, 8.939943, 0}, - {-5.376176, 0.299275, 8.894453, 0}, - {-5.442017, 0.318429, 8.793897, 0}, - {-5.452791, 0.331597, 8.714889, 0}, - {-5.412089, 0.289698, 8.700523, 0}, - {-5.406104, 0.251391, 8.773546, 0}, - {-5.368994, 0.252588, 8.866920, 0}, - {-5.323504, 0.240617, 8.942337, 0}, - {-5.333081, 0.231040, 9.015361, 0}, - {-5.377373, 0.231040, 8.980644, 0}, - {-5.450397, 0.292092, 8.865723, 0}, - {-5.483915, 0.336385, 8.750801, 0}, - {-5.474339, 0.355539, 8.653836, 0}, - {-5.404907, 0.342371, 8.593981, 0}, - {-5.243298, 0.234632, 8.598769, 0}, - {-5.164289, 0.198719, 8.635880, 0}, - {-5.214568, 0.248997, 8.646653, 0}, - {-5.316321, 0.288501, 8.589192, 0}, - {-5.452791, 0.343568, 8.579616, 0}, - {-5.509054, 0.366313, 8.670595, 0}, - {-5.474339, 0.319626, 8.686158, 0}, - {-5.384556, 0.275333, 8.689749, 0}, - {-5.365402, 0.268150, 8.750801, 0}, - {-5.437228, 0.357933, 8.748407, 0}, - {-5.470747, 0.402226, 8.730451, 0}, - {-5.386950, 0.362721, 8.672990, 0}, - {-5.339066, 0.363918, 8.700523, 0}, - {-5.295970, 0.398634, 8.793897, 0}, - {-5.307941, 0.413000, 8.899241, 0}, - {-5.295970, 0.392649, 8.924380, 0}, - {-5.287591, 0.405817, 8.936352, 0}, - {-5.269634, 0.417788, 8.896848, 0}, - {-5.342658, 0.471657, 8.640668, 0}, - {-5.464762, 0.557849, 8.434767, 0}, - {-5.467156, 0.575805, 8.456315, 0}, - {-5.443214, 0.561440, 8.497016, 0}, - {-5.440820, 0.574608, 8.524549, 0}, - {-5.438426, 0.598550, 8.480257, 0}, - {-5.348643, 0.553060, 8.530535, 0}, - {-5.238510, 0.509965, 8.638274, 0}, - {-5.155910, 0.445321, 8.657428, 0}, - {-5.111617, 0.395043, 8.583207, 0}, - {-5.115209, 0.365116, 8.610741, 0}, - {-5.176260, 0.344765, 8.625106, 0}, - {-5.254072, 0.373495, 8.711297, 0}, - {-5.267240, 0.379481, 8.808262, 0}, - {-5.238510, 0.329203, 8.795094, 0}, - {-5.266043, 0.282516, 8.694537, 0}, - {-5.410892, 0.308852, 8.599967, 0}, - {-5.538982, 0.337582, 8.520958, 0}, - {-5.544967, 0.344765, 8.590390, 0}, - {-5.458776, 0.276530, 8.730451, 0}, - {-5.408498, 0.211887, 8.729254, 0}, - {-5.450397, 0.195127, 8.633486, 0}, - {-5.509054, 0.216675, 8.659822, 0}, - {-5.483915, 0.190339, 8.823824, 0}, - {-5.430046, 0.169988, 9.004586, 0}, - {-5.392936, 0.186748, 9.078807, 0}, - {-5.406104, 0.197522, 9.024938, 0}, - {-5.462368, 0.269348, 8.857343, 0}, - {-5.462368, 0.290895, 8.724465, 0}, - {-5.409695, 0.284910, 8.667005, 0}, - {-5.389344, 0.288501, 8.643063, 0}, - {-5.354629, 0.284910, 8.577222, 0}, - {-5.329489, 0.287304, 8.591587, 0}, - {-5.280408, 0.282516, 8.658625, 0}, - {-5.206188, 0.225055, 8.695735, 0}, - {-5.169078, 0.235829, 8.741224, 0}, - {-5.181049, 0.256179, 8.693340, 0}, - {-5.245692, 0.262165, 8.619121, 0}, - {-5.334278, 0.257377, 8.613134, 0}, - {-5.388147, 0.248997, 8.681370, 0}, - {-5.376176, 0.240617, 8.742421, 0}, - {-5.360614, 0.199916, 8.707705, 0}, - {-5.443214, 0.190339, 8.631091, 0}, - {-5.489901, 0.172382, 8.549688, 0}, - {-5.524617, 0.192733, 8.529338, 0}, - {-5.518631, 0.189142, 8.562857, 0}, - {-5.479127, 0.158017, 8.555674, 0}, - {-5.499477, 0.140061, 8.599967, 0}, - {-5.519828, 0.130484, 8.643063, 0}, - {-5.493492, 0.090980, 8.652639, 0}, - {-5.458776, 0.074220, 8.610741, 0}, - {-5.483915, 0.107739, 8.635880, 0}, - {-5.445608, 0.087388, 8.746013, 0}, - {-5.422863, 0.052672, 8.787911, 0}, - {-5.402513, 0.032322, 8.768758, 0}, - {-5.373782, -0.007183, 8.802277, 0}, - {-5.371388, -0.031125, 8.772349, 0}, - {-5.416878, -0.052672, 8.682567, 0}, - {-5.614399, -0.032322, 8.693340, 0}, - {-5.582078, 0.015562, 8.038527, 0}, - {-5.532996, -0.019154, 8.003811, 1}, - {-5.451593, -0.088585, 8.389277, 0}, - {-5.433637, -0.120907, 8.461103, 0}, - {-5.456382, -0.082600, 8.352167, 0}, - {-5.480324, -0.110133, 8.429978, 0}, - {-5.503069, -0.126893, 8.602361, 0}, - {-5.524617, -0.173579, 8.689749, 0}, - {-5.519828, -0.161609, 8.710100, 0}, - {-5.448002, -0.165200, 8.803473, 0}, - {-5.337869, -0.209493, 8.835795, 0}, - {-5.226539, -0.217872, 8.792700, 0}, - {-5.204991, -0.144849, 8.779531, 0}, - {-5.155910, -0.038307, 8.741224, 0}, - {-5.038594, 0.025139, 8.692143, 0}, - {-4.826707, 0.129287, 8.741224, 0}, - {-4.588484, 0.221464, 9.275131, 0}, - {-4.413708, 0.146046, 9.674962, 0}, - {-4.571725, 0.420182, 9.512156, 0}, - {-4.693829, 0.806845, 9.115917, 0}, - {-4.513067, 1.146822, 8.775940, 0}, - {-3.907335, 0.906205, 8.744816, 0}, - {-3.440465, 0.709880, 8.558068, 0}, - {-3.076547, 0.870292, 8.097184, 0}, - {-2.567780, 0.849941, 7.629118, 0}, - {-0.930147, -0.430956, 9.020149, 0}, - {0.472855, -1.265335, 13.321329, 0}, - {-0.475249, -0.396240, 11.602294, 0}, - {-2.302023, 0.135272, 10.661373, 0}, - {-2.796426, -0.083797, 11.195279, 0}, - {-2.404974, -0.368707, 10.447092, 0}, - {-1.205480, -0.381875, 9.781505, 0}, - {-0.250194, 0.064643, 9.928748, 0}, - {-0.004788, 0.374692, 9.695313, 0}, - {0.256179, -0.470460, 8.904030, 0}, - {0.268150, -0.964863, 8.276750, 0}, - {0.314837, -0.756567, 8.742421, 0}, - {0.496797, -0.694318, 9.910791, 0}, - {0.828393, -0.748188, 10.779886, 0}, - {0.738611, -0.306458, 11.670528, 0}, - {0.616507, -0.045490, 11.973394, 0}, - {0.690727, -0.164003, 11.194082, 0}, - {0.632069, -0.343568, 10.463851, 0}, - {0.422576, 0.026336, 10.319002, 0}, - {0.520739, 0.468066, 10.074794, 0}, - {0.845153, 0.277727, 9.525325, 0}, - {1.058236, -0.199916, 9.085989, 0}, - {1.198297, -0.499191, 9.630670, 0}, - {1.109712, -0.314837, 10.516523, 0}, - {1.086967, 0.258574, 10.805025, 0}, - {1.313219, 0.523133, 10.685315, 0}, - {1.334767, 0.202310, 10.316608, 0}, - {1.298854, -0.199916, 9.993391, 0}, - {1.471236, -0.282516, 10.037683, 0}, - {1.620873, 0.053870, 9.892835, 0}, - {1.553836, 0.363918, 9.296679, 0}, - {1.425746, 0.114922, 8.937549, 0}, - {1.545456, -0.174777, 9.566027, 0}, - {1.985989, 0.075417, 10.395617, 0}, - {2.272096, 0.312443, 10.295060, 0}, - {2.181116, 0.196324, 9.525325, 0}, - {1.965638, 0.197522, 9.500186, 0}, - {2.054224, -0.038307, 9.800658, 0}, - {1.924937, 0.196324, 9.728832, 0}, - {2.146400, 0.402226, 9.747986, 0}, - {2.321177, 0.282516, 9.983814, 0}, - {2.279279, 0.118513, 7.716507, 0}, - {2.229000, -0.113724, 9.612713, 0}, - {2.345119, 0.343568, 11.982971, 0}, - {2.196679, 0.189142, 9.917974, 0}, - {2.218226, -0.119710, 9.633064, 0}, - {2.020705, 0.239420, 9.703692, 0}, - {1.997960, 0.318429, 9.247598, 0}, - {1.975215, 0.132878, 8.886073, 0}, - {1.841140, 0.253785, 8.754393, 0}, - {1.507149, 0.458489, 8.775940, 0}, - {1.295262, 0.497994, 9.170983, 0}, - {1.291671, 0.102951, 9.712072, 0}, - {1.267729, 0.034716, 9.686934, 0}, - {1.474827, -0.047884, 9.932339, 0}, - {1.121683, -0.041899, 10.319002, 0}, - {0.475249, 0.349553, 11.362873, 0}, - {0.029928, 0.153229, 13.443434, 0}, - {1.442506, -0.270545, 12.089513, 0}, - {0.821211, 0.186748, 10.431530, 0}, - {0.302866, 0.573411, 9.538493, 0}, - {0.973242, -0.051475, 8.095987, 0}, - {1.428140, -1.648407, 7.060496, 0}, - {1.292868, -2.129641, 8.062469, 0}, - {0.068235, 0.414197, 8.157040, 0}, - {-1.018732, 1.418563, 9.985011, 0}, - {-1.479616, 1.746569, 18.444918, 0}, - {0.362721, 0.951695, 11.461036, 0}, - {0.283713, -0.120907, 8.001416, 0}, - {-0.320823, 0.131681, 11.031277, 0}, - {-0.141258, 0.141258, 9.783898, 0}, - {-0.098162, 0.118513, 10.248373, 0}, - {-0.278924, 0.311246, 9.223656, 0}, - {-0.034716, 0.162806, 9.734818, 0}, - {-0.282516, -0.306458, 12.023673, 0}, - {-0.219069, 0.069432, 9.692919, 0}, - {-0.235829, 0.088585, 10.111904, 0}, - {-0.243011, 0.071826, 10.181335, 0}, - {-0.237026, 0.084994, 10.177745, 0}, - {-0.246603, 0.079009, 10.078385, 0}, - {-0.222661, 0.083797, 10.192110, 0}, - {-0.252588, 0.067038, 10.103524, 0}, - {-0.226252, 0.084994, 10.156197, 0}, - {-0.265756, 0.071826, 10.116693, 0}, - {-0.235829, 0.083797, 10.168168, 0}, - {-0.251391, 0.083797, 10.108313, 0}, - {-0.248997, 0.083797, 10.155000, 0}, - {-0.228646, 0.083797, 10.122678, 0}, - {-0.266953, 0.067038, 10.104721, 0}, - {-0.233435, 0.074220, 10.141831, 0}, - {-0.259771, 0.080206, 10.107116, 0}, - {-0.245406, 0.080206, 10.166970, 0}, - {-0.256179, 0.075417, 10.099933, 0}, - {-0.243011, 0.070629, 10.153803, 0}, - {-0.256179, 0.073023, 10.090356, 0}, - {-0.258574, 0.077812, 10.200489, 0}, - {-0.253785, 0.063446, 10.095144, 0}, - {-0.245406, 0.073023, 10.135846, 0}, - {-0.251391, 0.082600, 10.134649, 0}, - {-0.251391, 0.068235, 10.116693, 0}, - {-0.247800, 0.079009, 10.164577, 0}, - {-0.244208, 0.075417, 10.115496, 0}, - {-0.238223, 0.073023, 10.137043, 0}, - {-0.251391, 0.077812, 10.078385, 0}, - {-0.235829, 0.077812, 10.131058, 0}, - {-0.250194, 0.087388, 10.123875, 0}, - {-0.250194, 0.079009, 10.147817, 0}, - {-0.254982, 0.064643, 10.110707, 0}, - {-0.256179, 0.083797, 10.151408, 0}, - {-0.237026, 0.079009, 10.103524, 0}, - {-0.256179, 0.079009, 10.137043, 0}, - {-0.246603, 0.081403, 10.139438, 0}, - {-0.243011, 0.077812, 10.115496, 0}, - {-0.254982, 0.063446, 10.159788, 0}, - {-0.248997, 0.089783, 10.092751, 0}, - {-0.251391, 0.074220, 10.164577, 0}, - {-0.246603, 0.079009, 10.117889, 0}, - {-0.247800, 0.086191, 10.145423, 0}, - {-0.247800, 0.088585, 10.123875, 0}, - {-0.254982, 0.075417, 10.122678, 0}, - {-0.250194, 0.080206, 10.147817, 0}, - {-0.251391, 0.068235, 10.113101, 0}, - {-0.246603, 0.074220, 10.147817, 0}, - {-0.243011, 0.068235, 10.104721, 0}, - {-0.245406, 0.063446, 10.143028, 0}, - {-0.250194, 0.075417, 10.121481, 0}, - {-0.252588, 0.079009, 10.141831, 0}, - {-0.245406, 0.071826, 10.129861, 0}, - {-0.240617, 0.079009, 10.135846, 0}, - {-0.240617, 0.069432, 10.141831, 0}, - {-0.245406, 0.079009, 10.121481, 0}, - {-0.252588, 0.069432, 10.160985, 0}, - {-0.258574, 0.067038, 10.121481, 0}, - {-0.260968, 0.067038, 10.140635, 0}, - {-0.250194, 0.068235, 10.127466, 0}, - {-0.239420, 0.074220, 10.129861, 0}, - {-0.250194, 0.065841, 10.131058, 0}, - {-0.245406, 0.074220, 10.128663, 0}, - {-0.247800, 0.088585, 10.133451, 0}, - {-0.245406, 0.082600, 10.105919, 0}, - {-0.251391, 0.067038, 10.133451, 0}, - {-0.241814, 0.075417, 10.121481, 0}, - {-0.247800, 0.075417, 10.140635, 0}, - {-0.254982, 0.080206, 10.132255, 0}, - {-0.237026, 0.074220, 10.137043, 0}, - {-0.251391, 0.082600, 10.135846, 0}, - {-0.247800, 0.095768, 10.135846, 0}, - {-0.244208, 0.075417, 10.115496, 0}, - {-0.245406, 0.074220, 10.138240, 0}, - {-0.239420, 0.080206, 10.137043, 0}, - {-0.257377, 0.073023, 10.128663, 0}, - {-0.253785, 0.081403, 10.134649, 0}, - {-0.256179, 0.061052, 10.137043, 0}, - {-0.243011, 0.082600, 10.129861, 0}, - {-0.246603, 0.080206, 10.116693, 0}, - {-0.240617, 0.080206, 10.120284, 0}, - {-0.251391, 0.069432, 10.109509, 0}, - {-0.247800, 0.073023, 10.144226, 0}, - {-0.248997, 0.077812, 10.110707, 0}, - {-0.256179, 0.065841, 10.134649, 0}, - {-0.246603, 0.071826, 10.111904, 0}, - {-0.265756, 0.075417, 10.123875, 0}, - {-0.245406, 0.084994, 10.131058, 0}, - {-0.251391, 0.073023, 10.114298, 0}, - {-0.247800, 0.090980, 10.145423, 0}, - {-0.263362, 0.088585, 10.121481, 0}, - {-0.258574, 0.074220, 10.149014, 0}, - {-0.252588, 0.069432, 10.114298, 0}, - {-0.259771, 0.074220, 10.121481, 0}, - {-0.251391, 0.068235, 10.137043, 0}, - {-0.245406, 0.074220, 10.131058, 0}, - {-0.244208, 0.074220, 10.121481, 0}, - {-0.253785, 0.070629, 10.108313, 0}, - {-0.256179, 0.077812, 10.144226, 0}, - {-0.241814, 0.058658, 10.104721, 0}, - {-0.244208, 0.069432, 10.133451, 0}, - {-0.241814, 0.081403, 10.113101, 0}, - {-0.253785, 0.080206, 10.110707, 0}, - {-0.257377, 0.086191, 10.121481, 0}, - {-0.252588, 0.080206, 10.129861, 0}, - {-0.246603, 0.081403, 10.121481, 0}, - {-0.245406, 0.086191, 10.123875, 0}, - {-0.251391, 0.076614, 10.153803, 0}, - {-0.246603, 0.068235, 10.120284, 0}, - {-0.234632, 0.090980, 10.134649, 0}, - {-0.253785, 0.080206, 10.098736, 0}, - {-0.256179, 0.093374, 10.135846, 0}, - {-0.259771, 0.076614, 10.126269, 0}, - {-0.240617, 0.074220, 10.147817, 0}, - {-0.256179, 0.068235, 10.119086, 0}, - {-0.254982, 0.073023, 10.120284, 0}, - {-0.250194, 0.082600, 10.143028, 0}, - {-0.250194, 0.076614, 10.115496, 0}, - {-0.247800, 0.068235, 10.145423, 0}, - {-0.241814, 0.077812, 10.122678, 0}, - {-0.245406, 0.079009, 10.138240, 0}, - {-0.266953, 0.083797, 10.111904, 0}, - {-0.254982, 0.074220, 10.116693, 0}, - {-0.248997, 0.090980, 10.138240, 0}, - {-0.262165, 0.083797, 10.123875, 0}, - {-0.245406, 0.081403, 10.128663, 0}, - {-0.252588, 0.065841, 10.103524, 0}, - {-0.248997, 0.089783, 10.128663, 0}, - {-0.250194, 0.070629, 10.108313, 0}, - {-0.248997, 0.068235, 10.147817, 0}, - {-0.251391, 0.083797, 10.125072, 0}, - {-0.258574, 0.070629, 10.125072, 0}, - {-0.259771, 0.058658, 10.125072, 0}, - {-0.246603, 0.070629, 10.120284, 0}, - {-0.243011, 0.064643, 10.128663, 0}, - {-0.263362, 0.073023, 10.134649, 0}, - {-0.246603, 0.076614, 10.140635, 0}, - {-0.246603, 0.084994, 10.122678, 0}, - {-0.241814, 0.068235, 10.131058, 0}, - {-0.243011, 0.073023, 10.115496, 0}, - {-0.252588, 0.074220, 10.157393, 0}, - {-0.264559, 0.076614, 10.105919, 0}, - {-0.254982, 0.069432, 10.135846, 0}, - {-0.234632, 0.075417, 10.126269, 0}, - {-0.239420, 0.080206, 10.120284, 0}, - {-0.251391, 0.087388, 10.146620, 0}, - {-0.238223, 0.069432, 10.126269, 0}, - {-0.247800, 0.065841, 10.127466, 0}, - {-0.253785, 0.069432, 10.113101, 0}, - {-0.252588, 0.079009, 10.144226, 0}, - {-0.254982, 0.074220, 10.123875, 0}, - {-0.247800, 0.061052, 10.134649, 0}, - {-0.248997, 0.067038, 10.119086, 0}, - {-0.247800, 0.077812, 10.123875, 0}, - {-0.253785, 0.079009, 10.134649, 0}, - {-0.246603, 0.084994, 10.111904, 0}, - {-0.253785, 0.087388, 10.139438, 0}, - {-0.256179, 0.082600, 10.097539, 0}, - {-0.240617, 0.087388, 10.149014, 0}, - {-0.252588, 0.059855, 10.108313, 0}, - {-0.235829, 0.082600, 10.129861, 0}, - {-0.247800, 0.094571, 10.127466, 0}, - {-0.248997, 0.082600, 10.122678, 0}, - {-0.240617, 0.084994, 10.131058, 0}, - {-0.253785, 0.077812, 10.116693, 0}, - {-0.258574, 0.086191, 10.133451, 0}, - {-0.247800, 0.071826, 10.128663, 0}, - {-0.247800, 0.074220, 10.132255, 0}, - {-0.254982, 0.071826, 10.120284, 0}, - {-0.253785, 0.080206, 10.140635, 0}, - {-0.269348, 0.076614, 10.132255, 0}, - {-0.253785, 0.082600, 10.131058, 0}, - {-0.244208, 0.089783, 10.140635, 0}, - {-0.247800, 0.073023, 10.110707, 0}, - {-0.252588, 0.070629, 10.129861, 0}, - {-0.257377, 0.071826, 10.125072, 0}, - {-0.252588, 0.074220, 10.117889, 0}, - {-0.254982, 0.068235, 10.128663, 0}, - {-0.259771, 0.058658, 10.134649, 0}, - {-0.252588, 0.070629, 10.119086, 0}, - {-0.243011, 0.089783, 10.146620, 0}, - {-0.240617, 0.075417, 10.128663, 0}, - {-0.254982, 0.063446, 10.145423, 0}, - {-0.272939, 0.081403, 10.127466, 0}, - {-0.241814, 0.075417, 10.127466, 0}, - {-0.233435, 0.073023, 10.125072, 0}, - {-0.248997, 0.080206, 10.132255, 0}, - {-0.241814, 0.074220, 10.134649, 0}, - {-0.266953, 0.068235, 10.133451, 0}, - {-0.245406, 0.069432, 10.127466, 0}, - {-0.247800, 0.087388, 10.131058, 0}, - {-0.247800, 0.082600, 10.129861, 0}, - {-0.257377, 0.070629, 10.137043, 0}, - {-0.247800, 0.074220, 10.131058, 0}, - {-0.252588, 0.086191, 10.114298, 0}, - {-0.247800, 0.089783, 10.135846, 0}, - {-0.256179, 0.073023, 10.131058, 0}, - {-0.257377, 0.080206, 10.133451, 0}, - {-0.245406, 0.069432, 10.125072, 0}, - {-0.250194, 0.061052, 10.126269, 0}, - {-0.252588, 0.079009, 10.135846, 0}, - {-0.250194, 0.073023, 10.128663, 0}, - {-0.237026, 0.075417, 10.155000, 0}, - {-0.247800, 0.079009, 10.140635, 0}, - {-0.251391, 0.069432, 10.151408, 0}, - {-0.244208, 0.075417, 10.127466, 0}, - {-0.252588, 0.071826, 10.111904, 0}, - {-0.257377, 0.077812, 10.138240, 0}, - {-0.241814, 0.069432, 10.122678, 0}, - {-0.253785, 0.071826, 10.139438, 0}, - {-0.256179, 0.077812, 10.119086, 0}, - {-0.262165, 0.077812, 10.133451, 0}, - {-0.252588, 0.061052, 10.132255, 0}, - {-0.250194, 0.077812, 10.119086, 0}, - {-0.253785, 0.081403, 10.132255, 0}, - {-0.253785, 0.079009, 10.117889, 0}, - {-0.252588, 0.064643, 10.129861, 0}, - {-0.247800, 0.073023, 10.117889, 0}, - {-0.253785, 0.065841, 10.126269, 0}, - {-0.256179, 0.069432, 10.128663, 0}, - {-0.250194, 0.080206, 10.128663, 0}, - {-0.257377, 0.084994, 10.107116, 0}, - {-0.254982, 0.080206, 10.137043, 0}, - {-0.259771, 0.076614, 10.137043, 0}, - {-0.265756, 0.063446, 10.132255, 0}, - {-0.251391, 0.056264, 10.120284, 0}, - {-0.247800, 0.067038, 10.132255, 0}, - {-0.247800, 0.074220, 10.126269, 0}, - {-0.247800, 0.070629, 10.127466, 0}, - {-0.239420, 0.081403, 10.143028, 0}, - {-0.254982, 0.081403, 10.129861, 0}, - {-0.259771, 0.088585, 10.138240, 0}, - {-0.246603, 0.080206, 10.108313, 0}, - {-0.252588, 0.086191, 10.125072, 0}, - {-0.247800, 0.071826, 10.132255, 0}, - {-0.240617, 0.073023, 10.126269, 0}, - {-0.256179, 0.075417, 10.134649, 0}, - {-0.254982, 0.081403, 10.117889, 0}, - {-0.250194, 0.070629, 10.133451, 0}, - {-0.254982, 0.064643, 10.137043, 0}, - {-0.254982, 0.075417, 10.147817, 0}, - {-0.240617, 0.077812, 10.122678, 0}, - {-0.239420, 0.083797, 10.153803, 0}, - {-0.258574, 0.070629, 10.131058, 0}, - {-0.256179, 0.077812, 10.133451, 0}, - {-0.265756, 0.080206, 10.143028, 0}, - {-0.256179, 0.070629, 10.138240, 0}, - {-0.250194, 0.067038, 10.129861, 0}, - {-0.245406, 0.071826, 10.126269, 0}, - {-0.259771, 0.073023, 10.135846, 0}, - {-0.251391, 0.061052, 10.121481, 0}, - {-0.254982, 0.075417, 10.150211, 0}, - {-0.247800, 0.081403, 10.137043, 0}, - {-0.248997, 0.084994, 10.126269, 0}, - {-0.257377, 0.082600, 10.135846, 0}, - {-0.257377, 0.073023, 10.110707, 0}, - {-0.251391, 0.077812, 10.138240, 0}, - {-0.238223, 0.064643, 10.116693, 0}, - {-0.239420, 0.075417, 10.138240, 0}, - {-0.260968, 0.071826, 10.132255, 0}, - {-0.253785, 0.094571, 10.132255, 0}, - {-0.248997, 0.081403, 10.127466, 0}, - {-0.245406, 0.073023, 10.150211, 0}, - {-0.252588, 0.080206, 10.120284, 0}, - {-0.247800, 0.075417, 10.122678, 0}, - {-0.246603, 0.069432, 10.122678, 0}, - {-0.246603, 0.090980, 10.119086, 0}, - {-0.253785, 0.076614, 10.139438, 0}, - {-0.253785, 0.063446, 10.127466, 0}, - {-0.248997, 0.094571, 10.146620, 0}, - {-0.257377, 0.079009, 10.115496, 0}, - {-0.247800, 0.068235, 10.122678, 0}, - {-0.244208, 0.080206, 10.117889, 0}, - {-0.257377, 0.099359, 10.134649, 0}, - {-0.257377, 0.089783, 10.111904, 0}, - {-0.247800, 0.073023, 10.133451, 0}, - {-0.238223, 0.070629, 10.120284, 0}, - {-0.256179, 0.073023, 10.125072, 0}, - {-0.257377, 0.063446, 10.144226, 0}, - {-0.259771, 0.081403, 10.122678, 0}, - {-0.251391, 0.079009, 10.123875, 0}, - {-0.256179, 0.068235, 10.122678, 0}, - {-0.252588, 0.065841, 10.128663, 0}, - {-0.239420, 0.074220, 10.122678, 0}, - {-0.247800, 0.073023, 10.138240, 0}, - {-0.245406, 0.076614, 10.111904, 0}, - {-0.252588, 0.076614, 10.125072, 0}, - {-0.259771, 0.059855, 10.122678, 0}, - {-0.262165, 0.067038, 10.137043, 0}, - {-0.248997, 0.073023, 10.127466, 0}, - {-0.248997, 0.076614, 10.132255, 0}, - {-0.244208, 0.080206, 10.115496, 0}, - {-0.245406, 0.055067, 10.140635, 0}, - {-0.251391, 0.059855, 10.135846, 0}, - {-0.246603, 0.073023, 10.111904, 0}, - {-0.248997, 0.081403, 10.123875, 0}, - {-0.248997, 0.070629, 10.126269, 0}, - {-0.251391, 0.075417, 10.129861, 0}, - {-0.239420, 0.071826, 10.139438, 0}, - {-0.244208, 0.076614, 10.109509, 0}, - {-0.263362, 0.082600, 10.135846, 0}, - {-0.252588, 0.071826, 10.127466, 0}, - {-0.241814, 0.067038, 10.122678, 0}, - {-0.252588, 0.079009, 10.125072, 0}, - {-0.260968, 0.084994, 10.125072, 0}, - {-0.245406, 0.080206, 10.119086, 0}, - {-0.241814, 0.071826, 10.126269, 0}, - {-0.251391, 0.075417, 10.135846, 0}, - {-0.254982, 0.068235, 10.127466, 0}, - {-0.260968, 0.074220, 10.127466, 0}, - {-0.247800, 0.076614, 10.122678, 0}, - {-0.258574, 0.067038, 10.114298, 0}, - {-0.258574, 0.073023, 10.122678, 0}, - {-0.257377, 0.058658, 10.145423, 0}, - {-0.254982, 0.063446, 10.127466, 0}, - {-0.245406, 0.068235, 10.135846, 0}, - {-0.247800, 0.071826, 10.135846, 0}, - {-0.256179, 0.068235, 10.138240, 0}, - {-0.257377, 0.074220, 10.113101, 0}, - {-0.244208, 0.081403, 10.139438, 0}, - {-0.241814, 0.061052, 10.131058, 0}, - {-0.257377, 0.073023, 10.116693, 0}, - {-0.256179, 0.083797, 10.129861, 0}, - {-0.240617, 0.084994, 10.121481, 0}, - {-0.239420, 0.073023, 10.135846, 0}, - {-0.252588, 0.074220, 10.132255, 0}, - {-0.252588, 0.077812, 10.127466, 0}, - {-0.251391, 0.082600, 10.140635, 0}, - {-0.256179, 0.077812, 10.129861, 0}, - {-0.254982, 0.064643, 10.117889, 0}, - {-0.263362, 0.065841, 10.122678, 0}, - {-0.252588, 0.079009, 10.135846, 0}, - {-0.248997, 0.075417, 10.127466, 0}, - {-0.238223, 0.079009, 10.133451, 0}, - {-0.244208, 0.080206, 10.133451, 0}, - {-0.254982, 0.076614, 10.150211, 0}, - {-0.264559, 0.068235, 10.141831, 0}, - {-0.246603, 0.077812, 10.132255, 0}, - {-0.262165, 0.070629, 10.134649, 0}, - {-0.258574, 0.062249, 10.129861, 0}, - {-0.259771, 0.071826, 10.133451, 0}, - {-0.243011, 0.086191, 10.125072, 0}, - {-0.250194, 0.074220, 10.125072, 0}, - {-0.260968, 0.059855, 10.101130, 0}, - {-0.252588, 0.063446, 10.129861, 0}, - {-0.251391, 0.079009, 10.128663, 0}, - {-0.252588, 0.069432, 10.138240, 0}, - {-0.246603, 0.074220, 10.141831, 0}, - {-0.250194, 0.080206, 10.117889, 0}, - {-0.256179, 0.068235, 10.131058, 0}, - {-0.258574, 0.058658, 10.110707, 0}, - {-0.244208, 0.073023, 10.137043, 0}, - {-0.260968, 0.076614, 10.117889, 0}, - {-0.245406, 0.081403, 10.119086, 0}, - {-0.243011, 0.077812, 10.135846, 0}, - {-0.256179, 0.069432, 10.131058, 0}, - {-0.245406, 0.079009, 10.121481, 0}, - {-0.250194, 0.086191, 10.129861, 0}, - {-0.245406, 0.089783, 10.132255, 0}, - {-0.241814, 0.077812, 10.147817, 0}, - {-0.244208, 0.076614, 10.133451, 0}, - {-0.263362, 0.075417, 10.096342, 0}, - {-0.250194, 0.058658, 10.134649, 0}, - {-0.231040, 0.068235, 10.117889, 0}, - {-0.250194, 0.069432, 10.144226, 0}, - {-0.263362, 0.073023, 10.117889, 0}, - {-0.241814, 0.071826, 10.133451, 0}, - {-0.240617, 0.073023, 10.131058, 0}, - {-0.237026, 0.082600, 10.116693, 0}, - {-0.239420, 0.080206, 10.138240, 0}, - {-0.259771, 0.079009, 10.139438, 0}, - {-0.266953, 0.071826, 10.140635, 0}, - {-0.251391, 0.071826, 10.107116, 0}, - {-0.258574, 0.073023, 10.132255, 0}, - {-0.243011, 0.090980, 10.132255, 0}, - {-0.234632, 0.064643, 10.129861, 0}, - {-0.250194, 0.059855, 10.134649, 0}, - {-0.238223, 0.081403, 10.140635, 0}, - {-0.243011, 0.077812, 10.131058, 0}, - {-0.247800, 0.069432, 10.143028, 0}, - {-0.247800, 0.067038, 10.135846, 0}, - {-0.243011, 0.065841, 10.128663, 0}, - {-0.253785, 0.077812, 10.129861, 0}, - {-0.244208, 0.080206, 10.107116, 0}, - {-0.244208, 0.074220, 10.143028, 0}, - {-0.253785, 0.080206, 10.119086, 0}, - {-0.247800, 0.070629, 10.139438, 0}, - {-0.243011, 0.082600, 10.125072, 0}, - {-0.257377, 0.075417, 10.150211, 0}, - {-0.263362, 0.077812, 10.152605, 0}, - {-0.263362, 0.081403, 10.135846, 0}, - {-0.250194, 0.075417, 10.139438, 0}, - {-0.248997, 0.077812, 10.131058, 0}, - {-0.247800, 0.074220, 10.127466, 0}, - {-0.243011, 0.069432, 10.122678, 0}, - {-0.251391, 0.079009, 10.133451, 0}, - {-0.252588, 0.061052, 10.126269, 0}, - {-0.265756, 0.081403, 10.128663, 0}, - {-0.244208, 0.064643, 10.122678, 0}, - {-0.256179, 0.065841, 10.123875, 0}, - {-0.263362, 0.076614, 10.125072, 0}, - {-0.252588, 0.079009, 10.126269, 0}, - {-0.252588, 0.070629, 10.115496, 0}, - {-0.254982, 0.073023, 10.115496, 0}, - {-0.234632, 0.070629, 10.123875, 0}, - {-0.237026, 0.076614, 10.121481, 0}, - {-0.256179, 0.070629, 10.134649, 0}, - {-0.268150, 0.073023, 10.129861, 0}, - {-0.244208, 0.075417, 10.121481, 0}, - {-0.253785, 0.080206, 10.126269, 0}, - {-0.259771, 0.075417, 10.120284, 0}, - {-0.263362, 0.070629, 10.115496, 0}, - {-0.247800, 0.075417, 10.126269, 0}, - {-0.243011, 0.068235, 10.152605, 0}, - {-0.247800, 0.069432, 10.125072, 0}, - {-0.257377, 0.083797, 10.129861, 0}, - {-0.247800, 0.075417, 10.129861, 0}, - {-0.247800, 0.076614, 10.115496, 0}, - {-0.247800, 0.071826, 10.131058, 0}, - {-0.258574, 0.083797, 10.125072, 0}, - {-0.250194, 0.095768, 10.132255, 0}, - {-0.266953, 0.076614, 10.123875, 0}, - {-0.256179, 0.079009, 10.152605, 0}, - {-0.251391, 0.073023, 10.126269, 0}, - {-0.248997, 0.068235, 10.128663, 0}, - {-0.243011, 0.073023, 10.134649, 0}, - {-0.258574, 0.071826, 10.137043, 0}, - {-0.253785, 0.061052, 10.119086, 0}, - {-0.250194, 0.073023, 10.138240, 0}, - {-0.241814, 0.070629, 10.113101, 0}, - {-0.250194, 0.079009, 10.141831, 0}, - {-0.237026, 0.070629, 10.128663, 0}, - {-0.240617, 0.083797, 10.120284, 0}, - {-0.259771, 0.073023, 10.144226, 0}, - {-0.232237, 0.068235, 10.122678, 0}, - {-0.246603, 0.065841, 10.133451, 0}, - {-0.258574, 0.079009, 10.109509, 0}, - {-0.245406, 0.075417, 10.131058, 0}, - {-0.240617, 0.076614, 10.127466, 0}, - {-0.246603, 0.074220, 10.115496, 0}, - {-0.247800, 0.068235, 10.129861, 0}, - {-0.252588, 0.073023, 10.145423, 0}, - {-0.252588, 0.069432, 10.132255, 0}, - {-0.248997, 0.062249, 10.110707, 0}, - {-0.257377, 0.073023, 10.146620, 0}, - {-0.247800, 0.077812, 10.133451, 0}, - {-0.233435, 0.075417, 10.123875, 0}, - {-0.259771, 0.080206, 10.117889, 0}, - {-0.252588, 0.071826, 10.131058, 0}, - {-0.257377, 0.077812, 10.128663, 0}, - {-0.244208, 0.065841, 10.138240, 0}, - {-0.245406, 0.076614, 10.132255, 0}, - {-0.259771, 0.074220, 10.134649, 0}, - {-0.251391, 0.073023, 10.133451, 0}, - {-0.238223, 0.063446, 10.127466, 0}, - {-0.246603, 0.052672, 10.128663, 0}, - {-0.260968, 0.069432, 10.125072, 0}, - {-0.251391, 0.087388, 10.104721, 0}, - {-0.243011, 0.074220, 10.120284, 0}, - {-0.259771, 0.069432, 10.149014, 0}, - {-0.252588, 0.083797, 10.139438, 0}, - {-0.252588, 0.070629, 10.134649, 0}, - {-0.244208, 0.071826, 10.134649, 0}, - {-0.244208, 0.080206, 10.122678, 0}, - {-0.263362, 0.076614, 10.126269, 0}, - {-0.243011, 0.076614, 10.113101, 0}, - {-0.250194, 0.084994, 10.133451, 0}, - {-0.247800, 0.081403, 10.151408, 0}, - {-0.247800, 0.082600, 10.123875, 0}, - {-0.240617, 0.080206, 10.133451, 0}, - {-0.254982, 0.074220, 10.135846, 0}, - {-0.260968, 0.076614, 10.123875, 0}, - {-0.251391, 0.069432, 10.127466, 0}, - {-0.251391, 0.080206, 10.140635, 0}, - {-0.248997, 0.065841, 10.129861, 0}, - {-0.245406, 0.081403, 10.137043, 0}, - {-0.248997, 0.096965, 10.128663, 0}, - {-0.264559, 0.069432, 10.149014, 0}, - {-0.254982, 0.071826, 10.114298, 0}, - {-0.257377, 0.071826, 10.140635, 0}, - {-0.254982, 0.077812, 10.128663, 0}, - {-0.256179, 0.083797, 10.126269, 0}, - {-0.254982, 0.063446, 10.143028, 0}, - {-0.247800, 0.058658, 10.133451, 0}, - {-0.251391, 0.068235, 10.137043, 0}, - {-0.245406, 0.080206, 10.102327, 0}, - {-0.243011, 0.070629, 10.129861, 0}, - {-0.253785, 0.073023, 10.111904, 0}, - {-0.251391, 0.076614, 10.145423, 0}, - {-0.247800, 0.075417, 10.133451, 0}, - {-0.248997, 0.065841, 10.139438, 0}, - {-0.248997, 0.063446, 10.125072, 0}, - {-0.252588, 0.070629, 10.102327, 0}, - {-0.246603, 0.083797, 10.113101, 0}, - {-0.237026, 0.074220, 10.116693, 0}, - {-0.240617, 0.073023, 10.138240, 0}, - {-0.235829, 0.076614, 10.116693, 0}, - {-0.247800, 0.073023, 10.141831, 0}, - {-0.258574, 0.075417, 10.134649, 0}, - {-0.253785, 0.081403, 10.126269, 0}, - {-0.250194, 0.082600, 10.121481, 0}, - {-0.250194, 0.088585, 10.149014, 0}, - {-0.253785, 0.069432, 10.126269, 0}, - {-0.252588, 0.083797, 10.128663, 0}, - {-0.245406, 0.058658, 10.133451, 0}, - {-0.258574, 0.087388, 10.119086, 0}, - {-0.253785, 0.064643, 10.131058, 0}, - {-0.248997, 0.067038, 10.128663, 0}, - {-0.248997, 0.075417, 10.155000, 0}, - {-0.251391, 0.079009, 10.132255, 0}, - {-0.253785, 0.087388, 10.131058, 0}, - {-0.240617, 0.088585, 10.113101, 0}, - {-0.247800, 0.077812, 10.134649, 0}, - {-0.247800, 0.077812, 10.122678, 0}, - {-0.263362, 0.086191, 10.131058, 0}, - {-0.243011, 0.084994, 10.129861, 0}, - {-0.243011, 0.077812, 10.113101, 0}, - {-0.252588, 0.077812, 10.125072, 0}, - {-0.248997, 0.076614, 10.096342, 0}, - {-0.241814, 0.070629, 10.158591, 0}, - {-0.257377, 0.075417, 10.117889, 0}, - {-0.250194, 0.076614, 10.131058, 0}, - {-0.250194, 0.071826, 10.135846, 0}, - {-0.253785, 0.069432, 10.115496, 0}, - {-0.248997, 0.069432, 10.144226, 0}, - {-0.246603, 0.068235, 10.110707, 0}, - {-0.260968, 0.075417, 10.151408, 0}, - {-0.246603, 0.074220, 10.113101, 0}, - {-0.254982, 0.076614, 10.122678, 0}, - {-0.250194, 0.063446, 10.116693, 0}, - {-0.233435, 0.077812, 10.134649, 0}, - {-0.245406, 0.079009, 10.135846, 0}, - {-0.250194, 0.079009, 10.119086, 0}, - {-0.264559, 0.086191, 10.109509, 0}, - {-0.252588, 0.090980, 10.126269, 0}, - {-0.250194, 0.082600, 10.147817, 0}, - {-0.238223, 0.070629, 10.125072, 0}, - {-0.245406, 0.082600, 10.139438, 0}, - {-0.239420, 0.082600, 10.131058, 0}, - {-0.251391, 0.087388, 10.147817, 0}, - {-0.257377, 0.073023, 10.128663, 0}, - {-0.251391, 0.081403, 10.144226, 0}, - {-0.254982, 0.086191, 10.120284, 0}, - {-0.253785, 0.080206, 10.146620, 0}, - {-0.256179, 0.077812, 10.149014, 0}, - {-0.248997, 0.083797, 10.128663, 0}, - {-0.251391, 0.071826, 10.125072, 0}, - {-0.244208, 0.068235, 10.113101, 0}, - {-0.252588, 0.070629, 10.132255, 0}, - {-0.258574, 0.064643, 10.116693, 0}, - {-0.246603, 0.074220, 10.135846, 0}, - {-0.247800, 0.070629, 10.123875, 0}, - {-0.239420, 0.081403, 10.144226, 0}, - {-0.247800, 0.075417, 10.121481, 0}, - {-0.259771, 0.073023, 10.103524, 0}, - {-0.248997, 0.073023, 10.129861, 0}, - {-0.241814, 0.071826, 10.134649, 0}, - {-0.235829, 0.079009, 10.127466, 0}, - {-0.244208, 0.095768, 10.122678, 0}, - {-0.227449, 0.065841, 10.147817, 0}, - {-0.251391, 0.074220, 10.135846, 0}, - {-0.251391, 0.074220, 10.137043, 0}, - {-0.253785, 0.077812, 10.125072, 0}, - {-0.259771, 0.071826, 10.135846, 0}, - {-0.227449, 0.067038, 10.122678, 0}, - {-0.235829, 0.065841, 10.127466, 0}, - {-0.251391, 0.076614, 10.128663, 0}, - {-0.238223, 0.058658, 10.128663, 0}, - {-0.238223, 0.074220, 10.126269, 0}, - {-0.246603, 0.084994, 10.140635, 0}, - {-0.258574, 0.071826, 10.132255, 0}, - {-0.252588, 0.074220, 10.122678, 0}, - {-0.245406, 0.076614, 10.121481, 0}, - {-0.244208, 0.074220, 10.134649, 0}, - {-0.248997, 0.069432, 10.122678, 0}, - {-0.246603, 0.077812, 10.127466, 0}, - {-0.256179, 0.083797, 10.133451, 0}, - {-0.247800, 0.086191, 10.135846, 0}, - {-0.248997, 0.076614, 10.144226, 0}, - {-0.253785, 0.073023, 10.120284, 0}, - {-0.256179, 0.071826, 10.140635, 0}, - {-0.254982, 0.083797, 10.123875, 0}, - {-0.247800, 0.076614, 10.131058, 0}, - {-0.259771, 0.077812, 10.117889, 0}, - {-0.243011, 0.069432, 10.132255, 0}, - {-0.250194, 0.075417, 10.120284, 0}, - {-0.247800, 0.086191, 10.128663, 0}, - {-0.241814, 0.065841, 10.150211, 0}, - {-0.250194, 0.075417, 10.128663, 0}, - {-0.234632, 0.079009, 10.103524, 0}, - {-0.266953, 0.073023, 10.127466, 0}, - {-0.237026, 0.080206, 10.119086, 0}, - {-0.254982, 0.075417, 10.151408, 0}, - {-0.248997, 0.063446, 10.129861, 0}, - {-0.254982, 0.071826, 10.135846, 0}, - {-0.246603, 0.075417, 10.125072, 0}, - {-0.237026, 0.069432, 10.126269, 0}, - {-0.243011, 0.070629, 10.146620, 0}, - {-0.244208, 0.082600, 10.137043, 0}, - {-0.263362, 0.071826, 10.138240, 0}, - {-0.250194, 0.074220, 10.149014, 0}, - {-0.250194, 0.070629, 10.137043, 0}, - {-0.253785, 0.080206, 10.122678, 0}, - {-0.247800, 0.080206, 10.131058, 0}, - {-0.237026, 0.082600, 10.134649, 0}, - {-0.243011, 0.079009, 10.129861, 0}, - {-0.246603, 0.071826, 10.117889, 0}, - {-0.256179, 0.074220, 10.135846, 0}, - {-0.250194, 0.075417, 10.128663, 0}, - {-0.247800, 0.074220, 10.120284, 0}, - {-0.251391, 0.065841, 10.141831, 0}, - {-0.248997, 0.062249, 10.115496, 0}, - {-0.260968, 0.068235, 10.141831, 0}, - {-0.248997, 0.079009, 10.141831, 0}, - {-0.247800, 0.075417, 10.156197, 0}, - {-0.246603, 0.070629, 10.132255, 0}, - {-0.252588, 0.082600, 10.116693, 0}, - {-0.252588, 0.074220, 10.122678, 0}, - {-0.262165, 0.071826, 10.123875, 0}, - {-0.251391, 0.067038, 10.121481, 0}, - {-0.239420, 0.081403, 10.113101, 0}, - {-0.247800, 0.084994, 10.132255, 0}, - {-0.252588, 0.075417, 10.138240, 0}, - {-0.246603, 0.075417, 10.125072, 0}, - {-0.246603, 0.076614, 10.109509, 0}, - {-0.253785, 0.074220, 10.125072, 0}, - {-0.251391, 0.081403, 10.139438, 0}, - {-0.243011, 0.073023, 10.114298, 0}, - {-0.253785, 0.065841, 10.107116, 0}, - {-0.243011, 0.080206, 10.121481, 0}, - {-0.253785, 0.069432, 10.129861, 0}, - {-0.256179, 0.068235, 10.121481, 0}, - {-0.246603, 0.068235, 10.121481, 0}, - {-0.254982, 0.075417, 10.121481, 0}, - {-0.241814, 0.074220, 10.120284, 0}, - {-0.258574, 0.073023, 10.127466, 0}, - {-0.235829, 0.074220, 10.128663, 0}, - {-0.247800, 0.071826, 10.120284, 0}, - {-0.258574, 0.073023, 10.119086, 0}, - {-0.256179, 0.082600, 10.125072, 0}, - {-0.243011, 0.081403, 10.128663, 0}, - {-0.241814, 0.069432, 10.132255, 0}, - {-0.252588, 0.074220, 10.135846, 0}, - {-0.235829, 0.076614, 10.138240, 0}, - {-0.252588, 0.069432, 10.133451, 0}, - {-0.257377, 0.087388, 10.129861, 0}, - {-0.252588, 0.079009, 10.120284, 0}, - {-0.245406, 0.077812, 10.132255, 0}, - {-0.244208, 0.077812, 10.105919, 0}, - {-0.252588, 0.064643, 10.128663, 0}, - {-0.257377, 0.080206, 10.122678, 0}, - {-0.227449, 0.075417, 10.122678, 0}, - {-0.256179, 0.076614, 10.139438, 0}, - {-0.250194, 0.068235, 10.134649, 0}, - {-0.244208, 0.080206, 10.145423, 0}, - {-0.244208, 0.075417, 10.117889, 0}, - {-0.245406, 0.071826, 10.137043, 0}, - {-0.251391, 0.069432, 10.132255, 0}, - {-0.252588, 0.065841, 10.127466, 0}, - {-0.252588, 0.087388, 10.135846, 0}, - {-0.250194, 0.083797, 10.140635, 0}, - {-0.265756, 0.083797, 10.127466, 0}, - {-0.251391, 0.081403, 10.116693, 0}, - {-0.243011, 0.073023, 10.131058, 0}, - {-0.256179, 0.079009, 10.132255, 0}, - {-0.256179, 0.079009, 10.135846, 0}, - {-0.259771, 0.080206, 10.139438, 0}, - {-0.248997, 0.069432, 10.134649, 0}, - {-0.247800, 0.076614, 10.109509, 0}, - {-0.251391, 0.069432, 10.140635, 0}, - {-0.248997, 0.065841, 10.129861, 0}, - {-0.256179, 0.084994, 10.119086, 0}, - {-0.253785, 0.082600, 10.111904, 0}, - {-0.251391, 0.079009, 10.134649, 0}, - {-0.258574, 0.077812, 10.125072, 0}, - {-0.254982, 0.062249, 10.108313, 0}, - {-0.272939, 0.080206, 10.151408, 0}, - {-0.260968, 0.082600, 10.113101, 0}, - {-0.244208, 0.086191, 10.123875, 0}, - {-0.247800, 0.079009, 10.116693, 0}, - {-0.247800, 0.075417, 10.141831, 0}, - {-0.259771, 0.076614, 10.120284, 0}, - {-0.239420, 0.081403, 10.134649, 0}, - {-0.253785, 0.080206, 10.121481, 0}, - {-0.262165, 0.074220, 10.119086, 0}, - {-0.253785, 0.069432, 10.127466, 0}, - {-0.262165, 0.069432, 10.104721, 0}, - {-0.252588, 0.084994, 10.120284, 0}, - {-0.251391, 0.063446, 10.113101, 0}, - {-0.263362, 0.074220, 10.121481, 0}, - {-0.259771, 0.068235, 10.135846, 0}, - {-0.250194, 0.070629, 10.138240, 0}, - {-0.258574, 0.077812, 10.132255, 0}, - {-0.252588, 0.067038, 10.135846, 0}, - {-0.251391, 0.064643, 10.128663, 0}, - {-0.243011, 0.082600, 10.134649, 0}, - {-0.238223, 0.084994, 10.144226, 0}, - {-0.260968, 0.084994, 10.123875, 0}, - {-0.254982, 0.075417, 10.137043, 0}, - {-0.259771, 0.075417, 10.111904, 0}, - {-0.251391, 0.084994, 10.143028, 0}, - {-0.245406, 0.079009, 10.117889, 0}, - {-0.252588, 0.074220, 10.149014, 0}, - {-0.254982, 0.062249, 10.132255, 0}, - {-0.241814, 0.062249, 10.116693, 0}, - {-0.247800, 0.074220, 10.151408, 0}, - {-0.240617, 0.081403, 10.115496, 0}, - {-0.247800, 0.067038, 10.139438, 0}, - {-0.250194, 0.079009, 10.126269, 0}, - {-0.237026, 0.087388, 10.150211, 0}, - {-0.238223, 0.073023, 10.134649, 0}, - {-0.241814, 0.080206, 10.140635, 0}, - {-0.248997, 0.075417, 10.122678, 0}, - {-0.254982, 0.081403, 10.123875, 0}, - {-0.257377, 0.067038, 10.138240, 0}, - {-0.247800, 0.076614, 10.128663, 0}, - {-0.256179, 0.076614, 10.145423, 0}, - {-0.241814, 0.080206, 10.132255, 0}, - {-0.238223, 0.067038, 10.137043, 0}, - {-0.257377, 0.064643, 10.119086, 0}, - {-0.243011, 0.081403, 10.129861, 0}, - {-0.248997, 0.081403, 10.115496, 0}, - {-0.258574, 0.062249, 10.133451, 0}, - {-0.247800, 0.070629, 10.119086, 0}, - {-0.252588, 0.074220, 10.129861, 0}, - {-0.246603, 0.070629, 10.133451, 0}, - {-0.245406, 0.073023, 10.102327, 0}, - {-0.252588, 0.080206, 10.139438, 0}, - {-0.247800, 0.068235, 10.113101, 0}, - {-0.254982, 0.074220, 10.126269, 0}, - {-0.251391, 0.079009, 10.120284, 0}, - {-0.251391, 0.089783, 10.137043, 0}, - {-0.252588, 0.065841, 10.127466, 0}, - {-0.251391, 0.068235, 10.120284, 0}, - {-0.257377, 0.067038, 10.127466, 0}, - {-0.241814, 0.081403, 10.128663, 0}, - {-0.241814, 0.081403, 10.135846, 0}, - {-0.247800, 0.071826, 10.135846, 0}, - {-0.250194, 0.070629, 10.138240, 0}, - {-0.252588, 0.084994, 10.131058, 0}, - {-0.245406, 0.083797, 10.139438, 0}, - {-0.244208, 0.075417, 10.123875, 0}, - {-0.259771, 0.077812, 10.137043, 0}, - {-0.248997, 0.071826, 10.123875, 0}, - {-0.246603, 0.086191, 10.152605, 0}, - {-0.241814, 0.069432, 10.132255, 0}, - {-0.243011, 0.064643, 10.129861, 0}, - {-0.245406, 0.073023, 10.129861, 0}, - {-0.251391, 0.076614, 10.116693, 0}, - {-0.264559, 0.068235, 10.139438, 0}, - {-0.247800, 0.073023, 10.105919, 0}, - {-0.244208, 0.077812, 10.145423, 0}, - {-0.250194, 0.077812, 10.137043, 0}, - {-0.252588, 0.064643, 10.126269, 0}, - {-0.252588, 0.079009, 10.125072, 0}, - {-0.239420, 0.084994, 10.126269, 0}, - {-0.246603, 0.067038, 10.137043, 0}, - {-0.252588, 0.077812, 10.114298, 0}, - {-0.266953, 0.062249, 10.131058, 0}, - {-0.264559, 0.076614, 10.114298, 0}, - {-0.250194, 0.071826, 10.135846, 0}, - {-0.250194, 0.087388, 10.134649, 0}, - {-0.246603, 0.082600, 10.147817, 0}, - {-0.245406, 0.065841, 10.131058, 0}, - {-0.258574, 0.070629, 10.139438, 0}, - {-0.251391, 0.081403, 10.111904, 0}, - {-0.246603, 0.080206, 10.132255, 0}, - {-0.235829, 0.074220, 10.117889, 0}, - {-0.243011, 0.075417, 10.123875, 0}, - {-0.241814, 0.065841, 10.139438, 0}, - {-0.241814, 0.077812, 10.119086, 0}, - {-0.247800, 0.084994, 10.153803, 0}, - {-0.266953, 0.081403, 10.116693, 0}, - {-0.243011, 0.083797, 10.137043, 0}, - {-0.257377, 0.074220, 10.109509, 0}, - {-0.252588, 0.074220, 10.126269, 0}, - {-0.247800, 0.076614, 10.127466, 0}, - {-0.243011, 0.068235, 10.111904, 0}, - {-0.259771, 0.077812, 10.132255, 0}, - {-0.253785, 0.092177, 10.103524, 0}, - {-0.243011, 0.086191, 10.123875, 0}, - {-0.232237, 0.069432, 10.134649, 0}, - {-0.233435, 0.076614, 10.129861, 0}, - {-0.257377, 0.068235, 10.114298, 0}, - {-0.250194, 0.074220, 10.127466, 0}, - {-0.245406, 0.077812, 10.131058, 0}, - {-0.251391, 0.077812, 10.123875, 0}, - {-0.245406, 0.074220, 10.123875, 0}, - {-0.245406, 0.069432, 10.122678, 0}, - {-0.254982, 0.071826, 10.119086, 0}, - {-0.257377, 0.064643, 10.116693, 0}, - {-0.256179, 0.079009, 10.128663, 0}, - {-0.241814, 0.062249, 10.098736, 0}, - {-0.248997, 0.067038, 10.144226, 0}, - {-0.237026, 0.083797, 10.145423, 0}, - {-0.253785, 0.076614, 10.120284, 0}, - {-0.251391, 0.065841, 10.113101, 0}, - {-0.248997, 0.067038, 10.104721, 0}, - {-0.244208, 0.073023, 10.134649, 0}, - {-0.259771, 0.069432, 10.134649, 0}, - {-0.244208, 0.084994, 10.141831, 0}, - {-0.257377, 0.076614, 10.126269, 0}, - {-0.246603, 0.073023, 10.137043, 0}, - {-0.247800, 0.073023, 10.111904, 0}, - {-0.243011, 0.073023, 10.144226, 0}, - {-0.251391, 0.080206, 10.129861, 0}, - {-0.244208, 0.076614, 10.126269, 0}, - {-0.246603, 0.069432, 10.135846, 0}, - {-0.250194, 0.073023, 10.131058, 0}, - {-0.250194, 0.069432, 10.122678, 0}, - {-0.238223, 0.073023, 10.133451, 0}, - {-0.229843, 0.063446, 10.121481, 0}, - {-0.235829, 0.084994, 10.115496, 0}, - {-0.243011, 0.077812, 10.122678, 0}, - {-0.238223, 0.067038, 10.116693, 0}, - {-0.245406, 0.069432, 10.137043, 0}, - {-0.258574, 0.081403, 10.122678, 0}, - {-0.239420, 0.083797, 10.149014, 0}, - {-0.240617, 0.075417, 10.123875, 0}, - {-0.251391, 0.067038, 10.153803, 0}, - {-0.240617, 0.075417, 10.145423, 0}, - {-0.231040, 0.083797, 10.129861, 0}, - {-0.247800, 0.090980, 10.155000, 0}, - {-0.247800, 0.077812, 10.125072, 0}, - {-0.253785, 0.084994, 10.131058, 0}, - {-0.257377, 0.073023, 10.108313, 0}, - {-0.248997, 0.080206, 10.123875, 0}, - {-0.244208, 0.073023, 10.113101, 0}, - {-0.237026, 0.080206, 10.121481, 0}, - {-0.248997, 0.055067, 10.127466, 0}, - {-0.256179, 0.073023, 10.137043, 0}, - {-0.260968, 0.081403, 10.131058, 0}, - {-0.251391, 0.069432, 10.125072, 0}, - {-0.252588, 0.074220, 10.115496, 0}, - {-0.250194, 0.086191, 10.122678, 0}, - {-0.235829, 0.076614, 10.119086, 0}, - {-0.258574, 0.079009, 10.127466, 0}, - {-0.247800, 0.076614, 10.139438, 0}, - {-0.247800, 0.079009, 10.126269, 0}, - {-0.237026, 0.088585, 10.134649, 0}, - {-0.240617, 0.073023, 10.120284, 0}, - {-0.244208, 0.073023, 10.125072, 0}, - {-0.243011, 0.076614, 10.115496, 0}, - {-0.238223, 0.080206, 10.122678, 0}, - {-0.239420, 0.067038, 10.122678, 0}, - {-0.253785, 0.081403, 10.119086, 0}, - {-0.246603, 0.080206, 10.125072, 0}, - {-0.251391, 0.082600, 10.126269, 0}, - {-0.238223, 0.073023, 10.132255, 0}, - {-0.252588, 0.075417, 10.133451, 0}, - {-0.254982, 0.061052, 10.140635, 0}, - {-0.253785, 0.065841, 10.117889, 0}, - {-0.235829, 0.071826, 10.143028, 0}, - {-0.245406, 0.083797, 10.122678, 0}, - {-0.256179, 0.088585, 10.129861, 0}, - {-0.259771, 0.077812, 10.121481, 0}, - {-0.238223, 0.067038, 10.125072, 0}, - {-0.247800, 0.073023, 10.140635, 0}, - {-0.248997, 0.073023, 10.111904, 0}, - {-0.245406, 0.075417, 10.145423, 0}, - {-0.268150, 0.075417, 10.102327, 0}, - {-0.246603, 0.080206, 10.129861, 0}, - {-0.251391, 0.080206, 10.126269, 0}, - {-0.251391, 0.071826, 10.134649, 0}, - {-0.262165, 0.076614, 10.143028, 0}, - {-0.247800, 0.070629, 10.121481, 0}, - {-0.238223, 0.083797, 10.135846, 0}, - {-0.251391, 0.069432, 10.111904, 0}, - {-0.256179, 0.082600, 10.139438, 0}, - {-0.262165, 0.083797, 10.128663, 0}, - {-0.251391, 0.079009, 10.122678, 0}, - {-0.245406, 0.077812, 10.125072, 0}, - {-0.239420, 0.074220, 10.125072, 0}, - {-0.258574, 0.076614, 10.127466, 0}, - {-0.256179, 0.088585, 10.126269, 0}, - {-0.246603, 0.080206, 10.111904, 0}, - {-0.241814, 0.084994, 10.133451, 0}, - {-0.235829, 0.079009, 10.141831, 0}, - {-0.263362, 0.073023, 10.138240, 0}, - {-0.251391, 0.069432, 10.134649, 0}, - {-0.245406, 0.069432, 10.127466, 0}, - {-0.250194, 0.074220, 10.133451, 0}, - {-0.251391, 0.068235, 10.131058, 0}, - {-0.254982, 0.070629, 10.128663, 0}, - {-0.240617, 0.083797, 10.111904, 0}, - {-0.245406, 0.075417, 10.122678, 0}, - {-0.245406, 0.084994, 10.119086, 0}, - {-0.248997, 0.079009, 10.098736, 0}, - {-0.240617, 0.070629, 10.127466, 0}, - {-0.244208, 0.079009, 10.145423, 0}, - {-0.264559, 0.079009, 10.120284, 0}, - {-0.244208, 0.077812, 10.119086, 0}, - {-0.237026, 0.080206, 10.107116, 0}, - {-0.235829, 0.086191, 10.128663, 0}, - {-0.245406, 0.081403, 10.133451, 0}, - {-0.247800, 0.077812, 10.138240, 0}, - {-0.251391, 0.080206, 10.125072, 0}, - {-0.257377, 0.068235, 10.147817, 0}, - {-0.263362, 0.076614, 10.121481, 0}, - {-0.268150, 0.073023, 10.116693, 0}, - {-0.247800, 0.071826, 10.122678, 0}, - {-0.260968, 0.073023, 10.134649, 0}, - {-0.254982, 0.074220, 10.116693, 0}, - {-0.246603, 0.086191, 10.131058, 0}, - {-0.248997, 0.079009, 10.125072, 0}, - {-0.252588, 0.067038, 10.132255, 0}, - {-0.254982, 0.063446, 10.123875, 0}, - {-0.256179, 0.067038, 10.116693, 0}, - {-0.259771, 0.083797, 10.125072, 0}, - {-0.264559, 0.069432, 10.131058, 0}, - {-0.243011, 0.074220, 10.143028, 0}, - {-0.254982, 0.081403, 10.128663, 0}, - {-0.253785, 0.065841, 10.143028, 0}, - {-0.260968, 0.075417, 10.131058, 0}, - {-0.265756, 0.090980, 10.128663, 0}, - {-0.244208, 0.088585, 10.146620, 0}, - {-0.246603, 0.082600, 10.114298, 0}, - {-0.256179, 0.077812, 10.133451, 0}, - {-0.250194, 0.064643, 10.117889, 0}, - {-0.254982, 0.075417, 10.117889, 0}, - {-0.266953, 0.065841, 10.113101, 0}, - {-0.253785, 0.073023, 10.128663, 0}, - {-0.259771, 0.082600, 10.138240, 0}, - {-0.247800, 0.071826, 10.145423, 0}, - {-0.243011, 0.074220, 10.122678, 0}, - {-0.257377, 0.083797, 10.140635, 0}, - {-0.232237, 0.087388, 10.117889, 0}, - {-0.244208, 0.076614, 10.125072, 0}, - {-0.248997, 0.067038, 10.128663, 0}, - {-0.256179, 0.062249, 10.115496, 0}, - {-0.263362, 0.071826, 10.141831, 0}, - {-0.246603, 0.075417, 10.107116, 0}, - {-0.244208, 0.081403, 10.137043, 0}, - {-0.254982, 0.083797, 10.123875, 0}, - {-0.243011, 0.092177, 10.132255, 0}, - {-0.260968, 0.077812, 10.131058, 0}, - {-0.256179, 0.073023, 10.119086, 0}, - {-0.239420, 0.082600, 10.132255, 0}, - {-0.251391, 0.073023, 10.117889, 0}, - {-0.254982, 0.071826, 10.134649, 0}, - {-0.259771, 0.080206, 10.120284, 0}, - {-0.246603, 0.069432, 10.133451, 0}, - {-0.250194, 0.061052, 10.126269, 0}, - {-0.256179, 0.063446, 10.109509, 0}, - {-0.251391, 0.087388, 10.120284, 0}, - {-0.246603, 0.069432, 10.132255, 0}, - {-0.244208, 0.077812, 10.133451, 0}, - {-0.257377, 0.069432, 10.126269, 0}, - {-0.247800, 0.075417, 10.133451, 0}, - {-0.246603, 0.071826, 10.117889, 0}, - {-0.245406, 0.093374, 10.135846, 0}, - {-0.254982, 0.082600, 10.105919, 0}, - {-0.247800, 0.076614, 10.143028, 0}, - {-0.246603, 0.076614, 10.126269, 0}, - {-0.243011, 0.067038, 10.127466, 0}, - {-0.253785, 0.064643, 10.119086, 0}, - {-0.248997, 0.079009, 10.127466, 0}, - {-0.248997, 0.080206, 10.141831, 0}, - {-0.244208, 0.074220, 10.133451, 0}, - {-0.240617, 0.079009, 10.135846, 0}, - {-0.232237, 0.075417, 10.115496, 0}, - {-0.254982, 0.082600, 10.139438, 0}, - {-0.258574, 0.077812, 10.119086, 0}, - {-0.246603, 0.076614, 10.109509, 0}, - {-0.248997, 0.080206, 10.125072, 0}, - {-0.256179, 0.077812, 10.128663, 0}, - {-0.235829, 0.076614, 10.126269, 0}, - {-0.253785, 0.076614, 10.128663, 0}, - {-0.254982, 0.075417, 10.147817, 0}, - {-0.246603, 0.079009, 10.145423, 0}, - {-0.243011, 0.081403, 10.146620, 0}, - {-0.237026, 0.075417, 10.134649, 0}, - {-0.258574, 0.077812, 10.149014, 0}, - {-0.262165, 0.079009, 10.141831, 0}, - {-0.245406, 0.069432, 10.140635, 0}, - {-0.240617, 0.074220, 10.120284, 0}, - {-0.252588, 0.080206, 10.143028, 0}, - {-0.254982, 0.084994, 10.135846, 0}, - {-0.248997, 0.067038, 10.131058, 0}, - {-0.234632, 0.070629, 10.133451, 0}, - {-0.246603, 0.067038, 10.132255, 0}, - {-0.246603, 0.070629, 10.143028, 0}, - {-0.245406, 0.079009, 10.135846, 0}, - {-0.253785, 0.077812, 10.144226, 0}, - {-0.248997, 0.076614, 10.127466, 0}, - {-0.227449, 0.093374, 10.119086, 0}, - {-0.257377, 0.073023, 10.125072, 0}, - {-0.254982, 0.057461, 10.133451, 0}, - {-0.247800, 0.069432, 10.122678, 0}, - {-0.252588, 0.075417, 10.125072, 0}, - {-0.262165, 0.088585, 10.125072, 0}, - {-0.253785, 0.080206, 10.127466, 0}, - {-0.252588, 0.070629, 10.137043, 0}, - {-0.254982, 0.068235, 10.113101, 0}, - {-0.244208, 0.076614, 10.132255, 0}, - {-0.244208, 0.074220, 10.129861, 0}, - {-0.244208, 0.073023, 10.141831, 0}, - {-0.239420, 0.080206, 10.108313, 0}, - {-0.241814, 0.087388, 10.122678, 0}, - {-0.253785, 0.093374, 10.122678, 0}, - {-0.252588, 0.070629, 10.133451, 0}, - {-0.244208, 0.073023, 10.147817, 0}, - {-0.245406, 0.076614, 10.122678, 0}, - {-0.254982, 0.087388, 10.132255, 0}, - {-0.241814, 0.065841, 10.125072, 0}, - {-0.231040, 0.068235, 10.123875, 0}, - {-0.238223, 0.081403, 10.117889, 0}, - {-0.241814, 0.083797, 10.139438, 0}, - {-0.240617, 0.045490, 10.119086, 0}, - {-0.262165, 0.069432, 10.125072, 0}, - {-0.259771, 0.081403, 10.126269, 0}, - {-0.248997, 0.068235, 10.129861, 0}, - {-0.238223, 0.071826, 10.131058, 0}, - {-0.237026, 0.087388, 10.117889, 0}, - {-0.253785, 0.076614, 10.123875, 0}, - {-0.260968, 0.077812, 10.120284, 0}, - {-0.246603, 0.073023, 10.126269, 0}, - {-0.256179, 0.082600, 10.119086, 0}, - {-0.252588, 0.067038, 10.139438, 0}, - {-0.260968, 0.073023, 10.127466, 0}, - {-0.235829, 0.086191, 10.121481, 0}, - {-0.244208, 0.088585, 10.131058, 0}, - {-0.245406, 0.073023, 10.143028, 0}, - {-0.243011, 0.079009, 10.139438, 0}, - {-0.253785, 0.077812, 10.120284, 0}, - {-0.252588, 0.068235, 10.123875, 0}, - {-0.246603, 0.069432, 10.132255, 0}, - {-0.237026, 0.070629, 10.139438, 0}, - {-0.244208, 0.068235, 10.120284, 0}, - {-0.247800, 0.079009, 10.134649, 0}, - {-0.256179, 0.084994, 10.150211, 0}, - {-0.246603, 0.070629, 10.126269, 0}, - {-0.246603, 0.065841, 10.131058, 0}, - {-0.262165, 0.068235, 10.126269, 0}, - {-0.244208, 0.069432, 10.125072, 0}, - {-0.245406, 0.081403, 10.114298, 0}, - {-0.257377, 0.070629, 10.133451, 0}, - {-0.247800, 0.079009, 10.109509, 0}, - {-0.245406, 0.071826, 10.125072, 0}, - {-0.237026, 0.069432, 10.139438, 0}, - {-0.244208, 0.081403, 10.145423, 0}, - {-0.246603, 0.075417, 10.129861, 0}, - {-0.262165, 0.082600, 10.128663, 0}, - {-0.246603, 0.083797, 10.147817, 0}, - {-0.243011, 0.079009, 10.128663, 0}, - {-0.251391, 0.069432, 10.133451, 0}, - {-0.253785, 0.070629, 10.122678, 0}, - {-0.248997, 0.075417, 10.139438, 0}, - {-0.256179, 0.080206, 10.104721, 0}, - {-0.263362, 0.081403, 10.127466, 0}, - {-0.247800, 0.068235, 10.140635, 0}, - {-0.251391, 0.062249, 10.138240, 0}, - {-0.245406, 0.087388, 10.133451, 0}, - {-0.254982, 0.075417, 10.122678, 0}, - {-0.240617, 0.071826, 10.135846, 0}, - {-0.258574, 0.068235, 10.114298, 0}, - {-0.250194, 0.077812, 10.137043, 0}, - {-0.238223, 0.070629, 10.121481, 0}, - {-0.244208, 0.080206, 10.126269, 0}, - {-0.246603, 0.071826, 10.119086, 0}, - {-0.258574, 0.068235, 10.147817, 0}, - {-0.252588, 0.058658, 10.121481, 0}, - {-0.258574, 0.073023, 10.122678, 0}, - {-0.244208, 0.075417, 10.144226, 0}, - {-0.241814, 0.075417, 10.120284, 0}, - {-0.257377, 0.063446, 10.129861, 0}, - {-0.260968, 0.075417, 10.091554, 0}, - {-0.260968, 0.086191, 10.149014, 0}, - {-0.243011, 0.084994, 10.095144, 0}, - {-0.246603, 0.081403, 10.141831, 0}, - {-0.243011, 0.068235, 10.138240, 0}, - {-0.252588, 0.084994, 10.131058, 0}, - {-0.257377, 0.077812, 10.141831, 0}, - {-0.247800, 0.071826, 10.113101, 0}, - {-0.258574, 0.073023, 10.151408, 0}, - {-0.256179, 0.067038, 10.119086, 0}, - {-0.264559, 0.070629, 10.131058, 0}, - {-0.266953, 0.079009, 10.107116, 0}, - {-0.245406, 0.077812, 10.137043, 0}, - {-0.256179, 0.076614, 10.128663, 0}, - {-0.252588, 0.068235, 10.135846, 0}, - {-0.257377, 0.069432, 10.133451, 0}, - {-0.258574, 0.062249, 10.133451, 0}, - {-0.268150, 0.092177, 10.128663, 0}, - {-0.257377, 0.076614, 10.139438, 0}, - {-0.240617, 0.076614, 10.115496, 0}, - {-0.248997, 0.075417, 10.129861, 0}, - {-0.251391, 0.075417, 10.135846, 0}, - {-0.263362, 0.062249, 10.092751, 0}, - {-0.245406, 0.079009, 10.135846, 0}, - {-0.248997, 0.077812, 10.114298, 0}, - {-0.245406, 0.090980, 10.143028, 0}, - {-0.246603, 0.081403, 10.125072, 0}, - {-0.243011, 0.059855, 10.127466, 0}, - {-0.248997, 0.068235, 10.145423, 0}, - {-0.245406, 0.070629, 10.132255, 0}, - {-0.240617, 0.068235, 10.139438, 0}, - {-0.241814, 0.069432, 10.115496, 0}, - {-0.250194, 0.082600, 10.137043, 0}, - {-0.250194, 0.073023, 10.128663, 0}, - {-0.241814, 0.086191, 10.144226, 0}, - {-0.254982, 0.070629, 10.121481, 0}, - {-0.244208, 0.082600, 10.131058, 0}, - {-0.244208, 0.086191, 10.126269, 0}, - {-0.251391, 0.086191, 10.138240, 0}, - {-0.256179, 0.073023, 10.123875, 0}, - {-0.247800, 0.080206, 10.127466, 0}, - {-0.239420, 0.087388, 10.145423, 0}, - {-0.247800, 0.056264, 10.145423, 0}, - {-0.239420, 0.063446, 10.143028, 0}, - {-0.259771, 0.067038, 10.111904, 0}, - {-0.245406, 0.079009, 10.135846, 0}, - {-0.254982, 0.074220, 10.121481, 0}, - {-0.257377, 0.070629, 10.141831, 0}, - {-0.243011, 0.068235, 10.141831, 0}, - {-0.254982, 0.071826, 10.140635, 0}, - {-0.231040, 0.068235, 10.126269, 0}, - {-0.240617, 0.074220, 10.119086, 0}, - {-0.244208, 0.070629, 10.123875, 0}, - {-0.248997, 0.067038, 10.132255, 0}, - {-0.252588, 0.071826, 10.135846, 0}, - {-0.250194, 0.074220, 10.108313, 0}, - {-0.252588, 0.071826, 10.137043, 0}, - {-0.253785, 0.074220, 10.117889, 0}, - {-0.246603, 0.069432, 10.123875, 0}, - {-0.250194, 0.065841, 10.132255, 0}, - {-0.240617, 0.062249, 10.153803, 0}, - {-0.250194, 0.069432, 10.122678, 0}, - {-0.248997, 0.073023, 10.114298, 0}, - {-0.251391, 0.075417, 10.131058, 0}, - {-0.239420, 0.065841, 10.134649, 0}, - {-0.244208, 0.077812, 10.146620, 0}, - {-0.253785, 0.089783, 10.102327, 0}, - {-0.248997, 0.073023, 10.123875, 0}, - {-0.252588, 0.074220, 10.109509, 0}, - {-0.248997, 0.086191, 10.144226, 0}, - {-0.240617, 0.073023, 10.135846, 0}, - {-0.245406, 0.063446, 10.111904, 0}, - {-0.253785, 0.057461, 10.120284, 0}, - {-0.257377, 0.074220, 10.120284, 0}, - {-0.262165, 0.070629, 10.153803, 0}, - {-0.260968, 0.071826, 10.128663, 0}, - {-0.251391, 0.070629, 10.138240, 0}, - {-0.246603, 0.075417, 10.119086, 0}, - {-0.247800, 0.069432, 10.120284, 0}, - {-0.268150, 0.074220, 10.134649, 0}, - {-0.241814, 0.082600, 10.143028, 0}, - {-0.245406, 0.082600, 10.143028, 0}, - {-0.259771, 0.074220, 10.125072, 0}, - {-0.263362, 0.069432, 10.132255, 0}, - {-0.248997, 0.076614, 10.111904, 0}, - {-0.254982, 0.071826, 10.128663, 0}, - {-0.238223, 0.079009, 10.101130, 0}, - {-0.246603, 0.075417, 10.149014, 0}, - {-0.262165, 0.061052, 10.116693, 0}, - {-0.245406, 0.071826, 10.135846, 0}, - {-0.241814, 0.090980, 10.120284, 0}, - {-0.247800, 0.082600, 10.133451, 0}, - {-0.260968, 0.064643, 10.149014, 0}, - {-0.241814, 0.069432, 10.127466, 0}, - {-0.246603, 0.073023, 10.128663, 0}, - {-0.259771, 0.068235, 10.083174, 0}, - {-0.254982, 0.086191, 10.129861, 0}, - {-0.251391, 0.070629, 10.111904, 0}, - {-0.250194, 0.064643, 10.128663, 0}, - {-0.244208, 0.080206, 10.114298, 0}, - {-0.234632, 0.075417, 10.128663, 0}, - {-0.247800, 0.080206, 10.132255, 0}, - {-0.247800, 0.071826, 10.135846, 0}, - {-0.240617, 0.063446, 10.133451, 0}, - {-0.253785, 0.070629, 10.128663, 0}, - {-0.251391, 0.075417, 10.131058, 0}, - {-0.252588, 0.074220, 10.116693, 0}, - {-0.248997, 0.071826, 10.129861, 0}, - {-0.251391, 0.087388, 10.108313, 0}, - {-0.248997, 0.083797, 10.137043, 0}, - {-0.257377, 0.068235, 10.132255, 0}, - {-0.256179, 0.065841, 10.141831, 0}, - {-0.239420, 0.076614, 10.132255, 0}, - {-0.251391, 0.073023, 10.127466, 0}, - {-0.252588, 0.073023, 10.138240, 0}, - {-0.253785, 0.070629, 10.119086, 0}, - {-0.247800, 0.069432, 10.119086, 0}, - {-0.246603, 0.067038, 10.123875, 0}, - {-0.246603, 0.077812, 10.146620, 0}, - {-0.246603, 0.083797, 10.123875, 0}, - {-0.246603, 0.083797, 10.143028, 0}, - {-0.241814, 0.071826, 10.110707, 0}, - {-0.248997, 0.077812, 10.134649, 0}, - {-0.251391, 0.074220, 10.143028, 0}, - {-0.243011, 0.082600, 10.133451, 0}, - {-0.251391, 0.079009, 10.111904, 0}, - {-0.251391, 0.081403, 10.122678, 0}, - {-0.247800, 0.080206, 10.144226, 0}, - {-0.247800, 0.092177, 10.114298, 0}, - {-0.244208, 0.073023, 10.134649, 0}, - {-0.245406, 0.081403, 10.126269, 0}, - {-0.250194, 0.073023, 10.144226, 0}, - {-0.243011, 0.079009, 10.133451, 0}, - {-0.260968, 0.077812, 10.122678, 0}, - {-0.252588, 0.090980, 10.122678, 0}, - {-0.268150, 0.073023, 10.128663, 0}, - {-0.256179, 0.075417, 10.123875, 0}, - {-0.248997, 0.063446, 10.104721, 0}, - {-0.245406, 0.090980, 10.128663, 0}, - {-0.253785, 0.087388, 10.115496, 0}, - {-0.239420, 0.073023, 10.138240, 0}, - {-0.238223, 0.059855, 10.119086, 0}, - {-0.248997, 0.070629, 10.125072, 0}, - {-0.250194, 0.081403, 10.131058, 0}, - {-0.248997, 0.093374, 10.132255, 0}, - {-0.253785, 0.092177, 10.128663, 0}, - {-0.251391, 0.071826, 10.134649, 0}, - {-0.233435, 0.074220, 10.129861, 0}, - {-0.241814, 0.079009, 10.103524, 0}, - {-0.253785, 0.070629, 10.153803, 0}, - {-0.260968, 0.069432, 10.144226, 0}, - {-0.250194, 0.065841, 10.123875, 0}, - {-0.262165, 0.092177, 10.125072, 0}, - {-0.252588, 0.088585, 10.151408, 0}, - {-0.253785, 0.087388, 10.132255, 0}, - {-0.244208, 0.062249, 10.137043, 0}, - {-0.256179, 0.065841, 10.110707, 0}, - {-0.244208, 0.075417, 10.117889, 0}, - {-0.240617, 0.082600, 10.132255, 0}, - {-0.248997, 0.074220, 10.115496, 0}, - {-0.250194, 0.079009, 10.141831, 0}, - {-0.246603, 0.077812, 10.119086, 0}, - {-0.252588, 0.074220, 10.117889, 0}, - {-0.257377, 0.075417, 10.120284, 0}, - {-0.250194, 0.077812, 10.117889, 0}, - {-0.239420, 0.081403, 10.143028, 0}, - {-0.237026, 0.076614, 10.137043, 0}, - {-0.240617, 0.077812, 10.149014, 0}, - {-0.270545, 0.071826, 10.131058, 0}, - {-0.262165, 0.068235, 10.122678, 0}, - {-0.259771, 0.067038, 10.114298, 0}, - {-0.246603, 0.082600, 10.121481, 0}, - {-0.254982, 0.076614, 10.127466, 0}, - {-0.244208, 0.063446, 10.122678, 0}, - {-0.246603, 0.074220, 10.121481, 0}, - {-0.253785, 0.086191, 10.127466, 0}, - {-0.253785, 0.079009, 10.131058, 0}, - {-0.245406, 0.071826, 10.132255, 0}, - {-0.248997, 0.074220, 10.132255, 0}, - {-0.260968, 0.055067, 10.121481, 0}, - {-0.243011, 0.070629, 10.122678, 0}, - {-0.252588, 0.070629, 10.132255, 0}, - {-0.243011, 0.077812, 10.143028, 0}, - {-0.246603, 0.077812, 10.132255, 0}, - {-0.253785, 0.082600, 10.131058, 0}, - {-0.256179, 0.068235, 10.137043, 0}, - {-0.243011, 0.088585, 10.121481, 0}, - {-0.239420, 0.065841, 10.133451, 0}, - {-0.252588, 0.063446, 10.122678, 0}, - {-0.252588, 0.082600, 10.141831, 0}, - {-0.238223, 0.083797, 10.122678, 0}, - {-0.251391, 0.076614, 10.140635, 0}, - {-0.265756, 0.081403, 10.135846, 0}, - {-0.252588, 0.076614, 10.141831, 0}, - {-0.246603, 0.079009, 10.131058, 0}, - {-0.250194, 0.077812, 10.126269, 0}, - {-0.240617, 0.079009, 10.146620, 0}, - {-0.247800, 0.089783, 10.132255, 0}, - {-0.259771, 0.089783, 10.111904, 0}, - {-0.266953, 0.084994, 10.141831, 0}, - {-0.244208, 0.087388, 10.147817, 0}, - {-0.235829, 0.067038, 10.127466, 0}, - {-0.245406, 0.069432, 10.129861, 0}, - {-0.250194, 0.083797, 10.108313, 0}, - {-0.240617, 0.084994, 10.146620, 0}, - {-0.256179, 0.077812, 10.121481, 0}, - {-0.250194, 0.076614, 10.151408, 0}, - {-0.248997, 0.073023, 10.128663, 0}, - {-0.252588, 0.068235, 10.140635, 0}, - {-0.252588, 0.074220, 10.147817, 0}, - {-0.253785, 0.083797, 10.139438, 0}, - {-0.243011, 0.069432, 10.114298, 0}, - {-0.235829, 0.059855, 10.122678, 0}, - {-0.253785, 0.076614, 10.145423, 0}, - {-0.245406, 0.077812, 10.115496, 0}, - {-0.252588, 0.065841, 10.139438, 0}, - {-0.248997, 0.092177, 10.132255, 0}, - {-0.256179, 0.088585, 10.150211, 0}, - {-0.250194, 0.082600, 10.134649, 0}, - {-0.244208, 0.069432, 10.137043, 0}, - {-0.254982, 0.076614, 10.127466, 0}, - {-0.253785, 0.063446, 10.135846, 0}, - {-0.258574, 0.080206, 10.145423, 0}, - {-0.232237, 0.074220, 10.126269, 0}, - {-0.241814, 0.080206, 10.131058, 0}, - {-0.240617, 0.075417, 10.116693, 0}, - {-0.253785, 0.068235, 10.132255, 0}, - {-0.241814, 0.083797, 10.139438, 0}, - {-0.245406, 0.084994, 10.129861, 0}, - {-0.245406, 0.079009, 10.165773, 0}, - {-0.238223, 0.079009, 10.101130, 0}, - {-0.247800, 0.081403, 10.138240, 0}, - {-0.244208, 0.070629, 10.126269, 0}, - {-0.253785, 0.082600, 10.149014, 0}, - {-0.235829, 0.079009, 10.115496, 0}, - {-0.239420, 0.070629, 10.114298, 0}, - {-0.251391, 0.086191, 10.128663, 0}, - {-0.241814, 0.075417, 10.119086, 0}, - {-0.241814, 0.074220, 10.165773, 0}, - {-0.233435, 0.075417, 10.101130, 0}, - {-0.254982, 0.087388, 10.135846, 0}, - {-0.232237, 0.074220, 10.129861, 0}, - {-0.233435, 0.076614, 10.123875, 0}, - {-0.258574, 0.093374, 10.137043, 0}, - {-0.243011, 0.074220, 10.137043, 0}, - {-0.244208, 0.083797, 10.145423, 0}, - {-0.252588, 0.087388, 10.137043, 0}, - {-0.251391, 0.077812, 10.120284, 0}, - {-0.235829, 0.067038, 10.117889, 0}, - {-0.240617, 0.075417, 10.125072, 0}, - {-0.253785, 0.086191, 10.127466, 0}, - {-0.256179, 0.080206, 10.126269, 0}, - {-0.254982, 0.071826, 10.132255, 0}, - {-0.235829, 0.074220, 10.128663, 0}, - {-0.252588, 0.079009, 10.117889, 0}, - {-0.245406, 0.081403, 10.123875, 0}, - {-0.246603, 0.073023, 10.127466, 0}, - {-0.252588, 0.063446, 10.159788, 0}, - {-0.247800, 0.079009, 10.147817, 0}, - {-0.258574, 0.079009, 10.131058, 0}, - {-0.269348, 0.075417, 10.134649, 0}, - {-0.248997, 0.083797, 10.107116, 0}, - {-0.244208, 0.081403, 10.139438, 0}, - {-0.259771, 0.070629, 10.133451, 0}, - {-0.257377, 0.063446, 10.128663, 0}, - {-0.254982, 0.071826, 10.121481, 0}, - {-0.252588, 0.088585, 10.137043, 0}, - {-0.251391, 0.083797, 10.135846, 0}, - {-0.253785, 0.086191, 10.134649, 0}, - {-0.252588, 0.073023, 10.115496, 0}, - {-0.254982, 0.075417, 10.145423, 0}, - {-0.250194, 0.076614, 10.137043, 0}, - {-0.248997, 0.070629, 10.135846, 0}, - {-0.259771, 0.073023, 10.137043, 0}, - {-0.245406, 0.088585, 10.120284, 0}, - {-0.254982, 0.074220, 10.151408, 0}, - {-0.252588, 0.074220, 10.103524, 0}, - {-0.258574, 0.070629, 10.146620, 0}, - {-0.251391, 0.080206, 10.121481, 0}, - {-0.241814, 0.070629, 10.131058, 0}, - {-0.246603, 0.071826, 10.116693, 0}, - {-0.248997, 0.067038, 10.135846, 0}, - {-0.251391, 0.070629, 10.132255, 0}, - {-0.250194, 0.081403, 10.132255, 0}, - {-0.254982, 0.074220, 10.134649, 0}, - {-0.243011, 0.081403, 10.131058, 0}, - {-0.237026, 0.089783, 10.128663, 0}, - {-0.243011, 0.077812, 10.125072, 0}, - {-0.244208, 0.074220, 10.131058, 0}, - {-0.243011, 0.086191, 10.121481, 0}, - {-0.250194, 0.079009, 10.135846, 0}, - {-0.247800, 0.061052, 10.132255, 0}, - {-0.258574, 0.063446, 10.122678, 0}, - {-0.245406, 0.076614, 10.114298, 0}, - {-0.238223, 0.082600, 10.101130, 0}, - {-0.264559, 0.057461, 10.119086, 0}, - {-0.248997, 0.077812, 10.126269, 0}, - {-0.237026, 0.094571, 10.127466, 0}, - {-0.256179, 0.071826, 10.116693, 0}, - {-0.248997, 0.080206, 10.135846, 0}, - {-0.259771, 0.067038, 10.128663, 0}, - {-0.246603, 0.074220, 10.134649, 0}, - {-0.244208, 0.083797, 10.131058, 0}, - {-0.233435, 0.075417, 10.129861, 0}, - {-0.241814, 0.074220, 10.128663, 0}, - {-0.238223, 0.080206, 10.105919, 0}, - {-0.241814, 0.084994, 10.131058, 0}, - {-0.254982, 0.076614, 10.129861, 0}, - {-0.258574, 0.079009, 10.117889, 0}, - {-0.251391, 0.069432, 10.135846, 0}, - {-0.243011, 0.082600, 10.135846, 0}, - {-0.243011, 0.073023, 10.121481, 0}, - {-0.250194, 0.074220, 10.140635, 0}, - {-0.251391, 0.069432, 10.119086, 0}, - {-0.258574, 0.074220, 10.117889, 0}, - {-0.260968, 0.069432, 10.138240, 0}, - {-0.260968, 0.080206, 10.133451, 0}, - {-0.238223, 0.080206, 10.140635, 0}, - {-0.248997, 0.075417, 10.103524, 0}, - {-0.259771, 0.069432, 10.144226, 0}, - {-0.252588, 0.076614, 10.095144, 0}, - {-0.254982, 0.068235, 10.146620, 0}, - {-0.256179, 0.079009, 10.143028, 0}, - {-0.246603, 0.090980, 10.139438, 0}, - {-0.251391, 0.079009, 10.131058, 0}, - {-0.253785, 0.077812, 10.119086, 0}, - {-0.256179, 0.076614, 10.157393, 0}, - {-0.246603, 0.067038, 10.121481, 0}, - {-0.237026, 0.081403, 10.159788, 0}, - {-0.250194, 0.082600, 10.125072, 0}, - {-0.248997, 0.077812, 10.117889, 0}, - {-0.237026, 0.074220, 10.121481, 0}, - {-0.237026, 0.062249, 10.138240, 0}, - {-0.247800, 0.070629, 10.126269, 0}, - {-0.245406, 0.073023, 10.138240, 0}, - {-0.245406, 0.065841, 10.134649, 0}, - {-0.240617, 0.083797, 10.137043, 0}, - {-0.244208, 0.063446, 10.137043, 0}, - {-0.260968, 0.080206, 10.123875, 0}, - {-0.245406, 0.083797, 10.137043, 0}, - {-0.237026, 0.068235, 10.122678, 0}, - {-0.250194, 0.070629, 10.137043, 0}, - {-0.248997, 0.073023, 10.128663, 0}, - {-0.239420, 0.073023, 10.127466, 0}, - {-0.256179, 0.069432, 10.123875, 0}, - {-0.244208, 0.064643, 10.141831, 0}, - {-0.246603, 0.062249, 10.114298, 0}, - {-0.260968, 0.076614, 10.108313, 0}, - {-0.257377, 0.069432, 10.135846, 0}, - {-0.265756, 0.074220, 10.123875, 0}, - {-0.254982, 0.065841, 10.145423, 0}, - {-0.248997, 0.070629, 10.123875, 0}, - {-0.241814, 0.079009, 10.137043, 0}, - {-0.251391, 0.095768, 10.141831, 0}, - {-0.244208, 0.071826, 10.111904, 0}, - {-0.243011, 0.075417, 10.132255, 0}, - {-0.246603, 0.090980, 10.131058, 0}, - {-0.252588, 0.071826, 10.135846, 0}, - {-0.248997, 0.065841, 10.120284, 0}, - {-0.248997, 0.082600, 10.116693, 0}, - {-0.263362, 0.075417, 10.138240, 0}, - {-0.247800, 0.061052, 10.129861, 0}, - {-0.250194, 0.059855, 10.132255, 0}, - {-0.251391, 0.069432, 10.152605, 0}, - {-0.247800, 0.068235, 10.129861, 0}, - {-0.240617, 0.062249, 10.138240, 0}, - {-0.264559, 0.070629, 10.120284, 0}, - {-0.253785, 0.071826, 10.151408, 0}, - {-0.246603, 0.074220, 10.125072, 0}, - {-0.256179, 0.070629, 10.160985, 0}, - {-0.247800, 0.061052, 10.131058, 0}, - {-0.246603, 0.070629, 10.125072, 0}, - {-0.258574, 0.086191, 10.135846, 0}, - {-0.253785, 0.077812, 10.120284, 0}, - {-0.235829, 0.074220, 10.133451, 0}, - {-0.239420, 0.083797, 10.122678, 0}, - {-0.258574, 0.071826, 10.139438, 0}, - {-0.259771, 0.084994, 10.110707, 0}, - {-0.243011, 0.077812, 10.131058, 0}, - {-0.240617, 0.077812, 10.134649, 0}, - {-0.244208, 0.059855, 10.128663, 0}, - {-0.239420, 0.068235, 10.122678, 0}, - {-0.258574, 0.076614, 10.119086, 0}, - {-0.258574, 0.075417, 10.147817, 0}, - {-0.248997, 0.062249, 10.117889, 0}, - {-0.248997, 0.076614, 10.135846, 0}, - {-0.241814, 0.076614, 10.109509, 0}, - {-0.257377, 0.068235, 10.144226, 0}, - {-0.264559, 0.064643, 10.096342, 0}, - {-0.241814, 0.068235, 10.139438, 0}, - {-0.250194, 0.088585, 10.114298, 0}, - {-0.259771, 0.079009, 10.159788, 0}, - {-0.247800, 0.071826, 10.138240, 0}, - {-0.245406, 0.073023, 10.117889, 0}, - {-0.246603, 0.070629, 10.137043, 0}, - {-0.248997, 0.069432, 10.108313, 0}, - {-0.254982, 0.077812, 10.144226, 0}, - {-0.254982, 0.088585, 10.108313, 0}, - {-0.245406, 0.082600, 10.135846, 0}, - {-0.245406, 0.095768, 10.125072, 0}, - {-0.232237, 0.083797, 10.133451, 0}, - {-0.243011, 0.069432, 10.089159, 0}, - {-0.237026, 0.082600, 10.152605, 0}, - {-0.241814, 0.065841, 10.116693, 0}, - {-0.262165, 0.067038, 10.138240, 0}, - {-0.262165, 0.081403, 10.150211, 0}, - {-0.257377, 0.079009, 10.109509, 0}, - {-0.257377, 0.084994, 10.131058, 0}, - {-0.238223, 0.090980, 10.107116, 0}, - {-0.231040, 0.093374, 10.151408, 0}, - {-0.250194, 0.069432, 10.108313, 0}, - {-0.244208, 0.067038, 10.166970, 0}, - {-0.244208, 0.074220, 10.105919, 0}, - {-0.247800, 0.076614, 10.145423, 0}, - {-0.237026, 0.071826, 10.122678, 0}, - {-0.244208, 0.070629, 10.127466, 0}, - {-0.243011, 0.074220, 10.119086, 0}, - {-0.246603, 0.073023, 10.121481, 0}, - {-0.245406, 0.084994, 10.129861, 0}, - {-0.237026, 0.082600, 10.128663, 0}, - {-0.229843, 0.074220, 10.127466, 0}, - {-0.250194, 0.076614, 10.116693, 0}, - {-0.240617, 0.074220, 10.138240, 0}, - {-0.240617, 0.074220, 10.117889, 0}, - {-0.245406, 0.075417, 10.126269, 0}, - {-0.241814, 0.077812, 10.129861, 0}, - {-0.251391, 0.081403, 10.139438, 0}, - {-0.227449, 0.075417, 10.127466, 0}, - {-0.239420, 0.079009, 10.119086, 0}, - {-0.238223, 0.087388, 10.120284, 0}, - {-0.243011, 0.057461, 10.122678, 0}, - {-0.250194, 0.056264, 10.145423, 0}, - {-0.233435, 0.075417, 10.119086, 0}, - {-0.237026, 0.061052, 10.137043, 0}, - {-0.240617, 0.084994, 10.123875, 0}, - {-0.245406, 0.088585, 10.151408, 0}, - {-0.234632, 0.081403, 10.128663, 0}, - {-0.240617, 0.086191, 10.123875, 0}, - {-0.237026, 0.080206, 10.119086, 0}, - {-0.234632, 0.067038, 10.134649, 0}, - {-0.241814, 0.070629, 10.138240, 0}, - {-0.248997, 0.065841, 10.134649, 0}, - {-0.238223, 0.081403, 10.143028, 0}, - {-0.243011, 0.079009, 10.121481, 0}, - {-0.240617, 0.079009, 10.128663, 0}, - {-0.251391, 0.069432, 10.131058, 0}, - {-0.244208, 0.063446, 10.138240, 0}, - {-0.240617, 0.058658, 10.117889, 0}, - {-0.239420, 0.081403, 10.145423, 0}, - {-0.245406, 0.080206, 10.114298, 0}, - {-0.240617, 0.075417, 10.127466, 0}, - {-0.243011, 0.077812, 10.127466, 0}, - {-0.250194, 0.065841, 10.119086, 0}, - {-0.232237, 0.064643, 10.120284, 0}, - {-0.239420, 0.065841, 10.131058, 0}, - {-0.251391, 0.071826, 10.143028, 0}, - {-0.246603, 0.080206, 10.125072, 0}, - {-0.238223, 0.075417, 10.123875, 0}, - {-0.245406, 0.081403, 10.132255, 0}, - {-0.241814, 0.083797, 10.117889, 0}, - {-0.251391, 0.070629, 10.135846, 0}, - {-0.262165, 0.075417, 10.120284, 0}, - {-0.251391, 0.086191, 10.145423, 0}, - {-0.239420, 0.087388, 10.131058, 0}, - {-0.246603, 0.077812, 10.126269, 0}, - {-0.246603, 0.073023, 10.135846, 0}, - {-0.264559, 0.079009, 10.120284, 0}, - {-0.264559, 0.074220, 10.125072, 0}, - {-0.229843, 0.067038, 10.127466, 0}, - {-0.231040, 0.077812, 10.131058, 0}, - {-0.245406, 0.075417, 10.128663, 0}, - {-0.240617, 0.071826, 10.116693, 0}, - {-0.234632, 0.081403, 10.128663, 0}, - {-0.228646, 0.063446, 10.132255, 0}, - {-0.227449, 0.057461, 10.139438, 0}, - {-0.251391, 0.075417, 10.120284, 0}, - {-0.231040, 0.092177, 10.122678, 0}, - {-0.240617, 0.077812, 10.137043, 0}, - {-0.252588, 0.075417, 10.132255, 0}, - {-0.248997, 0.077812, 10.120284, 0}, - {-0.248997, 0.080206, 10.117889, 0}, - {-0.252588, 0.063446, 10.113101, 0}, - {-0.247800, 0.069432, 10.133451, 0}, - {-0.246603, 0.092177, 10.108313, 0}, - {-0.240617, 0.088585, 10.134649, 0}, - {-0.239420, 0.076614, 10.125072, 0}, - {-0.248997, 0.070629, 10.128663, 0}, - {-0.243011, 0.073023, 10.128663, 0}, - {-0.243011, 0.084994, 10.115496, 0}, - {-0.243011, 0.087388, 10.141831, 0}, - {-0.237026, 0.070629, 10.144226, 0}, - {-0.247800, 0.081403, 10.113101, 0}, - {-0.234632, 0.096965, 10.133451, 0}, - {-0.258574, 0.069432, 10.132255, 0}, - {-0.258574, 0.077812, 10.116693, 0}, - {-0.243011, 0.079009, 10.135846, 0}, - {-0.253785, 0.082600, 10.102327, 0}, - {-0.240617, 0.075417, 10.144226, 0}, - {-0.247800, 0.074220, 10.123875, 0}, - {-0.256179, 0.079009, 10.120284, 0}, - {-0.254982, 0.077812, 10.141831, 0}, - {-0.257377, 0.076614, 10.143028, 0}, - {-0.250194, 0.086191, 10.137043, 0}, - {-0.238223, 0.081403, 10.116693, 0}, - {-0.238223, 0.084994, 10.139438, 0}, - {-0.247800, 0.080206, 10.126269, 0}, - {-0.263362, 0.074220, 10.131058, 0}, - {-0.260968, 0.077812, 10.123875, 0}, - {-0.238223, 0.059855, 10.128663, 0}, - {-0.245406, 0.062249, 10.134649, 0}, - {-0.257377, 0.080206, 10.131058, 0}, - {-0.244208, 0.083797, 10.131058, 0}, - {-0.232237, 0.080206, 10.134649, 0}, - {-0.244208, 0.076614, 10.119086, 0}, - {-0.241814, 0.073023, 10.141831, 0}, - {-0.257377, 0.067038, 10.138240, 0}, - {-0.241814, 0.086191, 10.133451, 0}, - {-0.246603, 0.079009, 10.133451, 0}, - {-0.248997, 0.067038, 10.125072, 0}, - {-0.239420, 0.082600, 10.122678, 0}, - {-0.244208, 0.084994, 10.129861, 0}, - {-0.233435, 0.073023, 10.147817, 0}, - {-0.250194, 0.069432, 10.133451, 0}, - {-0.254982, 0.070629, 10.146620, 0}, - {-0.231040, 0.083797, 10.117889, 0}, - {-0.245406, 0.081403, 10.119086, 0}, - {-0.256179, 0.093374, 10.131058, 0}, - {-0.241814, 0.084994, 10.138240, 0}, - {-0.252588, 0.073023, 10.137043, 0}, - {-0.251391, 0.081403, 10.126269, 0}, - {-0.235829, 0.069432, 10.137043, 0}, - {-0.247800, 0.080206, 10.132255, 0}, - {-0.238223, 0.064643, 10.144226, 0}, - {-0.234632, 0.076614, 10.127466, 0}, - {-0.245406, 0.069432, 10.137043, 0}, - {-0.241814, 0.082600, 10.116693, 0}, - {-0.233435, 0.101754, 10.132255, 0}, - {-0.240617, 0.086191, 10.132255, 0}, - {-0.235829, 0.081403, 10.120284, 0}, - {-0.239420, 0.076614, 10.128663, 0}, - {-0.251391, 0.079009, 10.117889, 0}, - {-0.256179, 0.081403, 10.149014, 0}, - {-0.238223, 0.079009, 10.105919, 0}, - {-0.234632, 0.079009, 10.125072, 0}, - {-0.254982, 0.071826, 10.115496, 0}, - {-0.263362, 0.082600, 10.151408, 0}, - {-0.243011, 0.075417, 10.109509, 0}, - {-0.222661, 0.073023, 10.129861, 0}, - {-0.246603, 0.074220, 10.133451, 0}, - {-0.248997, 0.086191, 10.129861, 0}, - {-0.252588, 0.086191, 10.149014, 0}, - {-0.238223, 0.071826, 10.104721, 0}, - {-0.237026, 0.071826, 10.135846, 0}, - {-0.243011, 0.086191, 10.111904, 0}, - {-0.244208, 0.093374, 10.141831, 0}, - {-0.253785, 0.063446, 10.123875, 0}, - {-0.244208, 0.083797, 10.134649, 0}, - {-0.244208, 0.090980, 10.128663, 0}, - {-0.258574, 0.065841, 10.134649, 0}, - {-0.256179, 0.070629, 10.128663, 0}, - {-0.243011, 0.071826, 10.137043, 0}, - {-0.225055, 0.074220, 10.134649, 0}, - {-0.245406, 0.069432, 10.116693, 0}, - {-0.237026, 0.077812, 10.133451, 0}, - {-0.245406, 0.073023, 10.104721, 0}, - {-0.253785, 0.081403, 10.159788, 0}, - {-0.245406, 0.086191, 10.113101, 0}, - {-0.243011, 0.081403, 10.126269, 0}, - {-0.241814, 0.065841, 10.108313, 0}, - {-0.240617, 0.057461, 10.131058, 0}, - {-0.241814, 0.065841, 10.144226, 0}, - {-0.237026, 0.073023, 10.128663, 0}, - {-0.250194, 0.090980, 10.145423, 0}, - {-0.254982, 0.070629, 10.119086, 0}, - {-0.244208, 0.063446, 10.131058, 0}, - {-0.235829, 0.077812, 10.121481, 0}, - {-0.248997, 0.076614, 10.137043, 0}, - {-0.262165, 0.076614, 10.123875, 0}, - {-0.250194, 0.064643, 10.119086, 0}, - {-0.239420, 0.077812, 10.116693, 0}, - {-0.245406, 0.080206, 10.128663, 0}, - {-0.243011, 0.084994, 10.123875, 0}, - {-0.244208, 0.077812, 10.125072, 0}, - {-0.237026, 0.089783, 10.122678, 0}, - {-0.235829, 0.065841, 10.137043, 0}, - {-0.245406, 0.065841, 10.150211, 0}, - {-0.252588, 0.074220, 10.111904, 0}, - {-0.241814, 0.068235, 10.146620, 0}, - {-0.229843, 0.069432, 10.120284, 0}, - {-0.240617, 0.079009, 10.131058, 0}, - {-0.240617, 0.084994, 10.095144, 0}, - {-0.239420, 0.067038, 10.133451, 0}, - {-0.247800, 0.083797, 10.128663, 0}, - {-0.252588, 0.075417, 10.135846, 0}, - {-0.252588, 0.068235, 10.131058, 0}, - {-0.243011, 0.087388, 10.102327, 0}, - {-0.247800, 0.088585, 10.132255, 0}, - {-0.243011, 0.086191, 10.127466, 0}, - {-0.229843, 0.080206, 10.123875, 0}, - {-0.245406, 0.073023, 10.134649, 0}, - {-0.233435, 0.081403, 10.132255, 0}, - {-0.245406, 0.082600, 10.126269, 0}, - {-0.233435, 0.073023, 10.137043, 0}, - {-0.235829, 0.070629, 10.140635, 0}, - {-0.241814, 0.076614, 10.121481, 0}, - {-0.244208, 0.069432, 10.123875, 0}, - {-0.252588, 0.075417, 10.140635, 0}, - {-0.253785, 0.080206, 10.133451, 0}, - {-0.237026, 0.075417, 10.121481, 0}, - {-0.227449, 0.065841, 10.129861, 0}, - {-0.245406, 0.077812, 10.131058, 0}, - {-0.229843, 0.094571, 10.129861, 0}, - {-0.237026, 0.068235, 10.105919, 0}, - {-0.260968, 0.073023, 10.120284, 0}, - {-0.241814, 0.076614, 10.131058, 0}, - {-0.250194, 0.077812, 10.126269, 0}, - {-0.254982, 0.068235, 10.135846, 0}, - {-0.240617, 0.071826, 10.108313, 0}, - {-0.258574, 0.083797, 10.125072, 0}, - {-0.254982, 0.081403, 10.132255, 0}, - {-0.251391, 0.079009, 10.135846, 0}, - {-0.245406, 0.069432, 10.121481, 0}, - {-0.232237, 0.069432, 10.122678, 0}, - {-0.234632, 0.083797, 10.131058, 0}, - {-0.234632, 0.089783, 10.129861, 0}, - {-0.238223, 0.079009, 10.127466, 0}, - {-0.246603, 0.083797, 10.121481, 0}, - {-0.247800, 0.074220, 10.121481, 0}, - {-0.247800, 0.075417, 10.117889, 0}, - {-0.235829, 0.065841, 10.129861, 0}, - {-0.241814, 0.075417, 10.111904, 0}, - {-0.239420, 0.081403, 10.129861, 0}, - {-0.247800, 0.087388, 10.128663, 0}, - {-0.243011, 0.079009, 10.126269, 0}, - {-0.245406, 0.067038, 10.137043, 0}, - {-0.257377, 0.059855, 10.122678, 0}, - {-0.250194, 0.068235, 10.147817, 0}, - {-0.243011, 0.074220, 10.129861, 0}, - {-0.237026, 0.086191, 10.129861, 0}, - {-0.246603, 0.107739, 10.131058, 0}, - {-0.241814, 0.082600, 10.141831, 0}, - {-0.245406, 0.064643, 10.119086, 0}, - {-0.258574, 0.075417, 10.129861, 0}, - {-0.237026, 0.071826, 10.123875, 0}, - {-0.243011, 0.075417, 10.101130, 0}, - {-0.253785, 0.083797, 10.125072, 0}, - {-0.241814, 0.081403, 10.119086, 0}, - {-0.234632, 0.089783, 10.137043, 0}, - {-0.245406, 0.070629, 10.132255, 0}, - {-0.251391, 0.067038, 10.131058, 0}, - {-0.250194, 0.069432, 10.139438, 0}, - {-0.237026, 0.086191, 10.123875, 0}, - {-0.235829, 0.086191, 10.147817, 0}, - {-0.248997, 0.074220, 10.123875, 0}, - {-0.251391, 0.079009, 10.114298, 0}, - {-0.246603, 0.081403, 10.122678, 0}, - {-0.235829, 0.079009, 10.119086, 0}, - {-0.240617, 0.087388, 10.127466, 0}, - {-0.239420, 0.077812, 10.133451, 0}, - {-0.247800, 0.087388, 10.108313, 0}, - {-0.245406, 0.087388, 10.111904, 0}, - {-0.237026, 0.073023, 10.147817, 0}, - {-0.241814, 0.079009, 10.135846, 0}, - {-0.241814, 0.074220, 10.121481, 0}, - {-0.258574, 0.063446, 10.146620, 0}, - {-0.243011, 0.079009, 10.123875, 0}, - {-0.225055, 0.073023, 10.122678, 0}, - {-0.234632, 0.075417, 10.119086, 0}, - {-0.246603, 0.068235, 10.134649, 0}, - {-0.235829, 0.071826, 10.141831, 0}, - {-0.234632, 0.069432, 10.137043, 0}, - {-0.244208, 0.064643, 10.126269, 0}, - {-0.239420, 0.068235, 10.125072, 0}, - {-0.246603, 0.087388, 10.131058, 0}, - {-0.241814, 0.071826, 10.128663, 0}, - {-0.241814, 0.083797, 10.140635, 0}, - {-0.252588, 0.070629, 10.119086, 0}, - {-0.243011, 0.070629, 10.117889, 0}, - {-0.265756, 0.077812, 10.125072, 0}, - {-0.248997, 0.083797, 10.129861, 0}, - {-0.248997, 0.082600, 10.122678, 0}, - {-0.247800, 0.083797, 10.133451, 0}, - {-0.260968, 0.086191, 10.141831, 0}, - {-0.244208, 0.075417, 10.132255, 0}, - {-0.232237, 0.080206, 10.135846, 0}, - {-0.244208, 0.077812, 10.131058, 0}, - {-0.239420, 0.077812, 10.143028, 0}, - {-0.238223, 0.077812, 10.127466, 0}, - {-0.235829, 0.089783, 10.140635, 0}, - {-0.239420, 0.070629, 10.111904, 0}, - {-0.253785, 0.064643, 10.129861, 0}, - {-0.250194, 0.065841, 10.127466, 0}, - {-0.251391, 0.073023, 10.110707, 0}, - {-0.240617, 0.069432, 10.098736, 0}, - {-0.246603, 0.074220, 10.122678, 0}, - {-0.243011, 0.077812, 10.141831, 0}, - {-0.243011, 0.074220, 10.131058, 0}, - {-0.247800, 0.081403, 10.125072, 0}, - {-0.256179, 0.057461, 10.134649, 0}, - {-0.243011, 0.068235, 10.144226, 0}, - {-0.228646, 0.095768, 10.125072, 0}, - {-0.250194, 0.083797, 10.135846, 0}, - {-0.246603, 0.062249, 10.122678, 0}, - {-0.245406, 0.073023, 10.119086, 0}, - {-0.246603, 0.081403, 10.122678, 0}, - {-0.246603, 0.080206, 10.129861, 0}, - {-0.231040, 0.067038, 10.116693, 0}, - {-0.228646, 0.074220, 10.129861, 0}, - {-0.235829, 0.073023, 10.134649, 0}, - {-0.246603, 0.093374, 10.123875, 0}, - {-0.252588, 0.080206, 10.127466, 0}, - {-0.233435, 0.061052, 10.133451, 0}, - {-0.243011, 0.070629, 10.137043, 0}, - {-0.250194, 0.077812, 10.108313, 0}, - {-0.235829, 0.083797, 10.121481, 0}, - {-0.247800, 0.081403, 10.141831, 0}, - {-0.252588, 0.081403, 10.131058, 0}, - {-0.243011, 0.080206, 10.126269, 0}, - {-0.235829, 0.070629, 10.109509, 0}, - {-0.237026, 0.073023, 10.135846, 0}, - {-0.237026, 0.074220, 10.123875, 0}, - {-0.253785, 0.089783, 10.117889, 0}, - {-0.248997, 0.087388, 10.123875, 0}, - {-0.228646, 0.073023, 10.128663, 0}, - {-0.233435, 0.073023, 10.137043, 0}, - {-0.247800, 0.080206, 10.123875, 0}, - {-0.254982, 0.074220, 10.132255, 0}, - {-0.234632, 0.081403, 10.113101, 0}, - {-0.241814, 0.074220, 10.149014, 0}, - {-0.244208, 0.064643, 10.119086, 0}, - {-0.235829, 0.069432, 10.121481, 0}, - {-0.237026, 0.071826, 10.123875, 0}, - {-0.241814, 0.065841, 10.134649, 0}, - {-0.237026, 0.065841, 10.153803, 0}, - {-0.239420, 0.077812, 10.135846, 0}, - {-0.244208, 0.073023, 10.125072, 0}, - {-0.246603, 0.065841, 10.117889, 0}, - {-0.237026, 0.073023, 10.129861, 0}, - {-0.254982, 0.080206, 10.111904, 0}, - {-0.241814, 0.076614, 10.140635, 0}, - {-0.243011, 0.057461, 10.123875, 0}, - {-0.241814, 0.081403, 10.139438, 0}, - {-0.246603, 0.070629, 10.131058, 0}, - {-0.251391, 0.075417, 10.147817, 0}, - {-0.251391, 0.070629, 10.120284, 0}, - {-0.234632, 0.086191, 10.137043, 0}, - {-0.235829, 0.079009, 10.119086, 0}, - {-0.235829, 0.086191, 10.119086, 0}, - {-0.234632, 0.069432, 10.121481, 0}, - {-0.246603, 0.069432, 10.126269, 0}, - {-0.245406, 0.083797, 10.145423, 0}, - {-0.245406, 0.077812, 10.116693, 0}, - {-0.240617, 0.079009, 10.144226, 0}, - {-0.237026, 0.073023, 10.134649, 0}, - {-0.238223, 0.077812, 10.140635, 0}, - {-0.227449, 0.082600, 10.127466, 0}, - {-0.233435, 0.092177, 10.122678, 0}, - {-0.246603, 0.083797, 10.140635, 0}, - {-0.229843, 0.065841, 10.134649, 0}, - {-0.227449, 0.080206, 10.138240, 0}, - {-0.243011, 0.077812, 10.138240, 0}, - {-0.240617, 0.076614, 10.119086, 0}, - {-0.241814, 0.073023, 10.125072, 0}, - {-0.240617, 0.071826, 10.123875, 0}, - {-0.250194, 0.079009, 10.117889, 0}, - {-0.243011, 0.080206, 10.145423, 0}, - {-0.252588, 0.081403, 10.119086, 0}, - {-0.240617, 0.068235, 10.132255, 0}, - {-0.244208, 0.065841, 10.114298, 0}, - {-0.235829, 0.073023, 10.125072, 0}, - {-0.248997, 0.076614, 10.117889, 0}, - {-0.250194, 0.059855, 10.121481, 0}, - {-0.239420, 0.095768, 10.147817, 0}, - {-0.262165, 0.081403, 10.116693, 0}, - {-0.253785, 0.065841, 10.149014, 0}, - {-0.244208, 0.067038, 10.115496, 0}, - {-0.238223, 0.074220, 10.122678, 0}, - {-0.235829, 0.075417, 10.149014, 0}, - {-0.243011, 0.062249, 10.144226, 0}, - {-0.244208, 0.073023, 10.123875, 0}, - {-0.239420, 0.084994, 10.132255, 0}, - {-0.238223, 0.074220, 10.120284, 0}, - {-0.256179, 0.063446, 10.137043, 0}, - {-0.243011, 0.061052, 10.117889, 0}, - {-0.235829, 0.064643, 10.119086, 0}, - {-0.235829, 0.079009, 10.133451, 0}, - {-0.237026, 0.082600, 10.119086, 0}, - {-0.238223, 0.079009, 10.139438, 0}, - {-0.247800, 0.065841, 10.117889, 0}, - {-0.243011, 0.069432, 10.158591, 0}, - {-0.246603, 0.080206, 10.122678, 0}, - {-0.256179, 0.083797, 10.141831, 0}, - {-0.235829, 0.092177, 10.108313, 0}, - {-0.237026, 0.061052, 10.132255, 0}, - {-0.237026, 0.058658, 10.156197, 0}, - {-0.244208, 0.059855, 10.117889, 0}, - {-0.237026, 0.087388, 10.144226, 0}, - {-0.257377, 0.094571, 10.110707, 0}, - {-0.256179, 0.080206, 10.132255, 0}, - {-0.243011, 0.089783, 10.133451, 0}, - {-0.238223, 0.080206, 10.133451, 0}, - {-0.240617, 0.067038, 10.114298, 0}, - {-0.246603, 0.064643, 10.133451, 0}, - {-0.245406, 0.075417, 10.128663, 0}, - {-0.240617, 0.071826, 10.122678, 0}, - {-0.229843, 0.068235, 10.126269, 0}, - {-0.240617, 0.081403, 10.123875, 0}, - {-0.244208, 0.079009, 10.138240, 0}, - {-0.237026, 0.065841, 10.145423, 0}, - {-0.239420, 0.069432, 10.133451, 0}, - {-0.253785, 0.076614, 10.127466, 0}, - {-0.256179, 0.082600, 10.125072, 0}, - {-0.232237, 0.081403, 10.113101, 0}, - {-0.239420, 0.065841, 10.139438, 0}, - {-0.241814, 0.084994, 10.128663, 0}, - {-0.252588, 0.071826, 10.122678, 0}, - {-0.243011, 0.067038, 10.157393, 0}, - {-0.251391, 0.081403, 10.134649, 0}, - {-0.251391, 0.083797, 10.127466, 0}, - {-0.265756, 0.074220, 10.115496, 0}, - {-0.245406, 0.062249, 10.150211, 0}, - {-0.241814, 0.070629, 10.117889, 0}, - {-0.257377, 0.083797, 10.120284, 0}, - {-0.239420, 0.081403, 10.121481, 0}, - {-0.247800, 0.068235, 10.135846, 0}, - {-0.243011, 0.071826, 10.129861, 0}, - {-0.235829, 0.082600, 10.128663, 0}, - {-0.247800, 0.073023, 10.145423, 0}, - {-0.258574, 0.065841, 10.123875, 0}, - {-0.233435, 0.069432, 10.122678, 0}, - {-0.245406, 0.076614, 10.120284, 0}, - {-0.247800, 0.089783, 10.131058, 0}, - {-0.244208, 0.090980, 10.114298, 0}, - {-0.247800, 0.089783, 10.143028, 0}, - {-0.229843, 0.073023, 10.119086, 0}, - {-0.240617, 0.082600, 10.134649, 0}, - {-0.244208, 0.095768, 10.125072, 0}, - {-0.241814, 0.083797, 10.145423, 0}, - {-0.250194, 0.068235, 10.139438, 0}, - {-0.248997, 0.075417, 10.113101, 0}, - {-0.250194, 0.076614, 10.128663, 0}, - {-0.247800, 0.081403, 10.114298, 0}, - {-0.247800, 0.075417, 10.123875, 0}, - {-0.248997, 0.095768, 10.145423, 0}, - {-0.245406, 0.088585, 10.143028, 0}, - {-0.238223, 0.084994, 10.113101, 0}, - {-0.240617, 0.071826, 10.126269, 0}, - {-0.240617, 0.067038, 10.140635, 0}, - {-0.245406, 0.071826, 10.138240, 0}, - {-0.254982, 0.073023, 10.128663, 0}, - {-0.245406, 0.077812, 10.145423, 0}, - {-0.250194, 0.070629, 10.127466, 0}, - {-0.243011, 0.073023, 10.137043, 0}, - {-0.245406, 0.067038, 10.117889, 0}, - {-0.243011, 0.071826, 10.151408, 0}, - {-0.252588, 0.081403, 10.128663, 0}, - {-0.233435, 0.074220, 10.110707, 0}, - {-0.243011, 0.074220, 10.126269, 0}, - {-0.239420, 0.089783, 10.143028, 0}, - {-0.237026, 0.086191, 10.123875, 0}, - {-0.243011, 0.064643, 10.129861, 0}, - {-0.234632, 0.077812, 10.133451, 0}, - {-0.250194, 0.086191, 10.133451, 0}, - {-0.241814, 0.074220, 10.125072, 0}, - {-0.243011, 0.086191, 10.122678, 0}, - {-0.234632, 0.076614, 10.121481, 0}, - {-0.251391, 0.082600, 10.135846, 0}, - {-0.251391, 0.084994, 10.133451, 0}, - {-0.245406, 0.063446, 10.117889, 0}, - {-0.253785, 0.079009, 10.122678, 0}, - {-0.243011, 0.074220, 10.129861, 0}, - {-0.233435, 0.069432, 10.127466, 0}, - {-0.251391, 0.077812, 10.126269, 0}, - {-0.245406, 0.079009, 10.120284, 0}, - {-0.247800, 0.068235, 10.128663, 0}, - {-0.244208, 0.069432, 10.133451, 0}, - {-0.238223, 0.074220, 10.146620, 0}, - {-0.241814, 0.080206, 10.120284, 0}, - {-0.248997, 0.071826, 10.107116, 0}, - {-0.240617, 0.073023, 10.123875, 0}, - {-0.239420, 0.063446, 10.135846, 0}, - {-0.245406, 0.068235, 10.117889, 0}, - {-0.248997, 0.088585, 10.105919, 0}, - {-0.248997, 0.067038, 10.138240, 0}, - {-0.247800, 0.074220, 10.128663, 0}, - {-0.237026, 0.079009, 10.138240, 0}, - {-0.243011, 0.092177, 10.140635, 0}, - {-0.235829, 0.082600, 10.128663, 0}, - {-0.240617, 0.079009, 10.116693, 0}, - {-0.248997, 0.087388, 10.114298, 0}, - {-0.238223, 0.079009, 10.120284, 0}, - {-0.241814, 0.087388, 10.128663, 0}, - {-0.250194, 0.063446, 10.129861, 0}, - {-0.245406, 0.071826, 10.128663, 0}, - {-0.251391, 0.073023, 10.123875, 0}, - {-0.258574, 0.084994, 10.137043, 0}, - {-0.246603, 0.077812, 10.140635, 0}, - {-0.244208, 0.070629, 10.111904, 0}, - {-0.252588, 0.075417, 10.143028, 0}, - {-0.248997, 0.069432, 10.117889, 0}, - {-0.243011, 0.073023, 10.129861, 0}, - {-0.238223, 0.079009, 10.143028, 0}, - {-0.238223, 0.080206, 10.114298, 0}, - {-0.241814, 0.074220, 10.132255, 0}, - {-0.240617, 0.065841, 10.132255, 0}, - {-0.247800, 0.069432, 10.134649, 0}, - {-0.251391, 0.075417, 10.132255, 0}, - {-0.238223, 0.086191, 10.115496, 0}, - {-0.245406, 0.076614, 10.139438, 0}, - {-0.240617, 0.073023, 10.123875, 0}, - {-0.238223, 0.071826, 10.137043, 0}, - {-0.245406, 0.076614, 10.135846, 0}, - {-0.251391, 0.081403, 10.133451, 0}, - {-0.251391, 0.086191, 10.134649, 0}, - {-0.248997, 0.079009, 10.115496, 0}, - {-0.256179, 0.067038, 10.133451, 0}, - {-0.246603, 0.068235, 10.121481, 0}, - {-0.244208, 0.082600, 10.135846, 0}, - {-0.250194, 0.079009, 10.122678, 0}, - {-0.252588, 0.079009, 10.120284, 0}, - {-0.243011, 0.083797, 10.127466, 0}, - {-0.243011, 0.071826, 10.119086, 0}, - {-0.251391, 0.081403, 10.128663, 0}, - {-0.252588, 0.065841, 10.122678, 0}, - {-0.240617, 0.079009, 10.131058, 0}, - {-0.253785, 0.082600, 10.121481, 0}, - {-0.256179, 0.071826, 10.140635, 0}, - {-0.263362, 0.070629, 10.123875, 0}, - {-0.248997, 0.074220, 10.123875, 0}, - {-0.235829, 0.064643, 10.125072, 0}, - {-0.238223, 0.082600, 10.125072, 0}, - {-0.238223, 0.077812, 10.108313, 0}, - {-0.231040, 0.071826, 10.117889, 0}, - {-0.250194, 0.093374, 10.122678, 0}, - {-0.241814, 0.080206, 10.123875, 0}, - {-0.258574, 0.073023, 10.117889, 0}, - {-0.248997, 0.071826, 10.127466, 0}, - {-0.246603, 0.067038, 10.146620, 0}, - {-0.248997, 0.074220, 10.126269, 0}, - {-0.248997, 0.071826, 10.133451, 0}, - {-0.247800, 0.080206, 10.133451, 0}, - {-0.239420, 0.076614, 10.138240, 0}, - {-0.248997, 0.081403, 10.127466, 0}, - {-0.248997, 0.076614, 10.137043, 0}, - {-0.248997, 0.080206, 10.123875, 0}, - {-0.239420, 0.067038, 10.141831, 0}, - {-0.235829, 0.083797, 10.119086, 0}, - {-0.247800, 0.069432, 10.134649, 0}, - {-0.237026, 0.087388, 10.137043, 0}, - {-0.246603, 0.073023, 10.131058, 0}, - {-0.251391, 0.083797, 10.135846, 0}, - {-0.247800, 0.071826, 10.121481, 0}, - {-0.246603, 0.076614, 10.128663, 0}, - {-0.251391, 0.082600, 10.114298, 0}, - {-0.254982, 0.082600, 10.134649, 0}, - {-0.237026, 0.084994, 10.117889, 0}, - {-0.229843, 0.077812, 10.119086, 0}, - {-0.246603, 0.070629, 10.125072, 0}, - {-0.235829, 0.076614, 10.140635, 0}, - {-0.245406, 0.061052, 10.122678, 0}, - {-0.240617, 0.076614, 10.119086, 0}, - {-0.259771, 0.088585, 10.126269, 0}, - {-0.241814, 0.077812, 10.139438, 0}, - {-0.244208, 0.075417, 10.116693, 0}, - {-0.239420, 0.067038, 10.109509, 0}, - {-0.241814, 0.083797, 10.134649, 0}, - {-0.244208, 0.067038, 10.125072, 0}, - {-0.244208, 0.073023, 10.149014, 0}, - {-0.243011, 0.084994, 10.116693, 0}, - {-0.231040, 0.076614, 10.123875, 0}, - {-0.247800, 0.089783, 10.120284, 0}, - {-0.246603, 0.077812, 10.122678, 0}, - {-0.262165, 0.077812, 10.120284, 0}, - {-0.231040, 0.070629, 10.115496, 0}, - {-0.243011, 0.077812, 10.149014, 0}, - {-0.248997, 0.090980, 10.119086, 0}, - {-0.250194, 0.090980, 10.132255, 0}, - {-0.238223, 0.074220, 10.120284, 0}, - {-0.228646, 0.080206, 10.140635, 0}, - {-0.245406, 0.075417, 10.113101, 0}, - {-0.233435, 0.089783, 10.131058, 0}, - {-0.244208, 0.081403, 10.117889, 0}, - {-0.246603, 0.063446, 10.141831, 0}, - {-0.235829, 0.090980, 10.143028, 0}, - {-0.233435, 0.081403, 10.125072, 0}, - {-0.251391, 0.077812, 10.127466, 0}, - {-0.238223, 0.081403, 10.125072, 0}, - {-0.235829, 0.074220, 10.132255, 0}, - {-0.244208, 0.064643, 10.119086, 0}, - {-0.256179, 0.071826, 10.143028, 0}, - {-0.240617, 0.082600, 10.110707, 0}, - {-0.248997, 0.071826, 10.137043, 0}, - {-0.251391, 0.076614, 10.125072, 0}, - {-0.228646, 0.082600, 10.134649, 0}, - {-0.233435, 0.082600, 10.111904, 0}, - {-0.246603, 0.068235, 10.119086, 0}, - {-0.235829, 0.067038, 10.143028, 0}, - {-0.241814, 0.079009, 10.126269, 0}, - {-0.238223, 0.095768, 10.125072, 0}, - {-0.243011, 0.065841, 10.105919, 0}, - {-0.256179, 0.081403, 10.132255, 0}, - {-0.256179, 0.073023, 10.110707, 0}, - {-0.246603, 0.079009, 10.145423, 0}, - {-0.231040, 0.069432, 10.122678, 0}, - {-0.234632, 0.065841, 10.139438, 0}, - {-0.232237, 0.094571, 10.126269, 0}, - {-0.243011, 0.081403, 10.149014, 0}, - {-0.256179, 0.083797, 10.132255, 0}, - {-0.246603, 0.073023, 10.127466, 0}, - {-0.244208, 0.067038, 10.131058, 0}, - {-0.244208, 0.082600, 10.133451, 0}, - {-0.239420, 0.088585, 10.137043, 0}, - {-0.234632, 0.069432, 10.123875, 0}, - {-0.241814, 0.069432, 10.137043, 0}, - {-0.241814, 0.083797, 10.120284, 0}, - {-0.243011, 0.075417, 10.134649, 0}, - {-0.250194, 0.075417, 10.132255, 0}, - {-0.240617, 0.076614, 10.126269, 0}, - {-0.265756, 0.083797, 10.137043, 0}, - {-0.258574, 0.079009, 10.116693, 0}, - {-0.237026, 0.069432, 10.122678, 0}, - {-0.248997, 0.073023, 10.121481, 0}, - {-0.256179, 0.080206, 10.123875, 0}, - {-0.248997, 0.067038, 10.122678, 0}, - {-0.237026, 0.083797, 10.143028, 0}, - {-0.238223, 0.080206, 10.114298, 0}, - {-0.253785, 0.074220, 10.129861, 0}, - {-0.250194, 0.075417, 10.129861, 0}, - {-0.254982, 0.081403, 10.151408, 0}, - {-0.250194, 0.070629, 10.135846, 0}, - {-0.247800, 0.075417, 10.120284, 0}, - {-0.241814, 0.064643, 10.139438, 0}, - {-0.246603, 0.071826, 10.138240, 0}, - {-0.243011, 0.079009, 10.152605, 0}, - {-0.241814, 0.080206, 10.127466, 0}, - {-0.251391, 0.070629, 10.129861, 0}, - {-0.243011, 0.081403, 10.139438, 0}, - {-0.251391, 0.070629, 10.129861, 0}, - {-0.251391, 0.076614, 10.122678, 0}, - {-0.252588, 0.079009, 10.133451, 0}, - {-0.254982, 0.073023, 10.128663, 0}, - {-0.232237, 0.067038, 10.113101, 0}, - {-0.239420, 0.088585, 10.120284, 0}, - {-0.245406, 0.080206, 10.113101, 0}, - {-0.238223, 0.075417, 10.131058, 0}, - {-0.244208, 0.065841, 10.109509, 0}, - {-0.235829, 0.068235, 10.141831, 0}, - {-0.251391, 0.081403, 10.121481, 0}, - {-0.250194, 0.077812, 10.119086, 0}, - {-0.241814, 0.071826, 10.126269, 0}, - {-0.233435, 0.069432, 10.135846, 0}, - {-0.239420, 0.076614, 10.131058, 0}, - {-0.239420, 0.088585, 10.107116, 0}, - {-0.234632, 0.084994, 10.126269, 0}, - {-0.247800, 0.077812, 10.128663, 0}, - {-0.246603, 0.083797, 10.137043, 0}, - {-0.240617, 0.087388, 10.127466, 0}, - {-0.256179, 0.070629, 10.117889, 0}, - {-0.243011, 0.077812, 10.121481, 0}, - {-0.243011, 0.083797, 10.133451, 0}, - {-0.252588, 0.087388, 10.125072, 0}, - {-0.256179, 0.073023, 10.127466, 0}, - {-0.239420, 0.057461, 10.128663, 0}, - {-0.243011, 0.070629, 10.117889, 0}, - {-0.252588, 0.074220, 10.138240, 0}, - {-0.243011, 0.073023, 10.127466, 0}, - {-0.238223, 0.082600, 10.133451, 0}, - {-0.235829, 0.074220, 10.143028, 0}, - {-0.248997, 0.065841, 10.153803, 0}, - {-0.240617, 0.081403, 10.107116, 0}, - {-0.241814, 0.087388, 10.123875, 0}, - {-0.241814, 0.070629, 10.141831, 0}, - {-0.238223, 0.074220, 10.113101, 0}, - {-0.251391, 0.079009, 10.129861, 0}, - {-0.253785, 0.082600, 10.108313, 0}, - {-0.254982, 0.075417, 10.121481, 0}, - {-0.247800, 0.057461, 10.133451, 0}, - {-0.243011, 0.058658, 10.128663, 0}, - {-0.244208, 0.080206, 10.120284, 0}, - {-0.231040, 0.079009, 10.109509, 0}, - {-0.256179, 0.070629, 10.120284, 0}, - {-0.251391, 0.082600, 10.143028, 0}, - {-0.233435, 0.068235, 10.128663, 0}, - {-0.241814, 0.068235, 10.129861, 0}, - {-0.235829, 0.083797, 10.111904, 0}, - {-0.238223, 0.067038, 10.139438, 0}, - {-0.260968, 0.063446, 10.128663, 0}, - {-0.231040, 0.084994, 10.140635, 0}, - {-0.237026, 0.082600, 10.134649, 0}, - {-0.246603, 0.070629, 10.144226, 0}, - {-0.246603, 0.080206, 10.125072, 0}, - {-0.244208, 0.087388, 10.122678, 0}, - {-0.234632, 0.069432, 10.111904, 0}, - {-0.252588, 0.065841, 10.121481, 0}, - {-0.245406, 0.071826, 10.128663, 0}, - {-0.243011, 0.075417, 10.129861, 0}, - {-0.238223, 0.068235, 10.139438, 0}, - {-0.256179, 0.076614, 10.126269, 0}, - {-0.246603, 0.083797, 10.131058, 0}, - {-0.248997, 0.080206, 10.116693, 0}, - {-0.241814, 0.082600, 10.123875, 0}, - {-0.262165, 0.075417, 10.113101, 0}, - {-0.240617, 0.079009, 10.134649, 0}, - {-0.244208, 0.077812, 10.121481, 0}, - {-0.246603, 0.068235, 10.141831, 0}, - {-0.252588, 0.075417, 10.120284, 0}, - {-0.247800, 0.084994, 10.104721, 0}, - {-0.241814, 0.086191, 10.126269, 0}, - {-0.237026, 0.082600, 10.117889, 0}, - {-0.243011, 0.070629, 10.117889, 0}, - {-0.239420, 0.070629, 10.135846, 0}, - {-0.237026, 0.065841, 10.120284, 0}, - {-0.237026, 0.061052, 10.125072, 0}, - {-0.235829, 0.061052, 10.114298, 0}, - {-0.252588, 0.074220, 10.137043, 0}, - {-0.253785, 0.086191, 10.119086, 0}, - {-0.252588, 0.089783, 10.129861, 0}, - {-0.245406, 0.084994, 10.126269, 0}, - {-0.232237, 0.076614, 10.120284, 0}, - {-0.252588, 0.082600, 10.119086, 0}, - {-0.251391, 0.064643, 10.132255, 0}, - {-0.227449, 0.076614, 10.149014, 0}, - {-0.259771, 0.083797, 10.131058, 0}, - {-0.248997, 0.075417, 10.127466, 0}, - {-0.244208, 0.071826, 10.133451, 0}, - {-0.243011, 0.070629, 10.132255, 0}, - {-0.228646, 0.076614, 10.128663, 0}, - {-0.241814, 0.089783, 10.138240, 0}, - {-0.252588, 0.086191, 10.122678, 0}, - {-0.254982, 0.068235, 10.133451, 0}, - {-0.250194, 0.071826, 10.150211, 0}, - {-0.235829, 0.084994, 10.140635, 0}, - {-0.234632, 0.087388, 10.139438, 0}, - {-0.245406, 0.077812, 10.105919, 0}, - {-0.250194, 0.080206, 10.107116, 0}, - {-0.240617, 0.092177, 10.132255, 0}, - {-0.243011, 0.077812, 10.133451, 0}, - {-0.248997, 0.062249, 10.128663, 0}, - {-0.245406, 0.068235, 10.125072, 0}, - {-0.250194, 0.064643, 10.129861, 0}, - {-0.248997, 0.082600, 10.126269, 0}, - {-0.252588, 0.073023, 10.141831, 0}, - {-0.250194, 0.076614, 10.127466, 0}, - {-0.251391, 0.077812, 10.121481, 0}, - {-0.250194, 0.069432, 10.134649, 0}, - {-0.232237, 0.065841, 10.131058, 0}, - {-0.233435, 0.081403, 10.131058, 0}, - {-0.241814, 0.074220, 10.111904, 0}, - {-0.248997, 0.064643, 10.135846, 0}, - {-0.239420, 0.081403, 10.143028, 0}, - {-0.239420, 0.077812, 10.138240, 0}, - {-0.237026, 0.074220, 10.110707, 0}, - {-0.235829, 0.081403, 10.121481, 0}, - {-0.247800, 0.063446, 10.129861, 0}, - {-0.235829, 0.068235, 10.121481, 0}, - {-0.238223, 0.064643, 10.123875, 0}, - {-0.246603, 0.070629, 10.132255, 0}, - {-0.264559, 0.073023, 10.145423, 0}, - {-0.247800, 0.065841, 10.116693, 0}, - {-0.247800, 0.084994, 10.125072, 0}, - {-0.225055, 0.080206, 10.115496, 0}, - {-0.233435, 0.064643, 10.135846, 0}, - {-0.247800, 0.069432, 10.131058, 0}, - {-0.234632, 0.081403, 10.125072, 0}, - {-0.246603, 0.081403, 10.128663, 0}, - {-0.235829, 0.086191, 10.117889, 0}, - {-0.233435, 0.077812, 10.122678, 0}, - {-0.256179, 0.049081, 10.128663, 0}, - {-0.243011, 0.083797, 10.138240, 0}, - {-0.239420, 0.087388, 10.129861, 0}, - {-0.238223, 0.068235, 10.131058, 0}, - {-0.234632, 0.068235, 10.129861, 0}, - {-0.250194, 0.080206, 10.135846, 0}, - {-0.246603, 0.062249, 10.131058, 0}, - {-0.243011, 0.076614, 10.134649, 0}, - {-0.246603, 0.093374, 10.128663, 0}, - {-0.251391, 0.065841, 10.126269, 0}, - {-0.235829, 0.069432, 10.135846, 0}, - {-0.243011, 0.081403, 10.120284, 0}, - {-0.245406, 0.086191, 10.129861, 0}, - {-0.234632, 0.073023, 10.110707, 0}, - {-0.244208, 0.083797, 10.140635, 0}, - {-0.247800, 0.069432, 10.141831, 0}, - {-0.240617, 0.076614, 10.149014, 0}, - {-0.243011, 0.081403, 10.122678, 0}, - {-0.237026, 0.071826, 10.120284, 0}, - {-0.234632, 0.073023, 10.120284, 0}, - {-0.237026, 0.077812, 10.131058, 0}, - {-0.244208, 0.080206, 10.152605, 0}, - {-0.250194, 0.076614, 10.135846, 0}, - {-0.253785, 0.069432, 10.131058, 0}, - {-0.260968, 0.073023, 10.141831, 0}, - {-0.247800, 0.070629, 10.134649, 0}, - {-0.257377, 0.068235, 10.125072, 0}, - {-0.243011, 0.073023, 10.121481, 0}, - {-0.235829, 0.082600, 10.127466, 0}, - {-0.237026, 0.070629, 10.139438, 0}, - {-0.227449, 0.081403, 10.127466, 0}, - {-0.239420, 0.080206, 10.141831, 0}, - {-0.251391, 0.069432, 10.129861, 0}, - {-0.238223, 0.069432, 10.121481, 0}, - {-0.237026, 0.069432, 10.126269, 0}, - {-0.250194, 0.077812, 10.114298, 0}, - {-0.237026, 0.094571, 10.116693, 0}, - {-0.253785, 0.084994, 10.143028, 0}, - {-0.263362, 0.071826, 10.123875, 0}, - {-0.246603, 0.064643, 10.126269, 0}, - {-0.240617, 0.059855, 10.131058, 0}, - {-0.247800, 0.070629, 10.139438, 0}, - {-0.240617, 0.082600, 10.132255, 0}, - {-0.234632, 0.073023, 10.111904, 0}, - {-0.240617, 0.062249, 10.131058, 0}, - {-0.238223, 0.080206, 10.129861, 0}, - {-0.243011, 0.076614, 10.123875, 0}, - {-0.246603, 0.080206, 10.125072, 0}, - {-0.235829, 0.079009, 10.127466, 0}, - {-0.243011, 0.076614, 10.110707, 0}, - {-0.246603, 0.065841, 10.128663, 0}, - {-0.246603, 0.076614, 10.133451, 0}, - {-0.253785, 0.080206, 10.123875, 0}, - {-0.241814, 0.073023, 10.119086, 0}, - {-0.250194, 0.075417, 10.120284, 0}, - {-0.235829, 0.079009, 10.143028, 0}, - {-0.241814, 0.071826, 10.135846, 0}, - {-0.254982, 0.077812, 10.125072, 0}, - {-0.238223, 0.077812, 10.122678, 0}, - {-0.235829, 0.071826, 10.132255, 0}, - {-0.238223, 0.084994, 10.120284, 0}, - {-0.253785, 0.075417, 10.146620, 0}, - {-0.254982, 0.069432, 10.141831, 0}, - {-0.240617, 0.087388, 10.126269, 0}, - {-0.251391, 0.088585, 10.115496, 0}, - {-0.256179, 0.065841, 10.129861, 0}, - {-0.243011, 0.069432, 10.127466, 0}, - {-0.246603, 0.063446, 10.134649, 0}, - {-0.246603, 0.073023, 10.128663, 0}, - {-0.240617, 0.068235, 10.119086, 0}, - {-0.257377, 0.069432, 10.143028, 0}, - {-0.245406, 0.081403, 10.128663, 0}, - {-0.252588, 0.075417, 10.120284, 0}, - {-0.241814, 0.068235, 10.111904, 0}, - {-0.238223, 0.075417, 10.141831, 0}, - {-0.240617, 0.071826, 10.111904, 0}, - {-0.247800, 0.067038, 10.126269, 0}, - {-0.247800, 0.068235, 10.134649, 0}, - {-0.238223, 0.084994, 10.139438, 0}, - {-0.237026, 0.090980, 10.141831, 0}, - {-0.245406, 0.068235, 10.109509, 0}, - {-0.256179, 0.076614, 10.143028, 0}, - {-0.237026, 0.080206, 10.116693, 0}, - {-0.228646, 0.079009, 10.134649, 0}, - {-0.247800, 0.071826, 10.121481, 0}, - {-0.241814, 0.075417, 10.129861, 0}, - {-0.228646, 0.076614, 10.152605, 0}, - {-0.238223, 0.087388, 10.125072, 0}, - {-0.239420, 0.075417, 10.128663, 0}, - {-0.247800, 0.074220, 10.114298, 0}, - {-0.219069, 0.080206, 10.126269, 0}, - {-0.234632, 0.082600, 10.109509, 0}, - {-0.244208, 0.063446, 10.127466, 0}, - {-0.247800, 0.068235, 10.134649, 0}, - {-0.245406, 0.069432, 10.139438, 0}, - {-0.251391, 0.086191, 10.128663, 0}, - {-0.244208, 0.065841, 10.127466, 0}, - {-0.246603, 0.070629, 10.125072, 0}, - {-0.240617, 0.081403, 10.125072, 0}, - {-0.232237, 0.063446, 10.141831, 0}, - {-0.247800, 0.065841, 10.126269, 0}, - {-0.235829, 0.086191, 10.133451, 0}, - {-0.245406, 0.096965, 10.121481, 0}, - {-0.239420, 0.090980, 10.121481, 0}, - {-0.248997, 0.077812, 10.125072, 0}, - {-0.231040, 0.067038, 10.126269, 0}, - {-0.245406, 0.081403, 10.125072, 0}, - {-0.231040, 0.074220, 10.145423, 0}, - {-0.253785, 0.067038, 10.115496, 0}, - {-0.246603, 0.065841, 10.110707, 0}, - {-0.245406, 0.069432, 10.131058, 0}, - {-0.232237, 0.076614, 10.113101, 0}, - {-0.243011, 0.075417, 10.121481, 0}, - {-0.243011, 0.079009, 10.132255, 0}, - {-0.238223, 0.079009, 10.123875, 0}, - {-0.245406, 0.069432, 10.122678, 0}, - {-0.247800, 0.075417, 10.126269, 0}, - {-0.239420, 0.079009, 10.139438, 0}, - {-0.244208, 0.083797, 10.105919, 0}, - {-0.245406, 0.071826, 10.109509, 0}, - {-0.233435, 0.076614, 10.128663, 0}, - {-0.243011, 0.088585, 10.131058, 0}, - {-0.252588, 0.069432, 10.117889, 0}, - {-0.248997, 0.090980, 10.119086, 0}, - {-0.241814, 0.074220, 10.129861, 0}, - {-0.253785, 0.068235, 10.135846, 0}, - {-0.240617, 0.074220, 10.125072, 0}, - {-0.246603, 0.076614, 10.131058, 0}, - {-0.238223, 0.081403, 10.117889, 0}, - {-0.246603, 0.074220, 10.127466, 0}, - {-0.250194, 0.070629, 10.133451, 0}, - {-0.248997, 0.073023, 10.132255, 0}, - {-0.250194, 0.077812, 10.122678, 0}, - {-0.259771, 0.077812, 10.123875, 0}, - {-0.234632, 0.079009, 10.123875, 0}, - {-0.241814, 0.073023, 10.120284, 0}, - {-0.251391, 0.063446, 10.146620, 0}, - {-0.250194, 0.074220, 10.113101, 0}, - {-0.256179, 0.082600, 10.119086, 0}, - {-0.257377, 0.080206, 10.132255, 0}, - {-0.245406, 0.090980, 10.127466, 0}, - {-0.243011, 0.075417, 10.133451, 0}, - {-0.239420, 0.088585, 10.125072, 0}, - {-0.241814, 0.079009, 10.127466, 0}, - {-0.251391, 0.070629, 10.137043, 0}, - {-0.235829, 0.081403, 10.110707, 0}, - {-0.248997, 0.075417, 10.141831, 0}, - {-0.231040, 0.087388, 10.125072, 0}, - {-0.247800, 0.068235, 10.127466, 0}, - {-0.252588, 0.086191, 10.119086, 0}, - {-0.240617, 0.071826, 10.127466, 0}, - {-0.243011, 0.081403, 10.144226, 0}, - {-0.243011, 0.083797, 10.126269, 0}, - {-0.251391, 0.074220, 10.127466, 0}, - {-0.239420, 0.084994, 10.125072, 0}, - {-0.231040, 0.069432, 10.113101, 0}, - {-0.246603, 0.069432, 10.138240, 0}, - {-0.243011, 0.075417, 10.132255, 0}, - {-0.243011, 0.084994, 10.113101, 0}, - {-0.253785, 0.082600, 10.120284, 0}, - {-0.247800, 0.070629, 10.125072, 0}, - {-0.244208, 0.079009, 10.113101, 0}, - {-0.260968, 0.073023, 10.127466, 0}, - {-0.239420, 0.063446, 10.128663, 0}, - {-0.234632, 0.082600, 10.122678, 0}, - {-0.240617, 0.079009, 10.132255, 0}, - {-0.251391, 0.069432, 10.133451, 0}, - {-0.252588, 0.073023, 10.131058, 0}, - {-0.239420, 0.059855, 10.121481, 0}, - {-0.238223, 0.079009, 10.122678, 0}, - {-0.229843, 0.070629, 10.115496, 0}, - {-0.246603, 0.074220, 10.128663, 0}, - {-0.235829, 0.079009, 10.121481, 0}, - {-0.237026, 0.076614, 10.146620, 0}, - {-0.244208, 0.077812, 10.117889, 0}, - {-0.258574, 0.070629, 10.133451, 0}, - {-0.259771, 0.077812, 10.119086, 0}, - {-0.246603, 0.083797, 10.133451, 0}, - {-0.241814, 0.076614, 10.127466, 0}, - {-0.253785, 0.077812, 10.116693, 0}, - {-0.256179, 0.075417, 10.123875, 0}, - {-0.254982, 0.074220, 10.120284, 0}, - {-0.252588, 0.070629, 10.114298, 0}, - {-0.256179, 0.074220, 10.128663, 0}, - {-0.237026, 0.071826, 10.139438, 0}, - {-0.235829, 0.069432, 10.108313, 0}, - {-0.250194, 0.074220, 10.116693, 0}, - {-0.241814, 0.073023, 10.131058, 0}, - {-0.234632, 0.075417, 10.147817, 0}, - {-0.238223, 0.067038, 10.111904, 0}, - {-0.251391, 0.071826, 10.128663, 0}, - {-0.239420, 0.087388, 10.134649, 0}, - {-0.237026, 0.082600, 10.128663, 0}, - {-0.240617, 0.089783, 10.133451, 0}, - {-0.245406, 0.081403, 10.119086, 0}, - {-0.241814, 0.080206, 10.128663, 0}, - {-0.235829, 0.062249, 10.140635, 0}, - {-0.235829, 0.065841, 10.128663, 0}, - {-0.237026, 0.092177, 10.128663, 0}, - {-0.244208, 0.082600, 10.122678, 0}, - {-0.247800, 0.065841, 10.127466, 0}, - {-0.243011, 0.070629, 10.113101, 0}, - {-0.238223, 0.068235, 10.123875, 0}, - {-0.241814, 0.077812, 10.107116, 0}, - {-0.238223, 0.088585, 10.132255, 0}, - {-0.234632, 0.067038, 10.127466, 0}, - {-0.243011, 0.075417, 10.117889, 0}, - {-0.240617, 0.077812, 10.132255, 0}, - {-0.240617, 0.079009, 10.120284, 0}, - {-0.239420, 0.074220, 10.125072, 0}, - {-0.233435, 0.071826, 10.132255, 0}, - {-0.241814, 0.083797, 10.126269, 0}, - {-0.258574, 0.089783, 10.127466, 0}, - {-0.234632, 0.081403, 10.131058, 0}, - {-0.252588, 0.071826, 10.137043, 0}, - {-0.240617, 0.064643, 10.127466, 0}, - {-0.248997, 0.070629, 10.133451, 0}, - {-0.246603, 0.087388, 10.132255, 0}, - {-0.250194, 0.075417, 10.132255, 0}, - {-0.244208, 0.073023, 10.126269, 0}, - {-0.241814, 0.079009, 10.120284, 0}, - {-0.251391, 0.083797, 10.128663, 0}, - {-0.234632, 0.080206, 10.145423, 0}, - {-0.250194, 0.074220, 10.140635, 0}, - {-0.247800, 0.062249, 10.116693, 0}, - {-0.243011, 0.077812, 10.125072, 0}, - {-0.247800, 0.064643, 10.126269, 0}, - {-0.244208, 0.071826, 10.145423, 0}, - {-0.253785, 0.070629, 10.123875, 0}, - {-0.237026, 0.077812, 10.133451, 0}, - {-0.246603, 0.082600, 10.117889, 0}, - {-0.245406, 0.086191, 10.121481, 0}, - {-0.235829, 0.073023, 10.117889, 0}, - {-0.243011, 0.075417, 10.134649, 0}, - {-0.239420, 0.087388, 10.139438, 0}, - {-0.227449, 0.084994, 10.135846, 0}, - {-0.240617, 0.083797, 10.133451, 0}, - {-0.243011, 0.073023, 10.117889, 0}, - {-0.228646, 0.082600, 10.144226, 0}, - {-0.240617, 0.068235, 10.104721, 0}, - {-0.241814, 0.059855, 10.127466, 0}, - {-0.243011, 0.081403, 10.116693, 0}, - {-0.238223, 0.080206, 10.147817, 0}, - {-0.244208, 0.076614, 10.119086, 0}, - {-0.241814, 0.073023, 10.119086, 0}, - {-0.251391, 0.075417, 10.131058, 0}, - {-0.244208, 0.071826, 10.127466, 0}, - {-0.233435, 0.082600, 10.146620, 0}, - {-0.250194, 0.070629, 10.120284, 0}, - {-0.248997, 0.067038, 10.135846, 0}, - {-0.233435, 0.077812, 10.109509, 0}, - {-0.243011, 0.083797, 10.133451, 0}, - {-0.251391, 0.069432, 10.111904, 0}, - {-0.234632, 0.076614, 10.138240, 0}, - {-0.241814, 0.086191, 10.120284, 0}, - {-0.239420, 0.068235, 10.128663, 0}, - {-0.229843, 0.071826, 10.140635, 0}, - {-0.245406, 0.082600, 10.115496, 0}, - {-0.234632, 0.076614, 10.143028, 0}, - {-0.246603, 0.068235, 10.119086, 0}, - {-0.250194, 0.064643, 10.132255, 0}, - {-0.237026, 0.082600, 10.129861, 0}, - {-0.256179, 0.089783, 10.138240, 0}, - {-0.239420, 0.076614, 10.121481, 0}, - {-0.238223, 0.069432, 10.133451, 0}, - {-0.247800, 0.067038, 10.135846, 0}, - {-0.250194, 0.070629, 10.131058, 0}, - {-0.243011, 0.080206, 10.141831, 0}, - {-0.244208, 0.064643, 10.122678, 0}, - {-0.238223, 0.070629, 10.134649, 0}, - {-0.229843, 0.070629, 10.113101, 0}, - {-0.254982, 0.087388, 10.137043, 0}, - {-0.259771, 0.081403, 10.128663, 0}, - {-0.241814, 0.074220, 10.129861, 0}, - {-0.247800, 0.065841, 10.126269, 0}, - {-0.253785, 0.063446, 10.122678, 0}, - {-0.256179, 0.076614, 10.129861, 0}, - {-0.250194, 0.083797, 10.123875, 0}, - {-0.239420, 0.073023, 10.129861, 0}, - {-0.253785, 0.084994, 10.109509, 0}, - {-0.238223, 0.071826, 10.151408, 0}, - {-0.245406, 0.068235, 10.110707, 0}, - {-0.246603, 0.064643, 10.127466, 0}, - {-0.232237, 0.077812, 10.113101, 0}, - {-0.247800, 0.064643, 10.132255, 0}, - {-0.254982, 0.080206, 10.137043, 0}, - {-0.248997, 0.080206, 10.138240, 0}, - {-0.243011, 0.081403, 10.123875, 0}, - {-0.237026, 0.087388, 10.127466, 0}, - {-0.234632, 0.070629, 10.129861, 0}, - {-0.235829, 0.073023, 10.121481, 0}, - {-0.244208, 0.073023, 10.127466, 0}, - {-0.237026, 0.067038, 10.138240, 0}, - {-0.248997, 0.067038, 10.119086, 0}, - {-0.253785, 0.079009, 10.129861, 0}, - {-0.239420, 0.068235, 10.129861, 0}, - {-0.252588, 0.071826, 10.122678, 0}, - {-0.243011, 0.076614, 10.134649, 0}, - {-0.234632, 0.075417, 10.117889, 0}, - {-0.235829, 0.070629, 10.115496, 0}, - {-0.247800, 0.083797, 10.123875, 0}, - {-0.241814, 0.089783, 10.123875, 0}, - {-0.234632, 0.087388, 10.133451, 0}, - {-0.239420, 0.073023, 10.116693, 0}, - {-0.241814, 0.087388, 10.122678, 0}, - {-0.243011, 0.077812, 10.126269, 0}, - {-0.247800, 0.076614, 10.129861, 0}, - {-0.244208, 0.082600, 10.140635, 0}, - {-0.241814, 0.079009, 10.150211, 0}, - {-0.237026, 0.065841, 10.144226, 0}, - {-0.234632, 0.081403, 10.133451, 0}, - {-0.231040, 0.081403, 10.121481, 0}, - {-0.248997, 0.071826, 10.143028, 0}, - {-0.257377, 0.063446, 10.119086, 0}, - {-0.245406, 0.087388, 10.141831, 0}, - {-0.246603, 0.082600, 10.137043, 0}, - {-0.227449, 0.080206, 10.128663, 0}, - {-0.244208, 0.082600, 10.120284, 0}, - {-0.245406, 0.087388, 10.139438, 0}, - {-0.237026, 0.061052, 10.137043, 0}, - {-0.240617, 0.061052, 10.132255, 0}, - {-0.239420, 0.076614, 10.132255, 0}, - {-0.244208, 0.083797, 10.131058, 0}, - {-0.227449, 0.077812, 10.137043, 0}, - {-0.240617, 0.089783, 10.144226, 0}, - {-0.238223, 0.083797, 10.121481, 0}, - {-0.260968, 0.068235, 10.119086, 0}, - {-0.243011, 0.070629, 10.155000, 0}, - {-0.248997, 0.079009, 10.117889, 0}, - {-0.252588, 0.076614, 10.111904, 0}, - {-0.237026, 0.084994, 10.134649, 0}, - {-0.248997, 0.069432, 10.128663, 0}, - {-0.235829, 0.082600, 10.126269, 0}, - {-0.245406, 0.069432, 10.150211, 0}, - {-0.253785, 0.090980, 10.125072, 0}, - {-0.247800, 0.077812, 10.119086, 0}, - {-0.248997, 0.074220, 10.117889, 0}, - {-0.239420, 0.080206, 10.122678, 0}, - {-0.239420, 0.087388, 10.127466, 0}, - {-0.244208, 0.074220, 10.128663, 0}, - {-0.229843, 0.068235, 10.123875, 0}, - {-0.247800, 0.080206, 10.127466, 0}, - {-0.241814, 0.071826, 10.119086, 0}, - {-0.235829, 0.086191, 10.121481, 0}, - {-0.234632, 0.084994, 10.127466, 0}, - {-0.237026, 0.073023, 10.131058, 0}, - {-0.243011, 0.074220, 10.123875, 0}, - {-0.259771, 0.084994, 10.146620, 0}, - {-0.241814, 0.071826, 10.122678, 0}, - {-0.232237, 0.077812, 10.132255, 0}, - {-0.239420, 0.076614, 10.133451, 0}, - {-0.244208, 0.076614, 10.128663, 0}, - {-0.241814, 0.081403, 10.153803, 0}, - {-0.246603, 0.069432, 10.114298, 0}, - {-0.247800, 0.067038, 10.128663, 0}, - {-0.239420, 0.077812, 10.132255, 0}, - {-0.248997, 0.064643, 10.133451, 0}, - {-0.231040, 0.075417, 10.120284, 0}, - {-0.235829, 0.070629, 10.109509, 0}, - {-0.248997, 0.079009, 10.121481, 0}, - {-0.239420, 0.094571, 10.128663, 0}, - {-0.254982, 0.083797, 10.134649, 0}, - {-0.240617, 0.079009, 10.117889, 0}, - {-0.244208, 0.065841, 10.122678, 0}, - {-0.238223, 0.070629, 10.116693, 0}, - {-0.244208, 0.081403, 10.131058, 0}, - {-0.239420, 0.071826, 10.135846, 0}, - {-0.231040, 0.070629, 10.139438, 0}, - {-0.240617, 0.070629, 10.125072, 0}, - {-0.235829, 0.079009, 10.127466, 0}, - {-0.235829, 0.077812, 10.126269, 0}, - {-0.241814, 0.071826, 10.127466, 0}, - {-0.243011, 0.068235, 10.131058, 0}, - {-0.240617, 0.076614, 10.129861, 0}, - {-0.231040, 0.070629, 10.127466, 0}, - {-0.229843, 0.076614, 10.129861, 0}, - {-0.235829, 0.071826, 10.128663, 0}, - {-0.235829, 0.068235, 10.131058, 0}, - {-0.246603, 0.074220, 10.122678, 0}, - {-0.232237, 0.075417, 10.126269, 0}, - {-0.233435, 0.075417, 10.116693, 0}, - {-0.227449, 0.069432, 10.131058, 0}, - {-0.233435, 0.069432, 10.133451, 0}, - {-0.243011, 0.076614, 10.125072, 0}, - {-0.243011, 0.079009, 10.111904, 0}, - {-0.245406, 0.080206, 10.137043, 0}, - {-0.244208, 0.083797, 10.133451, 0}, - {-0.247800, 0.071826, 10.131058, 0}, - {-0.239420, 0.063446, 10.114298, 0}, - {-0.234632, 0.070629, 10.119086, 0}, - {-0.238223, 0.070629, 10.151408, 0}, - {-0.247800, 0.075417, 10.134649, 0}, - {-0.241814, 0.075417, 10.137043, 0}, - {-0.240617, 0.067038, 10.121481, 0}, - {-0.243011, 0.063446, 10.137043, 0}, - {-0.229843, 0.068235, 10.132255, 0}, - {-0.241814, 0.075417, 10.122678, 0}, - {-0.246603, 0.086191, 10.119086, 0}, - {-0.235829, 0.081403, 10.126269, 0}, - {-0.229843, 0.081403, 10.138240, 0}, - {-0.234632, 0.075417, 10.120284, 0}, - {-0.237026, 0.080206, 10.133451, 0}, - {-0.232237, 0.074220, 10.114298, 0}, - {-0.245406, 0.069432, 10.128663, 0}, - {-0.241814, 0.064643, 10.134649, 0}, - {-0.239420, 0.086191, 10.133451, 0}, - {-0.238223, 0.086191, 10.144226, 0}, - {-0.248997, 0.063446, 10.131058, 0}, - {-0.229843, 0.065841, 10.137043, 0}, - {-0.239420, 0.084994, 10.110707, 0}, - {-0.231040, 0.083797, 10.141831, 0}, - {-0.245406, 0.073023, 10.128663, 0}, - {-0.245406, 0.071826, 10.129861, 0}, - {-0.238223, 0.071826, 10.120284, 0}, - {-0.247800, 0.081403, 10.137043, 0}, - {-0.264559, 0.069432, 10.135846, 0}, - {-0.247800, 0.070629, 10.131058, 0}, - {-0.240617, 0.082600, 10.134649, 0}, - {-0.246603, 0.075417, 10.126269, 0}, - {-0.238223, 0.071826, 10.152605, 0}, - {-0.235829, 0.063446, 10.132255, 0}, - {-0.251391, 0.065841, 10.120284, 0}, - {-0.243011, 0.068235, 10.131058, 0}, - {-0.222661, 0.067038, 10.134649, 0}, - {-0.239420, 0.081403, 10.128663, 0}, - {-0.240617, 0.083797, 10.138240, 0}, - {-0.223858, 0.068235, 10.122678, 0}, - {-0.238223, 0.065841, 10.140635, 0}, - {-0.237026, 0.081403, 10.134649, 0}, - {-0.240617, 0.079009, 10.123875, 0}, - {-0.238223, 0.073023, 10.133451, 0}, - {-0.246603, 0.067038, 10.117889, 0}, - {-0.243011, 0.061052, 10.135846, 0}, - {-0.239420, 0.075417, 10.116693, 0}, - {-0.260968, 0.065841, 10.123875, 0}, - {-0.247800, 0.064643, 10.117889, 0}, - {-0.248997, 0.093374, 10.140635, 0}, - {-0.244208, 0.080206, 10.144226, 0}, - {-0.258574, 0.077812, 10.113101, 0}, - {-0.250194, 0.069432, 10.126269, 0}, - {-0.238223, 0.073023, 10.102327, 0}, - {-0.240617, 0.070629, 10.135846, 0}, - {-0.247800, 0.063446, 10.121481, 0}, - {-0.268150, 0.088585, 10.135846, 0}, - {-0.246603, 0.075417, 10.119086, 0}, - {-0.233435, 0.071826, 10.131058, 0}, - {-0.245406, 0.071826, 10.128663, 0}, - {-0.244208, 0.094571, 10.128663, 0}, - {-0.234632, 0.080206, 10.123875, 0}, - {-0.240617, 0.081403, 10.109509, 0}, - {-0.240617, 0.069432, 10.128663, 0}, - {-0.237026, 0.069432, 10.122678, 0}, - {-0.234632, 0.071826, 10.137043, 0}, - {-0.239420, 0.076614, 10.139438, 0}, - {-0.244208, 0.088585, 10.117889, 0}, - {-0.259771, 0.087388, 10.134649, 0}, - {-0.252588, 0.077812, 10.134649, 0}, - {-0.241814, 0.073023, 10.117889, 0}, - {-0.243011, 0.080206, 10.128663, 0}, - {-0.241814, 0.086191, 10.119086, 0}, - {-0.244208, 0.073023, 10.115496, 0}, - {-0.239420, 0.080206, 10.123875, 0}, - {-0.248997, 0.070629, 10.137043, 0}, - {-0.240617, 0.076614, 10.119086, 0}, - {-0.233435, 0.070629, 10.128663, 0}, - {-0.235829, 0.075417, 10.121481, 0}, - {-0.240617, 0.090980, 10.127466, 0}, - {-0.252588, 0.067038, 10.114298, 0}, - {-0.229843, 0.077812, 10.123875, 0}, - {-0.248997, 0.084994, 10.137043, 0}, - {-0.245406, 0.070629, 10.110707, 0}, - {-0.239420, 0.061052, 10.131058, 0}, - {-0.241814, 0.077812, 10.132255, 0}, - {-0.239420, 0.081403, 10.126269, 0}, - {-0.235829, 0.069432, 10.127466, 0}, - {-0.243011, 0.076614, 10.134649, 0}, - {-0.252588, 0.077812, 10.132255, 0}, - {-0.237026, 0.077812, 10.138240, 0}, - {-0.246603, 0.073023, 10.127466, 0}, - {-0.241814, 0.063446, 10.129861, 0}, - {-0.234632, 0.071826, 10.126269, 0}, - {-0.248997, 0.081403, 10.113101, 0}, - {-0.244208, 0.084994, 10.114298, 0}, - {-0.232237, 0.077812, 10.132255, 0}, - {-0.234632, 0.084994, 10.128663, 0}, - {-0.244208, 0.088585, 10.108313, 0}, - {-0.253785, 0.070629, 10.141831, 0}, - {-0.247800, 0.071826, 10.121481, 0}, - {-0.244208, 0.070629, 10.128663, 0}, - {-0.244208, 0.079009, 10.116693, 0}, - {-0.239420, 0.074220, 10.113101, 0}, - {-0.239420, 0.079009, 10.127466, 0}, - {-0.251391, 0.071826, 10.133451, 0}, - {-0.247800, 0.076614, 10.133451, 0}, - {-0.254982, 0.088585, 10.137043, 0}, - {-0.250194, 0.081403, 10.137043, 0}, - {-0.257377, 0.077812, 10.117889, 0}, - {-0.237026, 0.079009, 10.123875, 0}, - {-0.235829, 0.073023, 10.121481, 0}, - {-0.262165, 0.082600, 10.123875, 0}, - {-0.248997, 0.073023, 10.113101, 0}, - {-0.241814, 0.076614, 10.114298, 0}, - {-0.251391, 0.073023, 10.131058, 0}, - {-0.248997, 0.075417, 10.141831, 0}, - {-0.237026, 0.074220, 10.132255, 0}, - {-0.253785, 0.084994, 10.122678, 0}, - {-0.247800, 0.079009, 10.133451, 0}, - {-0.246603, 0.082600, 10.109509, 0}, - {-0.252588, 0.094571, 10.122678, 0}, - {-0.246603, 0.073023, 10.125072, 0}, - {-0.250194, 0.057461, 10.115496, 0}, - {-0.250194, 0.071826, 10.122678, 0}, - {-0.251391, 0.076614, 10.127466, 0}, - {-0.240617, 0.079009, 10.126269, 0}, - {-0.259771, 0.073023, 10.115496, 0}, - {-0.246603, 0.074220, 10.135846, 0}, - {-0.253785, 0.077812, 10.119086, 0}, - {-0.244208, 0.077812, 10.128663, 0}, - {-0.241814, 0.069432, 10.128663, 0}, - {-0.244208, 0.081403, 10.126269, 0}, - {-0.246603, 0.086191, 10.128663, 0}, - {-0.252588, 0.084994, 10.132255, 0}, - {-0.247800, 0.076614, 10.128663, 0}, - {-0.240617, 0.063446, 10.126269, 0}, - {-0.235829, 0.069432, 10.127466, 0}, - {-0.240617, 0.087388, 10.129861, 0}, - {-0.251391, 0.063446, 10.128663, 0}, - {-0.252588, 0.077812, 10.135846, 0}, - {-0.254982, 0.082600, 10.138240, 0}, - {-0.244208, 0.081403, 10.128663, 0}, - {-0.241814, 0.086191, 10.117889, 0}, - {-0.254982, 0.069432, 10.149014, 0}, - {-0.248997, 0.068235, 10.131058, 0}, - {-0.252588, 0.063446, 10.122678, 0}, - {-0.240617, 0.079009, 10.152605, 0}, - {-0.240617, 0.088585, 10.107116, 0}, - {-0.248997, 0.076614, 10.138240, 0}, - {-0.251391, 0.075417, 10.119086, 0}, - {-0.225055, 0.079009, 10.138240, 0}, - {-0.239420, 0.077812, 10.150211, 0}, - {-0.250194, 0.055067, 10.137043, 0}, - {-0.257377, 0.082600, 10.125072, 0}, - {-0.243011, 0.075417, 10.119086, 0}, - {-0.244208, 0.064643, 10.119086, 0}, - {-0.246603, 0.080206, 10.117889, 0}, - {-0.232237, 0.079009, 10.158591, 0}, - {-0.247800, 0.071826, 10.120284, 0}, - {-0.245406, 0.075417, 10.137043, 0}, - {-0.240617, 0.069432, 10.117889, 0}, - {-0.246603, 0.080206, 10.134649, 0}, - {-0.248997, 0.087388, 10.109509, 0}, - {-0.252588, 0.081403, 10.132255, 0}, - {-0.250194, 0.069432, 10.123875, 0}, - {-0.257377, 0.073023, 10.131058, 0}, - {-0.241814, 0.068235, 10.109509, 0}, - {-0.243011, 0.080206, 10.108313, 0}, - {-0.238223, 0.074220, 10.139438, 0}, - {-0.245406, 0.075417, 10.122678, 0}, - {-0.250194, 0.069432, 10.137043, 0}, - {-0.245406, 0.069432, 10.116693, 0}, - {-0.235829, 0.070629, 10.158591, 0}, - {-0.247800, 0.082600, 10.117889, 0}, - {-0.247800, 0.077812, 10.137043, 0}, - {-0.243011, 0.080206, 10.134649, 0}, - {-0.263362, 0.081403, 10.110707, 0}, - {-0.247800, 0.079009, 10.127466, 0}, - {-0.248997, 0.071826, 10.131058, 0}, - {-0.248997, 0.075417, 10.144226, 0}, - {-0.239420, 0.077812, 10.117889, 0}, - {-0.248997, 0.071826, 10.139438, 0}, - {-0.254982, 0.083797, 10.120284, 0}, - {-0.238223, 0.075417, 10.131058, 0}, - {-0.235829, 0.084994, 10.105919, 0}, - {-0.245406, 0.080206, 10.133451, 0}, - {-0.247800, 0.075417, 10.131058, 0}, - {-0.235829, 0.079009, 10.120284, 0}, - {-0.247800, 0.070629, 10.133451, 0}, - {-0.253785, 0.064643, 10.110707, 0}, - {-0.240617, 0.071826, 10.120284, 0}, - {-0.248997, 0.079009, 10.101130, 0}, - {-0.243011, 0.079009, 10.141831, 0}, - {-0.244208, 0.077812, 10.134649, 0}, - {-0.245406, 0.081403, 10.140635, 0}, - {-0.253785, 0.070629, 10.110707, 0}, - {-0.254982, 0.058658, 10.129861, 0}, - {-0.239420, 0.083797, 10.137043, 0}, - {-0.232237, 0.081403, 10.125072, 0}, - {-0.243011, 0.068235, 10.139438, 0}, - {-0.243011, 0.063446, 10.123875, 0}, - {-0.232237, 0.074220, 10.140635, 0}, - {-0.241814, 0.077812, 10.116693, 0}, - {-0.247800, 0.074220, 10.139438, 0}, - {-0.245406, 0.077812, 10.127466, 0}, - {-0.233435, 0.073023, 10.132255, 0}, - {-0.243011, 0.074220, 10.121481, 0}, - {-0.246603, 0.059855, 10.125072, 0}, - {-0.246603, 0.070629, 10.120284, 0}, - {-0.241814, 0.087388, 10.133451, 0}, - {-0.245406, 0.061052, 10.128663, 0}, - {-0.248997, 0.079009, 10.111904, 0}, - {-0.237026, 0.077812, 10.135846, 0}, - {-0.240617, 0.083797, 10.108313, 0}, - {-0.237026, 0.075417, 10.141831, 0}, - {-0.243011, 0.061052, 10.132255, 0}, - {-0.234632, 0.073023, 10.133451, 0}, - {-0.251391, 0.073023, 10.137043, 0}, - {-0.237026, 0.083797, 10.135846, 0}, - {-0.231040, 0.077812, 10.117889, 0}, - {-0.237026, 0.061052, 10.140635, 0}, - {-0.243011, 0.071826, 10.127466, 0}, - {-0.235829, 0.081403, 10.131058, 0}, - {-0.241814, 0.076614, 10.123875, 0}, - {-0.258574, 0.081403, 10.127466, 0}, - {-0.241814, 0.063446, 10.127466, 0}, - {-0.254982, 0.071826, 10.139438, 0}, - {-0.244208, 0.077812, 10.117889, 0}, - {-0.240617, 0.077812, 10.134649, 0}, - {-0.258574, 0.075417, 10.128663, 0}, - {-0.245406, 0.069432, 10.131058, 0}, - {-0.245406, 0.074220, 10.126269, 0}, - {-0.248997, 0.075417, 10.137043, 0}, - {-0.248997, 0.082600, 10.137043, 0}, - {-0.245406, 0.084994, 10.115496, 0}, - {-0.244208, 0.073023, 10.126269, 0}, - {-0.234632, 0.067038, 10.126269, 0}, - {-0.238223, 0.064643, 10.127466, 0}, - {-0.263362, 0.065841, 10.123875, 0}, - {-0.257377, 0.081403, 10.126269, 0}, - {-0.237026, 0.082600, 10.105919, 0}, - {-0.253785, 0.083797, 10.119086, 0}, - {-0.234632, 0.073023, 10.125072, 0}, - {-0.243011, 0.062249, 10.122678, 0}, - {-0.251391, 0.076614, 10.119086, 0}, - {-0.258574, 0.071826, 10.139438, 0}, - {-0.250194, 0.071826, 10.140635, 0}, - {-0.251391, 0.086191, 10.140635, 0}, - {-0.248997, 0.077812, 10.121481, 0}, - {-0.244208, 0.083797, 10.126269, 0}, - {-0.241814, 0.083797, 10.133451, 0}, - {-0.246603, 0.070629, 10.119086, 0}, - {-0.241814, 0.067038, 10.146620, 0}, - {-0.247800, 0.079009, 10.109509, 0}, - {-0.256179, 0.069432, 10.146620, 0}, - {-0.247800, 0.073023, 10.126269, 0}, - {-0.245406, 0.070629, 10.113101, 0}, - {-0.234632, 0.084994, 10.126269, 0}, - {-0.228646, 0.068235, 10.129861, 0}, - {-0.246603, 0.062249, 10.143028, 0}, - {-0.245406, 0.084994, 10.122678, 0}, - {-0.244208, 0.067038, 10.143028, 0}, - {-0.241814, 0.080206, 10.138240, 0}, - {-0.243011, 0.083797, 10.135846, 0}, - {-0.238223, 0.069432, 10.139438, 0}, - {-0.235829, 0.081403, 10.121481, 0}, - {-0.241814, 0.081403, 10.119086, 0}, - {-0.241814, 0.068235, 10.146620, 0}, - {-0.246603, 0.093374, 10.107116, 0}, - {-0.247800, 0.088585, 10.135846, 0}, - {-0.258574, 0.069432, 10.101130, 0}, - {-0.252588, 0.074220, 10.135846, 0}, - {-0.240617, 0.058658, 10.127466, 0}, - {-0.263362, 0.073023, 10.138240, 0}, - {-0.244208, 0.081403, 10.135846, 0}, - {-0.248997, 0.086191, 10.127466, 0}, - {-0.251391, 0.074220, 10.133451, 0}, - {-0.241814, 0.068235, 10.129861, 0}, - {-0.247800, 0.075417, 10.144226, 0}, - {-0.248997, 0.086191, 10.113101, 0}, - {-0.239420, 0.080206, 10.153803, 0}, - {-0.239420, 0.059855, 10.117889, 0}, - {-0.244208, 0.073023, 10.139438, 0}, - {-0.245406, 0.082600, 10.120284, 0}, - {-0.238223, 0.086191, 10.133451, 0}, - {-0.246603, 0.079009, 10.123875, 0}, - {-0.247800, 0.074220, 10.131058, 0}, - {-0.252588, 0.084994, 10.120284, 0}, - {-0.245406, 0.075417, 10.125072, 0}, - {-0.240617, 0.069432, 10.135846, 0}, - {-0.245406, 0.076614, 10.121481, 0}, - {-0.231040, 0.068235, 10.132255, 0}, - {-0.233435, 0.076614, 10.134649, 0}, - {-0.239420, 0.082600, 10.127466, 0}, - {-0.253785, 0.076614, 10.104721, 0}, - {-0.247800, 0.089783, 10.133451, 0}, - {-0.238223, 0.076614, 10.134649, 0}, - {-0.240617, 0.073023, 10.105919, 0}, - {-0.243011, 0.067038, 10.146620, 0}, - {-0.246603, 0.067038, 10.135846, 0}, - {-0.250194, 0.080206, 10.146620, 0}, - {-0.252588, 0.062249, 10.125072, 0}, - {-0.234632, 0.074220, 10.127466, 0}, - {-0.239420, 0.069432, 10.149014, 0}, - {-0.243011, 0.069432, 10.126269, 0}, - {-0.240617, 0.071826, 10.109509, 0}, - {-0.258574, 0.067038, 10.121481, 0}, - {-0.258574, 0.079009, 10.137043, 0}, - {-0.248997, 0.083797, 10.114298, 0}, - {-0.228646, 0.077812, 10.123875, 0}, - {-0.248997, 0.061052, 10.128663, 0}, - {-0.253785, 0.080206, 10.140635, 0}, - {-0.250194, 0.077812, 10.119086, 0}, - {-0.250194, 0.080206, 10.134649, 0}, - {-0.254982, 0.079009, 10.104721, 0}, - {-0.251391, 0.076614, 10.125072, 0}, - {-0.244208, 0.069432, 10.109509, 0}, - {-0.251391, 0.075417, 10.131058, 0}, - {-0.246603, 0.074220, 10.135846, 0}, - {-0.247800, 0.077812, 10.133451, 0}, - {-0.243011, 0.095768, 10.119086, 0}, - {-0.252588, 0.079009, 10.103524, 0}, - {-0.248997, 0.080206, 10.119086, 0}, - {-0.250194, 0.087388, 10.122678, 0}, - {-0.244208, 0.071826, 10.143028, 0}, - {-0.228646, 0.079009, 10.104721, 0}, - {-0.235829, 0.087388, 10.125072, 0}, - {-0.241814, 0.070629, 10.105919, 0}, - {-0.251391, 0.081403, 10.140635, 0}, - {-0.235829, 0.074220, 10.117889, 0}, - {-0.244208, 0.076614, 10.134649, 0}, - {-0.248997, 0.074220, 10.108313, 0}, - {-0.240617, 0.089783, 10.123875, 0}, - {-0.254982, 0.074220, 10.146620, 0}, - {-0.252588, 0.079009, 10.120284, 0}, - {-0.246603, 0.087388, 10.133451, 0}, - {-0.246603, 0.074220, 10.116693, 0}, - {-0.235829, 0.074220, 10.138240, 0}, - {-0.239420, 0.076614, 10.111904, 0}, - {-0.253785, 0.065841, 10.132255, 0}, - {-0.246603, 0.074220, 10.117889, 0}, - {-0.251391, 0.084994, 10.121481, 0}, - {-0.260968, 0.087388, 10.131058, 0}, - {-0.246603, 0.084994, 10.123875, 0}, - {-0.247800, 0.087388, 10.119086, 0}, - {-0.238223, 0.070629, 10.125072, 0}, - {-0.248997, 0.075417, 10.137043, 0}, - {-0.240617, 0.081403, 10.126269, 0}, - {-0.225055, 0.075417, 10.117889, 0}, - {-0.245406, 0.061052, 10.099933, 0}, - {-0.229843, 0.071826, 10.133451, 0}, - {-0.239420, 0.088585, 10.158591, 0}, - {-0.251391, 0.079009, 10.111904, 0}, - {-0.234632, 0.070629, 10.151408, 0}, - {-0.232237, 0.068235, 10.127466, 0}, - {-0.238223, 0.083797, 10.125072, 0}, - {-0.240617, 0.083797, 10.104721, 0}, - {-0.234632, 0.084994, 10.127466, 0}, - {-0.243011, 0.068235, 10.098736, 0}, - {-0.251391, 0.075417, 10.146620, 0}, - {-0.257377, 0.082600, 10.117889, 0}, - {-0.234632, 0.076614, 10.119086, 0}, - {-0.244208, 0.080206, 10.132255, 0}, - {-0.232237, 0.080206, 10.139438, 0}, - {-0.235829, 0.083797, 10.134649, 0}, - {-0.240617, 0.083797, 10.107116, 0}, - {-0.239420, 0.087388, 10.134649, 0}, - {-0.248997, 0.074220, 10.125072, 0}, - {-0.247800, 0.064643, 10.150211, 0}, - {-0.243011, 0.076614, 10.111904, 0}, - {-0.247800, 0.069432, 10.139438, 0}, - {-0.240617, 0.076614, 10.132255, 0}, - {-0.240617, 0.076614, 10.129861, 0}, - {-0.235829, 0.065841, 10.105919, 0}, - {-0.252588, 0.080206, 10.113101, 0}, - {-0.251391, 0.077812, 10.149014, 0}, - {-0.241814, 0.082600, 10.056837, 0}, - {-0.243011, 0.084994, 10.199292, 0}, - {-0.253785, 0.077812, 10.098736, 0}, - {-0.229843, 0.063446, 10.103524, 0}, - {-0.250194, 0.069432, 10.183730, 0}, - {-0.240617, 0.086191, 10.067612, 0}, - {-0.246603, 0.070629, 10.201687, 0}, - {-0.263362, 0.067038, 10.071202, 0}, - {-0.245406, 0.059855, 10.166970, 0}, - {-0.239420, 0.065841, 10.092751, 0}, - {-0.238223, 0.068235, 10.139438, 0}, - {-0.243011, 0.074220, 10.116693, 0}, - {-0.240617, 0.081403, 10.122678, 0}, - {-0.251391, 0.067038, 10.119086, 0}, - {-0.240617, 0.075417, 10.113101, 0}, - {-0.250194, 0.059855, 10.137043, 0}, - {-0.244208, 0.062249, 10.129861, 0}, - {-0.229843, 0.083797, 10.117889, 0}, - {-0.246603, 0.076614, 10.123875, 0}, - {-0.234632, 0.087388, 10.140635, 0}, - {-0.254982, 0.079009, 10.119086, 0}, - {-0.237026, 0.074220, 10.157393, 0}, - {-0.247800, 0.088585, 10.115496, 0}, - {-0.251391, 0.087388, 10.144226, 0}, - {-0.238223, 0.071826, 10.116693, 0}, - {-0.233435, 0.069432, 10.137043, 0}, - {-0.231040, 0.081403, 10.119086, 0}, - {-0.244208, 0.079009, 10.116693, 0}, - {-0.245406, 0.073023, 10.147817, 0}, - {-0.250194, 0.071826, 10.113101, 0}, - {-0.238223, 0.077812, 10.135846, 0}, - {-0.240617, 0.077812, 10.105919, 0}, - {-0.239420, 0.076614, 10.145423, 0}, - {-0.232237, 0.070629, 10.102327, 0}, - {-0.241814, 0.080206, 10.119086, 0}, - {-0.237026, 0.068235, 10.111904, 0}, - {-0.260968, 0.082600, 10.137043, 0}, - {-0.240617, 0.089783, 10.139438, 0}, - {-0.238223, 0.077812, 10.128663, 0}, - {-0.240617, 0.075417, 10.138240, 0}, - {-0.247800, 0.075417, 10.129861, 0}, - {-0.251391, 0.075417, 10.143028, 0}, - {-0.254982, 0.076614, 10.128663, 0}, - {-0.251391, 0.070629, 10.157393, 0}, - {-0.253785, 0.086191, 10.134649, 0}, - {-0.248997, 0.079009, 10.126269, 0}, - {-0.244208, 0.087388, 10.117889, 0}, - {-0.254982, 0.080206, 10.125072, 0}, - {-0.244208, 0.071826, 10.122678, 0}, - {-0.248997, 0.087388, 10.111904, 0}, - {-0.246603, 0.075417, 10.133451, 0}, - {-0.252588, 0.071826, 10.099933, 0}, - {-0.245406, 0.082600, 10.132255, 0}, - {-0.246603, 0.086191, 10.129861, 0}, - {-0.227449, 0.067038, 10.151408, 0}, - {-0.235829, 0.079009, 10.109509, 0}, - {-0.239420, 0.080206, 10.137043, 0}, - {-0.241814, 0.084994, 10.121481, 0}, - {-0.251391, 0.081403, 10.116693, 0}, - {-0.260968, 0.073023, 10.141831, 0}, - {-0.245406, 0.073023, 10.122678, 0}, - {-0.252588, 0.083797, 10.139438, 0}, - {-0.243011, 0.080206, 10.122678, 0}, - {-0.239420, 0.077812, 10.138240, 0}, - {-0.241814, 0.068235, 10.113101, 0}, - {-0.244208, 0.074220, 10.133451, 0}, - {-0.257377, 0.079009, 10.128663, 0}, - {-0.253785, 0.074220, 10.125072, 0}, - {-0.238223, 0.062249, 10.132255, 0}, - {-0.243011, 0.068235, 10.119086, 0}, - {-0.240617, 0.074220, 10.132255, 0}, - {-0.272939, 0.076614, 10.116693, 0}, - {-0.234632, 0.075417, 10.138240, 0}, - {-0.241814, 0.073023, 10.085567, 0}, - {-0.246603, 0.075417, 10.163380, 0}, - {-0.248997, 0.058658, 10.093947, 0}, - {-0.243011, 0.070629, 10.146620, 0}, - {-0.238223, 0.074220, 10.110707, 0}, - {-0.252588, 0.065841, 10.141831, 0}, - {-0.229843, 0.074220, 10.137043, 0}, - {-0.248997, 0.076614, 10.099933, 0}, - {-0.229843, 0.081403, 10.157393, 0}, - {-0.243011, 0.082600, 10.074794, 0}, - {-0.250194, 0.071826, 10.164577, 0}, - {-0.263362, 0.076614, 10.103524, 0}, - {-0.260968, 0.094571, 10.138240, 0}, - {-0.240617, 0.077812, 10.116693, 0}, - {-0.239420, 0.081403, 10.109509, 0}, - {-0.253785, 0.086191, 10.135846, 0}, - {-0.247800, 0.076614, 10.093947, 0}, - {-0.256179, 0.068235, 10.158591, 0}, - {-0.253785, 0.079009, 10.090356, 0}, - {-0.239420, 0.076614, 10.151408, 0}, - {-0.244208, 0.082600, 10.115496, 0}, - {-0.244208, 0.081403, 10.134649, 0}, - {-0.254982, 0.088585, 10.122678, 0}, - {-0.252588, 0.069432, 10.120284, 0}, - {-0.247800, 0.077812, 10.137043, 0}, - {-0.250194, 0.076614, 10.117889, 0}, - {-0.238223, 0.077812, 10.121481, 0}, - {-0.245406, 0.065841, 10.186124, 0}, - {-0.233435, 0.065841, 10.046063, 0}, - {-0.237026, 0.094571, 10.243585, 0}, - {-0.231040, 0.093374, 10.014939, 0}, - {-0.243011, 0.084994, 10.223234, 0}, - {-0.256179, 0.064643, 9.987406, 0}, - {-0.250194, 0.098162, 10.247176, 0}, - {-0.229843, 0.073023, 9.891638, 0}, - {-0.268150, 0.062249, 10.406390, 0}, - {-0.247800, 0.073023, 9.883258, 0}, - {-0.237026, 0.076614, 10.360901, 0}, - {-0.247800, 0.081403, 9.975434, 0}, - {-0.225055, 0.080206, 10.178942, 0}, - {-0.263362, 0.071826, 10.163380, 0}, - {-0.237026, 0.076614, 10.062823, 0}, - {-0.265756, 0.075417, 10.214854, 0}, - {-0.234632, 0.083797, 10.053246, 0}, - {-0.254982, 0.071826, 10.210066, 0}, - {-0.241814, 0.076614, 10.001771, 0}, - {-0.221464, 0.117316, 10.239994, 0}, - {-0.269348, 0.076614, 10.064020, 0}, - {-0.220266, 0.092177, 10.166970, 0}, - {-0.252588, 0.075417, 10.111904, 0}, - {-0.232237, 0.068235, 10.122678, 0}, - {-0.259771, 0.075417, 10.110707, 0}, - {-0.246603, 0.095768, 10.137043, 0}, - {-0.235829, 0.076614, 10.138240, 0}, - {-0.256179, 0.071826, 10.102327, 0}, - {-0.229843, 0.089783, 10.175350, 0}, - {-0.260968, 0.082600, 10.089159, 0}, - {-0.225055, 0.086191, 10.169365, 0}, - {-0.262165, 0.087388, 10.103524, 0}, - {-0.234632, 0.077812, 10.149014, 0}, - {-0.241814, 0.070629, 10.079582, 0}, - {-0.256179, 0.077812, 10.163380, 0}, - {-0.226252, 0.068235, 10.096342, 0}, - {-0.253785, 0.080206, 10.117889, 0}, - {-0.244208, 0.077812, 10.163380, 0}, - {-0.269348, 0.076614, 10.097539, 0}, - {-0.238223, 0.069432, 10.169365, 0}, - {-0.254982, 0.068235, 10.096342, 0}, - {-0.231040, 0.061052, 10.159788, 0}, - {-0.248997, 0.075417, 10.079582, 0}, - {-0.258574, 0.071826, 10.162182, 0}, - {-0.232237, 0.079009, 10.102327, 0}, - {-0.256179, 0.100556, 10.138240, 0}, - {-0.232237, 0.084994, 10.116693, 0}, - {-0.235829, 0.080206, 10.110707, 0}, - {-0.225055, 0.065841, 10.129861, 0}, - {-0.217872, 0.082600, 10.090356, 0}, - {-0.244208, 0.081403, 10.157393, 0}, + { -6.536166, 0.264559, 7.560884, 0 }, + { -6.253651, 0.108936, 8.167813, 0 }, + { -5.890929, -0.029928, 8.061272, 0 }, + { -5.833468, -0.045490, 8.250414, 0 }, + { -5.932828, 0.038307, 8.573630, 0 }, + { -5.995077, 0.104148, 8.634683, 0 }, + { -6.080071, 0.181959, 8.317451, 0 }, + { -6.069297, 0.177171, 8.151054, 0 }, + { -5.978318, 0.113724, 8.407233, 0 }, + { -5.895718, 0.033519, 8.592784, 0 }, + { -5.828680, -0.022745, 8.299495, 0 }, + { -5.768825, -0.070629, 7.958321, 0 }, + { -5.770022, -0.089783, 8.028950, 0 }, + { -5.832272, -0.074220, 8.360547, 0 }, + { -5.880156, -0.067038, 8.488636, 0 }, + { -5.987895, -0.017957, 8.342590, 0 }, + { -6.148306, 0.014365, 8.317451, 0 }, + { -6.337448, 0.102951, 8.492228, 0 }, + { -6.411668, 0.148440, 8.571237, 0 }, + { -6.341039, 0.099359, 8.250414, 0 }, + { -6.232103, 0.067038, 7.899663, 0 }, + { -6.172248, 0.100556, 8.152251, 0 }, + { -6.095634, 0.111330, 8.632288, 0 }, + { -6.033384, 0.126893, 8.614332, 0 }, + { -5.936419, 0.131681, 8.136689, 0 }, + { -5.931631, 0.205901, 7.739252, 0 }, + { -5.986697, 0.271742, 7.870933, 0 }, + { -6.040567, 0.250194, 8.099579, 0 }, + { -6.077677, 0.244208, 8.191755, 0 }, + { -6.071692, 0.277727, 8.146266, 0 }, + { -5.953178, 0.292092, 8.025358, 0 }, + { -5.847834, 0.330400, 7.942759, 0 }, + { -5.776008, 0.392649, 8.036133, 0 }, + { -5.680240, 0.417788, 7.892480, 0 }, + { -5.617990, 0.458489, 7.609965, 0 }, + { -5.550953, 0.496797, 7.418429, 0 }, + { -5.301956, 0.369904, 8.050498, 0 }, + { -5.276817, 0.290895, 9.167392, 0 }, + { -5.890929, 0.215478, 9.044091, 0 }, + { -6.495465, 0.108936, 9.111129, 0 }, + { -6.545743, -0.049081, 9.390053, 0 }, + { -5.966347, -0.161609, 9.362519, 0 }, + { -5.325898, -0.117316, 8.969871, 0 }, + { -5.263649, 0.105345, 8.404840, 0 }, + { -5.620385, 0.336385, 8.085214, 0 }, + { -5.886141, 0.472855, 8.037330, 0 }, + { -5.704182, 0.427365, 8.032541, 0 }, + { -5.359417, 0.301669, 7.813472, 0 }, + { -5.331883, 0.329203, 7.632710, 0 }, + { -5.483915, 0.433350, 7.621936, 0 }, + { -5.862199, 0.703895, 8.079228, 0 }, + { -5.808330, 0.616507, 9.142253, 0 }, + { -5.513843, 0.481234, 9.751576, 0 }, + { -5.365402, 0.470460, 9.706087, 0 }, + { -5.378571, 0.440533, 9.333789, 0 }, + { -5.637144, 0.565031, 8.905227, 0 }, + { -5.776008, 0.560243, 8.019373, 0 }, + { -5.779599, 0.676362, 7.132322, 0 }, + { -5.549756, 0.760159, 7.116760, 0 }, + { -5.303153, 0.730231, 7.817063, 0 }, + { -5.206188, 0.831985, 8.506593, 0 }, + { -5.151122, 0.725443, 8.941140, 0 }, + { -5.292379, 0.556652, 9.176969, 0 }, + { -5.622779, 0.563834, 9.362519, 0 }, + { -5.481521, 0.433350, 9.410403, 0 }, + { -5.045777, -0.074220, 9.109931, 0 }, + { -5.035003, -0.328005, 8.900438, 0 }, + { -5.307941, -0.389058, 9.000996, 0 }, + { -5.561727, -0.269348, 9.169786, 0 }, + { -5.603625, 0.213084, 9.216474, 0 }, + { -5.357023, 0.697909, 9.339774, 0 }, + { -5.081690, 0.764947, 9.429557, 0 }, + { -5.063733, 0.520739, 9.349351, 0 }, + { -5.212173, 0.463278, 9.210487, 0 }, + { -5.079296, 0.622492, 9.057259, 0 }, + { -4.827904, 0.758961, 8.755589, 0 }, + { -4.689041, 0.723048, 8.749604, 0 }, + { -4.681858, 0.731428, 9.129085, 0 }, + { -4.598061, 0.723048, 9.536098, 0 }, + { -4.378992, 0.730231, 9.668977, 0 }, + { -4.214989, 0.672770, 9.102749, 0 }, + { -4.241325, 0.641646, 8.643063, 0 }, + { -4.289209, 0.708683, 8.941140, 0 }, + { -4.304772, 0.984016, 9.394841, 0 }, + { -4.106053, 0.980425, 9.239218, 0 }, + { -3.926488, 0.615309, 8.754393, 0 }, + { -4.012679, 0.414197, 8.646653, 0 }, + { -4.191047, 0.730231, 9.080004, 0 }, + { -4.211398, 1.057039, 9.763548, 0 }, + { -4.055775, 0.944512, 9.933537, 0 }, + { -3.976766, 0.493205, 9.303862, 0 }, + { -4.319137, 0.397437, 8.835795, 0 }, + { -4.368218, 0.577002, 9.014163, 0 }, + { -4.213792, 0.700303, 9.281116, 0 }, + { -4.164711, 0.563834, 9.527719, 0 }, + { -4.132390, 0.458489, 9.472652, 0 }, + { -4.106053, 0.392649, 9.238021, 0 }, + { -4.090491, 0.524330, 9.093172, 0 }, + { -4.052184, 0.738611, 9.153027, 0 }, + { -4.015073, 0.524330, 9.047682, 0 }, + { -4.149149, 0.454898, 8.930367, 0 }, + { -4.250902, 0.724246, 9.131479, 0 }, + { -4.231749, 0.701501, 9.166195, 0 }, + { -4.356247, 0.757764, 9.208094, 0 }, + { -4.443635, 0.785298, 9.235627, 0 }, + { -4.355050, 0.804451, 9.149436, 0 }, + { -4.307166, 0.567425, 9.187743, 0 }, + { -4.550177, 0.476446, 9.249992, 0 }, + { -4.790794, 0.457292, 9.175772, 0 }, + { -4.935644, 0.417788, 9.200911, 0 }, + { -4.940432, 0.588973, 9.419980, 0 }, + { -4.709392, 0.357933, 9.624684, 0 }, + { -4.763261, 0.093374, 9.773125, 0 }, + { -5.021835, 0.171185, 9.756365, 0 }, + { -5.087675, 0.294487, 9.680948, 0 }, + { -4.916490, 0.357933, 9.610319, 0 }, + { -4.729742, 0.360327, 9.296679, 0 }, + { -4.635171, 0.266953, 8.780728, 0 }, + { -4.843467, 0.410605, 8.383291, 0 }, + { -4.898533, 0.500388, 8.177390, 0 }, + { -4.692632, 0.489614, 8.313860, 0 }, + { -4.566936, 0.451307, 8.595179, 0 }, + { -4.624397, 0.457292, 8.774743, 0 }, + { -4.781218, 0.441730, 8.777138, 0 }, + { -4.916490, 0.410605, 8.816642, 0 }, + { -5.014652, 0.482431, 8.795094, 0 }, + { -4.830298, 0.306458, 8.991419, 0 }, + { -5.154713, 0.448913, 8.974659, 0 }, + { -5.114011, 0.424971, 8.789108, 0 }, + { -4.894942, 0.238223, 8.692143, 0 }, + { -4.979936, 0.184353, 8.980644, 0 }, + { -5.267240, 0.381875, 9.326607, 0 }, + { -5.289985, 0.413000, 9.498989, 0 }, + { -5.128376, 0.320823, 9.273934, 0 }, + { -4.978739, 0.312443, 8.930367, 0 }, + { -5.054156, 0.391452, 8.816642, 0 }, + { -5.224144, 0.409408, 8.898045, 0 }, + { -5.287591, 0.392649, 8.862131, 0 }, + { -5.182246, 0.426168, 8.808262, 0 }, + { -5.039791, 0.471657, 8.797488, 0 }, + { -4.969162, 0.490811, 8.793897, 0 }, + { -5.032609, 0.511162, 8.804670, 0 }, + { -5.021835, 0.465672, 8.822627, 0 }, + { -4.967965, 0.496797, 8.820233, 0 }, + { -4.969162, 0.571017, 8.796291, 0 }, + { -4.904519, 0.560243, 8.785517, 0 }, + { -4.750093, 0.547075, 8.775940, 0 }, + { -4.687844, 0.500388, 8.554477, 0 }, + { -4.741713, 0.487220, 8.224077, 0 }, + { -4.880577, 0.569820, 8.147463, 0 }, + { -4.959586, 0.610521, 8.506593, 0 }, + { -4.977542, 0.555454, 8.856146, 0 }, + { -4.910504, 0.424971, 8.870511, 0 }, + { -4.947615, 0.316034, 8.845372, 0 }, + { -5.177458, 0.336385, 9.156618, 0 }, + { -5.345052, 0.371101, 9.455894, 0 }, + { -5.370191, 0.402226, 9.381673, 0 }, + { -5.357023, 0.372298, 9.232036, 0 }, + { -5.309139, 0.289698, 9.148238, 0 }, + { -5.236115, 0.247800, 9.085989, 0 }, + { -5.159501, 0.211887, 9.010572, 0 }, + { -5.081690, 0.173579, 8.878891, 0 }, + { -5.049368, 0.208295, 8.710100, 0 }, + { -5.026623, 0.229843, 8.664610, 0 }, + { -5.032609, 0.237026, 8.772349, 0 }, + { -4.967965, 0.233435, 8.868117, 0 }, + { -4.844664, 0.164003, 8.799882, 0 }, + { -4.906913, 0.155623, 8.500607, 0 }, + { -5.141545, 0.264559, 8.359349, 0 }, + { -5.264846, 0.310049, 8.640668, 0 }, + { -5.348643, 0.306458, 8.961491, 0 }, + { -5.366600, 0.301669, 8.968674, 0 }, + { -5.404907, 0.298078, 8.802277, 0 }, + { -5.386950, 0.259771, 8.801080, 0 }, + { -5.335475, 0.208295, 8.759181, 0 }, + { -5.300759, 0.174777, 8.723268, 0 }, + { -5.237313, 0.147243, 8.762773, 0 }, + { -5.303153, 0.185551, 8.772349, 0 }, + { -5.394133, 0.204704, 8.888468, 0 }, + { -5.383359, 0.167594, 8.965082, 0 }, + { -5.257663, 0.110133, 8.893256, 0 }, + { -5.116405, 0.039504, 8.738831, 0 }, + { -5.194217, 0.044293, 8.644259, 0 }, + { -5.336672, 0.111330, 8.772349, 0 }, + { -5.389344, 0.132878, 8.972264, 0 }, + { -5.400118, 0.136469, 8.959097, 0 }, + { -5.455185, 0.185551, 8.850161, 0 }, + { -5.519828, 0.210690, 8.804670, 0 }, + { -5.555741, 0.210690, 8.898045, 0 }, + { -5.507857, 0.222661, 8.835795, 0 }, + { -5.402513, 0.205901, 8.598769, 0 }, + { -5.368994, 0.257377, 8.353364, 0 }, + { -5.437228, 0.366313, 8.394066, 0 }, + { -5.401315, 0.345962, 8.656230, 0 }, + { -5.341460, 0.350750, 8.723268, 0 }, + { -5.272028, 0.362721, 8.585602, 0 }, + { -5.282803, 0.387860, 8.337802, 0 }, + { -5.285197, 0.420182, 8.268370, 0 }, + { -5.250481, 0.415394, 8.337802, 0 }, + { -5.185837, 0.379481, 8.416810, 0 }, + { -5.161895, 0.356736, 8.468286, 0 }, + { -5.203794, 0.344765, 8.577222, 0 }, + { -5.272028, 0.306458, 8.719677, 0 }, + { -5.315124, 0.271742, 8.868117, 0 }, + { -5.337869, 0.296881, 8.939943, 0 }, + { -5.376176, 0.299275, 8.894453, 0 }, + { -5.442017, 0.318429, 8.793897, 0 }, + { -5.452791, 0.331597, 8.714889, 0 }, + { -5.412089, 0.289698, 8.700523, 0 }, + { -5.406104, 0.251391, 8.773546, 0 }, + { -5.368994, 0.252588, 8.866920, 0 }, + { -5.323504, 0.240617, 8.942337, 0 }, + { -5.333081, 0.231040, 9.015361, 0 }, + { -5.377373, 0.231040, 8.980644, 0 }, + { -5.450397, 0.292092, 8.865723, 0 }, + { -5.483915, 0.336385, 8.750801, 0 }, + { -5.474339, 0.355539, 8.653836, 0 }, + { -5.404907, 0.342371, 8.593981, 0 }, + { -5.243298, 0.234632, 8.598769, 0 }, + { -5.164289, 0.198719, 8.635880, 0 }, + { -5.214568, 0.248997, 8.646653, 0 }, + { -5.316321, 0.288501, 8.589192, 0 }, + { -5.452791, 0.343568, 8.579616, 0 }, + { -5.509054, 0.366313, 8.670595, 0 }, + { -5.474339, 0.319626, 8.686158, 0 }, + { -5.384556, 0.275333, 8.689749, 0 }, + { -5.365402, 0.268150, 8.750801, 0 }, + { -5.437228, 0.357933, 8.748407, 0 }, + { -5.470747, 0.402226, 8.730451, 0 }, + { -5.386950, 0.362721, 8.672990, 0 }, + { -5.339066, 0.363918, 8.700523, 0 }, + { -5.295970, 0.398634, 8.793897, 0 }, + { -5.307941, 0.413000, 8.899241, 0 }, + { -5.295970, 0.392649, 8.924380, 0 }, + { -5.287591, 0.405817, 8.936352, 0 }, + { -5.269634, 0.417788, 8.896848, 0 }, + { -5.342658, 0.471657, 8.640668, 0 }, + { -5.464762, 0.557849, 8.434767, 0 }, + { -5.467156, 0.575805, 8.456315, 0 }, + { -5.443214, 0.561440, 8.497016, 0 }, + { -5.440820, 0.574608, 8.524549, 0 }, + { -5.438426, 0.598550, 8.480257, 0 }, + { -5.348643, 0.553060, 8.530535, 0 }, + { -5.238510, 0.509965, 8.638274, 0 }, + { -5.155910, 0.445321, 8.657428, 0 }, + { -5.111617, 0.395043, 8.583207, 0 }, + { -5.115209, 0.365116, 8.610741, 0 }, + { -5.176260, 0.344765, 8.625106, 0 }, + { -5.254072, 0.373495, 8.711297, 0 }, + { -5.267240, 0.379481, 8.808262, 0 }, + { -5.238510, 0.329203, 8.795094, 0 }, + { -5.266043, 0.282516, 8.694537, 0 }, + { -5.410892, 0.308852, 8.599967, 0 }, + { -5.538982, 0.337582, 8.520958, 0 }, + { -5.544967, 0.344765, 8.590390, 0 }, + { -5.458776, 0.276530, 8.730451, 0 }, + { -5.408498, 0.211887, 8.729254, 0 }, + { -5.450397, 0.195127, 8.633486, 0 }, + { -5.509054, 0.216675, 8.659822, 0 }, + { -5.483915, 0.190339, 8.823824, 0 }, + { -5.430046, 0.169988, 9.004586, 0 }, + { -5.392936, 0.186748, 9.078807, 0 }, + { -5.406104, 0.197522, 9.024938, 0 }, + { -5.462368, 0.269348, 8.857343, 0 }, + { -5.462368, 0.290895, 8.724465, 0 }, + { -5.409695, 0.284910, 8.667005, 0 }, + { -5.389344, 0.288501, 8.643063, 0 }, + { -5.354629, 0.284910, 8.577222, 0 }, + { -5.329489, 0.287304, 8.591587, 0 }, + { -5.280408, 0.282516, 8.658625, 0 }, + { -5.206188, 0.225055, 8.695735, 0 }, + { -5.169078, 0.235829, 8.741224, 0 }, + { -5.181049, 0.256179, 8.693340, 0 }, + { -5.245692, 0.262165, 8.619121, 0 }, + { -5.334278, 0.257377, 8.613134, 0 }, + { -5.388147, 0.248997, 8.681370, 0 }, + { -5.376176, 0.240617, 8.742421, 0 }, + { -5.360614, 0.199916, 8.707705, 0 }, + { -5.443214, 0.190339, 8.631091, 0 }, + { -5.489901, 0.172382, 8.549688, 0 }, + { -5.524617, 0.192733, 8.529338, 0 }, + { -5.518631, 0.189142, 8.562857, 0 }, + { -5.479127, 0.158017, 8.555674, 0 }, + { -5.499477, 0.140061, 8.599967, 0 }, + { -5.519828, 0.130484, 8.643063, 0 }, + { -5.493492, 0.090980, 8.652639, 0 }, + { -5.458776, 0.074220, 8.610741, 0 }, + { -5.483915, 0.107739, 8.635880, 0 }, + { -5.445608, 0.087388, 8.746013, 0 }, + { -5.422863, 0.052672, 8.787911, 0 }, + { -5.402513, 0.032322, 8.768758, 0 }, + { -5.373782, -0.007183, 8.802277, 0 }, + { -5.371388, -0.031125, 8.772349, 0 }, + { -5.416878, -0.052672, 8.682567, 0 }, + { -5.614399, -0.032322, 8.693340, 0 }, + { -5.582078, 0.015562, 8.038527, 0 }, + { -5.532996, -0.019154, 8.003811, 1 }, + { -5.451593, -0.088585, 8.389277, 0 }, + { -5.433637, -0.120907, 8.461103, 0 }, + { -5.456382, -0.082600, 8.352167, 0 }, + { -5.480324, -0.110133, 8.429978, 0 }, + { -5.503069, -0.126893, 8.602361, 0 }, + { -5.524617, -0.173579, 8.689749, 0 }, + { -5.519828, -0.161609, 8.710100, 0 }, + { -5.448002, -0.165200, 8.803473, 0 }, + { -5.337869, -0.209493, 8.835795, 0 }, + { -5.226539, -0.217872, 8.792700, 0 }, + { -5.204991, -0.144849, 8.779531, 0 }, + { -5.155910, -0.038307, 8.741224, 0 }, + { -5.038594, 0.025139, 8.692143, 0 }, + { -4.826707, 0.129287, 8.741224, 0 }, + { -4.588484, 0.221464, 9.275131, 0 }, + { -4.413708, 0.146046, 9.674962, 0 }, + { -4.571725, 0.420182, 9.512156, 0 }, + { -4.693829, 0.806845, 9.115917, 0 }, + { -4.513067, 1.146822, 8.775940, 0 }, + { -3.907335, 0.906205, 8.744816, 0 }, + { -3.440465, 0.709880, 8.558068, 0 }, + { -3.076547, 0.870292, 8.097184, 0 }, + { -2.567780, 0.849941, 7.629118, 0 }, + { -0.930147, -0.430956, 9.020149, 0 }, + { 0.472855, -1.265335, 13.321329, 0 }, + { -0.475249, -0.396240, 11.602294, 0 }, + { -2.302023, 0.135272, 10.661373, 0 }, + { -2.796426, -0.083797, 11.195279, 0 }, + { -2.404974, -0.368707, 10.447092, 0 }, + { -1.205480, -0.381875, 9.781505, 0 }, + { -0.250194, 0.064643, 9.928748, 0 }, + { -0.004788, 0.374692, 9.695313, 0 }, + { 0.256179, -0.470460, 8.904030, 0 }, + { 0.268150, -0.964863, 8.276750, 0 }, + { 0.314837, -0.756567, 8.742421, 0 }, + { 0.496797, -0.694318, 9.910791, 0 }, + { 0.828393, -0.748188, 10.779886, 0 }, + { 0.738611, -0.306458, 11.670528, 0 }, + { 0.616507, -0.045490, 11.973394, 0 }, + { 0.690727, -0.164003, 11.194082, 0 }, + { 0.632069, -0.343568, 10.463851, 0 }, + { 0.422576, 0.026336, 10.319002, 0 }, + { 0.520739, 0.468066, 10.074794, 0 }, + { 0.845153, 0.277727, 9.525325, 0 }, + { 1.058236, -0.199916, 9.085989, 0 }, + { 1.198297, -0.499191, 9.630670, 0 }, + { 1.109712, -0.314837, 10.516523, 0 }, + { 1.086967, 0.258574, 10.805025, 0 }, + { 1.313219, 0.523133, 10.685315, 0 }, + { 1.334767, 0.202310, 10.316608, 0 }, + { 1.298854, -0.199916, 9.993391, 0 }, + { 1.471236, -0.282516, 10.037683, 0 }, + { 1.620873, 0.053870, 9.892835, 0 }, + { 1.553836, 0.363918, 9.296679, 0 }, + { 1.425746, 0.114922, 8.937549, 0 }, + { 1.545456, -0.174777, 9.566027, 0 }, + { 1.985989, 0.075417, 10.395617, 0 }, + { 2.272096, 0.312443, 10.295060, 0 }, + { 2.181116, 0.196324, 9.525325, 0 }, + { 1.965638, 0.197522, 9.500186, 0 }, + { 2.054224, -0.038307, 9.800658, 0 }, + { 1.924937, 0.196324, 9.728832, 0 }, + { 2.146400, 0.402226, 9.747986, 0 }, + { 2.321177, 0.282516, 9.983814, 0 }, + { 2.279279, 0.118513, 7.716507, 0 }, + { 2.229000, -0.113724, 9.612713, 0 }, + { 2.345119, 0.343568, 11.982971, 0 }, + { 2.196679, 0.189142, 9.917974, 0 }, + { 2.218226, -0.119710, 9.633064, 0 }, + { 2.020705, 0.239420, 9.703692, 0 }, + { 1.997960, 0.318429, 9.247598, 0 }, + { 1.975215, 0.132878, 8.886073, 0 }, + { 1.841140, 0.253785, 8.754393, 0 }, + { 1.507149, 0.458489, 8.775940, 0 }, + { 1.295262, 0.497994, 9.170983, 0 }, + { 1.291671, 0.102951, 9.712072, 0 }, + { 1.267729, 0.034716, 9.686934, 0 }, + { 1.474827, -0.047884, 9.932339, 0 }, + { 1.121683, -0.041899, 10.319002, 0 }, + { 0.475249, 0.349553, 11.362873, 0 }, + { 0.029928, 0.153229, 13.443434, 0 }, + { 1.442506, -0.270545, 12.089513, 0 }, + { 0.821211, 0.186748, 10.431530, 0 }, + { 0.302866, 0.573411, 9.538493, 0 }, + { 0.973242, -0.051475, 8.095987, 0 }, + { 1.428140, -1.648407, 7.060496, 0 }, + { 1.292868, -2.129641, 8.062469, 0 }, + { 0.068235, 0.414197, 8.157040, 0 }, + { -1.018732, 1.418563, 9.985011, 0 }, + { -1.479616, 1.746569, 18.444918, 0 }, + { 0.362721, 0.951695, 11.461036, 0 }, + { 0.283713, -0.120907, 8.001416, 0 }, + { -0.320823, 0.131681, 11.031277, 0 }, + { -0.141258, 0.141258, 9.783898, 0 }, + { -0.098162, 0.118513, 10.248373, 0 }, + { -0.278924, 0.311246, 9.223656, 0 }, + { -0.034716, 0.162806, 9.734818, 0 }, + { -0.282516, -0.306458, 12.023673, 0 }, + { -0.219069, 0.069432, 9.692919, 0 }, + { -0.235829, 0.088585, 10.111904, 0 }, + { -0.243011, 0.071826, 10.181335, 0 }, + { -0.237026, 0.084994, 10.177745, 0 }, + { -0.246603, 0.079009, 10.078385, 0 }, + { -0.222661, 0.083797, 10.192110, 0 }, + { -0.252588, 0.067038, 10.103524, 0 }, + { -0.226252, 0.084994, 10.156197, 0 }, + { -0.265756, 0.071826, 10.116693, 0 }, + { -0.235829, 0.083797, 10.168168, 0 }, + { -0.251391, 0.083797, 10.108313, 0 }, + { -0.248997, 0.083797, 10.155000, 0 }, + { -0.228646, 0.083797, 10.122678, 0 }, + { -0.266953, 0.067038, 10.104721, 0 }, + { -0.233435, 0.074220, 10.141831, 0 }, + { -0.259771, 0.080206, 10.107116, 0 }, + { -0.245406, 0.080206, 10.166970, 0 }, + { -0.256179, 0.075417, 10.099933, 0 }, + { -0.243011, 0.070629, 10.153803, 0 }, + { -0.256179, 0.073023, 10.090356, 0 }, + { -0.258574, 0.077812, 10.200489, 0 }, + { -0.253785, 0.063446, 10.095144, 0 }, + { -0.245406, 0.073023, 10.135846, 0 }, + { -0.251391, 0.082600, 10.134649, 0 }, + { -0.251391, 0.068235, 10.116693, 0 }, + { -0.247800, 0.079009, 10.164577, 0 }, + { -0.244208, 0.075417, 10.115496, 0 }, + { -0.238223, 0.073023, 10.137043, 0 }, + { -0.251391, 0.077812, 10.078385, 0 }, + { -0.235829, 0.077812, 10.131058, 0 }, + { -0.250194, 0.087388, 10.123875, 0 }, + { -0.250194, 0.079009, 10.147817, 0 }, + { -0.254982, 0.064643, 10.110707, 0 }, + { -0.256179, 0.083797, 10.151408, 0 }, + { -0.237026, 0.079009, 10.103524, 0 }, + { -0.256179, 0.079009, 10.137043, 0 }, + { -0.246603, 0.081403, 10.139438, 0 }, + { -0.243011, 0.077812, 10.115496, 0 }, + { -0.254982, 0.063446, 10.159788, 0 }, + { -0.248997, 0.089783, 10.092751, 0 }, + { -0.251391, 0.074220, 10.164577, 0 }, + { -0.246603, 0.079009, 10.117889, 0 }, + { -0.247800, 0.086191, 10.145423, 0 }, + { -0.247800, 0.088585, 10.123875, 0 }, + { -0.254982, 0.075417, 10.122678, 0 }, + { -0.250194, 0.080206, 10.147817, 0 }, + { -0.251391, 0.068235, 10.113101, 0 }, + { -0.246603, 0.074220, 10.147817, 0 }, + { -0.243011, 0.068235, 10.104721, 0 }, + { -0.245406, 0.063446, 10.143028, 0 }, + { -0.250194, 0.075417, 10.121481, 0 }, + { -0.252588, 0.079009, 10.141831, 0 }, + { -0.245406, 0.071826, 10.129861, 0 }, + { -0.240617, 0.079009, 10.135846, 0 }, + { -0.240617, 0.069432, 10.141831, 0 }, + { -0.245406, 0.079009, 10.121481, 0 }, + { -0.252588, 0.069432, 10.160985, 0 }, + { -0.258574, 0.067038, 10.121481, 0 }, + { -0.260968, 0.067038, 10.140635, 0 }, + { -0.250194, 0.068235, 10.127466, 0 }, + { -0.239420, 0.074220, 10.129861, 0 }, + { -0.250194, 0.065841, 10.131058, 0 }, + { -0.245406, 0.074220, 10.128663, 0 }, + { -0.247800, 0.088585, 10.133451, 0 }, + { -0.245406, 0.082600, 10.105919, 0 }, + { -0.251391, 0.067038, 10.133451, 0 }, + { -0.241814, 0.075417, 10.121481, 0 }, + { -0.247800, 0.075417, 10.140635, 0 }, + { -0.254982, 0.080206, 10.132255, 0 }, + { -0.237026, 0.074220, 10.137043, 0 }, + { -0.251391, 0.082600, 10.135846, 0 }, + { -0.247800, 0.095768, 10.135846, 0 }, + { -0.244208, 0.075417, 10.115496, 0 }, + { -0.245406, 0.074220, 10.138240, 0 }, + { -0.239420, 0.080206, 10.137043, 0 }, + { -0.257377, 0.073023, 10.128663, 0 }, + { -0.253785, 0.081403, 10.134649, 0 }, + { -0.256179, 0.061052, 10.137043, 0 }, + { -0.243011, 0.082600, 10.129861, 0 }, + { -0.246603, 0.080206, 10.116693, 0 }, + { -0.240617, 0.080206, 10.120284, 0 }, + { -0.251391, 0.069432, 10.109509, 0 }, + { -0.247800, 0.073023, 10.144226, 0 }, + { -0.248997, 0.077812, 10.110707, 0 }, + { -0.256179, 0.065841, 10.134649, 0 }, + { -0.246603, 0.071826, 10.111904, 0 }, + { -0.265756, 0.075417, 10.123875, 0 }, + { -0.245406, 0.084994, 10.131058, 0 }, + { -0.251391, 0.073023, 10.114298, 0 }, + { -0.247800, 0.090980, 10.145423, 0 }, + { -0.263362, 0.088585, 10.121481, 0 }, + { -0.258574, 0.074220, 10.149014, 0 }, + { -0.252588, 0.069432, 10.114298, 0 }, + { -0.259771, 0.074220, 10.121481, 0 }, + { -0.251391, 0.068235, 10.137043, 0 }, + { -0.245406, 0.074220, 10.131058, 0 }, + { -0.244208, 0.074220, 10.121481, 0 }, + { -0.253785, 0.070629, 10.108313, 0 }, + { -0.256179, 0.077812, 10.144226, 0 }, + { -0.241814, 0.058658, 10.104721, 0 }, + { -0.244208, 0.069432, 10.133451, 0 }, + { -0.241814, 0.081403, 10.113101, 0 }, + { -0.253785, 0.080206, 10.110707, 0 }, + { -0.257377, 0.086191, 10.121481, 0 }, + { -0.252588, 0.080206, 10.129861, 0 }, + { -0.246603, 0.081403, 10.121481, 0 }, + { -0.245406, 0.086191, 10.123875, 0 }, + { -0.251391, 0.076614, 10.153803, 0 }, + { -0.246603, 0.068235, 10.120284, 0 }, + { -0.234632, 0.090980, 10.134649, 0 }, + { -0.253785, 0.080206, 10.098736, 0 }, + { -0.256179, 0.093374, 10.135846, 0 }, + { -0.259771, 0.076614, 10.126269, 0 }, + { -0.240617, 0.074220, 10.147817, 0 }, + { -0.256179, 0.068235, 10.119086, 0 }, + { -0.254982, 0.073023, 10.120284, 0 }, + { -0.250194, 0.082600, 10.143028, 0 }, + { -0.250194, 0.076614, 10.115496, 0 }, + { -0.247800, 0.068235, 10.145423, 0 }, + { -0.241814, 0.077812, 10.122678, 0 }, + { -0.245406, 0.079009, 10.138240, 0 }, + { -0.266953, 0.083797, 10.111904, 0 }, + { -0.254982, 0.074220, 10.116693, 0 }, + { -0.248997, 0.090980, 10.138240, 0 }, + { -0.262165, 0.083797, 10.123875, 0 }, + { -0.245406, 0.081403, 10.128663, 0 }, + { -0.252588, 0.065841, 10.103524, 0 }, + { -0.248997, 0.089783, 10.128663, 0 }, + { -0.250194, 0.070629, 10.108313, 0 }, + { -0.248997, 0.068235, 10.147817, 0 }, + { -0.251391, 0.083797, 10.125072, 0 }, + { -0.258574, 0.070629, 10.125072, 0 }, + { -0.259771, 0.058658, 10.125072, 0 }, + { -0.246603, 0.070629, 10.120284, 0 }, + { -0.243011, 0.064643, 10.128663, 0 }, + { -0.263362, 0.073023, 10.134649, 0 }, + { -0.246603, 0.076614, 10.140635, 0 }, + { -0.246603, 0.084994, 10.122678, 0 }, + { -0.241814, 0.068235, 10.131058, 0 }, + { -0.243011, 0.073023, 10.115496, 0 }, + { -0.252588, 0.074220, 10.157393, 0 }, + { -0.264559, 0.076614, 10.105919, 0 }, + { -0.254982, 0.069432, 10.135846, 0 }, + { -0.234632, 0.075417, 10.126269, 0 }, + { -0.239420, 0.080206, 10.120284, 0 }, + { -0.251391, 0.087388, 10.146620, 0 }, + { -0.238223, 0.069432, 10.126269, 0 }, + { -0.247800, 0.065841, 10.127466, 0 }, + { -0.253785, 0.069432, 10.113101, 0 }, + { -0.252588, 0.079009, 10.144226, 0 }, + { -0.254982, 0.074220, 10.123875, 0 }, + { -0.247800, 0.061052, 10.134649, 0 }, + { -0.248997, 0.067038, 10.119086, 0 }, + { -0.247800, 0.077812, 10.123875, 0 }, + { -0.253785, 0.079009, 10.134649, 0 }, + { -0.246603, 0.084994, 10.111904, 0 }, + { -0.253785, 0.087388, 10.139438, 0 }, + { -0.256179, 0.082600, 10.097539, 0 }, + { -0.240617, 0.087388, 10.149014, 0 }, + { -0.252588, 0.059855, 10.108313, 0 }, + { -0.235829, 0.082600, 10.129861, 0 }, + { -0.247800, 0.094571, 10.127466, 0 }, + { -0.248997, 0.082600, 10.122678, 0 }, + { -0.240617, 0.084994, 10.131058, 0 }, + { -0.253785, 0.077812, 10.116693, 0 }, + { -0.258574, 0.086191, 10.133451, 0 }, + { -0.247800, 0.071826, 10.128663, 0 }, + { -0.247800, 0.074220, 10.132255, 0 }, + { -0.254982, 0.071826, 10.120284, 0 }, + { -0.253785, 0.080206, 10.140635, 0 }, + { -0.269348, 0.076614, 10.132255, 0 }, + { -0.253785, 0.082600, 10.131058, 0 }, + { -0.244208, 0.089783, 10.140635, 0 }, + { -0.247800, 0.073023, 10.110707, 0 }, + { -0.252588, 0.070629, 10.129861, 0 }, + { -0.257377, 0.071826, 10.125072, 0 }, + { -0.252588, 0.074220, 10.117889, 0 }, + { -0.254982, 0.068235, 10.128663, 0 }, + { -0.259771, 0.058658, 10.134649, 0 }, + { -0.252588, 0.070629, 10.119086, 0 }, + { -0.243011, 0.089783, 10.146620, 0 }, + { -0.240617, 0.075417, 10.128663, 0 }, + { -0.254982, 0.063446, 10.145423, 0 }, + { -0.272939, 0.081403, 10.127466, 0 }, + { -0.241814, 0.075417, 10.127466, 0 }, + { -0.233435, 0.073023, 10.125072, 0 }, + { -0.248997, 0.080206, 10.132255, 0 }, + { -0.241814, 0.074220, 10.134649, 0 }, + { -0.266953, 0.068235, 10.133451, 0 }, + { -0.245406, 0.069432, 10.127466, 0 }, + { -0.247800, 0.087388, 10.131058, 0 }, + { -0.247800, 0.082600, 10.129861, 0 }, + { -0.257377, 0.070629, 10.137043, 0 }, + { -0.247800, 0.074220, 10.131058, 0 }, + { -0.252588, 0.086191, 10.114298, 0 }, + { -0.247800, 0.089783, 10.135846, 0 }, + { -0.256179, 0.073023, 10.131058, 0 }, + { -0.257377, 0.080206, 10.133451, 0 }, + { -0.245406, 0.069432, 10.125072, 0 }, + { -0.250194, 0.061052, 10.126269, 0 }, + { -0.252588, 0.079009, 10.135846, 0 }, + { -0.250194, 0.073023, 10.128663, 0 }, + { -0.237026, 0.075417, 10.155000, 0 }, + { -0.247800, 0.079009, 10.140635, 0 }, + { -0.251391, 0.069432, 10.151408, 0 }, + { -0.244208, 0.075417, 10.127466, 0 }, + { -0.252588, 0.071826, 10.111904, 0 }, + { -0.257377, 0.077812, 10.138240, 0 }, + { -0.241814, 0.069432, 10.122678, 0 }, + { -0.253785, 0.071826, 10.139438, 0 }, + { -0.256179, 0.077812, 10.119086, 0 }, + { -0.262165, 0.077812, 10.133451, 0 }, + { -0.252588, 0.061052, 10.132255, 0 }, + { -0.250194, 0.077812, 10.119086, 0 }, + { -0.253785, 0.081403, 10.132255, 0 }, + { -0.253785, 0.079009, 10.117889, 0 }, + { -0.252588, 0.064643, 10.129861, 0 }, + { -0.247800, 0.073023, 10.117889, 0 }, + { -0.253785, 0.065841, 10.126269, 0 }, + { -0.256179, 0.069432, 10.128663, 0 }, + { -0.250194, 0.080206, 10.128663, 0 }, + { -0.257377, 0.084994, 10.107116, 0 }, + { -0.254982, 0.080206, 10.137043, 0 }, + { -0.259771, 0.076614, 10.137043, 0 }, + { -0.265756, 0.063446, 10.132255, 0 }, + { -0.251391, 0.056264, 10.120284, 0 }, + { -0.247800, 0.067038, 10.132255, 0 }, + { -0.247800, 0.074220, 10.126269, 0 }, + { -0.247800, 0.070629, 10.127466, 0 }, + { -0.239420, 0.081403, 10.143028, 0 }, + { -0.254982, 0.081403, 10.129861, 0 }, + { -0.259771, 0.088585, 10.138240, 0 }, + { -0.246603, 0.080206, 10.108313, 0 }, + { -0.252588, 0.086191, 10.125072, 0 }, + { -0.247800, 0.071826, 10.132255, 0 }, + { -0.240617, 0.073023, 10.126269, 0 }, + { -0.256179, 0.075417, 10.134649, 0 }, + { -0.254982, 0.081403, 10.117889, 0 }, + { -0.250194, 0.070629, 10.133451, 0 }, + { -0.254982, 0.064643, 10.137043, 0 }, + { -0.254982, 0.075417, 10.147817, 0 }, + { -0.240617, 0.077812, 10.122678, 0 }, + { -0.239420, 0.083797, 10.153803, 0 }, + { -0.258574, 0.070629, 10.131058, 0 }, + { -0.256179, 0.077812, 10.133451, 0 }, + { -0.265756, 0.080206, 10.143028, 0 }, + { -0.256179, 0.070629, 10.138240, 0 }, + { -0.250194, 0.067038, 10.129861, 0 }, + { -0.245406, 0.071826, 10.126269, 0 }, + { -0.259771, 0.073023, 10.135846, 0 }, + { -0.251391, 0.061052, 10.121481, 0 }, + { -0.254982, 0.075417, 10.150211, 0 }, + { -0.247800, 0.081403, 10.137043, 0 }, + { -0.248997, 0.084994, 10.126269, 0 }, + { -0.257377, 0.082600, 10.135846, 0 }, + { -0.257377, 0.073023, 10.110707, 0 }, + { -0.251391, 0.077812, 10.138240, 0 }, + { -0.238223, 0.064643, 10.116693, 0 }, + { -0.239420, 0.075417, 10.138240, 0 }, + { -0.260968, 0.071826, 10.132255, 0 }, + { -0.253785, 0.094571, 10.132255, 0 }, + { -0.248997, 0.081403, 10.127466, 0 }, + { -0.245406, 0.073023, 10.150211, 0 }, + { -0.252588, 0.080206, 10.120284, 0 }, + { -0.247800, 0.075417, 10.122678, 0 }, + { -0.246603, 0.069432, 10.122678, 0 }, + { -0.246603, 0.090980, 10.119086, 0 }, + { -0.253785, 0.076614, 10.139438, 0 }, + { -0.253785, 0.063446, 10.127466, 0 }, + { -0.248997, 0.094571, 10.146620, 0 }, + { -0.257377, 0.079009, 10.115496, 0 }, + { -0.247800, 0.068235, 10.122678, 0 }, + { -0.244208, 0.080206, 10.117889, 0 }, + { -0.257377, 0.099359, 10.134649, 0 }, + { -0.257377, 0.089783, 10.111904, 0 }, + { -0.247800, 0.073023, 10.133451, 0 }, + { -0.238223, 0.070629, 10.120284, 0 }, + { -0.256179, 0.073023, 10.125072, 0 }, + { -0.257377, 0.063446, 10.144226, 0 }, + { -0.259771, 0.081403, 10.122678, 0 }, + { -0.251391, 0.079009, 10.123875, 0 }, + { -0.256179, 0.068235, 10.122678, 0 }, + { -0.252588, 0.065841, 10.128663, 0 }, + { -0.239420, 0.074220, 10.122678, 0 }, + { -0.247800, 0.073023, 10.138240, 0 }, + { -0.245406, 0.076614, 10.111904, 0 }, + { -0.252588, 0.076614, 10.125072, 0 }, + { -0.259771, 0.059855, 10.122678, 0 }, + { -0.262165, 0.067038, 10.137043, 0 }, + { -0.248997, 0.073023, 10.127466, 0 }, + { -0.248997, 0.076614, 10.132255, 0 }, + { -0.244208, 0.080206, 10.115496, 0 }, + { -0.245406, 0.055067, 10.140635, 0 }, + { -0.251391, 0.059855, 10.135846, 0 }, + { -0.246603, 0.073023, 10.111904, 0 }, + { -0.248997, 0.081403, 10.123875, 0 }, + { -0.248997, 0.070629, 10.126269, 0 }, + { -0.251391, 0.075417, 10.129861, 0 }, + { -0.239420, 0.071826, 10.139438, 0 }, + { -0.244208, 0.076614, 10.109509, 0 }, + { -0.263362, 0.082600, 10.135846, 0 }, + { -0.252588, 0.071826, 10.127466, 0 }, + { -0.241814, 0.067038, 10.122678, 0 }, + { -0.252588, 0.079009, 10.125072, 0 }, + { -0.260968, 0.084994, 10.125072, 0 }, + { -0.245406, 0.080206, 10.119086, 0 }, + { -0.241814, 0.071826, 10.126269, 0 }, + { -0.251391, 0.075417, 10.135846, 0 }, + { -0.254982, 0.068235, 10.127466, 0 }, + { -0.260968, 0.074220, 10.127466, 0 }, + { -0.247800, 0.076614, 10.122678, 0 }, + { -0.258574, 0.067038, 10.114298, 0 }, + { -0.258574, 0.073023, 10.122678, 0 }, + { -0.257377, 0.058658, 10.145423, 0 }, + { -0.254982, 0.063446, 10.127466, 0 }, + { -0.245406, 0.068235, 10.135846, 0 }, + { -0.247800, 0.071826, 10.135846, 0 }, + { -0.256179, 0.068235, 10.138240, 0 }, + { -0.257377, 0.074220, 10.113101, 0 }, + { -0.244208, 0.081403, 10.139438, 0 }, + { -0.241814, 0.061052, 10.131058, 0 }, + { -0.257377, 0.073023, 10.116693, 0 }, + { -0.256179, 0.083797, 10.129861, 0 }, + { -0.240617, 0.084994, 10.121481, 0 }, + { -0.239420, 0.073023, 10.135846, 0 }, + { -0.252588, 0.074220, 10.132255, 0 }, + { -0.252588, 0.077812, 10.127466, 0 }, + { -0.251391, 0.082600, 10.140635, 0 }, + { -0.256179, 0.077812, 10.129861, 0 }, + { -0.254982, 0.064643, 10.117889, 0 }, + { -0.263362, 0.065841, 10.122678, 0 }, + { -0.252588, 0.079009, 10.135846, 0 }, + { -0.248997, 0.075417, 10.127466, 0 }, + { -0.238223, 0.079009, 10.133451, 0 }, + { -0.244208, 0.080206, 10.133451, 0 }, + { -0.254982, 0.076614, 10.150211, 0 }, + { -0.264559, 0.068235, 10.141831, 0 }, + { -0.246603, 0.077812, 10.132255, 0 }, + { -0.262165, 0.070629, 10.134649, 0 }, + { -0.258574, 0.062249, 10.129861, 0 }, + { -0.259771, 0.071826, 10.133451, 0 }, + { -0.243011, 0.086191, 10.125072, 0 }, + { -0.250194, 0.074220, 10.125072, 0 }, + { -0.260968, 0.059855, 10.101130, 0 }, + { -0.252588, 0.063446, 10.129861, 0 }, + { -0.251391, 0.079009, 10.128663, 0 }, + { -0.252588, 0.069432, 10.138240, 0 }, + { -0.246603, 0.074220, 10.141831, 0 }, + { -0.250194, 0.080206, 10.117889, 0 }, + { -0.256179, 0.068235, 10.131058, 0 }, + { -0.258574, 0.058658, 10.110707, 0 }, + { -0.244208, 0.073023, 10.137043, 0 }, + { -0.260968, 0.076614, 10.117889, 0 }, + { -0.245406, 0.081403, 10.119086, 0 }, + { -0.243011, 0.077812, 10.135846, 0 }, + { -0.256179, 0.069432, 10.131058, 0 }, + { -0.245406, 0.079009, 10.121481, 0 }, + { -0.250194, 0.086191, 10.129861, 0 }, + { -0.245406, 0.089783, 10.132255, 0 }, + { -0.241814, 0.077812, 10.147817, 0 }, + { -0.244208, 0.076614, 10.133451, 0 }, + { -0.263362, 0.075417, 10.096342, 0 }, + { -0.250194, 0.058658, 10.134649, 0 }, + { -0.231040, 0.068235, 10.117889, 0 }, + { -0.250194, 0.069432, 10.144226, 0 }, + { -0.263362, 0.073023, 10.117889, 0 }, + { -0.241814, 0.071826, 10.133451, 0 }, + { -0.240617, 0.073023, 10.131058, 0 }, + { -0.237026, 0.082600, 10.116693, 0 }, + { -0.239420, 0.080206, 10.138240, 0 }, + { -0.259771, 0.079009, 10.139438, 0 }, + { -0.266953, 0.071826, 10.140635, 0 }, + { -0.251391, 0.071826, 10.107116, 0 }, + { -0.258574, 0.073023, 10.132255, 0 }, + { -0.243011, 0.090980, 10.132255, 0 }, + { -0.234632, 0.064643, 10.129861, 0 }, + { -0.250194, 0.059855, 10.134649, 0 }, + { -0.238223, 0.081403, 10.140635, 0 }, + { -0.243011, 0.077812, 10.131058, 0 }, + { -0.247800, 0.069432, 10.143028, 0 }, + { -0.247800, 0.067038, 10.135846, 0 }, + { -0.243011, 0.065841, 10.128663, 0 }, + { -0.253785, 0.077812, 10.129861, 0 }, + { -0.244208, 0.080206, 10.107116, 0 }, + { -0.244208, 0.074220, 10.143028, 0 }, + { -0.253785, 0.080206, 10.119086, 0 }, + { -0.247800, 0.070629, 10.139438, 0 }, + { -0.243011, 0.082600, 10.125072, 0 }, + { -0.257377, 0.075417, 10.150211, 0 }, + { -0.263362, 0.077812, 10.152605, 0 }, + { -0.263362, 0.081403, 10.135846, 0 }, + { -0.250194, 0.075417, 10.139438, 0 }, + { -0.248997, 0.077812, 10.131058, 0 }, + { -0.247800, 0.074220, 10.127466, 0 }, + { -0.243011, 0.069432, 10.122678, 0 }, + { -0.251391, 0.079009, 10.133451, 0 }, + { -0.252588, 0.061052, 10.126269, 0 }, + { -0.265756, 0.081403, 10.128663, 0 }, + { -0.244208, 0.064643, 10.122678, 0 }, + { -0.256179, 0.065841, 10.123875, 0 }, + { -0.263362, 0.076614, 10.125072, 0 }, + { -0.252588, 0.079009, 10.126269, 0 }, + { -0.252588, 0.070629, 10.115496, 0 }, + { -0.254982, 0.073023, 10.115496, 0 }, + { -0.234632, 0.070629, 10.123875, 0 }, + { -0.237026, 0.076614, 10.121481, 0 }, + { -0.256179, 0.070629, 10.134649, 0 }, + { -0.268150, 0.073023, 10.129861, 0 }, + { -0.244208, 0.075417, 10.121481, 0 }, + { -0.253785, 0.080206, 10.126269, 0 }, + { -0.259771, 0.075417, 10.120284, 0 }, + { -0.263362, 0.070629, 10.115496, 0 }, + { -0.247800, 0.075417, 10.126269, 0 }, + { -0.243011, 0.068235, 10.152605, 0 }, + { -0.247800, 0.069432, 10.125072, 0 }, + { -0.257377, 0.083797, 10.129861, 0 }, + { -0.247800, 0.075417, 10.129861, 0 }, + { -0.247800, 0.076614, 10.115496, 0 }, + { -0.247800, 0.071826, 10.131058, 0 }, + { -0.258574, 0.083797, 10.125072, 0 }, + { -0.250194, 0.095768, 10.132255, 0 }, + { -0.266953, 0.076614, 10.123875, 0 }, + { -0.256179, 0.079009, 10.152605, 0 }, + { -0.251391, 0.073023, 10.126269, 0 }, + { -0.248997, 0.068235, 10.128663, 0 }, + { -0.243011, 0.073023, 10.134649, 0 }, + { -0.258574, 0.071826, 10.137043, 0 }, + { -0.253785, 0.061052, 10.119086, 0 }, + { -0.250194, 0.073023, 10.138240, 0 }, + { -0.241814, 0.070629, 10.113101, 0 }, + { -0.250194, 0.079009, 10.141831, 0 }, + { -0.237026, 0.070629, 10.128663, 0 }, + { -0.240617, 0.083797, 10.120284, 0 }, + { -0.259771, 0.073023, 10.144226, 0 }, + { -0.232237, 0.068235, 10.122678, 0 }, + { -0.246603, 0.065841, 10.133451, 0 }, + { -0.258574, 0.079009, 10.109509, 0 }, + { -0.245406, 0.075417, 10.131058, 0 }, + { -0.240617, 0.076614, 10.127466, 0 }, + { -0.246603, 0.074220, 10.115496, 0 }, + { -0.247800, 0.068235, 10.129861, 0 }, + { -0.252588, 0.073023, 10.145423, 0 }, + { -0.252588, 0.069432, 10.132255, 0 }, + { -0.248997, 0.062249, 10.110707, 0 }, + { -0.257377, 0.073023, 10.146620, 0 }, + { -0.247800, 0.077812, 10.133451, 0 }, + { -0.233435, 0.075417, 10.123875, 0 }, + { -0.259771, 0.080206, 10.117889, 0 }, + { -0.252588, 0.071826, 10.131058, 0 }, + { -0.257377, 0.077812, 10.128663, 0 }, + { -0.244208, 0.065841, 10.138240, 0 }, + { -0.245406, 0.076614, 10.132255, 0 }, + { -0.259771, 0.074220, 10.134649, 0 }, + { -0.251391, 0.073023, 10.133451, 0 }, + { -0.238223, 0.063446, 10.127466, 0 }, + { -0.246603, 0.052672, 10.128663, 0 }, + { -0.260968, 0.069432, 10.125072, 0 }, + { -0.251391, 0.087388, 10.104721, 0 }, + { -0.243011, 0.074220, 10.120284, 0 }, + { -0.259771, 0.069432, 10.149014, 0 }, + { -0.252588, 0.083797, 10.139438, 0 }, + { -0.252588, 0.070629, 10.134649, 0 }, + { -0.244208, 0.071826, 10.134649, 0 }, + { -0.244208, 0.080206, 10.122678, 0 }, + { -0.263362, 0.076614, 10.126269, 0 }, + { -0.243011, 0.076614, 10.113101, 0 }, + { -0.250194, 0.084994, 10.133451, 0 }, + { -0.247800, 0.081403, 10.151408, 0 }, + { -0.247800, 0.082600, 10.123875, 0 }, + { -0.240617, 0.080206, 10.133451, 0 }, + { -0.254982, 0.074220, 10.135846, 0 }, + { -0.260968, 0.076614, 10.123875, 0 }, + { -0.251391, 0.069432, 10.127466, 0 }, + { -0.251391, 0.080206, 10.140635, 0 }, + { -0.248997, 0.065841, 10.129861, 0 }, + { -0.245406, 0.081403, 10.137043, 0 }, + { -0.248997, 0.096965, 10.128663, 0 }, + { -0.264559, 0.069432, 10.149014, 0 }, + { -0.254982, 0.071826, 10.114298, 0 }, + { -0.257377, 0.071826, 10.140635, 0 }, + { -0.254982, 0.077812, 10.128663, 0 }, + { -0.256179, 0.083797, 10.126269, 0 }, + { -0.254982, 0.063446, 10.143028, 0 }, + { -0.247800, 0.058658, 10.133451, 0 }, + { -0.251391, 0.068235, 10.137043, 0 }, + { -0.245406, 0.080206, 10.102327, 0 }, + { -0.243011, 0.070629, 10.129861, 0 }, + { -0.253785, 0.073023, 10.111904, 0 }, + { -0.251391, 0.076614, 10.145423, 0 }, + { -0.247800, 0.075417, 10.133451, 0 }, + { -0.248997, 0.065841, 10.139438, 0 }, + { -0.248997, 0.063446, 10.125072, 0 }, + { -0.252588, 0.070629, 10.102327, 0 }, + { -0.246603, 0.083797, 10.113101, 0 }, + { -0.237026, 0.074220, 10.116693, 0 }, + { -0.240617, 0.073023, 10.138240, 0 }, + { -0.235829, 0.076614, 10.116693, 0 }, + { -0.247800, 0.073023, 10.141831, 0 }, + { -0.258574, 0.075417, 10.134649, 0 }, + { -0.253785, 0.081403, 10.126269, 0 }, + { -0.250194, 0.082600, 10.121481, 0 }, + { -0.250194, 0.088585, 10.149014, 0 }, + { -0.253785, 0.069432, 10.126269, 0 }, + { -0.252588, 0.083797, 10.128663, 0 }, + { -0.245406, 0.058658, 10.133451, 0 }, + { -0.258574, 0.087388, 10.119086, 0 }, + { -0.253785, 0.064643, 10.131058, 0 }, + { -0.248997, 0.067038, 10.128663, 0 }, + { -0.248997, 0.075417, 10.155000, 0 }, + { -0.251391, 0.079009, 10.132255, 0 }, + { -0.253785, 0.087388, 10.131058, 0 }, + { -0.240617, 0.088585, 10.113101, 0 }, + { -0.247800, 0.077812, 10.134649, 0 }, + { -0.247800, 0.077812, 10.122678, 0 }, + { -0.263362, 0.086191, 10.131058, 0 }, + { -0.243011, 0.084994, 10.129861, 0 }, + { -0.243011, 0.077812, 10.113101, 0 }, + { -0.252588, 0.077812, 10.125072, 0 }, + { -0.248997, 0.076614, 10.096342, 0 }, + { -0.241814, 0.070629, 10.158591, 0 }, + { -0.257377, 0.075417, 10.117889, 0 }, + { -0.250194, 0.076614, 10.131058, 0 }, + { -0.250194, 0.071826, 10.135846, 0 }, + { -0.253785, 0.069432, 10.115496, 0 }, + { -0.248997, 0.069432, 10.144226, 0 }, + { -0.246603, 0.068235, 10.110707, 0 }, + { -0.260968, 0.075417, 10.151408, 0 }, + { -0.246603, 0.074220, 10.113101, 0 }, + { -0.254982, 0.076614, 10.122678, 0 }, + { -0.250194, 0.063446, 10.116693, 0 }, + { -0.233435, 0.077812, 10.134649, 0 }, + { -0.245406, 0.079009, 10.135846, 0 }, + { -0.250194, 0.079009, 10.119086, 0 }, + { -0.264559, 0.086191, 10.109509, 0 }, + { -0.252588, 0.090980, 10.126269, 0 }, + { -0.250194, 0.082600, 10.147817, 0 }, + { -0.238223, 0.070629, 10.125072, 0 }, + { -0.245406, 0.082600, 10.139438, 0 }, + { -0.239420, 0.082600, 10.131058, 0 }, + { -0.251391, 0.087388, 10.147817, 0 }, + { -0.257377, 0.073023, 10.128663, 0 }, + { -0.251391, 0.081403, 10.144226, 0 }, + { -0.254982, 0.086191, 10.120284, 0 }, + { -0.253785, 0.080206, 10.146620, 0 }, + { -0.256179, 0.077812, 10.149014, 0 }, + { -0.248997, 0.083797, 10.128663, 0 }, + { -0.251391, 0.071826, 10.125072, 0 }, + { -0.244208, 0.068235, 10.113101, 0 }, + { -0.252588, 0.070629, 10.132255, 0 }, + { -0.258574, 0.064643, 10.116693, 0 }, + { -0.246603, 0.074220, 10.135846, 0 }, + { -0.247800, 0.070629, 10.123875, 0 }, + { -0.239420, 0.081403, 10.144226, 0 }, + { -0.247800, 0.075417, 10.121481, 0 }, + { -0.259771, 0.073023, 10.103524, 0 }, + { -0.248997, 0.073023, 10.129861, 0 }, + { -0.241814, 0.071826, 10.134649, 0 }, + { -0.235829, 0.079009, 10.127466, 0 }, + { -0.244208, 0.095768, 10.122678, 0 }, + { -0.227449, 0.065841, 10.147817, 0 }, + { -0.251391, 0.074220, 10.135846, 0 }, + { -0.251391, 0.074220, 10.137043, 0 }, + { -0.253785, 0.077812, 10.125072, 0 }, + { -0.259771, 0.071826, 10.135846, 0 }, + { -0.227449, 0.067038, 10.122678, 0 }, + { -0.235829, 0.065841, 10.127466, 0 }, + { -0.251391, 0.076614, 10.128663, 0 }, + { -0.238223, 0.058658, 10.128663, 0 }, + { -0.238223, 0.074220, 10.126269, 0 }, + { -0.246603, 0.084994, 10.140635, 0 }, + { -0.258574, 0.071826, 10.132255, 0 }, + { -0.252588, 0.074220, 10.122678, 0 }, + { -0.245406, 0.076614, 10.121481, 0 }, + { -0.244208, 0.074220, 10.134649, 0 }, + { -0.248997, 0.069432, 10.122678, 0 }, + { -0.246603, 0.077812, 10.127466, 0 }, + { -0.256179, 0.083797, 10.133451, 0 }, + { -0.247800, 0.086191, 10.135846, 0 }, + { -0.248997, 0.076614, 10.144226, 0 }, + { -0.253785, 0.073023, 10.120284, 0 }, + { -0.256179, 0.071826, 10.140635, 0 }, + { -0.254982, 0.083797, 10.123875, 0 }, + { -0.247800, 0.076614, 10.131058, 0 }, + { -0.259771, 0.077812, 10.117889, 0 }, + { -0.243011, 0.069432, 10.132255, 0 }, + { -0.250194, 0.075417, 10.120284, 0 }, + { -0.247800, 0.086191, 10.128663, 0 }, + { -0.241814, 0.065841, 10.150211, 0 }, + { -0.250194, 0.075417, 10.128663, 0 }, + { -0.234632, 0.079009, 10.103524, 0 }, + { -0.266953, 0.073023, 10.127466, 0 }, + { -0.237026, 0.080206, 10.119086, 0 }, + { -0.254982, 0.075417, 10.151408, 0 }, + { -0.248997, 0.063446, 10.129861, 0 }, + { -0.254982, 0.071826, 10.135846, 0 }, + { -0.246603, 0.075417, 10.125072, 0 }, + { -0.237026, 0.069432, 10.126269, 0 }, + { -0.243011, 0.070629, 10.146620, 0 }, + { -0.244208, 0.082600, 10.137043, 0 }, + { -0.263362, 0.071826, 10.138240, 0 }, + { -0.250194, 0.074220, 10.149014, 0 }, + { -0.250194, 0.070629, 10.137043, 0 }, + { -0.253785, 0.080206, 10.122678, 0 }, + { -0.247800, 0.080206, 10.131058, 0 }, + { -0.237026, 0.082600, 10.134649, 0 }, + { -0.243011, 0.079009, 10.129861, 0 }, + { -0.246603, 0.071826, 10.117889, 0 }, + { -0.256179, 0.074220, 10.135846, 0 }, + { -0.250194, 0.075417, 10.128663, 0 }, + { -0.247800, 0.074220, 10.120284, 0 }, + { -0.251391, 0.065841, 10.141831, 0 }, + { -0.248997, 0.062249, 10.115496, 0 }, + { -0.260968, 0.068235, 10.141831, 0 }, + { -0.248997, 0.079009, 10.141831, 0 }, + { -0.247800, 0.075417, 10.156197, 0 }, + { -0.246603, 0.070629, 10.132255, 0 }, + { -0.252588, 0.082600, 10.116693, 0 }, + { -0.252588, 0.074220, 10.122678, 0 }, + { -0.262165, 0.071826, 10.123875, 0 }, + { -0.251391, 0.067038, 10.121481, 0 }, + { -0.239420, 0.081403, 10.113101, 0 }, + { -0.247800, 0.084994, 10.132255, 0 }, + { -0.252588, 0.075417, 10.138240, 0 }, + { -0.246603, 0.075417, 10.125072, 0 }, + { -0.246603, 0.076614, 10.109509, 0 }, + { -0.253785, 0.074220, 10.125072, 0 }, + { -0.251391, 0.081403, 10.139438, 0 }, + { -0.243011, 0.073023, 10.114298, 0 }, + { -0.253785, 0.065841, 10.107116, 0 }, + { -0.243011, 0.080206, 10.121481, 0 }, + { -0.253785, 0.069432, 10.129861, 0 }, + { -0.256179, 0.068235, 10.121481, 0 }, + { -0.246603, 0.068235, 10.121481, 0 }, + { -0.254982, 0.075417, 10.121481, 0 }, + { -0.241814, 0.074220, 10.120284, 0 }, + { -0.258574, 0.073023, 10.127466, 0 }, + { -0.235829, 0.074220, 10.128663, 0 }, + { -0.247800, 0.071826, 10.120284, 0 }, + { -0.258574, 0.073023, 10.119086, 0 }, + { -0.256179, 0.082600, 10.125072, 0 }, + { -0.243011, 0.081403, 10.128663, 0 }, + { -0.241814, 0.069432, 10.132255, 0 }, + { -0.252588, 0.074220, 10.135846, 0 }, + { -0.235829, 0.076614, 10.138240, 0 }, + { -0.252588, 0.069432, 10.133451, 0 }, + { -0.257377, 0.087388, 10.129861, 0 }, + { -0.252588, 0.079009, 10.120284, 0 }, + { -0.245406, 0.077812, 10.132255, 0 }, + { -0.244208, 0.077812, 10.105919, 0 }, + { -0.252588, 0.064643, 10.128663, 0 }, + { -0.257377, 0.080206, 10.122678, 0 }, + { -0.227449, 0.075417, 10.122678, 0 }, + { -0.256179, 0.076614, 10.139438, 0 }, + { -0.250194, 0.068235, 10.134649, 0 }, + { -0.244208, 0.080206, 10.145423, 0 }, + { -0.244208, 0.075417, 10.117889, 0 }, + { -0.245406, 0.071826, 10.137043, 0 }, + { -0.251391, 0.069432, 10.132255, 0 }, + { -0.252588, 0.065841, 10.127466, 0 }, + { -0.252588, 0.087388, 10.135846, 0 }, + { -0.250194, 0.083797, 10.140635, 0 }, + { -0.265756, 0.083797, 10.127466, 0 }, + { -0.251391, 0.081403, 10.116693, 0 }, + { -0.243011, 0.073023, 10.131058, 0 }, + { -0.256179, 0.079009, 10.132255, 0 }, + { -0.256179, 0.079009, 10.135846, 0 }, + { -0.259771, 0.080206, 10.139438, 0 }, + { -0.248997, 0.069432, 10.134649, 0 }, + { -0.247800, 0.076614, 10.109509, 0 }, + { -0.251391, 0.069432, 10.140635, 0 }, + { -0.248997, 0.065841, 10.129861, 0 }, + { -0.256179, 0.084994, 10.119086, 0 }, + { -0.253785, 0.082600, 10.111904, 0 }, + { -0.251391, 0.079009, 10.134649, 0 }, + { -0.258574, 0.077812, 10.125072, 0 }, + { -0.254982, 0.062249, 10.108313, 0 }, + { -0.272939, 0.080206, 10.151408, 0 }, + { -0.260968, 0.082600, 10.113101, 0 }, + { -0.244208, 0.086191, 10.123875, 0 }, + { -0.247800, 0.079009, 10.116693, 0 }, + { -0.247800, 0.075417, 10.141831, 0 }, + { -0.259771, 0.076614, 10.120284, 0 }, + { -0.239420, 0.081403, 10.134649, 0 }, + { -0.253785, 0.080206, 10.121481, 0 }, + { -0.262165, 0.074220, 10.119086, 0 }, + { -0.253785, 0.069432, 10.127466, 0 }, + { -0.262165, 0.069432, 10.104721, 0 }, + { -0.252588, 0.084994, 10.120284, 0 }, + { -0.251391, 0.063446, 10.113101, 0 }, + { -0.263362, 0.074220, 10.121481, 0 }, + { -0.259771, 0.068235, 10.135846, 0 }, + { -0.250194, 0.070629, 10.138240, 0 }, + { -0.258574, 0.077812, 10.132255, 0 }, + { -0.252588, 0.067038, 10.135846, 0 }, + { -0.251391, 0.064643, 10.128663, 0 }, + { -0.243011, 0.082600, 10.134649, 0 }, + { -0.238223, 0.084994, 10.144226, 0 }, + { -0.260968, 0.084994, 10.123875, 0 }, + { -0.254982, 0.075417, 10.137043, 0 }, + { -0.259771, 0.075417, 10.111904, 0 }, + { -0.251391, 0.084994, 10.143028, 0 }, + { -0.245406, 0.079009, 10.117889, 0 }, + { -0.252588, 0.074220, 10.149014, 0 }, + { -0.254982, 0.062249, 10.132255, 0 }, + { -0.241814, 0.062249, 10.116693, 0 }, + { -0.247800, 0.074220, 10.151408, 0 }, + { -0.240617, 0.081403, 10.115496, 0 }, + { -0.247800, 0.067038, 10.139438, 0 }, + { -0.250194, 0.079009, 10.126269, 0 }, + { -0.237026, 0.087388, 10.150211, 0 }, + { -0.238223, 0.073023, 10.134649, 0 }, + { -0.241814, 0.080206, 10.140635, 0 }, + { -0.248997, 0.075417, 10.122678, 0 }, + { -0.254982, 0.081403, 10.123875, 0 }, + { -0.257377, 0.067038, 10.138240, 0 }, + { -0.247800, 0.076614, 10.128663, 0 }, + { -0.256179, 0.076614, 10.145423, 0 }, + { -0.241814, 0.080206, 10.132255, 0 }, + { -0.238223, 0.067038, 10.137043, 0 }, + { -0.257377, 0.064643, 10.119086, 0 }, + { -0.243011, 0.081403, 10.129861, 0 }, + { -0.248997, 0.081403, 10.115496, 0 }, + { -0.258574, 0.062249, 10.133451, 0 }, + { -0.247800, 0.070629, 10.119086, 0 }, + { -0.252588, 0.074220, 10.129861, 0 }, + { -0.246603, 0.070629, 10.133451, 0 }, + { -0.245406, 0.073023, 10.102327, 0 }, + { -0.252588, 0.080206, 10.139438, 0 }, + { -0.247800, 0.068235, 10.113101, 0 }, + { -0.254982, 0.074220, 10.126269, 0 }, + { -0.251391, 0.079009, 10.120284, 0 }, + { -0.251391, 0.089783, 10.137043, 0 }, + { -0.252588, 0.065841, 10.127466, 0 }, + { -0.251391, 0.068235, 10.120284, 0 }, + { -0.257377, 0.067038, 10.127466, 0 }, + { -0.241814, 0.081403, 10.128663, 0 }, + { -0.241814, 0.081403, 10.135846, 0 }, + { -0.247800, 0.071826, 10.135846, 0 }, + { -0.250194, 0.070629, 10.138240, 0 }, + { -0.252588, 0.084994, 10.131058, 0 }, + { -0.245406, 0.083797, 10.139438, 0 }, + { -0.244208, 0.075417, 10.123875, 0 }, + { -0.259771, 0.077812, 10.137043, 0 }, + { -0.248997, 0.071826, 10.123875, 0 }, + { -0.246603, 0.086191, 10.152605, 0 }, + { -0.241814, 0.069432, 10.132255, 0 }, + { -0.243011, 0.064643, 10.129861, 0 }, + { -0.245406, 0.073023, 10.129861, 0 }, + { -0.251391, 0.076614, 10.116693, 0 }, + { -0.264559, 0.068235, 10.139438, 0 }, + { -0.247800, 0.073023, 10.105919, 0 }, + { -0.244208, 0.077812, 10.145423, 0 }, + { -0.250194, 0.077812, 10.137043, 0 }, + { -0.252588, 0.064643, 10.126269, 0 }, + { -0.252588, 0.079009, 10.125072, 0 }, + { -0.239420, 0.084994, 10.126269, 0 }, + { -0.246603, 0.067038, 10.137043, 0 }, + { -0.252588, 0.077812, 10.114298, 0 }, + { -0.266953, 0.062249, 10.131058, 0 }, + { -0.264559, 0.076614, 10.114298, 0 }, + { -0.250194, 0.071826, 10.135846, 0 }, + { -0.250194, 0.087388, 10.134649, 0 }, + { -0.246603, 0.082600, 10.147817, 0 }, + { -0.245406, 0.065841, 10.131058, 0 }, + { -0.258574, 0.070629, 10.139438, 0 }, + { -0.251391, 0.081403, 10.111904, 0 }, + { -0.246603, 0.080206, 10.132255, 0 }, + { -0.235829, 0.074220, 10.117889, 0 }, + { -0.243011, 0.075417, 10.123875, 0 }, + { -0.241814, 0.065841, 10.139438, 0 }, + { -0.241814, 0.077812, 10.119086, 0 }, + { -0.247800, 0.084994, 10.153803, 0 }, + { -0.266953, 0.081403, 10.116693, 0 }, + { -0.243011, 0.083797, 10.137043, 0 }, + { -0.257377, 0.074220, 10.109509, 0 }, + { -0.252588, 0.074220, 10.126269, 0 }, + { -0.247800, 0.076614, 10.127466, 0 }, + { -0.243011, 0.068235, 10.111904, 0 }, + { -0.259771, 0.077812, 10.132255, 0 }, + { -0.253785, 0.092177, 10.103524, 0 }, + { -0.243011, 0.086191, 10.123875, 0 }, + { -0.232237, 0.069432, 10.134649, 0 }, + { -0.233435, 0.076614, 10.129861, 0 }, + { -0.257377, 0.068235, 10.114298, 0 }, + { -0.250194, 0.074220, 10.127466, 0 }, + { -0.245406, 0.077812, 10.131058, 0 }, + { -0.251391, 0.077812, 10.123875, 0 }, + { -0.245406, 0.074220, 10.123875, 0 }, + { -0.245406, 0.069432, 10.122678, 0 }, + { -0.254982, 0.071826, 10.119086, 0 }, + { -0.257377, 0.064643, 10.116693, 0 }, + { -0.256179, 0.079009, 10.128663, 0 }, + { -0.241814, 0.062249, 10.098736, 0 }, + { -0.248997, 0.067038, 10.144226, 0 }, + { -0.237026, 0.083797, 10.145423, 0 }, + { -0.253785, 0.076614, 10.120284, 0 }, + { -0.251391, 0.065841, 10.113101, 0 }, + { -0.248997, 0.067038, 10.104721, 0 }, + { -0.244208, 0.073023, 10.134649, 0 }, + { -0.259771, 0.069432, 10.134649, 0 }, + { -0.244208, 0.084994, 10.141831, 0 }, + { -0.257377, 0.076614, 10.126269, 0 }, + { -0.246603, 0.073023, 10.137043, 0 }, + { -0.247800, 0.073023, 10.111904, 0 }, + { -0.243011, 0.073023, 10.144226, 0 }, + { -0.251391, 0.080206, 10.129861, 0 }, + { -0.244208, 0.076614, 10.126269, 0 }, + { -0.246603, 0.069432, 10.135846, 0 }, + { -0.250194, 0.073023, 10.131058, 0 }, + { -0.250194, 0.069432, 10.122678, 0 }, + { -0.238223, 0.073023, 10.133451, 0 }, + { -0.229843, 0.063446, 10.121481, 0 }, + { -0.235829, 0.084994, 10.115496, 0 }, + { -0.243011, 0.077812, 10.122678, 0 }, + { -0.238223, 0.067038, 10.116693, 0 }, + { -0.245406, 0.069432, 10.137043, 0 }, + { -0.258574, 0.081403, 10.122678, 0 }, + { -0.239420, 0.083797, 10.149014, 0 }, + { -0.240617, 0.075417, 10.123875, 0 }, + { -0.251391, 0.067038, 10.153803, 0 }, + { -0.240617, 0.075417, 10.145423, 0 }, + { -0.231040, 0.083797, 10.129861, 0 }, + { -0.247800, 0.090980, 10.155000, 0 }, + { -0.247800, 0.077812, 10.125072, 0 }, + { -0.253785, 0.084994, 10.131058, 0 }, + { -0.257377, 0.073023, 10.108313, 0 }, + { -0.248997, 0.080206, 10.123875, 0 }, + { -0.244208, 0.073023, 10.113101, 0 }, + { -0.237026, 0.080206, 10.121481, 0 }, + { -0.248997, 0.055067, 10.127466, 0 }, + { -0.256179, 0.073023, 10.137043, 0 }, + { -0.260968, 0.081403, 10.131058, 0 }, + { -0.251391, 0.069432, 10.125072, 0 }, + { -0.252588, 0.074220, 10.115496, 0 }, + { -0.250194, 0.086191, 10.122678, 0 }, + { -0.235829, 0.076614, 10.119086, 0 }, + { -0.258574, 0.079009, 10.127466, 0 }, + { -0.247800, 0.076614, 10.139438, 0 }, + { -0.247800, 0.079009, 10.126269, 0 }, + { -0.237026, 0.088585, 10.134649, 0 }, + { -0.240617, 0.073023, 10.120284, 0 }, + { -0.244208, 0.073023, 10.125072, 0 }, + { -0.243011, 0.076614, 10.115496, 0 }, + { -0.238223, 0.080206, 10.122678, 0 }, + { -0.239420, 0.067038, 10.122678, 0 }, + { -0.253785, 0.081403, 10.119086, 0 }, + { -0.246603, 0.080206, 10.125072, 0 }, + { -0.251391, 0.082600, 10.126269, 0 }, + { -0.238223, 0.073023, 10.132255, 0 }, + { -0.252588, 0.075417, 10.133451, 0 }, + { -0.254982, 0.061052, 10.140635, 0 }, + { -0.253785, 0.065841, 10.117889, 0 }, + { -0.235829, 0.071826, 10.143028, 0 }, + { -0.245406, 0.083797, 10.122678, 0 }, + { -0.256179, 0.088585, 10.129861, 0 }, + { -0.259771, 0.077812, 10.121481, 0 }, + { -0.238223, 0.067038, 10.125072, 0 }, + { -0.247800, 0.073023, 10.140635, 0 }, + { -0.248997, 0.073023, 10.111904, 0 }, + { -0.245406, 0.075417, 10.145423, 0 }, + { -0.268150, 0.075417, 10.102327, 0 }, + { -0.246603, 0.080206, 10.129861, 0 }, + { -0.251391, 0.080206, 10.126269, 0 }, + { -0.251391, 0.071826, 10.134649, 0 }, + { -0.262165, 0.076614, 10.143028, 0 }, + { -0.247800, 0.070629, 10.121481, 0 }, + { -0.238223, 0.083797, 10.135846, 0 }, + { -0.251391, 0.069432, 10.111904, 0 }, + { -0.256179, 0.082600, 10.139438, 0 }, + { -0.262165, 0.083797, 10.128663, 0 }, + { -0.251391, 0.079009, 10.122678, 0 }, + { -0.245406, 0.077812, 10.125072, 0 }, + { -0.239420, 0.074220, 10.125072, 0 }, + { -0.258574, 0.076614, 10.127466, 0 }, + { -0.256179, 0.088585, 10.126269, 0 }, + { -0.246603, 0.080206, 10.111904, 0 }, + { -0.241814, 0.084994, 10.133451, 0 }, + { -0.235829, 0.079009, 10.141831, 0 }, + { -0.263362, 0.073023, 10.138240, 0 }, + { -0.251391, 0.069432, 10.134649, 0 }, + { -0.245406, 0.069432, 10.127466, 0 }, + { -0.250194, 0.074220, 10.133451, 0 }, + { -0.251391, 0.068235, 10.131058, 0 }, + { -0.254982, 0.070629, 10.128663, 0 }, + { -0.240617, 0.083797, 10.111904, 0 }, + { -0.245406, 0.075417, 10.122678, 0 }, + { -0.245406, 0.084994, 10.119086, 0 }, + { -0.248997, 0.079009, 10.098736, 0 }, + { -0.240617, 0.070629, 10.127466, 0 }, + { -0.244208, 0.079009, 10.145423, 0 }, + { -0.264559, 0.079009, 10.120284, 0 }, + { -0.244208, 0.077812, 10.119086, 0 }, + { -0.237026, 0.080206, 10.107116, 0 }, + { -0.235829, 0.086191, 10.128663, 0 }, + { -0.245406, 0.081403, 10.133451, 0 }, + { -0.247800, 0.077812, 10.138240, 0 }, + { -0.251391, 0.080206, 10.125072, 0 }, + { -0.257377, 0.068235, 10.147817, 0 }, + { -0.263362, 0.076614, 10.121481, 0 }, + { -0.268150, 0.073023, 10.116693, 0 }, + { -0.247800, 0.071826, 10.122678, 0 }, + { -0.260968, 0.073023, 10.134649, 0 }, + { -0.254982, 0.074220, 10.116693, 0 }, + { -0.246603, 0.086191, 10.131058, 0 }, + { -0.248997, 0.079009, 10.125072, 0 }, + { -0.252588, 0.067038, 10.132255, 0 }, + { -0.254982, 0.063446, 10.123875, 0 }, + { -0.256179, 0.067038, 10.116693, 0 }, + { -0.259771, 0.083797, 10.125072, 0 }, + { -0.264559, 0.069432, 10.131058, 0 }, + { -0.243011, 0.074220, 10.143028, 0 }, + { -0.254982, 0.081403, 10.128663, 0 }, + { -0.253785, 0.065841, 10.143028, 0 }, + { -0.260968, 0.075417, 10.131058, 0 }, + { -0.265756, 0.090980, 10.128663, 0 }, + { -0.244208, 0.088585, 10.146620, 0 }, + { -0.246603, 0.082600, 10.114298, 0 }, + { -0.256179, 0.077812, 10.133451, 0 }, + { -0.250194, 0.064643, 10.117889, 0 }, + { -0.254982, 0.075417, 10.117889, 0 }, + { -0.266953, 0.065841, 10.113101, 0 }, + { -0.253785, 0.073023, 10.128663, 0 }, + { -0.259771, 0.082600, 10.138240, 0 }, + { -0.247800, 0.071826, 10.145423, 0 }, + { -0.243011, 0.074220, 10.122678, 0 }, + { -0.257377, 0.083797, 10.140635, 0 }, + { -0.232237, 0.087388, 10.117889, 0 }, + { -0.244208, 0.076614, 10.125072, 0 }, + { -0.248997, 0.067038, 10.128663, 0 }, + { -0.256179, 0.062249, 10.115496, 0 }, + { -0.263362, 0.071826, 10.141831, 0 }, + { -0.246603, 0.075417, 10.107116, 0 }, + { -0.244208, 0.081403, 10.137043, 0 }, + { -0.254982, 0.083797, 10.123875, 0 }, + { -0.243011, 0.092177, 10.132255, 0 }, + { -0.260968, 0.077812, 10.131058, 0 }, + { -0.256179, 0.073023, 10.119086, 0 }, + { -0.239420, 0.082600, 10.132255, 0 }, + { -0.251391, 0.073023, 10.117889, 0 }, + { -0.254982, 0.071826, 10.134649, 0 }, + { -0.259771, 0.080206, 10.120284, 0 }, + { -0.246603, 0.069432, 10.133451, 0 }, + { -0.250194, 0.061052, 10.126269, 0 }, + { -0.256179, 0.063446, 10.109509, 0 }, + { -0.251391, 0.087388, 10.120284, 0 }, + { -0.246603, 0.069432, 10.132255, 0 }, + { -0.244208, 0.077812, 10.133451, 0 }, + { -0.257377, 0.069432, 10.126269, 0 }, + { -0.247800, 0.075417, 10.133451, 0 }, + { -0.246603, 0.071826, 10.117889, 0 }, + { -0.245406, 0.093374, 10.135846, 0 }, + { -0.254982, 0.082600, 10.105919, 0 }, + { -0.247800, 0.076614, 10.143028, 0 }, + { -0.246603, 0.076614, 10.126269, 0 }, + { -0.243011, 0.067038, 10.127466, 0 }, + { -0.253785, 0.064643, 10.119086, 0 }, + { -0.248997, 0.079009, 10.127466, 0 }, + { -0.248997, 0.080206, 10.141831, 0 }, + { -0.244208, 0.074220, 10.133451, 0 }, + { -0.240617, 0.079009, 10.135846, 0 }, + { -0.232237, 0.075417, 10.115496, 0 }, + { -0.254982, 0.082600, 10.139438, 0 }, + { -0.258574, 0.077812, 10.119086, 0 }, + { -0.246603, 0.076614, 10.109509, 0 }, + { -0.248997, 0.080206, 10.125072, 0 }, + { -0.256179, 0.077812, 10.128663, 0 }, + { -0.235829, 0.076614, 10.126269, 0 }, + { -0.253785, 0.076614, 10.128663, 0 }, + { -0.254982, 0.075417, 10.147817, 0 }, + { -0.246603, 0.079009, 10.145423, 0 }, + { -0.243011, 0.081403, 10.146620, 0 }, + { -0.237026, 0.075417, 10.134649, 0 }, + { -0.258574, 0.077812, 10.149014, 0 }, + { -0.262165, 0.079009, 10.141831, 0 }, + { -0.245406, 0.069432, 10.140635, 0 }, + { -0.240617, 0.074220, 10.120284, 0 }, + { -0.252588, 0.080206, 10.143028, 0 }, + { -0.254982, 0.084994, 10.135846, 0 }, + { -0.248997, 0.067038, 10.131058, 0 }, + { -0.234632, 0.070629, 10.133451, 0 }, + { -0.246603, 0.067038, 10.132255, 0 }, + { -0.246603, 0.070629, 10.143028, 0 }, + { -0.245406, 0.079009, 10.135846, 0 }, + { -0.253785, 0.077812, 10.144226, 0 }, + { -0.248997, 0.076614, 10.127466, 0 }, + { -0.227449, 0.093374, 10.119086, 0 }, + { -0.257377, 0.073023, 10.125072, 0 }, + { -0.254982, 0.057461, 10.133451, 0 }, + { -0.247800, 0.069432, 10.122678, 0 }, + { -0.252588, 0.075417, 10.125072, 0 }, + { -0.262165, 0.088585, 10.125072, 0 }, + { -0.253785, 0.080206, 10.127466, 0 }, + { -0.252588, 0.070629, 10.137043, 0 }, + { -0.254982, 0.068235, 10.113101, 0 }, + { -0.244208, 0.076614, 10.132255, 0 }, + { -0.244208, 0.074220, 10.129861, 0 }, + { -0.244208, 0.073023, 10.141831, 0 }, + { -0.239420, 0.080206, 10.108313, 0 }, + { -0.241814, 0.087388, 10.122678, 0 }, + { -0.253785, 0.093374, 10.122678, 0 }, + { -0.252588, 0.070629, 10.133451, 0 }, + { -0.244208, 0.073023, 10.147817, 0 }, + { -0.245406, 0.076614, 10.122678, 0 }, + { -0.254982, 0.087388, 10.132255, 0 }, + { -0.241814, 0.065841, 10.125072, 0 }, + { -0.231040, 0.068235, 10.123875, 0 }, + { -0.238223, 0.081403, 10.117889, 0 }, + { -0.241814, 0.083797, 10.139438, 0 }, + { -0.240617, 0.045490, 10.119086, 0 }, + { -0.262165, 0.069432, 10.125072, 0 }, + { -0.259771, 0.081403, 10.126269, 0 }, + { -0.248997, 0.068235, 10.129861, 0 }, + { -0.238223, 0.071826, 10.131058, 0 }, + { -0.237026, 0.087388, 10.117889, 0 }, + { -0.253785, 0.076614, 10.123875, 0 }, + { -0.260968, 0.077812, 10.120284, 0 }, + { -0.246603, 0.073023, 10.126269, 0 }, + { -0.256179, 0.082600, 10.119086, 0 }, + { -0.252588, 0.067038, 10.139438, 0 }, + { -0.260968, 0.073023, 10.127466, 0 }, + { -0.235829, 0.086191, 10.121481, 0 }, + { -0.244208, 0.088585, 10.131058, 0 }, + { -0.245406, 0.073023, 10.143028, 0 }, + { -0.243011, 0.079009, 10.139438, 0 }, + { -0.253785, 0.077812, 10.120284, 0 }, + { -0.252588, 0.068235, 10.123875, 0 }, + { -0.246603, 0.069432, 10.132255, 0 }, + { -0.237026, 0.070629, 10.139438, 0 }, + { -0.244208, 0.068235, 10.120284, 0 }, + { -0.247800, 0.079009, 10.134649, 0 }, + { -0.256179, 0.084994, 10.150211, 0 }, + { -0.246603, 0.070629, 10.126269, 0 }, + { -0.246603, 0.065841, 10.131058, 0 }, + { -0.262165, 0.068235, 10.126269, 0 }, + { -0.244208, 0.069432, 10.125072, 0 }, + { -0.245406, 0.081403, 10.114298, 0 }, + { -0.257377, 0.070629, 10.133451, 0 }, + { -0.247800, 0.079009, 10.109509, 0 }, + { -0.245406, 0.071826, 10.125072, 0 }, + { -0.237026, 0.069432, 10.139438, 0 }, + { -0.244208, 0.081403, 10.145423, 0 }, + { -0.246603, 0.075417, 10.129861, 0 }, + { -0.262165, 0.082600, 10.128663, 0 }, + { -0.246603, 0.083797, 10.147817, 0 }, + { -0.243011, 0.079009, 10.128663, 0 }, + { -0.251391, 0.069432, 10.133451, 0 }, + { -0.253785, 0.070629, 10.122678, 0 }, + { -0.248997, 0.075417, 10.139438, 0 }, + { -0.256179, 0.080206, 10.104721, 0 }, + { -0.263362, 0.081403, 10.127466, 0 }, + { -0.247800, 0.068235, 10.140635, 0 }, + { -0.251391, 0.062249, 10.138240, 0 }, + { -0.245406, 0.087388, 10.133451, 0 }, + { -0.254982, 0.075417, 10.122678, 0 }, + { -0.240617, 0.071826, 10.135846, 0 }, + { -0.258574, 0.068235, 10.114298, 0 }, + { -0.250194, 0.077812, 10.137043, 0 }, + { -0.238223, 0.070629, 10.121481, 0 }, + { -0.244208, 0.080206, 10.126269, 0 }, + { -0.246603, 0.071826, 10.119086, 0 }, + { -0.258574, 0.068235, 10.147817, 0 }, + { -0.252588, 0.058658, 10.121481, 0 }, + { -0.258574, 0.073023, 10.122678, 0 }, + { -0.244208, 0.075417, 10.144226, 0 }, + { -0.241814, 0.075417, 10.120284, 0 }, + { -0.257377, 0.063446, 10.129861, 0 }, + { -0.260968, 0.075417, 10.091554, 0 }, + { -0.260968, 0.086191, 10.149014, 0 }, + { -0.243011, 0.084994, 10.095144, 0 }, + { -0.246603, 0.081403, 10.141831, 0 }, + { -0.243011, 0.068235, 10.138240, 0 }, + { -0.252588, 0.084994, 10.131058, 0 }, + { -0.257377, 0.077812, 10.141831, 0 }, + { -0.247800, 0.071826, 10.113101, 0 }, + { -0.258574, 0.073023, 10.151408, 0 }, + { -0.256179, 0.067038, 10.119086, 0 }, + { -0.264559, 0.070629, 10.131058, 0 }, + { -0.266953, 0.079009, 10.107116, 0 }, + { -0.245406, 0.077812, 10.137043, 0 }, + { -0.256179, 0.076614, 10.128663, 0 }, + { -0.252588, 0.068235, 10.135846, 0 }, + { -0.257377, 0.069432, 10.133451, 0 }, + { -0.258574, 0.062249, 10.133451, 0 }, + { -0.268150, 0.092177, 10.128663, 0 }, + { -0.257377, 0.076614, 10.139438, 0 }, + { -0.240617, 0.076614, 10.115496, 0 }, + { -0.248997, 0.075417, 10.129861, 0 }, + { -0.251391, 0.075417, 10.135846, 0 }, + { -0.263362, 0.062249, 10.092751, 0 }, + { -0.245406, 0.079009, 10.135846, 0 }, + { -0.248997, 0.077812, 10.114298, 0 }, + { -0.245406, 0.090980, 10.143028, 0 }, + { -0.246603, 0.081403, 10.125072, 0 }, + { -0.243011, 0.059855, 10.127466, 0 }, + { -0.248997, 0.068235, 10.145423, 0 }, + { -0.245406, 0.070629, 10.132255, 0 }, + { -0.240617, 0.068235, 10.139438, 0 }, + { -0.241814, 0.069432, 10.115496, 0 }, + { -0.250194, 0.082600, 10.137043, 0 }, + { -0.250194, 0.073023, 10.128663, 0 }, + { -0.241814, 0.086191, 10.144226, 0 }, + { -0.254982, 0.070629, 10.121481, 0 }, + { -0.244208, 0.082600, 10.131058, 0 }, + { -0.244208, 0.086191, 10.126269, 0 }, + { -0.251391, 0.086191, 10.138240, 0 }, + { -0.256179, 0.073023, 10.123875, 0 }, + { -0.247800, 0.080206, 10.127466, 0 }, + { -0.239420, 0.087388, 10.145423, 0 }, + { -0.247800, 0.056264, 10.145423, 0 }, + { -0.239420, 0.063446, 10.143028, 0 }, + { -0.259771, 0.067038, 10.111904, 0 }, + { -0.245406, 0.079009, 10.135846, 0 }, + { -0.254982, 0.074220, 10.121481, 0 }, + { -0.257377, 0.070629, 10.141831, 0 }, + { -0.243011, 0.068235, 10.141831, 0 }, + { -0.254982, 0.071826, 10.140635, 0 }, + { -0.231040, 0.068235, 10.126269, 0 }, + { -0.240617, 0.074220, 10.119086, 0 }, + { -0.244208, 0.070629, 10.123875, 0 }, + { -0.248997, 0.067038, 10.132255, 0 }, + { -0.252588, 0.071826, 10.135846, 0 }, + { -0.250194, 0.074220, 10.108313, 0 }, + { -0.252588, 0.071826, 10.137043, 0 }, + { -0.253785, 0.074220, 10.117889, 0 }, + { -0.246603, 0.069432, 10.123875, 0 }, + { -0.250194, 0.065841, 10.132255, 0 }, + { -0.240617, 0.062249, 10.153803, 0 }, + { -0.250194, 0.069432, 10.122678, 0 }, + { -0.248997, 0.073023, 10.114298, 0 }, + { -0.251391, 0.075417, 10.131058, 0 }, + { -0.239420, 0.065841, 10.134649, 0 }, + { -0.244208, 0.077812, 10.146620, 0 }, + { -0.253785, 0.089783, 10.102327, 0 }, + { -0.248997, 0.073023, 10.123875, 0 }, + { -0.252588, 0.074220, 10.109509, 0 }, + { -0.248997, 0.086191, 10.144226, 0 }, + { -0.240617, 0.073023, 10.135846, 0 }, + { -0.245406, 0.063446, 10.111904, 0 }, + { -0.253785, 0.057461, 10.120284, 0 }, + { -0.257377, 0.074220, 10.120284, 0 }, + { -0.262165, 0.070629, 10.153803, 0 }, + { -0.260968, 0.071826, 10.128663, 0 }, + { -0.251391, 0.070629, 10.138240, 0 }, + { -0.246603, 0.075417, 10.119086, 0 }, + { -0.247800, 0.069432, 10.120284, 0 }, + { -0.268150, 0.074220, 10.134649, 0 }, + { -0.241814, 0.082600, 10.143028, 0 }, + { -0.245406, 0.082600, 10.143028, 0 }, + { -0.259771, 0.074220, 10.125072, 0 }, + { -0.263362, 0.069432, 10.132255, 0 }, + { -0.248997, 0.076614, 10.111904, 0 }, + { -0.254982, 0.071826, 10.128663, 0 }, + { -0.238223, 0.079009, 10.101130, 0 }, + { -0.246603, 0.075417, 10.149014, 0 }, + { -0.262165, 0.061052, 10.116693, 0 }, + { -0.245406, 0.071826, 10.135846, 0 }, + { -0.241814, 0.090980, 10.120284, 0 }, + { -0.247800, 0.082600, 10.133451, 0 }, + { -0.260968, 0.064643, 10.149014, 0 }, + { -0.241814, 0.069432, 10.127466, 0 }, + { -0.246603, 0.073023, 10.128663, 0 }, + { -0.259771, 0.068235, 10.083174, 0 }, + { -0.254982, 0.086191, 10.129861, 0 }, + { -0.251391, 0.070629, 10.111904, 0 }, + { -0.250194, 0.064643, 10.128663, 0 }, + { -0.244208, 0.080206, 10.114298, 0 }, + { -0.234632, 0.075417, 10.128663, 0 }, + { -0.247800, 0.080206, 10.132255, 0 }, + { -0.247800, 0.071826, 10.135846, 0 }, + { -0.240617, 0.063446, 10.133451, 0 }, + { -0.253785, 0.070629, 10.128663, 0 }, + { -0.251391, 0.075417, 10.131058, 0 }, + { -0.252588, 0.074220, 10.116693, 0 }, + { -0.248997, 0.071826, 10.129861, 0 }, + { -0.251391, 0.087388, 10.108313, 0 }, + { -0.248997, 0.083797, 10.137043, 0 }, + { -0.257377, 0.068235, 10.132255, 0 }, + { -0.256179, 0.065841, 10.141831, 0 }, + { -0.239420, 0.076614, 10.132255, 0 }, + { -0.251391, 0.073023, 10.127466, 0 }, + { -0.252588, 0.073023, 10.138240, 0 }, + { -0.253785, 0.070629, 10.119086, 0 }, + { -0.247800, 0.069432, 10.119086, 0 }, + { -0.246603, 0.067038, 10.123875, 0 }, + { -0.246603, 0.077812, 10.146620, 0 }, + { -0.246603, 0.083797, 10.123875, 0 }, + { -0.246603, 0.083797, 10.143028, 0 }, + { -0.241814, 0.071826, 10.110707, 0 }, + { -0.248997, 0.077812, 10.134649, 0 }, + { -0.251391, 0.074220, 10.143028, 0 }, + { -0.243011, 0.082600, 10.133451, 0 }, + { -0.251391, 0.079009, 10.111904, 0 }, + { -0.251391, 0.081403, 10.122678, 0 }, + { -0.247800, 0.080206, 10.144226, 0 }, + { -0.247800, 0.092177, 10.114298, 0 }, + { -0.244208, 0.073023, 10.134649, 0 }, + { -0.245406, 0.081403, 10.126269, 0 }, + { -0.250194, 0.073023, 10.144226, 0 }, + { -0.243011, 0.079009, 10.133451, 0 }, + { -0.260968, 0.077812, 10.122678, 0 }, + { -0.252588, 0.090980, 10.122678, 0 }, + { -0.268150, 0.073023, 10.128663, 0 }, + { -0.256179, 0.075417, 10.123875, 0 }, + { -0.248997, 0.063446, 10.104721, 0 }, + { -0.245406, 0.090980, 10.128663, 0 }, + { -0.253785, 0.087388, 10.115496, 0 }, + { -0.239420, 0.073023, 10.138240, 0 }, + { -0.238223, 0.059855, 10.119086, 0 }, + { -0.248997, 0.070629, 10.125072, 0 }, + { -0.250194, 0.081403, 10.131058, 0 }, + { -0.248997, 0.093374, 10.132255, 0 }, + { -0.253785, 0.092177, 10.128663, 0 }, + { -0.251391, 0.071826, 10.134649, 0 }, + { -0.233435, 0.074220, 10.129861, 0 }, + { -0.241814, 0.079009, 10.103524, 0 }, + { -0.253785, 0.070629, 10.153803, 0 }, + { -0.260968, 0.069432, 10.144226, 0 }, + { -0.250194, 0.065841, 10.123875, 0 }, + { -0.262165, 0.092177, 10.125072, 0 }, + { -0.252588, 0.088585, 10.151408, 0 }, + { -0.253785, 0.087388, 10.132255, 0 }, + { -0.244208, 0.062249, 10.137043, 0 }, + { -0.256179, 0.065841, 10.110707, 0 }, + { -0.244208, 0.075417, 10.117889, 0 }, + { -0.240617, 0.082600, 10.132255, 0 }, + { -0.248997, 0.074220, 10.115496, 0 }, + { -0.250194, 0.079009, 10.141831, 0 }, + { -0.246603, 0.077812, 10.119086, 0 }, + { -0.252588, 0.074220, 10.117889, 0 }, + { -0.257377, 0.075417, 10.120284, 0 }, + { -0.250194, 0.077812, 10.117889, 0 }, + { -0.239420, 0.081403, 10.143028, 0 }, + { -0.237026, 0.076614, 10.137043, 0 }, + { -0.240617, 0.077812, 10.149014, 0 }, + { -0.270545, 0.071826, 10.131058, 0 }, + { -0.262165, 0.068235, 10.122678, 0 }, + { -0.259771, 0.067038, 10.114298, 0 }, + { -0.246603, 0.082600, 10.121481, 0 }, + { -0.254982, 0.076614, 10.127466, 0 }, + { -0.244208, 0.063446, 10.122678, 0 }, + { -0.246603, 0.074220, 10.121481, 0 }, + { -0.253785, 0.086191, 10.127466, 0 }, + { -0.253785, 0.079009, 10.131058, 0 }, + { -0.245406, 0.071826, 10.132255, 0 }, + { -0.248997, 0.074220, 10.132255, 0 }, + { -0.260968, 0.055067, 10.121481, 0 }, + { -0.243011, 0.070629, 10.122678, 0 }, + { -0.252588, 0.070629, 10.132255, 0 }, + { -0.243011, 0.077812, 10.143028, 0 }, + { -0.246603, 0.077812, 10.132255, 0 }, + { -0.253785, 0.082600, 10.131058, 0 }, + { -0.256179, 0.068235, 10.137043, 0 }, + { -0.243011, 0.088585, 10.121481, 0 }, + { -0.239420, 0.065841, 10.133451, 0 }, + { -0.252588, 0.063446, 10.122678, 0 }, + { -0.252588, 0.082600, 10.141831, 0 }, + { -0.238223, 0.083797, 10.122678, 0 }, + { -0.251391, 0.076614, 10.140635, 0 }, + { -0.265756, 0.081403, 10.135846, 0 }, + { -0.252588, 0.076614, 10.141831, 0 }, + { -0.246603, 0.079009, 10.131058, 0 }, + { -0.250194, 0.077812, 10.126269, 0 }, + { -0.240617, 0.079009, 10.146620, 0 }, + { -0.247800, 0.089783, 10.132255, 0 }, + { -0.259771, 0.089783, 10.111904, 0 }, + { -0.266953, 0.084994, 10.141831, 0 }, + { -0.244208, 0.087388, 10.147817, 0 }, + { -0.235829, 0.067038, 10.127466, 0 }, + { -0.245406, 0.069432, 10.129861, 0 }, + { -0.250194, 0.083797, 10.108313, 0 }, + { -0.240617, 0.084994, 10.146620, 0 }, + { -0.256179, 0.077812, 10.121481, 0 }, + { -0.250194, 0.076614, 10.151408, 0 }, + { -0.248997, 0.073023, 10.128663, 0 }, + { -0.252588, 0.068235, 10.140635, 0 }, + { -0.252588, 0.074220, 10.147817, 0 }, + { -0.253785, 0.083797, 10.139438, 0 }, + { -0.243011, 0.069432, 10.114298, 0 }, + { -0.235829, 0.059855, 10.122678, 0 }, + { -0.253785, 0.076614, 10.145423, 0 }, + { -0.245406, 0.077812, 10.115496, 0 }, + { -0.252588, 0.065841, 10.139438, 0 }, + { -0.248997, 0.092177, 10.132255, 0 }, + { -0.256179, 0.088585, 10.150211, 0 }, + { -0.250194, 0.082600, 10.134649, 0 }, + { -0.244208, 0.069432, 10.137043, 0 }, + { -0.254982, 0.076614, 10.127466, 0 }, + { -0.253785, 0.063446, 10.135846, 0 }, + { -0.258574, 0.080206, 10.145423, 0 }, + { -0.232237, 0.074220, 10.126269, 0 }, + { -0.241814, 0.080206, 10.131058, 0 }, + { -0.240617, 0.075417, 10.116693, 0 }, + { -0.253785, 0.068235, 10.132255, 0 }, + { -0.241814, 0.083797, 10.139438, 0 }, + { -0.245406, 0.084994, 10.129861, 0 }, + { -0.245406, 0.079009, 10.165773, 0 }, + { -0.238223, 0.079009, 10.101130, 0 }, + { -0.247800, 0.081403, 10.138240, 0 }, + { -0.244208, 0.070629, 10.126269, 0 }, + { -0.253785, 0.082600, 10.149014, 0 }, + { -0.235829, 0.079009, 10.115496, 0 }, + { -0.239420, 0.070629, 10.114298, 0 }, + { -0.251391, 0.086191, 10.128663, 0 }, + { -0.241814, 0.075417, 10.119086, 0 }, + { -0.241814, 0.074220, 10.165773, 0 }, + { -0.233435, 0.075417, 10.101130, 0 }, + { -0.254982, 0.087388, 10.135846, 0 }, + { -0.232237, 0.074220, 10.129861, 0 }, + { -0.233435, 0.076614, 10.123875, 0 }, + { -0.258574, 0.093374, 10.137043, 0 }, + { -0.243011, 0.074220, 10.137043, 0 }, + { -0.244208, 0.083797, 10.145423, 0 }, + { -0.252588, 0.087388, 10.137043, 0 }, + { -0.251391, 0.077812, 10.120284, 0 }, + { -0.235829, 0.067038, 10.117889, 0 }, + { -0.240617, 0.075417, 10.125072, 0 }, + { -0.253785, 0.086191, 10.127466, 0 }, + { -0.256179, 0.080206, 10.126269, 0 }, + { -0.254982, 0.071826, 10.132255, 0 }, + { -0.235829, 0.074220, 10.128663, 0 }, + { -0.252588, 0.079009, 10.117889, 0 }, + { -0.245406, 0.081403, 10.123875, 0 }, + { -0.246603, 0.073023, 10.127466, 0 }, + { -0.252588, 0.063446, 10.159788, 0 }, + { -0.247800, 0.079009, 10.147817, 0 }, + { -0.258574, 0.079009, 10.131058, 0 }, + { -0.269348, 0.075417, 10.134649, 0 }, + { -0.248997, 0.083797, 10.107116, 0 }, + { -0.244208, 0.081403, 10.139438, 0 }, + { -0.259771, 0.070629, 10.133451, 0 }, + { -0.257377, 0.063446, 10.128663, 0 }, + { -0.254982, 0.071826, 10.121481, 0 }, + { -0.252588, 0.088585, 10.137043, 0 }, + { -0.251391, 0.083797, 10.135846, 0 }, + { -0.253785, 0.086191, 10.134649, 0 }, + { -0.252588, 0.073023, 10.115496, 0 }, + { -0.254982, 0.075417, 10.145423, 0 }, + { -0.250194, 0.076614, 10.137043, 0 }, + { -0.248997, 0.070629, 10.135846, 0 }, + { -0.259771, 0.073023, 10.137043, 0 }, + { -0.245406, 0.088585, 10.120284, 0 }, + { -0.254982, 0.074220, 10.151408, 0 }, + { -0.252588, 0.074220, 10.103524, 0 }, + { -0.258574, 0.070629, 10.146620, 0 }, + { -0.251391, 0.080206, 10.121481, 0 }, + { -0.241814, 0.070629, 10.131058, 0 }, + { -0.246603, 0.071826, 10.116693, 0 }, + { -0.248997, 0.067038, 10.135846, 0 }, + { -0.251391, 0.070629, 10.132255, 0 }, + { -0.250194, 0.081403, 10.132255, 0 }, + { -0.254982, 0.074220, 10.134649, 0 }, + { -0.243011, 0.081403, 10.131058, 0 }, + { -0.237026, 0.089783, 10.128663, 0 }, + { -0.243011, 0.077812, 10.125072, 0 }, + { -0.244208, 0.074220, 10.131058, 0 }, + { -0.243011, 0.086191, 10.121481, 0 }, + { -0.250194, 0.079009, 10.135846, 0 }, + { -0.247800, 0.061052, 10.132255, 0 }, + { -0.258574, 0.063446, 10.122678, 0 }, + { -0.245406, 0.076614, 10.114298, 0 }, + { -0.238223, 0.082600, 10.101130, 0 }, + { -0.264559, 0.057461, 10.119086, 0 }, + { -0.248997, 0.077812, 10.126269, 0 }, + { -0.237026, 0.094571, 10.127466, 0 }, + { -0.256179, 0.071826, 10.116693, 0 }, + { -0.248997, 0.080206, 10.135846, 0 }, + { -0.259771, 0.067038, 10.128663, 0 }, + { -0.246603, 0.074220, 10.134649, 0 }, + { -0.244208, 0.083797, 10.131058, 0 }, + { -0.233435, 0.075417, 10.129861, 0 }, + { -0.241814, 0.074220, 10.128663, 0 }, + { -0.238223, 0.080206, 10.105919, 0 }, + { -0.241814, 0.084994, 10.131058, 0 }, + { -0.254982, 0.076614, 10.129861, 0 }, + { -0.258574, 0.079009, 10.117889, 0 }, + { -0.251391, 0.069432, 10.135846, 0 }, + { -0.243011, 0.082600, 10.135846, 0 }, + { -0.243011, 0.073023, 10.121481, 0 }, + { -0.250194, 0.074220, 10.140635, 0 }, + { -0.251391, 0.069432, 10.119086, 0 }, + { -0.258574, 0.074220, 10.117889, 0 }, + { -0.260968, 0.069432, 10.138240, 0 }, + { -0.260968, 0.080206, 10.133451, 0 }, + { -0.238223, 0.080206, 10.140635, 0 }, + { -0.248997, 0.075417, 10.103524, 0 }, + { -0.259771, 0.069432, 10.144226, 0 }, + { -0.252588, 0.076614, 10.095144, 0 }, + { -0.254982, 0.068235, 10.146620, 0 }, + { -0.256179, 0.079009, 10.143028, 0 }, + { -0.246603, 0.090980, 10.139438, 0 }, + { -0.251391, 0.079009, 10.131058, 0 }, + { -0.253785, 0.077812, 10.119086, 0 }, + { -0.256179, 0.076614, 10.157393, 0 }, + { -0.246603, 0.067038, 10.121481, 0 }, + { -0.237026, 0.081403, 10.159788, 0 }, + { -0.250194, 0.082600, 10.125072, 0 }, + { -0.248997, 0.077812, 10.117889, 0 }, + { -0.237026, 0.074220, 10.121481, 0 }, + { -0.237026, 0.062249, 10.138240, 0 }, + { -0.247800, 0.070629, 10.126269, 0 }, + { -0.245406, 0.073023, 10.138240, 0 }, + { -0.245406, 0.065841, 10.134649, 0 }, + { -0.240617, 0.083797, 10.137043, 0 }, + { -0.244208, 0.063446, 10.137043, 0 }, + { -0.260968, 0.080206, 10.123875, 0 }, + { -0.245406, 0.083797, 10.137043, 0 }, + { -0.237026, 0.068235, 10.122678, 0 }, + { -0.250194, 0.070629, 10.137043, 0 }, + { -0.248997, 0.073023, 10.128663, 0 }, + { -0.239420, 0.073023, 10.127466, 0 }, + { -0.256179, 0.069432, 10.123875, 0 }, + { -0.244208, 0.064643, 10.141831, 0 }, + { -0.246603, 0.062249, 10.114298, 0 }, + { -0.260968, 0.076614, 10.108313, 0 }, + { -0.257377, 0.069432, 10.135846, 0 }, + { -0.265756, 0.074220, 10.123875, 0 }, + { -0.254982, 0.065841, 10.145423, 0 }, + { -0.248997, 0.070629, 10.123875, 0 }, + { -0.241814, 0.079009, 10.137043, 0 }, + { -0.251391, 0.095768, 10.141831, 0 }, + { -0.244208, 0.071826, 10.111904, 0 }, + { -0.243011, 0.075417, 10.132255, 0 }, + { -0.246603, 0.090980, 10.131058, 0 }, + { -0.252588, 0.071826, 10.135846, 0 }, + { -0.248997, 0.065841, 10.120284, 0 }, + { -0.248997, 0.082600, 10.116693, 0 }, + { -0.263362, 0.075417, 10.138240, 0 }, + { -0.247800, 0.061052, 10.129861, 0 }, + { -0.250194, 0.059855, 10.132255, 0 }, + { -0.251391, 0.069432, 10.152605, 0 }, + { -0.247800, 0.068235, 10.129861, 0 }, + { -0.240617, 0.062249, 10.138240, 0 }, + { -0.264559, 0.070629, 10.120284, 0 }, + { -0.253785, 0.071826, 10.151408, 0 }, + { -0.246603, 0.074220, 10.125072, 0 }, + { -0.256179, 0.070629, 10.160985, 0 }, + { -0.247800, 0.061052, 10.131058, 0 }, + { -0.246603, 0.070629, 10.125072, 0 }, + { -0.258574, 0.086191, 10.135846, 0 }, + { -0.253785, 0.077812, 10.120284, 0 }, + { -0.235829, 0.074220, 10.133451, 0 }, + { -0.239420, 0.083797, 10.122678, 0 }, + { -0.258574, 0.071826, 10.139438, 0 }, + { -0.259771, 0.084994, 10.110707, 0 }, + { -0.243011, 0.077812, 10.131058, 0 }, + { -0.240617, 0.077812, 10.134649, 0 }, + { -0.244208, 0.059855, 10.128663, 0 }, + { -0.239420, 0.068235, 10.122678, 0 }, + { -0.258574, 0.076614, 10.119086, 0 }, + { -0.258574, 0.075417, 10.147817, 0 }, + { -0.248997, 0.062249, 10.117889, 0 }, + { -0.248997, 0.076614, 10.135846, 0 }, + { -0.241814, 0.076614, 10.109509, 0 }, + { -0.257377, 0.068235, 10.144226, 0 }, + { -0.264559, 0.064643, 10.096342, 0 }, + { -0.241814, 0.068235, 10.139438, 0 }, + { -0.250194, 0.088585, 10.114298, 0 }, + { -0.259771, 0.079009, 10.159788, 0 }, + { -0.247800, 0.071826, 10.138240, 0 }, + { -0.245406, 0.073023, 10.117889, 0 }, + { -0.246603, 0.070629, 10.137043, 0 }, + { -0.248997, 0.069432, 10.108313, 0 }, + { -0.254982, 0.077812, 10.144226, 0 }, + { -0.254982, 0.088585, 10.108313, 0 }, + { -0.245406, 0.082600, 10.135846, 0 }, + { -0.245406, 0.095768, 10.125072, 0 }, + { -0.232237, 0.083797, 10.133451, 0 }, + { -0.243011, 0.069432, 10.089159, 0 }, + { -0.237026, 0.082600, 10.152605, 0 }, + { -0.241814, 0.065841, 10.116693, 0 }, + { -0.262165, 0.067038, 10.138240, 0 }, + { -0.262165, 0.081403, 10.150211, 0 }, + { -0.257377, 0.079009, 10.109509, 0 }, + { -0.257377, 0.084994, 10.131058, 0 }, + { -0.238223, 0.090980, 10.107116, 0 }, + { -0.231040, 0.093374, 10.151408, 0 }, + { -0.250194, 0.069432, 10.108313, 0 }, + { -0.244208, 0.067038, 10.166970, 0 }, + { -0.244208, 0.074220, 10.105919, 0 }, + { -0.247800, 0.076614, 10.145423, 0 }, + { -0.237026, 0.071826, 10.122678, 0 }, + { -0.244208, 0.070629, 10.127466, 0 }, + { -0.243011, 0.074220, 10.119086, 0 }, + { -0.246603, 0.073023, 10.121481, 0 }, + { -0.245406, 0.084994, 10.129861, 0 }, + { -0.237026, 0.082600, 10.128663, 0 }, + { -0.229843, 0.074220, 10.127466, 0 }, + { -0.250194, 0.076614, 10.116693, 0 }, + { -0.240617, 0.074220, 10.138240, 0 }, + { -0.240617, 0.074220, 10.117889, 0 }, + { -0.245406, 0.075417, 10.126269, 0 }, + { -0.241814, 0.077812, 10.129861, 0 }, + { -0.251391, 0.081403, 10.139438, 0 }, + { -0.227449, 0.075417, 10.127466, 0 }, + { -0.239420, 0.079009, 10.119086, 0 }, + { -0.238223, 0.087388, 10.120284, 0 }, + { -0.243011, 0.057461, 10.122678, 0 }, + { -0.250194, 0.056264, 10.145423, 0 }, + { -0.233435, 0.075417, 10.119086, 0 }, + { -0.237026, 0.061052, 10.137043, 0 }, + { -0.240617, 0.084994, 10.123875, 0 }, + { -0.245406, 0.088585, 10.151408, 0 }, + { -0.234632, 0.081403, 10.128663, 0 }, + { -0.240617, 0.086191, 10.123875, 0 }, + { -0.237026, 0.080206, 10.119086, 0 }, + { -0.234632, 0.067038, 10.134649, 0 }, + { -0.241814, 0.070629, 10.138240, 0 }, + { -0.248997, 0.065841, 10.134649, 0 }, + { -0.238223, 0.081403, 10.143028, 0 }, + { -0.243011, 0.079009, 10.121481, 0 }, + { -0.240617, 0.079009, 10.128663, 0 }, + { -0.251391, 0.069432, 10.131058, 0 }, + { -0.244208, 0.063446, 10.138240, 0 }, + { -0.240617, 0.058658, 10.117889, 0 }, + { -0.239420, 0.081403, 10.145423, 0 }, + { -0.245406, 0.080206, 10.114298, 0 }, + { -0.240617, 0.075417, 10.127466, 0 }, + { -0.243011, 0.077812, 10.127466, 0 }, + { -0.250194, 0.065841, 10.119086, 0 }, + { -0.232237, 0.064643, 10.120284, 0 }, + { -0.239420, 0.065841, 10.131058, 0 }, + { -0.251391, 0.071826, 10.143028, 0 }, + { -0.246603, 0.080206, 10.125072, 0 }, + { -0.238223, 0.075417, 10.123875, 0 }, + { -0.245406, 0.081403, 10.132255, 0 }, + { -0.241814, 0.083797, 10.117889, 0 }, + { -0.251391, 0.070629, 10.135846, 0 }, + { -0.262165, 0.075417, 10.120284, 0 }, + { -0.251391, 0.086191, 10.145423, 0 }, + { -0.239420, 0.087388, 10.131058, 0 }, + { -0.246603, 0.077812, 10.126269, 0 }, + { -0.246603, 0.073023, 10.135846, 0 }, + { -0.264559, 0.079009, 10.120284, 0 }, + { -0.264559, 0.074220, 10.125072, 0 }, + { -0.229843, 0.067038, 10.127466, 0 }, + { -0.231040, 0.077812, 10.131058, 0 }, + { -0.245406, 0.075417, 10.128663, 0 }, + { -0.240617, 0.071826, 10.116693, 0 }, + { -0.234632, 0.081403, 10.128663, 0 }, + { -0.228646, 0.063446, 10.132255, 0 }, + { -0.227449, 0.057461, 10.139438, 0 }, + { -0.251391, 0.075417, 10.120284, 0 }, + { -0.231040, 0.092177, 10.122678, 0 }, + { -0.240617, 0.077812, 10.137043, 0 }, + { -0.252588, 0.075417, 10.132255, 0 }, + { -0.248997, 0.077812, 10.120284, 0 }, + { -0.248997, 0.080206, 10.117889, 0 }, + { -0.252588, 0.063446, 10.113101, 0 }, + { -0.247800, 0.069432, 10.133451, 0 }, + { -0.246603, 0.092177, 10.108313, 0 }, + { -0.240617, 0.088585, 10.134649, 0 }, + { -0.239420, 0.076614, 10.125072, 0 }, + { -0.248997, 0.070629, 10.128663, 0 }, + { -0.243011, 0.073023, 10.128663, 0 }, + { -0.243011, 0.084994, 10.115496, 0 }, + { -0.243011, 0.087388, 10.141831, 0 }, + { -0.237026, 0.070629, 10.144226, 0 }, + { -0.247800, 0.081403, 10.113101, 0 }, + { -0.234632, 0.096965, 10.133451, 0 }, + { -0.258574, 0.069432, 10.132255, 0 }, + { -0.258574, 0.077812, 10.116693, 0 }, + { -0.243011, 0.079009, 10.135846, 0 }, + { -0.253785, 0.082600, 10.102327, 0 }, + { -0.240617, 0.075417, 10.144226, 0 }, + { -0.247800, 0.074220, 10.123875, 0 }, + { -0.256179, 0.079009, 10.120284, 0 }, + { -0.254982, 0.077812, 10.141831, 0 }, + { -0.257377, 0.076614, 10.143028, 0 }, + { -0.250194, 0.086191, 10.137043, 0 }, + { -0.238223, 0.081403, 10.116693, 0 }, + { -0.238223, 0.084994, 10.139438, 0 }, + { -0.247800, 0.080206, 10.126269, 0 }, + { -0.263362, 0.074220, 10.131058, 0 }, + { -0.260968, 0.077812, 10.123875, 0 }, + { -0.238223, 0.059855, 10.128663, 0 }, + { -0.245406, 0.062249, 10.134649, 0 }, + { -0.257377, 0.080206, 10.131058, 0 }, + { -0.244208, 0.083797, 10.131058, 0 }, + { -0.232237, 0.080206, 10.134649, 0 }, + { -0.244208, 0.076614, 10.119086, 0 }, + { -0.241814, 0.073023, 10.141831, 0 }, + { -0.257377, 0.067038, 10.138240, 0 }, + { -0.241814, 0.086191, 10.133451, 0 }, + { -0.246603, 0.079009, 10.133451, 0 }, + { -0.248997, 0.067038, 10.125072, 0 }, + { -0.239420, 0.082600, 10.122678, 0 }, + { -0.244208, 0.084994, 10.129861, 0 }, + { -0.233435, 0.073023, 10.147817, 0 }, + { -0.250194, 0.069432, 10.133451, 0 }, + { -0.254982, 0.070629, 10.146620, 0 }, + { -0.231040, 0.083797, 10.117889, 0 }, + { -0.245406, 0.081403, 10.119086, 0 }, + { -0.256179, 0.093374, 10.131058, 0 }, + { -0.241814, 0.084994, 10.138240, 0 }, + { -0.252588, 0.073023, 10.137043, 0 }, + { -0.251391, 0.081403, 10.126269, 0 }, + { -0.235829, 0.069432, 10.137043, 0 }, + { -0.247800, 0.080206, 10.132255, 0 }, + { -0.238223, 0.064643, 10.144226, 0 }, + { -0.234632, 0.076614, 10.127466, 0 }, + { -0.245406, 0.069432, 10.137043, 0 }, + { -0.241814, 0.082600, 10.116693, 0 }, + { -0.233435, 0.101754, 10.132255, 0 }, + { -0.240617, 0.086191, 10.132255, 0 }, + { -0.235829, 0.081403, 10.120284, 0 }, + { -0.239420, 0.076614, 10.128663, 0 }, + { -0.251391, 0.079009, 10.117889, 0 }, + { -0.256179, 0.081403, 10.149014, 0 }, + { -0.238223, 0.079009, 10.105919, 0 }, + { -0.234632, 0.079009, 10.125072, 0 }, + { -0.254982, 0.071826, 10.115496, 0 }, + { -0.263362, 0.082600, 10.151408, 0 }, + { -0.243011, 0.075417, 10.109509, 0 }, + { -0.222661, 0.073023, 10.129861, 0 }, + { -0.246603, 0.074220, 10.133451, 0 }, + { -0.248997, 0.086191, 10.129861, 0 }, + { -0.252588, 0.086191, 10.149014, 0 }, + { -0.238223, 0.071826, 10.104721, 0 }, + { -0.237026, 0.071826, 10.135846, 0 }, + { -0.243011, 0.086191, 10.111904, 0 }, + { -0.244208, 0.093374, 10.141831, 0 }, + { -0.253785, 0.063446, 10.123875, 0 }, + { -0.244208, 0.083797, 10.134649, 0 }, + { -0.244208, 0.090980, 10.128663, 0 }, + { -0.258574, 0.065841, 10.134649, 0 }, + { -0.256179, 0.070629, 10.128663, 0 }, + { -0.243011, 0.071826, 10.137043, 0 }, + { -0.225055, 0.074220, 10.134649, 0 }, + { -0.245406, 0.069432, 10.116693, 0 }, + { -0.237026, 0.077812, 10.133451, 0 }, + { -0.245406, 0.073023, 10.104721, 0 }, + { -0.253785, 0.081403, 10.159788, 0 }, + { -0.245406, 0.086191, 10.113101, 0 }, + { -0.243011, 0.081403, 10.126269, 0 }, + { -0.241814, 0.065841, 10.108313, 0 }, + { -0.240617, 0.057461, 10.131058, 0 }, + { -0.241814, 0.065841, 10.144226, 0 }, + { -0.237026, 0.073023, 10.128663, 0 }, + { -0.250194, 0.090980, 10.145423, 0 }, + { -0.254982, 0.070629, 10.119086, 0 }, + { -0.244208, 0.063446, 10.131058, 0 }, + { -0.235829, 0.077812, 10.121481, 0 }, + { -0.248997, 0.076614, 10.137043, 0 }, + { -0.262165, 0.076614, 10.123875, 0 }, + { -0.250194, 0.064643, 10.119086, 0 }, + { -0.239420, 0.077812, 10.116693, 0 }, + { -0.245406, 0.080206, 10.128663, 0 }, + { -0.243011, 0.084994, 10.123875, 0 }, + { -0.244208, 0.077812, 10.125072, 0 }, + { -0.237026, 0.089783, 10.122678, 0 }, + { -0.235829, 0.065841, 10.137043, 0 }, + { -0.245406, 0.065841, 10.150211, 0 }, + { -0.252588, 0.074220, 10.111904, 0 }, + { -0.241814, 0.068235, 10.146620, 0 }, + { -0.229843, 0.069432, 10.120284, 0 }, + { -0.240617, 0.079009, 10.131058, 0 }, + { -0.240617, 0.084994, 10.095144, 0 }, + { -0.239420, 0.067038, 10.133451, 0 }, + { -0.247800, 0.083797, 10.128663, 0 }, + { -0.252588, 0.075417, 10.135846, 0 }, + { -0.252588, 0.068235, 10.131058, 0 }, + { -0.243011, 0.087388, 10.102327, 0 }, + { -0.247800, 0.088585, 10.132255, 0 }, + { -0.243011, 0.086191, 10.127466, 0 }, + { -0.229843, 0.080206, 10.123875, 0 }, + { -0.245406, 0.073023, 10.134649, 0 }, + { -0.233435, 0.081403, 10.132255, 0 }, + { -0.245406, 0.082600, 10.126269, 0 }, + { -0.233435, 0.073023, 10.137043, 0 }, + { -0.235829, 0.070629, 10.140635, 0 }, + { -0.241814, 0.076614, 10.121481, 0 }, + { -0.244208, 0.069432, 10.123875, 0 }, + { -0.252588, 0.075417, 10.140635, 0 }, + { -0.253785, 0.080206, 10.133451, 0 }, + { -0.237026, 0.075417, 10.121481, 0 }, + { -0.227449, 0.065841, 10.129861, 0 }, + { -0.245406, 0.077812, 10.131058, 0 }, + { -0.229843, 0.094571, 10.129861, 0 }, + { -0.237026, 0.068235, 10.105919, 0 }, + { -0.260968, 0.073023, 10.120284, 0 }, + { -0.241814, 0.076614, 10.131058, 0 }, + { -0.250194, 0.077812, 10.126269, 0 }, + { -0.254982, 0.068235, 10.135846, 0 }, + { -0.240617, 0.071826, 10.108313, 0 }, + { -0.258574, 0.083797, 10.125072, 0 }, + { -0.254982, 0.081403, 10.132255, 0 }, + { -0.251391, 0.079009, 10.135846, 0 }, + { -0.245406, 0.069432, 10.121481, 0 }, + { -0.232237, 0.069432, 10.122678, 0 }, + { -0.234632, 0.083797, 10.131058, 0 }, + { -0.234632, 0.089783, 10.129861, 0 }, + { -0.238223, 0.079009, 10.127466, 0 }, + { -0.246603, 0.083797, 10.121481, 0 }, + { -0.247800, 0.074220, 10.121481, 0 }, + { -0.247800, 0.075417, 10.117889, 0 }, + { -0.235829, 0.065841, 10.129861, 0 }, + { -0.241814, 0.075417, 10.111904, 0 }, + { -0.239420, 0.081403, 10.129861, 0 }, + { -0.247800, 0.087388, 10.128663, 0 }, + { -0.243011, 0.079009, 10.126269, 0 }, + { -0.245406, 0.067038, 10.137043, 0 }, + { -0.257377, 0.059855, 10.122678, 0 }, + { -0.250194, 0.068235, 10.147817, 0 }, + { -0.243011, 0.074220, 10.129861, 0 }, + { -0.237026, 0.086191, 10.129861, 0 }, + { -0.246603, 0.107739, 10.131058, 0 }, + { -0.241814, 0.082600, 10.141831, 0 }, + { -0.245406, 0.064643, 10.119086, 0 }, + { -0.258574, 0.075417, 10.129861, 0 }, + { -0.237026, 0.071826, 10.123875, 0 }, + { -0.243011, 0.075417, 10.101130, 0 }, + { -0.253785, 0.083797, 10.125072, 0 }, + { -0.241814, 0.081403, 10.119086, 0 }, + { -0.234632, 0.089783, 10.137043, 0 }, + { -0.245406, 0.070629, 10.132255, 0 }, + { -0.251391, 0.067038, 10.131058, 0 }, + { -0.250194, 0.069432, 10.139438, 0 }, + { -0.237026, 0.086191, 10.123875, 0 }, + { -0.235829, 0.086191, 10.147817, 0 }, + { -0.248997, 0.074220, 10.123875, 0 }, + { -0.251391, 0.079009, 10.114298, 0 }, + { -0.246603, 0.081403, 10.122678, 0 }, + { -0.235829, 0.079009, 10.119086, 0 }, + { -0.240617, 0.087388, 10.127466, 0 }, + { -0.239420, 0.077812, 10.133451, 0 }, + { -0.247800, 0.087388, 10.108313, 0 }, + { -0.245406, 0.087388, 10.111904, 0 }, + { -0.237026, 0.073023, 10.147817, 0 }, + { -0.241814, 0.079009, 10.135846, 0 }, + { -0.241814, 0.074220, 10.121481, 0 }, + { -0.258574, 0.063446, 10.146620, 0 }, + { -0.243011, 0.079009, 10.123875, 0 }, + { -0.225055, 0.073023, 10.122678, 0 }, + { -0.234632, 0.075417, 10.119086, 0 }, + { -0.246603, 0.068235, 10.134649, 0 }, + { -0.235829, 0.071826, 10.141831, 0 }, + { -0.234632, 0.069432, 10.137043, 0 }, + { -0.244208, 0.064643, 10.126269, 0 }, + { -0.239420, 0.068235, 10.125072, 0 }, + { -0.246603, 0.087388, 10.131058, 0 }, + { -0.241814, 0.071826, 10.128663, 0 }, + { -0.241814, 0.083797, 10.140635, 0 }, + { -0.252588, 0.070629, 10.119086, 0 }, + { -0.243011, 0.070629, 10.117889, 0 }, + { -0.265756, 0.077812, 10.125072, 0 }, + { -0.248997, 0.083797, 10.129861, 0 }, + { -0.248997, 0.082600, 10.122678, 0 }, + { -0.247800, 0.083797, 10.133451, 0 }, + { -0.260968, 0.086191, 10.141831, 0 }, + { -0.244208, 0.075417, 10.132255, 0 }, + { -0.232237, 0.080206, 10.135846, 0 }, + { -0.244208, 0.077812, 10.131058, 0 }, + { -0.239420, 0.077812, 10.143028, 0 }, + { -0.238223, 0.077812, 10.127466, 0 }, + { -0.235829, 0.089783, 10.140635, 0 }, + { -0.239420, 0.070629, 10.111904, 0 }, + { -0.253785, 0.064643, 10.129861, 0 }, + { -0.250194, 0.065841, 10.127466, 0 }, + { -0.251391, 0.073023, 10.110707, 0 }, + { -0.240617, 0.069432, 10.098736, 0 }, + { -0.246603, 0.074220, 10.122678, 0 }, + { -0.243011, 0.077812, 10.141831, 0 }, + { -0.243011, 0.074220, 10.131058, 0 }, + { -0.247800, 0.081403, 10.125072, 0 }, + { -0.256179, 0.057461, 10.134649, 0 }, + { -0.243011, 0.068235, 10.144226, 0 }, + { -0.228646, 0.095768, 10.125072, 0 }, + { -0.250194, 0.083797, 10.135846, 0 }, + { -0.246603, 0.062249, 10.122678, 0 }, + { -0.245406, 0.073023, 10.119086, 0 }, + { -0.246603, 0.081403, 10.122678, 0 }, + { -0.246603, 0.080206, 10.129861, 0 }, + { -0.231040, 0.067038, 10.116693, 0 }, + { -0.228646, 0.074220, 10.129861, 0 }, + { -0.235829, 0.073023, 10.134649, 0 }, + { -0.246603, 0.093374, 10.123875, 0 }, + { -0.252588, 0.080206, 10.127466, 0 }, + { -0.233435, 0.061052, 10.133451, 0 }, + { -0.243011, 0.070629, 10.137043, 0 }, + { -0.250194, 0.077812, 10.108313, 0 }, + { -0.235829, 0.083797, 10.121481, 0 }, + { -0.247800, 0.081403, 10.141831, 0 }, + { -0.252588, 0.081403, 10.131058, 0 }, + { -0.243011, 0.080206, 10.126269, 0 }, + { -0.235829, 0.070629, 10.109509, 0 }, + { -0.237026, 0.073023, 10.135846, 0 }, + { -0.237026, 0.074220, 10.123875, 0 }, + { -0.253785, 0.089783, 10.117889, 0 }, + { -0.248997, 0.087388, 10.123875, 0 }, + { -0.228646, 0.073023, 10.128663, 0 }, + { -0.233435, 0.073023, 10.137043, 0 }, + { -0.247800, 0.080206, 10.123875, 0 }, + { -0.254982, 0.074220, 10.132255, 0 }, + { -0.234632, 0.081403, 10.113101, 0 }, + { -0.241814, 0.074220, 10.149014, 0 }, + { -0.244208, 0.064643, 10.119086, 0 }, + { -0.235829, 0.069432, 10.121481, 0 }, + { -0.237026, 0.071826, 10.123875, 0 }, + { -0.241814, 0.065841, 10.134649, 0 }, + { -0.237026, 0.065841, 10.153803, 0 }, + { -0.239420, 0.077812, 10.135846, 0 }, + { -0.244208, 0.073023, 10.125072, 0 }, + { -0.246603, 0.065841, 10.117889, 0 }, + { -0.237026, 0.073023, 10.129861, 0 }, + { -0.254982, 0.080206, 10.111904, 0 }, + { -0.241814, 0.076614, 10.140635, 0 }, + { -0.243011, 0.057461, 10.123875, 0 }, + { -0.241814, 0.081403, 10.139438, 0 }, + { -0.246603, 0.070629, 10.131058, 0 }, + { -0.251391, 0.075417, 10.147817, 0 }, + { -0.251391, 0.070629, 10.120284, 0 }, + { -0.234632, 0.086191, 10.137043, 0 }, + { -0.235829, 0.079009, 10.119086, 0 }, + { -0.235829, 0.086191, 10.119086, 0 }, + { -0.234632, 0.069432, 10.121481, 0 }, + { -0.246603, 0.069432, 10.126269, 0 }, + { -0.245406, 0.083797, 10.145423, 0 }, + { -0.245406, 0.077812, 10.116693, 0 }, + { -0.240617, 0.079009, 10.144226, 0 }, + { -0.237026, 0.073023, 10.134649, 0 }, + { -0.238223, 0.077812, 10.140635, 0 }, + { -0.227449, 0.082600, 10.127466, 0 }, + { -0.233435, 0.092177, 10.122678, 0 }, + { -0.246603, 0.083797, 10.140635, 0 }, + { -0.229843, 0.065841, 10.134649, 0 }, + { -0.227449, 0.080206, 10.138240, 0 }, + { -0.243011, 0.077812, 10.138240, 0 }, + { -0.240617, 0.076614, 10.119086, 0 }, + { -0.241814, 0.073023, 10.125072, 0 }, + { -0.240617, 0.071826, 10.123875, 0 }, + { -0.250194, 0.079009, 10.117889, 0 }, + { -0.243011, 0.080206, 10.145423, 0 }, + { -0.252588, 0.081403, 10.119086, 0 }, + { -0.240617, 0.068235, 10.132255, 0 }, + { -0.244208, 0.065841, 10.114298, 0 }, + { -0.235829, 0.073023, 10.125072, 0 }, + { -0.248997, 0.076614, 10.117889, 0 }, + { -0.250194, 0.059855, 10.121481, 0 }, + { -0.239420, 0.095768, 10.147817, 0 }, + { -0.262165, 0.081403, 10.116693, 0 }, + { -0.253785, 0.065841, 10.149014, 0 }, + { -0.244208, 0.067038, 10.115496, 0 }, + { -0.238223, 0.074220, 10.122678, 0 }, + { -0.235829, 0.075417, 10.149014, 0 }, + { -0.243011, 0.062249, 10.144226, 0 }, + { -0.244208, 0.073023, 10.123875, 0 }, + { -0.239420, 0.084994, 10.132255, 0 }, + { -0.238223, 0.074220, 10.120284, 0 }, + { -0.256179, 0.063446, 10.137043, 0 }, + { -0.243011, 0.061052, 10.117889, 0 }, + { -0.235829, 0.064643, 10.119086, 0 }, + { -0.235829, 0.079009, 10.133451, 0 }, + { -0.237026, 0.082600, 10.119086, 0 }, + { -0.238223, 0.079009, 10.139438, 0 }, + { -0.247800, 0.065841, 10.117889, 0 }, + { -0.243011, 0.069432, 10.158591, 0 }, + { -0.246603, 0.080206, 10.122678, 0 }, + { -0.256179, 0.083797, 10.141831, 0 }, + { -0.235829, 0.092177, 10.108313, 0 }, + { -0.237026, 0.061052, 10.132255, 0 }, + { -0.237026, 0.058658, 10.156197, 0 }, + { -0.244208, 0.059855, 10.117889, 0 }, + { -0.237026, 0.087388, 10.144226, 0 }, + { -0.257377, 0.094571, 10.110707, 0 }, + { -0.256179, 0.080206, 10.132255, 0 }, + { -0.243011, 0.089783, 10.133451, 0 }, + { -0.238223, 0.080206, 10.133451, 0 }, + { -0.240617, 0.067038, 10.114298, 0 }, + { -0.246603, 0.064643, 10.133451, 0 }, + { -0.245406, 0.075417, 10.128663, 0 }, + { -0.240617, 0.071826, 10.122678, 0 }, + { -0.229843, 0.068235, 10.126269, 0 }, + { -0.240617, 0.081403, 10.123875, 0 }, + { -0.244208, 0.079009, 10.138240, 0 }, + { -0.237026, 0.065841, 10.145423, 0 }, + { -0.239420, 0.069432, 10.133451, 0 }, + { -0.253785, 0.076614, 10.127466, 0 }, + { -0.256179, 0.082600, 10.125072, 0 }, + { -0.232237, 0.081403, 10.113101, 0 }, + { -0.239420, 0.065841, 10.139438, 0 }, + { -0.241814, 0.084994, 10.128663, 0 }, + { -0.252588, 0.071826, 10.122678, 0 }, + { -0.243011, 0.067038, 10.157393, 0 }, + { -0.251391, 0.081403, 10.134649, 0 }, + { -0.251391, 0.083797, 10.127466, 0 }, + { -0.265756, 0.074220, 10.115496, 0 }, + { -0.245406, 0.062249, 10.150211, 0 }, + { -0.241814, 0.070629, 10.117889, 0 }, + { -0.257377, 0.083797, 10.120284, 0 }, + { -0.239420, 0.081403, 10.121481, 0 }, + { -0.247800, 0.068235, 10.135846, 0 }, + { -0.243011, 0.071826, 10.129861, 0 }, + { -0.235829, 0.082600, 10.128663, 0 }, + { -0.247800, 0.073023, 10.145423, 0 }, + { -0.258574, 0.065841, 10.123875, 0 }, + { -0.233435, 0.069432, 10.122678, 0 }, + { -0.245406, 0.076614, 10.120284, 0 }, + { -0.247800, 0.089783, 10.131058, 0 }, + { -0.244208, 0.090980, 10.114298, 0 }, + { -0.247800, 0.089783, 10.143028, 0 }, + { -0.229843, 0.073023, 10.119086, 0 }, + { -0.240617, 0.082600, 10.134649, 0 }, + { -0.244208, 0.095768, 10.125072, 0 }, + { -0.241814, 0.083797, 10.145423, 0 }, + { -0.250194, 0.068235, 10.139438, 0 }, + { -0.248997, 0.075417, 10.113101, 0 }, + { -0.250194, 0.076614, 10.128663, 0 }, + { -0.247800, 0.081403, 10.114298, 0 }, + { -0.247800, 0.075417, 10.123875, 0 }, + { -0.248997, 0.095768, 10.145423, 0 }, + { -0.245406, 0.088585, 10.143028, 0 }, + { -0.238223, 0.084994, 10.113101, 0 }, + { -0.240617, 0.071826, 10.126269, 0 }, + { -0.240617, 0.067038, 10.140635, 0 }, + { -0.245406, 0.071826, 10.138240, 0 }, + { -0.254982, 0.073023, 10.128663, 0 }, + { -0.245406, 0.077812, 10.145423, 0 }, + { -0.250194, 0.070629, 10.127466, 0 }, + { -0.243011, 0.073023, 10.137043, 0 }, + { -0.245406, 0.067038, 10.117889, 0 }, + { -0.243011, 0.071826, 10.151408, 0 }, + { -0.252588, 0.081403, 10.128663, 0 }, + { -0.233435, 0.074220, 10.110707, 0 }, + { -0.243011, 0.074220, 10.126269, 0 }, + { -0.239420, 0.089783, 10.143028, 0 }, + { -0.237026, 0.086191, 10.123875, 0 }, + { -0.243011, 0.064643, 10.129861, 0 }, + { -0.234632, 0.077812, 10.133451, 0 }, + { -0.250194, 0.086191, 10.133451, 0 }, + { -0.241814, 0.074220, 10.125072, 0 }, + { -0.243011, 0.086191, 10.122678, 0 }, + { -0.234632, 0.076614, 10.121481, 0 }, + { -0.251391, 0.082600, 10.135846, 0 }, + { -0.251391, 0.084994, 10.133451, 0 }, + { -0.245406, 0.063446, 10.117889, 0 }, + { -0.253785, 0.079009, 10.122678, 0 }, + { -0.243011, 0.074220, 10.129861, 0 }, + { -0.233435, 0.069432, 10.127466, 0 }, + { -0.251391, 0.077812, 10.126269, 0 }, + { -0.245406, 0.079009, 10.120284, 0 }, + { -0.247800, 0.068235, 10.128663, 0 }, + { -0.244208, 0.069432, 10.133451, 0 }, + { -0.238223, 0.074220, 10.146620, 0 }, + { -0.241814, 0.080206, 10.120284, 0 }, + { -0.248997, 0.071826, 10.107116, 0 }, + { -0.240617, 0.073023, 10.123875, 0 }, + { -0.239420, 0.063446, 10.135846, 0 }, + { -0.245406, 0.068235, 10.117889, 0 }, + { -0.248997, 0.088585, 10.105919, 0 }, + { -0.248997, 0.067038, 10.138240, 0 }, + { -0.247800, 0.074220, 10.128663, 0 }, + { -0.237026, 0.079009, 10.138240, 0 }, + { -0.243011, 0.092177, 10.140635, 0 }, + { -0.235829, 0.082600, 10.128663, 0 }, + { -0.240617, 0.079009, 10.116693, 0 }, + { -0.248997, 0.087388, 10.114298, 0 }, + { -0.238223, 0.079009, 10.120284, 0 }, + { -0.241814, 0.087388, 10.128663, 0 }, + { -0.250194, 0.063446, 10.129861, 0 }, + { -0.245406, 0.071826, 10.128663, 0 }, + { -0.251391, 0.073023, 10.123875, 0 }, + { -0.258574, 0.084994, 10.137043, 0 }, + { -0.246603, 0.077812, 10.140635, 0 }, + { -0.244208, 0.070629, 10.111904, 0 }, + { -0.252588, 0.075417, 10.143028, 0 }, + { -0.248997, 0.069432, 10.117889, 0 }, + { -0.243011, 0.073023, 10.129861, 0 }, + { -0.238223, 0.079009, 10.143028, 0 }, + { -0.238223, 0.080206, 10.114298, 0 }, + { -0.241814, 0.074220, 10.132255, 0 }, + { -0.240617, 0.065841, 10.132255, 0 }, + { -0.247800, 0.069432, 10.134649, 0 }, + { -0.251391, 0.075417, 10.132255, 0 }, + { -0.238223, 0.086191, 10.115496, 0 }, + { -0.245406, 0.076614, 10.139438, 0 }, + { -0.240617, 0.073023, 10.123875, 0 }, + { -0.238223, 0.071826, 10.137043, 0 }, + { -0.245406, 0.076614, 10.135846, 0 }, + { -0.251391, 0.081403, 10.133451, 0 }, + { -0.251391, 0.086191, 10.134649, 0 }, + { -0.248997, 0.079009, 10.115496, 0 }, + { -0.256179, 0.067038, 10.133451, 0 }, + { -0.246603, 0.068235, 10.121481, 0 }, + { -0.244208, 0.082600, 10.135846, 0 }, + { -0.250194, 0.079009, 10.122678, 0 }, + { -0.252588, 0.079009, 10.120284, 0 }, + { -0.243011, 0.083797, 10.127466, 0 }, + { -0.243011, 0.071826, 10.119086, 0 }, + { -0.251391, 0.081403, 10.128663, 0 }, + { -0.252588, 0.065841, 10.122678, 0 }, + { -0.240617, 0.079009, 10.131058, 0 }, + { -0.253785, 0.082600, 10.121481, 0 }, + { -0.256179, 0.071826, 10.140635, 0 }, + { -0.263362, 0.070629, 10.123875, 0 }, + { -0.248997, 0.074220, 10.123875, 0 }, + { -0.235829, 0.064643, 10.125072, 0 }, + { -0.238223, 0.082600, 10.125072, 0 }, + { -0.238223, 0.077812, 10.108313, 0 }, + { -0.231040, 0.071826, 10.117889, 0 }, + { -0.250194, 0.093374, 10.122678, 0 }, + { -0.241814, 0.080206, 10.123875, 0 }, + { -0.258574, 0.073023, 10.117889, 0 }, + { -0.248997, 0.071826, 10.127466, 0 }, + { -0.246603, 0.067038, 10.146620, 0 }, + { -0.248997, 0.074220, 10.126269, 0 }, + { -0.248997, 0.071826, 10.133451, 0 }, + { -0.247800, 0.080206, 10.133451, 0 }, + { -0.239420, 0.076614, 10.138240, 0 }, + { -0.248997, 0.081403, 10.127466, 0 }, + { -0.248997, 0.076614, 10.137043, 0 }, + { -0.248997, 0.080206, 10.123875, 0 }, + { -0.239420, 0.067038, 10.141831, 0 }, + { -0.235829, 0.083797, 10.119086, 0 }, + { -0.247800, 0.069432, 10.134649, 0 }, + { -0.237026, 0.087388, 10.137043, 0 }, + { -0.246603, 0.073023, 10.131058, 0 }, + { -0.251391, 0.083797, 10.135846, 0 }, + { -0.247800, 0.071826, 10.121481, 0 }, + { -0.246603, 0.076614, 10.128663, 0 }, + { -0.251391, 0.082600, 10.114298, 0 }, + { -0.254982, 0.082600, 10.134649, 0 }, + { -0.237026, 0.084994, 10.117889, 0 }, + { -0.229843, 0.077812, 10.119086, 0 }, + { -0.246603, 0.070629, 10.125072, 0 }, + { -0.235829, 0.076614, 10.140635, 0 }, + { -0.245406, 0.061052, 10.122678, 0 }, + { -0.240617, 0.076614, 10.119086, 0 }, + { -0.259771, 0.088585, 10.126269, 0 }, + { -0.241814, 0.077812, 10.139438, 0 }, + { -0.244208, 0.075417, 10.116693, 0 }, + { -0.239420, 0.067038, 10.109509, 0 }, + { -0.241814, 0.083797, 10.134649, 0 }, + { -0.244208, 0.067038, 10.125072, 0 }, + { -0.244208, 0.073023, 10.149014, 0 }, + { -0.243011, 0.084994, 10.116693, 0 }, + { -0.231040, 0.076614, 10.123875, 0 }, + { -0.247800, 0.089783, 10.120284, 0 }, + { -0.246603, 0.077812, 10.122678, 0 }, + { -0.262165, 0.077812, 10.120284, 0 }, + { -0.231040, 0.070629, 10.115496, 0 }, + { -0.243011, 0.077812, 10.149014, 0 }, + { -0.248997, 0.090980, 10.119086, 0 }, + { -0.250194, 0.090980, 10.132255, 0 }, + { -0.238223, 0.074220, 10.120284, 0 }, + { -0.228646, 0.080206, 10.140635, 0 }, + { -0.245406, 0.075417, 10.113101, 0 }, + { -0.233435, 0.089783, 10.131058, 0 }, + { -0.244208, 0.081403, 10.117889, 0 }, + { -0.246603, 0.063446, 10.141831, 0 }, + { -0.235829, 0.090980, 10.143028, 0 }, + { -0.233435, 0.081403, 10.125072, 0 }, + { -0.251391, 0.077812, 10.127466, 0 }, + { -0.238223, 0.081403, 10.125072, 0 }, + { -0.235829, 0.074220, 10.132255, 0 }, + { -0.244208, 0.064643, 10.119086, 0 }, + { -0.256179, 0.071826, 10.143028, 0 }, + { -0.240617, 0.082600, 10.110707, 0 }, + { -0.248997, 0.071826, 10.137043, 0 }, + { -0.251391, 0.076614, 10.125072, 0 }, + { -0.228646, 0.082600, 10.134649, 0 }, + { -0.233435, 0.082600, 10.111904, 0 }, + { -0.246603, 0.068235, 10.119086, 0 }, + { -0.235829, 0.067038, 10.143028, 0 }, + { -0.241814, 0.079009, 10.126269, 0 }, + { -0.238223, 0.095768, 10.125072, 0 }, + { -0.243011, 0.065841, 10.105919, 0 }, + { -0.256179, 0.081403, 10.132255, 0 }, + { -0.256179, 0.073023, 10.110707, 0 }, + { -0.246603, 0.079009, 10.145423, 0 }, + { -0.231040, 0.069432, 10.122678, 0 }, + { -0.234632, 0.065841, 10.139438, 0 }, + { -0.232237, 0.094571, 10.126269, 0 }, + { -0.243011, 0.081403, 10.149014, 0 }, + { -0.256179, 0.083797, 10.132255, 0 }, + { -0.246603, 0.073023, 10.127466, 0 }, + { -0.244208, 0.067038, 10.131058, 0 }, + { -0.244208, 0.082600, 10.133451, 0 }, + { -0.239420, 0.088585, 10.137043, 0 }, + { -0.234632, 0.069432, 10.123875, 0 }, + { -0.241814, 0.069432, 10.137043, 0 }, + { -0.241814, 0.083797, 10.120284, 0 }, + { -0.243011, 0.075417, 10.134649, 0 }, + { -0.250194, 0.075417, 10.132255, 0 }, + { -0.240617, 0.076614, 10.126269, 0 }, + { -0.265756, 0.083797, 10.137043, 0 }, + { -0.258574, 0.079009, 10.116693, 0 }, + { -0.237026, 0.069432, 10.122678, 0 }, + { -0.248997, 0.073023, 10.121481, 0 }, + { -0.256179, 0.080206, 10.123875, 0 }, + { -0.248997, 0.067038, 10.122678, 0 }, + { -0.237026, 0.083797, 10.143028, 0 }, + { -0.238223, 0.080206, 10.114298, 0 }, + { -0.253785, 0.074220, 10.129861, 0 }, + { -0.250194, 0.075417, 10.129861, 0 }, + { -0.254982, 0.081403, 10.151408, 0 }, + { -0.250194, 0.070629, 10.135846, 0 }, + { -0.247800, 0.075417, 10.120284, 0 }, + { -0.241814, 0.064643, 10.139438, 0 }, + { -0.246603, 0.071826, 10.138240, 0 }, + { -0.243011, 0.079009, 10.152605, 0 }, + { -0.241814, 0.080206, 10.127466, 0 }, + { -0.251391, 0.070629, 10.129861, 0 }, + { -0.243011, 0.081403, 10.139438, 0 }, + { -0.251391, 0.070629, 10.129861, 0 }, + { -0.251391, 0.076614, 10.122678, 0 }, + { -0.252588, 0.079009, 10.133451, 0 }, + { -0.254982, 0.073023, 10.128663, 0 }, + { -0.232237, 0.067038, 10.113101, 0 }, + { -0.239420, 0.088585, 10.120284, 0 }, + { -0.245406, 0.080206, 10.113101, 0 }, + { -0.238223, 0.075417, 10.131058, 0 }, + { -0.244208, 0.065841, 10.109509, 0 }, + { -0.235829, 0.068235, 10.141831, 0 }, + { -0.251391, 0.081403, 10.121481, 0 }, + { -0.250194, 0.077812, 10.119086, 0 }, + { -0.241814, 0.071826, 10.126269, 0 }, + { -0.233435, 0.069432, 10.135846, 0 }, + { -0.239420, 0.076614, 10.131058, 0 }, + { -0.239420, 0.088585, 10.107116, 0 }, + { -0.234632, 0.084994, 10.126269, 0 }, + { -0.247800, 0.077812, 10.128663, 0 }, + { -0.246603, 0.083797, 10.137043, 0 }, + { -0.240617, 0.087388, 10.127466, 0 }, + { -0.256179, 0.070629, 10.117889, 0 }, + { -0.243011, 0.077812, 10.121481, 0 }, + { -0.243011, 0.083797, 10.133451, 0 }, + { -0.252588, 0.087388, 10.125072, 0 }, + { -0.256179, 0.073023, 10.127466, 0 }, + { -0.239420, 0.057461, 10.128663, 0 }, + { -0.243011, 0.070629, 10.117889, 0 }, + { -0.252588, 0.074220, 10.138240, 0 }, + { -0.243011, 0.073023, 10.127466, 0 }, + { -0.238223, 0.082600, 10.133451, 0 }, + { -0.235829, 0.074220, 10.143028, 0 }, + { -0.248997, 0.065841, 10.153803, 0 }, + { -0.240617, 0.081403, 10.107116, 0 }, + { -0.241814, 0.087388, 10.123875, 0 }, + { -0.241814, 0.070629, 10.141831, 0 }, + { -0.238223, 0.074220, 10.113101, 0 }, + { -0.251391, 0.079009, 10.129861, 0 }, + { -0.253785, 0.082600, 10.108313, 0 }, + { -0.254982, 0.075417, 10.121481, 0 }, + { -0.247800, 0.057461, 10.133451, 0 }, + { -0.243011, 0.058658, 10.128663, 0 }, + { -0.244208, 0.080206, 10.120284, 0 }, + { -0.231040, 0.079009, 10.109509, 0 }, + { -0.256179, 0.070629, 10.120284, 0 }, + { -0.251391, 0.082600, 10.143028, 0 }, + { -0.233435, 0.068235, 10.128663, 0 }, + { -0.241814, 0.068235, 10.129861, 0 }, + { -0.235829, 0.083797, 10.111904, 0 }, + { -0.238223, 0.067038, 10.139438, 0 }, + { -0.260968, 0.063446, 10.128663, 0 }, + { -0.231040, 0.084994, 10.140635, 0 }, + { -0.237026, 0.082600, 10.134649, 0 }, + { -0.246603, 0.070629, 10.144226, 0 }, + { -0.246603, 0.080206, 10.125072, 0 }, + { -0.244208, 0.087388, 10.122678, 0 }, + { -0.234632, 0.069432, 10.111904, 0 }, + { -0.252588, 0.065841, 10.121481, 0 }, + { -0.245406, 0.071826, 10.128663, 0 }, + { -0.243011, 0.075417, 10.129861, 0 }, + { -0.238223, 0.068235, 10.139438, 0 }, + { -0.256179, 0.076614, 10.126269, 0 }, + { -0.246603, 0.083797, 10.131058, 0 }, + { -0.248997, 0.080206, 10.116693, 0 }, + { -0.241814, 0.082600, 10.123875, 0 }, + { -0.262165, 0.075417, 10.113101, 0 }, + { -0.240617, 0.079009, 10.134649, 0 }, + { -0.244208, 0.077812, 10.121481, 0 }, + { -0.246603, 0.068235, 10.141831, 0 }, + { -0.252588, 0.075417, 10.120284, 0 }, + { -0.247800, 0.084994, 10.104721, 0 }, + { -0.241814, 0.086191, 10.126269, 0 }, + { -0.237026, 0.082600, 10.117889, 0 }, + { -0.243011, 0.070629, 10.117889, 0 }, + { -0.239420, 0.070629, 10.135846, 0 }, + { -0.237026, 0.065841, 10.120284, 0 }, + { -0.237026, 0.061052, 10.125072, 0 }, + { -0.235829, 0.061052, 10.114298, 0 }, + { -0.252588, 0.074220, 10.137043, 0 }, + { -0.253785, 0.086191, 10.119086, 0 }, + { -0.252588, 0.089783, 10.129861, 0 }, + { -0.245406, 0.084994, 10.126269, 0 }, + { -0.232237, 0.076614, 10.120284, 0 }, + { -0.252588, 0.082600, 10.119086, 0 }, + { -0.251391, 0.064643, 10.132255, 0 }, + { -0.227449, 0.076614, 10.149014, 0 }, + { -0.259771, 0.083797, 10.131058, 0 }, + { -0.248997, 0.075417, 10.127466, 0 }, + { -0.244208, 0.071826, 10.133451, 0 }, + { -0.243011, 0.070629, 10.132255, 0 }, + { -0.228646, 0.076614, 10.128663, 0 }, + { -0.241814, 0.089783, 10.138240, 0 }, + { -0.252588, 0.086191, 10.122678, 0 }, + { -0.254982, 0.068235, 10.133451, 0 }, + { -0.250194, 0.071826, 10.150211, 0 }, + { -0.235829, 0.084994, 10.140635, 0 }, + { -0.234632, 0.087388, 10.139438, 0 }, + { -0.245406, 0.077812, 10.105919, 0 }, + { -0.250194, 0.080206, 10.107116, 0 }, + { -0.240617, 0.092177, 10.132255, 0 }, + { -0.243011, 0.077812, 10.133451, 0 }, + { -0.248997, 0.062249, 10.128663, 0 }, + { -0.245406, 0.068235, 10.125072, 0 }, + { -0.250194, 0.064643, 10.129861, 0 }, + { -0.248997, 0.082600, 10.126269, 0 }, + { -0.252588, 0.073023, 10.141831, 0 }, + { -0.250194, 0.076614, 10.127466, 0 }, + { -0.251391, 0.077812, 10.121481, 0 }, + { -0.250194, 0.069432, 10.134649, 0 }, + { -0.232237, 0.065841, 10.131058, 0 }, + { -0.233435, 0.081403, 10.131058, 0 }, + { -0.241814, 0.074220, 10.111904, 0 }, + { -0.248997, 0.064643, 10.135846, 0 }, + { -0.239420, 0.081403, 10.143028, 0 }, + { -0.239420, 0.077812, 10.138240, 0 }, + { -0.237026, 0.074220, 10.110707, 0 }, + { -0.235829, 0.081403, 10.121481, 0 }, + { -0.247800, 0.063446, 10.129861, 0 }, + { -0.235829, 0.068235, 10.121481, 0 }, + { -0.238223, 0.064643, 10.123875, 0 }, + { -0.246603, 0.070629, 10.132255, 0 }, + { -0.264559, 0.073023, 10.145423, 0 }, + { -0.247800, 0.065841, 10.116693, 0 }, + { -0.247800, 0.084994, 10.125072, 0 }, + { -0.225055, 0.080206, 10.115496, 0 }, + { -0.233435, 0.064643, 10.135846, 0 }, + { -0.247800, 0.069432, 10.131058, 0 }, + { -0.234632, 0.081403, 10.125072, 0 }, + { -0.246603, 0.081403, 10.128663, 0 }, + { -0.235829, 0.086191, 10.117889, 0 }, + { -0.233435, 0.077812, 10.122678, 0 }, + { -0.256179, 0.049081, 10.128663, 0 }, + { -0.243011, 0.083797, 10.138240, 0 }, + { -0.239420, 0.087388, 10.129861, 0 }, + { -0.238223, 0.068235, 10.131058, 0 }, + { -0.234632, 0.068235, 10.129861, 0 }, + { -0.250194, 0.080206, 10.135846, 0 }, + { -0.246603, 0.062249, 10.131058, 0 }, + { -0.243011, 0.076614, 10.134649, 0 }, + { -0.246603, 0.093374, 10.128663, 0 }, + { -0.251391, 0.065841, 10.126269, 0 }, + { -0.235829, 0.069432, 10.135846, 0 }, + { -0.243011, 0.081403, 10.120284, 0 }, + { -0.245406, 0.086191, 10.129861, 0 }, + { -0.234632, 0.073023, 10.110707, 0 }, + { -0.244208, 0.083797, 10.140635, 0 }, + { -0.247800, 0.069432, 10.141831, 0 }, + { -0.240617, 0.076614, 10.149014, 0 }, + { -0.243011, 0.081403, 10.122678, 0 }, + { -0.237026, 0.071826, 10.120284, 0 }, + { -0.234632, 0.073023, 10.120284, 0 }, + { -0.237026, 0.077812, 10.131058, 0 }, + { -0.244208, 0.080206, 10.152605, 0 }, + { -0.250194, 0.076614, 10.135846, 0 }, + { -0.253785, 0.069432, 10.131058, 0 }, + { -0.260968, 0.073023, 10.141831, 0 }, + { -0.247800, 0.070629, 10.134649, 0 }, + { -0.257377, 0.068235, 10.125072, 0 }, + { -0.243011, 0.073023, 10.121481, 0 }, + { -0.235829, 0.082600, 10.127466, 0 }, + { -0.237026, 0.070629, 10.139438, 0 }, + { -0.227449, 0.081403, 10.127466, 0 }, + { -0.239420, 0.080206, 10.141831, 0 }, + { -0.251391, 0.069432, 10.129861, 0 }, + { -0.238223, 0.069432, 10.121481, 0 }, + { -0.237026, 0.069432, 10.126269, 0 }, + { -0.250194, 0.077812, 10.114298, 0 }, + { -0.237026, 0.094571, 10.116693, 0 }, + { -0.253785, 0.084994, 10.143028, 0 }, + { -0.263362, 0.071826, 10.123875, 0 }, + { -0.246603, 0.064643, 10.126269, 0 }, + { -0.240617, 0.059855, 10.131058, 0 }, + { -0.247800, 0.070629, 10.139438, 0 }, + { -0.240617, 0.082600, 10.132255, 0 }, + { -0.234632, 0.073023, 10.111904, 0 }, + { -0.240617, 0.062249, 10.131058, 0 }, + { -0.238223, 0.080206, 10.129861, 0 }, + { -0.243011, 0.076614, 10.123875, 0 }, + { -0.246603, 0.080206, 10.125072, 0 }, + { -0.235829, 0.079009, 10.127466, 0 }, + { -0.243011, 0.076614, 10.110707, 0 }, + { -0.246603, 0.065841, 10.128663, 0 }, + { -0.246603, 0.076614, 10.133451, 0 }, + { -0.253785, 0.080206, 10.123875, 0 }, + { -0.241814, 0.073023, 10.119086, 0 }, + { -0.250194, 0.075417, 10.120284, 0 }, + { -0.235829, 0.079009, 10.143028, 0 }, + { -0.241814, 0.071826, 10.135846, 0 }, + { -0.254982, 0.077812, 10.125072, 0 }, + { -0.238223, 0.077812, 10.122678, 0 }, + { -0.235829, 0.071826, 10.132255, 0 }, + { -0.238223, 0.084994, 10.120284, 0 }, + { -0.253785, 0.075417, 10.146620, 0 }, + { -0.254982, 0.069432, 10.141831, 0 }, + { -0.240617, 0.087388, 10.126269, 0 }, + { -0.251391, 0.088585, 10.115496, 0 }, + { -0.256179, 0.065841, 10.129861, 0 }, + { -0.243011, 0.069432, 10.127466, 0 }, + { -0.246603, 0.063446, 10.134649, 0 }, + { -0.246603, 0.073023, 10.128663, 0 }, + { -0.240617, 0.068235, 10.119086, 0 }, + { -0.257377, 0.069432, 10.143028, 0 }, + { -0.245406, 0.081403, 10.128663, 0 }, + { -0.252588, 0.075417, 10.120284, 0 }, + { -0.241814, 0.068235, 10.111904, 0 }, + { -0.238223, 0.075417, 10.141831, 0 }, + { -0.240617, 0.071826, 10.111904, 0 }, + { -0.247800, 0.067038, 10.126269, 0 }, + { -0.247800, 0.068235, 10.134649, 0 }, + { -0.238223, 0.084994, 10.139438, 0 }, + { -0.237026, 0.090980, 10.141831, 0 }, + { -0.245406, 0.068235, 10.109509, 0 }, + { -0.256179, 0.076614, 10.143028, 0 }, + { -0.237026, 0.080206, 10.116693, 0 }, + { -0.228646, 0.079009, 10.134649, 0 }, + { -0.247800, 0.071826, 10.121481, 0 }, + { -0.241814, 0.075417, 10.129861, 0 }, + { -0.228646, 0.076614, 10.152605, 0 }, + { -0.238223, 0.087388, 10.125072, 0 }, + { -0.239420, 0.075417, 10.128663, 0 }, + { -0.247800, 0.074220, 10.114298, 0 }, + { -0.219069, 0.080206, 10.126269, 0 }, + { -0.234632, 0.082600, 10.109509, 0 }, + { -0.244208, 0.063446, 10.127466, 0 }, + { -0.247800, 0.068235, 10.134649, 0 }, + { -0.245406, 0.069432, 10.139438, 0 }, + { -0.251391, 0.086191, 10.128663, 0 }, + { -0.244208, 0.065841, 10.127466, 0 }, + { -0.246603, 0.070629, 10.125072, 0 }, + { -0.240617, 0.081403, 10.125072, 0 }, + { -0.232237, 0.063446, 10.141831, 0 }, + { -0.247800, 0.065841, 10.126269, 0 }, + { -0.235829, 0.086191, 10.133451, 0 }, + { -0.245406, 0.096965, 10.121481, 0 }, + { -0.239420, 0.090980, 10.121481, 0 }, + { -0.248997, 0.077812, 10.125072, 0 }, + { -0.231040, 0.067038, 10.126269, 0 }, + { -0.245406, 0.081403, 10.125072, 0 }, + { -0.231040, 0.074220, 10.145423, 0 }, + { -0.253785, 0.067038, 10.115496, 0 }, + { -0.246603, 0.065841, 10.110707, 0 }, + { -0.245406, 0.069432, 10.131058, 0 }, + { -0.232237, 0.076614, 10.113101, 0 }, + { -0.243011, 0.075417, 10.121481, 0 }, + { -0.243011, 0.079009, 10.132255, 0 }, + { -0.238223, 0.079009, 10.123875, 0 }, + { -0.245406, 0.069432, 10.122678, 0 }, + { -0.247800, 0.075417, 10.126269, 0 }, + { -0.239420, 0.079009, 10.139438, 0 }, + { -0.244208, 0.083797, 10.105919, 0 }, + { -0.245406, 0.071826, 10.109509, 0 }, + { -0.233435, 0.076614, 10.128663, 0 }, + { -0.243011, 0.088585, 10.131058, 0 }, + { -0.252588, 0.069432, 10.117889, 0 }, + { -0.248997, 0.090980, 10.119086, 0 }, + { -0.241814, 0.074220, 10.129861, 0 }, + { -0.253785, 0.068235, 10.135846, 0 }, + { -0.240617, 0.074220, 10.125072, 0 }, + { -0.246603, 0.076614, 10.131058, 0 }, + { -0.238223, 0.081403, 10.117889, 0 }, + { -0.246603, 0.074220, 10.127466, 0 }, + { -0.250194, 0.070629, 10.133451, 0 }, + { -0.248997, 0.073023, 10.132255, 0 }, + { -0.250194, 0.077812, 10.122678, 0 }, + { -0.259771, 0.077812, 10.123875, 0 }, + { -0.234632, 0.079009, 10.123875, 0 }, + { -0.241814, 0.073023, 10.120284, 0 }, + { -0.251391, 0.063446, 10.146620, 0 }, + { -0.250194, 0.074220, 10.113101, 0 }, + { -0.256179, 0.082600, 10.119086, 0 }, + { -0.257377, 0.080206, 10.132255, 0 }, + { -0.245406, 0.090980, 10.127466, 0 }, + { -0.243011, 0.075417, 10.133451, 0 }, + { -0.239420, 0.088585, 10.125072, 0 }, + { -0.241814, 0.079009, 10.127466, 0 }, + { -0.251391, 0.070629, 10.137043, 0 }, + { -0.235829, 0.081403, 10.110707, 0 }, + { -0.248997, 0.075417, 10.141831, 0 }, + { -0.231040, 0.087388, 10.125072, 0 }, + { -0.247800, 0.068235, 10.127466, 0 }, + { -0.252588, 0.086191, 10.119086, 0 }, + { -0.240617, 0.071826, 10.127466, 0 }, + { -0.243011, 0.081403, 10.144226, 0 }, + { -0.243011, 0.083797, 10.126269, 0 }, + { -0.251391, 0.074220, 10.127466, 0 }, + { -0.239420, 0.084994, 10.125072, 0 }, + { -0.231040, 0.069432, 10.113101, 0 }, + { -0.246603, 0.069432, 10.138240, 0 }, + { -0.243011, 0.075417, 10.132255, 0 }, + { -0.243011, 0.084994, 10.113101, 0 }, + { -0.253785, 0.082600, 10.120284, 0 }, + { -0.247800, 0.070629, 10.125072, 0 }, + { -0.244208, 0.079009, 10.113101, 0 }, + { -0.260968, 0.073023, 10.127466, 0 }, + { -0.239420, 0.063446, 10.128663, 0 }, + { -0.234632, 0.082600, 10.122678, 0 }, + { -0.240617, 0.079009, 10.132255, 0 }, + { -0.251391, 0.069432, 10.133451, 0 }, + { -0.252588, 0.073023, 10.131058, 0 }, + { -0.239420, 0.059855, 10.121481, 0 }, + { -0.238223, 0.079009, 10.122678, 0 }, + { -0.229843, 0.070629, 10.115496, 0 }, + { -0.246603, 0.074220, 10.128663, 0 }, + { -0.235829, 0.079009, 10.121481, 0 }, + { -0.237026, 0.076614, 10.146620, 0 }, + { -0.244208, 0.077812, 10.117889, 0 }, + { -0.258574, 0.070629, 10.133451, 0 }, + { -0.259771, 0.077812, 10.119086, 0 }, + { -0.246603, 0.083797, 10.133451, 0 }, + { -0.241814, 0.076614, 10.127466, 0 }, + { -0.253785, 0.077812, 10.116693, 0 }, + { -0.256179, 0.075417, 10.123875, 0 }, + { -0.254982, 0.074220, 10.120284, 0 }, + { -0.252588, 0.070629, 10.114298, 0 }, + { -0.256179, 0.074220, 10.128663, 0 }, + { -0.237026, 0.071826, 10.139438, 0 }, + { -0.235829, 0.069432, 10.108313, 0 }, + { -0.250194, 0.074220, 10.116693, 0 }, + { -0.241814, 0.073023, 10.131058, 0 }, + { -0.234632, 0.075417, 10.147817, 0 }, + { -0.238223, 0.067038, 10.111904, 0 }, + { -0.251391, 0.071826, 10.128663, 0 }, + { -0.239420, 0.087388, 10.134649, 0 }, + { -0.237026, 0.082600, 10.128663, 0 }, + { -0.240617, 0.089783, 10.133451, 0 }, + { -0.245406, 0.081403, 10.119086, 0 }, + { -0.241814, 0.080206, 10.128663, 0 }, + { -0.235829, 0.062249, 10.140635, 0 }, + { -0.235829, 0.065841, 10.128663, 0 }, + { -0.237026, 0.092177, 10.128663, 0 }, + { -0.244208, 0.082600, 10.122678, 0 }, + { -0.247800, 0.065841, 10.127466, 0 }, + { -0.243011, 0.070629, 10.113101, 0 }, + { -0.238223, 0.068235, 10.123875, 0 }, + { -0.241814, 0.077812, 10.107116, 0 }, + { -0.238223, 0.088585, 10.132255, 0 }, + { -0.234632, 0.067038, 10.127466, 0 }, + { -0.243011, 0.075417, 10.117889, 0 }, + { -0.240617, 0.077812, 10.132255, 0 }, + { -0.240617, 0.079009, 10.120284, 0 }, + { -0.239420, 0.074220, 10.125072, 0 }, + { -0.233435, 0.071826, 10.132255, 0 }, + { -0.241814, 0.083797, 10.126269, 0 }, + { -0.258574, 0.089783, 10.127466, 0 }, + { -0.234632, 0.081403, 10.131058, 0 }, + { -0.252588, 0.071826, 10.137043, 0 }, + { -0.240617, 0.064643, 10.127466, 0 }, + { -0.248997, 0.070629, 10.133451, 0 }, + { -0.246603, 0.087388, 10.132255, 0 }, + { -0.250194, 0.075417, 10.132255, 0 }, + { -0.244208, 0.073023, 10.126269, 0 }, + { -0.241814, 0.079009, 10.120284, 0 }, + { -0.251391, 0.083797, 10.128663, 0 }, + { -0.234632, 0.080206, 10.145423, 0 }, + { -0.250194, 0.074220, 10.140635, 0 }, + { -0.247800, 0.062249, 10.116693, 0 }, + { -0.243011, 0.077812, 10.125072, 0 }, + { -0.247800, 0.064643, 10.126269, 0 }, + { -0.244208, 0.071826, 10.145423, 0 }, + { -0.253785, 0.070629, 10.123875, 0 }, + { -0.237026, 0.077812, 10.133451, 0 }, + { -0.246603, 0.082600, 10.117889, 0 }, + { -0.245406, 0.086191, 10.121481, 0 }, + { -0.235829, 0.073023, 10.117889, 0 }, + { -0.243011, 0.075417, 10.134649, 0 }, + { -0.239420, 0.087388, 10.139438, 0 }, + { -0.227449, 0.084994, 10.135846, 0 }, + { -0.240617, 0.083797, 10.133451, 0 }, + { -0.243011, 0.073023, 10.117889, 0 }, + { -0.228646, 0.082600, 10.144226, 0 }, + { -0.240617, 0.068235, 10.104721, 0 }, + { -0.241814, 0.059855, 10.127466, 0 }, + { -0.243011, 0.081403, 10.116693, 0 }, + { -0.238223, 0.080206, 10.147817, 0 }, + { -0.244208, 0.076614, 10.119086, 0 }, + { -0.241814, 0.073023, 10.119086, 0 }, + { -0.251391, 0.075417, 10.131058, 0 }, + { -0.244208, 0.071826, 10.127466, 0 }, + { -0.233435, 0.082600, 10.146620, 0 }, + { -0.250194, 0.070629, 10.120284, 0 }, + { -0.248997, 0.067038, 10.135846, 0 }, + { -0.233435, 0.077812, 10.109509, 0 }, + { -0.243011, 0.083797, 10.133451, 0 }, + { -0.251391, 0.069432, 10.111904, 0 }, + { -0.234632, 0.076614, 10.138240, 0 }, + { -0.241814, 0.086191, 10.120284, 0 }, + { -0.239420, 0.068235, 10.128663, 0 }, + { -0.229843, 0.071826, 10.140635, 0 }, + { -0.245406, 0.082600, 10.115496, 0 }, + { -0.234632, 0.076614, 10.143028, 0 }, + { -0.246603, 0.068235, 10.119086, 0 }, + { -0.250194, 0.064643, 10.132255, 0 }, + { -0.237026, 0.082600, 10.129861, 0 }, + { -0.256179, 0.089783, 10.138240, 0 }, + { -0.239420, 0.076614, 10.121481, 0 }, + { -0.238223, 0.069432, 10.133451, 0 }, + { -0.247800, 0.067038, 10.135846, 0 }, + { -0.250194, 0.070629, 10.131058, 0 }, + { -0.243011, 0.080206, 10.141831, 0 }, + { -0.244208, 0.064643, 10.122678, 0 }, + { -0.238223, 0.070629, 10.134649, 0 }, + { -0.229843, 0.070629, 10.113101, 0 }, + { -0.254982, 0.087388, 10.137043, 0 }, + { -0.259771, 0.081403, 10.128663, 0 }, + { -0.241814, 0.074220, 10.129861, 0 }, + { -0.247800, 0.065841, 10.126269, 0 }, + { -0.253785, 0.063446, 10.122678, 0 }, + { -0.256179, 0.076614, 10.129861, 0 }, + { -0.250194, 0.083797, 10.123875, 0 }, + { -0.239420, 0.073023, 10.129861, 0 }, + { -0.253785, 0.084994, 10.109509, 0 }, + { -0.238223, 0.071826, 10.151408, 0 }, + { -0.245406, 0.068235, 10.110707, 0 }, + { -0.246603, 0.064643, 10.127466, 0 }, + { -0.232237, 0.077812, 10.113101, 0 }, + { -0.247800, 0.064643, 10.132255, 0 }, + { -0.254982, 0.080206, 10.137043, 0 }, + { -0.248997, 0.080206, 10.138240, 0 }, + { -0.243011, 0.081403, 10.123875, 0 }, + { -0.237026, 0.087388, 10.127466, 0 }, + { -0.234632, 0.070629, 10.129861, 0 }, + { -0.235829, 0.073023, 10.121481, 0 }, + { -0.244208, 0.073023, 10.127466, 0 }, + { -0.237026, 0.067038, 10.138240, 0 }, + { -0.248997, 0.067038, 10.119086, 0 }, + { -0.253785, 0.079009, 10.129861, 0 }, + { -0.239420, 0.068235, 10.129861, 0 }, + { -0.252588, 0.071826, 10.122678, 0 }, + { -0.243011, 0.076614, 10.134649, 0 }, + { -0.234632, 0.075417, 10.117889, 0 }, + { -0.235829, 0.070629, 10.115496, 0 }, + { -0.247800, 0.083797, 10.123875, 0 }, + { -0.241814, 0.089783, 10.123875, 0 }, + { -0.234632, 0.087388, 10.133451, 0 }, + { -0.239420, 0.073023, 10.116693, 0 }, + { -0.241814, 0.087388, 10.122678, 0 }, + { -0.243011, 0.077812, 10.126269, 0 }, + { -0.247800, 0.076614, 10.129861, 0 }, + { -0.244208, 0.082600, 10.140635, 0 }, + { -0.241814, 0.079009, 10.150211, 0 }, + { -0.237026, 0.065841, 10.144226, 0 }, + { -0.234632, 0.081403, 10.133451, 0 }, + { -0.231040, 0.081403, 10.121481, 0 }, + { -0.248997, 0.071826, 10.143028, 0 }, + { -0.257377, 0.063446, 10.119086, 0 }, + { -0.245406, 0.087388, 10.141831, 0 }, + { -0.246603, 0.082600, 10.137043, 0 }, + { -0.227449, 0.080206, 10.128663, 0 }, + { -0.244208, 0.082600, 10.120284, 0 }, + { -0.245406, 0.087388, 10.139438, 0 }, + { -0.237026, 0.061052, 10.137043, 0 }, + { -0.240617, 0.061052, 10.132255, 0 }, + { -0.239420, 0.076614, 10.132255, 0 }, + { -0.244208, 0.083797, 10.131058, 0 }, + { -0.227449, 0.077812, 10.137043, 0 }, + { -0.240617, 0.089783, 10.144226, 0 }, + { -0.238223, 0.083797, 10.121481, 0 }, + { -0.260968, 0.068235, 10.119086, 0 }, + { -0.243011, 0.070629, 10.155000, 0 }, + { -0.248997, 0.079009, 10.117889, 0 }, + { -0.252588, 0.076614, 10.111904, 0 }, + { -0.237026, 0.084994, 10.134649, 0 }, + { -0.248997, 0.069432, 10.128663, 0 }, + { -0.235829, 0.082600, 10.126269, 0 }, + { -0.245406, 0.069432, 10.150211, 0 }, + { -0.253785, 0.090980, 10.125072, 0 }, + { -0.247800, 0.077812, 10.119086, 0 }, + { -0.248997, 0.074220, 10.117889, 0 }, + { -0.239420, 0.080206, 10.122678, 0 }, + { -0.239420, 0.087388, 10.127466, 0 }, + { -0.244208, 0.074220, 10.128663, 0 }, + { -0.229843, 0.068235, 10.123875, 0 }, + { -0.247800, 0.080206, 10.127466, 0 }, + { -0.241814, 0.071826, 10.119086, 0 }, + { -0.235829, 0.086191, 10.121481, 0 }, + { -0.234632, 0.084994, 10.127466, 0 }, + { -0.237026, 0.073023, 10.131058, 0 }, + { -0.243011, 0.074220, 10.123875, 0 }, + { -0.259771, 0.084994, 10.146620, 0 }, + { -0.241814, 0.071826, 10.122678, 0 }, + { -0.232237, 0.077812, 10.132255, 0 }, + { -0.239420, 0.076614, 10.133451, 0 }, + { -0.244208, 0.076614, 10.128663, 0 }, + { -0.241814, 0.081403, 10.153803, 0 }, + { -0.246603, 0.069432, 10.114298, 0 }, + { -0.247800, 0.067038, 10.128663, 0 }, + { -0.239420, 0.077812, 10.132255, 0 }, + { -0.248997, 0.064643, 10.133451, 0 }, + { -0.231040, 0.075417, 10.120284, 0 }, + { -0.235829, 0.070629, 10.109509, 0 }, + { -0.248997, 0.079009, 10.121481, 0 }, + { -0.239420, 0.094571, 10.128663, 0 }, + { -0.254982, 0.083797, 10.134649, 0 }, + { -0.240617, 0.079009, 10.117889, 0 }, + { -0.244208, 0.065841, 10.122678, 0 }, + { -0.238223, 0.070629, 10.116693, 0 }, + { -0.244208, 0.081403, 10.131058, 0 }, + { -0.239420, 0.071826, 10.135846, 0 }, + { -0.231040, 0.070629, 10.139438, 0 }, + { -0.240617, 0.070629, 10.125072, 0 }, + { -0.235829, 0.079009, 10.127466, 0 }, + { -0.235829, 0.077812, 10.126269, 0 }, + { -0.241814, 0.071826, 10.127466, 0 }, + { -0.243011, 0.068235, 10.131058, 0 }, + { -0.240617, 0.076614, 10.129861, 0 }, + { -0.231040, 0.070629, 10.127466, 0 }, + { -0.229843, 0.076614, 10.129861, 0 }, + { -0.235829, 0.071826, 10.128663, 0 }, + { -0.235829, 0.068235, 10.131058, 0 }, + { -0.246603, 0.074220, 10.122678, 0 }, + { -0.232237, 0.075417, 10.126269, 0 }, + { -0.233435, 0.075417, 10.116693, 0 }, + { -0.227449, 0.069432, 10.131058, 0 }, + { -0.233435, 0.069432, 10.133451, 0 }, + { -0.243011, 0.076614, 10.125072, 0 }, + { -0.243011, 0.079009, 10.111904, 0 }, + { -0.245406, 0.080206, 10.137043, 0 }, + { -0.244208, 0.083797, 10.133451, 0 }, + { -0.247800, 0.071826, 10.131058, 0 }, + { -0.239420, 0.063446, 10.114298, 0 }, + { -0.234632, 0.070629, 10.119086, 0 }, + { -0.238223, 0.070629, 10.151408, 0 }, + { -0.247800, 0.075417, 10.134649, 0 }, + { -0.241814, 0.075417, 10.137043, 0 }, + { -0.240617, 0.067038, 10.121481, 0 }, + { -0.243011, 0.063446, 10.137043, 0 }, + { -0.229843, 0.068235, 10.132255, 0 }, + { -0.241814, 0.075417, 10.122678, 0 }, + { -0.246603, 0.086191, 10.119086, 0 }, + { -0.235829, 0.081403, 10.126269, 0 }, + { -0.229843, 0.081403, 10.138240, 0 }, + { -0.234632, 0.075417, 10.120284, 0 }, + { -0.237026, 0.080206, 10.133451, 0 }, + { -0.232237, 0.074220, 10.114298, 0 }, + { -0.245406, 0.069432, 10.128663, 0 }, + { -0.241814, 0.064643, 10.134649, 0 }, + { -0.239420, 0.086191, 10.133451, 0 }, + { -0.238223, 0.086191, 10.144226, 0 }, + { -0.248997, 0.063446, 10.131058, 0 }, + { -0.229843, 0.065841, 10.137043, 0 }, + { -0.239420, 0.084994, 10.110707, 0 }, + { -0.231040, 0.083797, 10.141831, 0 }, + { -0.245406, 0.073023, 10.128663, 0 }, + { -0.245406, 0.071826, 10.129861, 0 }, + { -0.238223, 0.071826, 10.120284, 0 }, + { -0.247800, 0.081403, 10.137043, 0 }, + { -0.264559, 0.069432, 10.135846, 0 }, + { -0.247800, 0.070629, 10.131058, 0 }, + { -0.240617, 0.082600, 10.134649, 0 }, + { -0.246603, 0.075417, 10.126269, 0 }, + { -0.238223, 0.071826, 10.152605, 0 }, + { -0.235829, 0.063446, 10.132255, 0 }, + { -0.251391, 0.065841, 10.120284, 0 }, + { -0.243011, 0.068235, 10.131058, 0 }, + { -0.222661, 0.067038, 10.134649, 0 }, + { -0.239420, 0.081403, 10.128663, 0 }, + { -0.240617, 0.083797, 10.138240, 0 }, + { -0.223858, 0.068235, 10.122678, 0 }, + { -0.238223, 0.065841, 10.140635, 0 }, + { -0.237026, 0.081403, 10.134649, 0 }, + { -0.240617, 0.079009, 10.123875, 0 }, + { -0.238223, 0.073023, 10.133451, 0 }, + { -0.246603, 0.067038, 10.117889, 0 }, + { -0.243011, 0.061052, 10.135846, 0 }, + { -0.239420, 0.075417, 10.116693, 0 }, + { -0.260968, 0.065841, 10.123875, 0 }, + { -0.247800, 0.064643, 10.117889, 0 }, + { -0.248997, 0.093374, 10.140635, 0 }, + { -0.244208, 0.080206, 10.144226, 0 }, + { -0.258574, 0.077812, 10.113101, 0 }, + { -0.250194, 0.069432, 10.126269, 0 }, + { -0.238223, 0.073023, 10.102327, 0 }, + { -0.240617, 0.070629, 10.135846, 0 }, + { -0.247800, 0.063446, 10.121481, 0 }, + { -0.268150, 0.088585, 10.135846, 0 }, + { -0.246603, 0.075417, 10.119086, 0 }, + { -0.233435, 0.071826, 10.131058, 0 }, + { -0.245406, 0.071826, 10.128663, 0 }, + { -0.244208, 0.094571, 10.128663, 0 }, + { -0.234632, 0.080206, 10.123875, 0 }, + { -0.240617, 0.081403, 10.109509, 0 }, + { -0.240617, 0.069432, 10.128663, 0 }, + { -0.237026, 0.069432, 10.122678, 0 }, + { -0.234632, 0.071826, 10.137043, 0 }, + { -0.239420, 0.076614, 10.139438, 0 }, + { -0.244208, 0.088585, 10.117889, 0 }, + { -0.259771, 0.087388, 10.134649, 0 }, + { -0.252588, 0.077812, 10.134649, 0 }, + { -0.241814, 0.073023, 10.117889, 0 }, + { -0.243011, 0.080206, 10.128663, 0 }, + { -0.241814, 0.086191, 10.119086, 0 }, + { -0.244208, 0.073023, 10.115496, 0 }, + { -0.239420, 0.080206, 10.123875, 0 }, + { -0.248997, 0.070629, 10.137043, 0 }, + { -0.240617, 0.076614, 10.119086, 0 }, + { -0.233435, 0.070629, 10.128663, 0 }, + { -0.235829, 0.075417, 10.121481, 0 }, + { -0.240617, 0.090980, 10.127466, 0 }, + { -0.252588, 0.067038, 10.114298, 0 }, + { -0.229843, 0.077812, 10.123875, 0 }, + { -0.248997, 0.084994, 10.137043, 0 }, + { -0.245406, 0.070629, 10.110707, 0 }, + { -0.239420, 0.061052, 10.131058, 0 }, + { -0.241814, 0.077812, 10.132255, 0 }, + { -0.239420, 0.081403, 10.126269, 0 }, + { -0.235829, 0.069432, 10.127466, 0 }, + { -0.243011, 0.076614, 10.134649, 0 }, + { -0.252588, 0.077812, 10.132255, 0 }, + { -0.237026, 0.077812, 10.138240, 0 }, + { -0.246603, 0.073023, 10.127466, 0 }, + { -0.241814, 0.063446, 10.129861, 0 }, + { -0.234632, 0.071826, 10.126269, 0 }, + { -0.248997, 0.081403, 10.113101, 0 }, + { -0.244208, 0.084994, 10.114298, 0 }, + { -0.232237, 0.077812, 10.132255, 0 }, + { -0.234632, 0.084994, 10.128663, 0 }, + { -0.244208, 0.088585, 10.108313, 0 }, + { -0.253785, 0.070629, 10.141831, 0 }, + { -0.247800, 0.071826, 10.121481, 0 }, + { -0.244208, 0.070629, 10.128663, 0 }, + { -0.244208, 0.079009, 10.116693, 0 }, + { -0.239420, 0.074220, 10.113101, 0 }, + { -0.239420, 0.079009, 10.127466, 0 }, + { -0.251391, 0.071826, 10.133451, 0 }, + { -0.247800, 0.076614, 10.133451, 0 }, + { -0.254982, 0.088585, 10.137043, 0 }, + { -0.250194, 0.081403, 10.137043, 0 }, + { -0.257377, 0.077812, 10.117889, 0 }, + { -0.237026, 0.079009, 10.123875, 0 }, + { -0.235829, 0.073023, 10.121481, 0 }, + { -0.262165, 0.082600, 10.123875, 0 }, + { -0.248997, 0.073023, 10.113101, 0 }, + { -0.241814, 0.076614, 10.114298, 0 }, + { -0.251391, 0.073023, 10.131058, 0 }, + { -0.248997, 0.075417, 10.141831, 0 }, + { -0.237026, 0.074220, 10.132255, 0 }, + { -0.253785, 0.084994, 10.122678, 0 }, + { -0.247800, 0.079009, 10.133451, 0 }, + { -0.246603, 0.082600, 10.109509, 0 }, + { -0.252588, 0.094571, 10.122678, 0 }, + { -0.246603, 0.073023, 10.125072, 0 }, + { -0.250194, 0.057461, 10.115496, 0 }, + { -0.250194, 0.071826, 10.122678, 0 }, + { -0.251391, 0.076614, 10.127466, 0 }, + { -0.240617, 0.079009, 10.126269, 0 }, + { -0.259771, 0.073023, 10.115496, 0 }, + { -0.246603, 0.074220, 10.135846, 0 }, + { -0.253785, 0.077812, 10.119086, 0 }, + { -0.244208, 0.077812, 10.128663, 0 }, + { -0.241814, 0.069432, 10.128663, 0 }, + { -0.244208, 0.081403, 10.126269, 0 }, + { -0.246603, 0.086191, 10.128663, 0 }, + { -0.252588, 0.084994, 10.132255, 0 }, + { -0.247800, 0.076614, 10.128663, 0 }, + { -0.240617, 0.063446, 10.126269, 0 }, + { -0.235829, 0.069432, 10.127466, 0 }, + { -0.240617, 0.087388, 10.129861, 0 }, + { -0.251391, 0.063446, 10.128663, 0 }, + { -0.252588, 0.077812, 10.135846, 0 }, + { -0.254982, 0.082600, 10.138240, 0 }, + { -0.244208, 0.081403, 10.128663, 0 }, + { -0.241814, 0.086191, 10.117889, 0 }, + { -0.254982, 0.069432, 10.149014, 0 }, + { -0.248997, 0.068235, 10.131058, 0 }, + { -0.252588, 0.063446, 10.122678, 0 }, + { -0.240617, 0.079009, 10.152605, 0 }, + { -0.240617, 0.088585, 10.107116, 0 }, + { -0.248997, 0.076614, 10.138240, 0 }, + { -0.251391, 0.075417, 10.119086, 0 }, + { -0.225055, 0.079009, 10.138240, 0 }, + { -0.239420, 0.077812, 10.150211, 0 }, + { -0.250194, 0.055067, 10.137043, 0 }, + { -0.257377, 0.082600, 10.125072, 0 }, + { -0.243011, 0.075417, 10.119086, 0 }, + { -0.244208, 0.064643, 10.119086, 0 }, + { -0.246603, 0.080206, 10.117889, 0 }, + { -0.232237, 0.079009, 10.158591, 0 }, + { -0.247800, 0.071826, 10.120284, 0 }, + { -0.245406, 0.075417, 10.137043, 0 }, + { -0.240617, 0.069432, 10.117889, 0 }, + { -0.246603, 0.080206, 10.134649, 0 }, + { -0.248997, 0.087388, 10.109509, 0 }, + { -0.252588, 0.081403, 10.132255, 0 }, + { -0.250194, 0.069432, 10.123875, 0 }, + { -0.257377, 0.073023, 10.131058, 0 }, + { -0.241814, 0.068235, 10.109509, 0 }, + { -0.243011, 0.080206, 10.108313, 0 }, + { -0.238223, 0.074220, 10.139438, 0 }, + { -0.245406, 0.075417, 10.122678, 0 }, + { -0.250194, 0.069432, 10.137043, 0 }, + { -0.245406, 0.069432, 10.116693, 0 }, + { -0.235829, 0.070629, 10.158591, 0 }, + { -0.247800, 0.082600, 10.117889, 0 }, + { -0.247800, 0.077812, 10.137043, 0 }, + { -0.243011, 0.080206, 10.134649, 0 }, + { -0.263362, 0.081403, 10.110707, 0 }, + { -0.247800, 0.079009, 10.127466, 0 }, + { -0.248997, 0.071826, 10.131058, 0 }, + { -0.248997, 0.075417, 10.144226, 0 }, + { -0.239420, 0.077812, 10.117889, 0 }, + { -0.248997, 0.071826, 10.139438, 0 }, + { -0.254982, 0.083797, 10.120284, 0 }, + { -0.238223, 0.075417, 10.131058, 0 }, + { -0.235829, 0.084994, 10.105919, 0 }, + { -0.245406, 0.080206, 10.133451, 0 }, + { -0.247800, 0.075417, 10.131058, 0 }, + { -0.235829, 0.079009, 10.120284, 0 }, + { -0.247800, 0.070629, 10.133451, 0 }, + { -0.253785, 0.064643, 10.110707, 0 }, + { -0.240617, 0.071826, 10.120284, 0 }, + { -0.248997, 0.079009, 10.101130, 0 }, + { -0.243011, 0.079009, 10.141831, 0 }, + { -0.244208, 0.077812, 10.134649, 0 }, + { -0.245406, 0.081403, 10.140635, 0 }, + { -0.253785, 0.070629, 10.110707, 0 }, + { -0.254982, 0.058658, 10.129861, 0 }, + { -0.239420, 0.083797, 10.137043, 0 }, + { -0.232237, 0.081403, 10.125072, 0 }, + { -0.243011, 0.068235, 10.139438, 0 }, + { -0.243011, 0.063446, 10.123875, 0 }, + { -0.232237, 0.074220, 10.140635, 0 }, + { -0.241814, 0.077812, 10.116693, 0 }, + { -0.247800, 0.074220, 10.139438, 0 }, + { -0.245406, 0.077812, 10.127466, 0 }, + { -0.233435, 0.073023, 10.132255, 0 }, + { -0.243011, 0.074220, 10.121481, 0 }, + { -0.246603, 0.059855, 10.125072, 0 }, + { -0.246603, 0.070629, 10.120284, 0 }, + { -0.241814, 0.087388, 10.133451, 0 }, + { -0.245406, 0.061052, 10.128663, 0 }, + { -0.248997, 0.079009, 10.111904, 0 }, + { -0.237026, 0.077812, 10.135846, 0 }, + { -0.240617, 0.083797, 10.108313, 0 }, + { -0.237026, 0.075417, 10.141831, 0 }, + { -0.243011, 0.061052, 10.132255, 0 }, + { -0.234632, 0.073023, 10.133451, 0 }, + { -0.251391, 0.073023, 10.137043, 0 }, + { -0.237026, 0.083797, 10.135846, 0 }, + { -0.231040, 0.077812, 10.117889, 0 }, + { -0.237026, 0.061052, 10.140635, 0 }, + { -0.243011, 0.071826, 10.127466, 0 }, + { -0.235829, 0.081403, 10.131058, 0 }, + { -0.241814, 0.076614, 10.123875, 0 }, + { -0.258574, 0.081403, 10.127466, 0 }, + { -0.241814, 0.063446, 10.127466, 0 }, + { -0.254982, 0.071826, 10.139438, 0 }, + { -0.244208, 0.077812, 10.117889, 0 }, + { -0.240617, 0.077812, 10.134649, 0 }, + { -0.258574, 0.075417, 10.128663, 0 }, + { -0.245406, 0.069432, 10.131058, 0 }, + { -0.245406, 0.074220, 10.126269, 0 }, + { -0.248997, 0.075417, 10.137043, 0 }, + { -0.248997, 0.082600, 10.137043, 0 }, + { -0.245406, 0.084994, 10.115496, 0 }, + { -0.244208, 0.073023, 10.126269, 0 }, + { -0.234632, 0.067038, 10.126269, 0 }, + { -0.238223, 0.064643, 10.127466, 0 }, + { -0.263362, 0.065841, 10.123875, 0 }, + { -0.257377, 0.081403, 10.126269, 0 }, + { -0.237026, 0.082600, 10.105919, 0 }, + { -0.253785, 0.083797, 10.119086, 0 }, + { -0.234632, 0.073023, 10.125072, 0 }, + { -0.243011, 0.062249, 10.122678, 0 }, + { -0.251391, 0.076614, 10.119086, 0 }, + { -0.258574, 0.071826, 10.139438, 0 }, + { -0.250194, 0.071826, 10.140635, 0 }, + { -0.251391, 0.086191, 10.140635, 0 }, + { -0.248997, 0.077812, 10.121481, 0 }, + { -0.244208, 0.083797, 10.126269, 0 }, + { -0.241814, 0.083797, 10.133451, 0 }, + { -0.246603, 0.070629, 10.119086, 0 }, + { -0.241814, 0.067038, 10.146620, 0 }, + { -0.247800, 0.079009, 10.109509, 0 }, + { -0.256179, 0.069432, 10.146620, 0 }, + { -0.247800, 0.073023, 10.126269, 0 }, + { -0.245406, 0.070629, 10.113101, 0 }, + { -0.234632, 0.084994, 10.126269, 0 }, + { -0.228646, 0.068235, 10.129861, 0 }, + { -0.246603, 0.062249, 10.143028, 0 }, + { -0.245406, 0.084994, 10.122678, 0 }, + { -0.244208, 0.067038, 10.143028, 0 }, + { -0.241814, 0.080206, 10.138240, 0 }, + { -0.243011, 0.083797, 10.135846, 0 }, + { -0.238223, 0.069432, 10.139438, 0 }, + { -0.235829, 0.081403, 10.121481, 0 }, + { -0.241814, 0.081403, 10.119086, 0 }, + { -0.241814, 0.068235, 10.146620, 0 }, + { -0.246603, 0.093374, 10.107116, 0 }, + { -0.247800, 0.088585, 10.135846, 0 }, + { -0.258574, 0.069432, 10.101130, 0 }, + { -0.252588, 0.074220, 10.135846, 0 }, + { -0.240617, 0.058658, 10.127466, 0 }, + { -0.263362, 0.073023, 10.138240, 0 }, + { -0.244208, 0.081403, 10.135846, 0 }, + { -0.248997, 0.086191, 10.127466, 0 }, + { -0.251391, 0.074220, 10.133451, 0 }, + { -0.241814, 0.068235, 10.129861, 0 }, + { -0.247800, 0.075417, 10.144226, 0 }, + { -0.248997, 0.086191, 10.113101, 0 }, + { -0.239420, 0.080206, 10.153803, 0 }, + { -0.239420, 0.059855, 10.117889, 0 }, + { -0.244208, 0.073023, 10.139438, 0 }, + { -0.245406, 0.082600, 10.120284, 0 }, + { -0.238223, 0.086191, 10.133451, 0 }, + { -0.246603, 0.079009, 10.123875, 0 }, + { -0.247800, 0.074220, 10.131058, 0 }, + { -0.252588, 0.084994, 10.120284, 0 }, + { -0.245406, 0.075417, 10.125072, 0 }, + { -0.240617, 0.069432, 10.135846, 0 }, + { -0.245406, 0.076614, 10.121481, 0 }, + { -0.231040, 0.068235, 10.132255, 0 }, + { -0.233435, 0.076614, 10.134649, 0 }, + { -0.239420, 0.082600, 10.127466, 0 }, + { -0.253785, 0.076614, 10.104721, 0 }, + { -0.247800, 0.089783, 10.133451, 0 }, + { -0.238223, 0.076614, 10.134649, 0 }, + { -0.240617, 0.073023, 10.105919, 0 }, + { -0.243011, 0.067038, 10.146620, 0 }, + { -0.246603, 0.067038, 10.135846, 0 }, + { -0.250194, 0.080206, 10.146620, 0 }, + { -0.252588, 0.062249, 10.125072, 0 }, + { -0.234632, 0.074220, 10.127466, 0 }, + { -0.239420, 0.069432, 10.149014, 0 }, + { -0.243011, 0.069432, 10.126269, 0 }, + { -0.240617, 0.071826, 10.109509, 0 }, + { -0.258574, 0.067038, 10.121481, 0 }, + { -0.258574, 0.079009, 10.137043, 0 }, + { -0.248997, 0.083797, 10.114298, 0 }, + { -0.228646, 0.077812, 10.123875, 0 }, + { -0.248997, 0.061052, 10.128663, 0 }, + { -0.253785, 0.080206, 10.140635, 0 }, + { -0.250194, 0.077812, 10.119086, 0 }, + { -0.250194, 0.080206, 10.134649, 0 }, + { -0.254982, 0.079009, 10.104721, 0 }, + { -0.251391, 0.076614, 10.125072, 0 }, + { -0.244208, 0.069432, 10.109509, 0 }, + { -0.251391, 0.075417, 10.131058, 0 }, + { -0.246603, 0.074220, 10.135846, 0 }, + { -0.247800, 0.077812, 10.133451, 0 }, + { -0.243011, 0.095768, 10.119086, 0 }, + { -0.252588, 0.079009, 10.103524, 0 }, + { -0.248997, 0.080206, 10.119086, 0 }, + { -0.250194, 0.087388, 10.122678, 0 }, + { -0.244208, 0.071826, 10.143028, 0 }, + { -0.228646, 0.079009, 10.104721, 0 }, + { -0.235829, 0.087388, 10.125072, 0 }, + { -0.241814, 0.070629, 10.105919, 0 }, + { -0.251391, 0.081403, 10.140635, 0 }, + { -0.235829, 0.074220, 10.117889, 0 }, + { -0.244208, 0.076614, 10.134649, 0 }, + { -0.248997, 0.074220, 10.108313, 0 }, + { -0.240617, 0.089783, 10.123875, 0 }, + { -0.254982, 0.074220, 10.146620, 0 }, + { -0.252588, 0.079009, 10.120284, 0 }, + { -0.246603, 0.087388, 10.133451, 0 }, + { -0.246603, 0.074220, 10.116693, 0 }, + { -0.235829, 0.074220, 10.138240, 0 }, + { -0.239420, 0.076614, 10.111904, 0 }, + { -0.253785, 0.065841, 10.132255, 0 }, + { -0.246603, 0.074220, 10.117889, 0 }, + { -0.251391, 0.084994, 10.121481, 0 }, + { -0.260968, 0.087388, 10.131058, 0 }, + { -0.246603, 0.084994, 10.123875, 0 }, + { -0.247800, 0.087388, 10.119086, 0 }, + { -0.238223, 0.070629, 10.125072, 0 }, + { -0.248997, 0.075417, 10.137043, 0 }, + { -0.240617, 0.081403, 10.126269, 0 }, + { -0.225055, 0.075417, 10.117889, 0 }, + { -0.245406, 0.061052, 10.099933, 0 }, + { -0.229843, 0.071826, 10.133451, 0 }, + { -0.239420, 0.088585, 10.158591, 0 }, + { -0.251391, 0.079009, 10.111904, 0 }, + { -0.234632, 0.070629, 10.151408, 0 }, + { -0.232237, 0.068235, 10.127466, 0 }, + { -0.238223, 0.083797, 10.125072, 0 }, + { -0.240617, 0.083797, 10.104721, 0 }, + { -0.234632, 0.084994, 10.127466, 0 }, + { -0.243011, 0.068235, 10.098736, 0 }, + { -0.251391, 0.075417, 10.146620, 0 }, + { -0.257377, 0.082600, 10.117889, 0 }, + { -0.234632, 0.076614, 10.119086, 0 }, + { -0.244208, 0.080206, 10.132255, 0 }, + { -0.232237, 0.080206, 10.139438, 0 }, + { -0.235829, 0.083797, 10.134649, 0 }, + { -0.240617, 0.083797, 10.107116, 0 }, + { -0.239420, 0.087388, 10.134649, 0 }, + { -0.248997, 0.074220, 10.125072, 0 }, + { -0.247800, 0.064643, 10.150211, 0 }, + { -0.243011, 0.076614, 10.111904, 0 }, + { -0.247800, 0.069432, 10.139438, 0 }, + { -0.240617, 0.076614, 10.132255, 0 }, + { -0.240617, 0.076614, 10.129861, 0 }, + { -0.235829, 0.065841, 10.105919, 0 }, + { -0.252588, 0.080206, 10.113101, 0 }, + { -0.251391, 0.077812, 10.149014, 0 }, + { -0.241814, 0.082600, 10.056837, 0 }, + { -0.243011, 0.084994, 10.199292, 0 }, + { -0.253785, 0.077812, 10.098736, 0 }, + { -0.229843, 0.063446, 10.103524, 0 }, + { -0.250194, 0.069432, 10.183730, 0 }, + { -0.240617, 0.086191, 10.067612, 0 }, + { -0.246603, 0.070629, 10.201687, 0 }, + { -0.263362, 0.067038, 10.071202, 0 }, + { -0.245406, 0.059855, 10.166970, 0 }, + { -0.239420, 0.065841, 10.092751, 0 }, + { -0.238223, 0.068235, 10.139438, 0 }, + { -0.243011, 0.074220, 10.116693, 0 }, + { -0.240617, 0.081403, 10.122678, 0 }, + { -0.251391, 0.067038, 10.119086, 0 }, + { -0.240617, 0.075417, 10.113101, 0 }, + { -0.250194, 0.059855, 10.137043, 0 }, + { -0.244208, 0.062249, 10.129861, 0 }, + { -0.229843, 0.083797, 10.117889, 0 }, + { -0.246603, 0.076614, 10.123875, 0 }, + { -0.234632, 0.087388, 10.140635, 0 }, + { -0.254982, 0.079009, 10.119086, 0 }, + { -0.237026, 0.074220, 10.157393, 0 }, + { -0.247800, 0.088585, 10.115496, 0 }, + { -0.251391, 0.087388, 10.144226, 0 }, + { -0.238223, 0.071826, 10.116693, 0 }, + { -0.233435, 0.069432, 10.137043, 0 }, + { -0.231040, 0.081403, 10.119086, 0 }, + { -0.244208, 0.079009, 10.116693, 0 }, + { -0.245406, 0.073023, 10.147817, 0 }, + { -0.250194, 0.071826, 10.113101, 0 }, + { -0.238223, 0.077812, 10.135846, 0 }, + { -0.240617, 0.077812, 10.105919, 0 }, + { -0.239420, 0.076614, 10.145423, 0 }, + { -0.232237, 0.070629, 10.102327, 0 }, + { -0.241814, 0.080206, 10.119086, 0 }, + { -0.237026, 0.068235, 10.111904, 0 }, + { -0.260968, 0.082600, 10.137043, 0 }, + { -0.240617, 0.089783, 10.139438, 0 }, + { -0.238223, 0.077812, 10.128663, 0 }, + { -0.240617, 0.075417, 10.138240, 0 }, + { -0.247800, 0.075417, 10.129861, 0 }, + { -0.251391, 0.075417, 10.143028, 0 }, + { -0.254982, 0.076614, 10.128663, 0 }, + { -0.251391, 0.070629, 10.157393, 0 }, + { -0.253785, 0.086191, 10.134649, 0 }, + { -0.248997, 0.079009, 10.126269, 0 }, + { -0.244208, 0.087388, 10.117889, 0 }, + { -0.254982, 0.080206, 10.125072, 0 }, + { -0.244208, 0.071826, 10.122678, 0 }, + { -0.248997, 0.087388, 10.111904, 0 }, + { -0.246603, 0.075417, 10.133451, 0 }, + { -0.252588, 0.071826, 10.099933, 0 }, + { -0.245406, 0.082600, 10.132255, 0 }, + { -0.246603, 0.086191, 10.129861, 0 }, + { -0.227449, 0.067038, 10.151408, 0 }, + { -0.235829, 0.079009, 10.109509, 0 }, + { -0.239420, 0.080206, 10.137043, 0 }, + { -0.241814, 0.084994, 10.121481, 0 }, + { -0.251391, 0.081403, 10.116693, 0 }, + { -0.260968, 0.073023, 10.141831, 0 }, + { -0.245406, 0.073023, 10.122678, 0 }, + { -0.252588, 0.083797, 10.139438, 0 }, + { -0.243011, 0.080206, 10.122678, 0 }, + { -0.239420, 0.077812, 10.138240, 0 }, + { -0.241814, 0.068235, 10.113101, 0 }, + { -0.244208, 0.074220, 10.133451, 0 }, + { -0.257377, 0.079009, 10.128663, 0 }, + { -0.253785, 0.074220, 10.125072, 0 }, + { -0.238223, 0.062249, 10.132255, 0 }, + { -0.243011, 0.068235, 10.119086, 0 }, + { -0.240617, 0.074220, 10.132255, 0 }, + { -0.272939, 0.076614, 10.116693, 0 }, + { -0.234632, 0.075417, 10.138240, 0 }, + { -0.241814, 0.073023, 10.085567, 0 }, + { -0.246603, 0.075417, 10.163380, 0 }, + { -0.248997, 0.058658, 10.093947, 0 }, + { -0.243011, 0.070629, 10.146620, 0 }, + { -0.238223, 0.074220, 10.110707, 0 }, + { -0.252588, 0.065841, 10.141831, 0 }, + { -0.229843, 0.074220, 10.137043, 0 }, + { -0.248997, 0.076614, 10.099933, 0 }, + { -0.229843, 0.081403, 10.157393, 0 }, + { -0.243011, 0.082600, 10.074794, 0 }, + { -0.250194, 0.071826, 10.164577, 0 }, + { -0.263362, 0.076614, 10.103524, 0 }, + { -0.260968, 0.094571, 10.138240, 0 }, + { -0.240617, 0.077812, 10.116693, 0 }, + { -0.239420, 0.081403, 10.109509, 0 }, + { -0.253785, 0.086191, 10.135846, 0 }, + { -0.247800, 0.076614, 10.093947, 0 }, + { -0.256179, 0.068235, 10.158591, 0 }, + { -0.253785, 0.079009, 10.090356, 0 }, + { -0.239420, 0.076614, 10.151408, 0 }, + { -0.244208, 0.082600, 10.115496, 0 }, + { -0.244208, 0.081403, 10.134649, 0 }, + { -0.254982, 0.088585, 10.122678, 0 }, + { -0.252588, 0.069432, 10.120284, 0 }, + { -0.247800, 0.077812, 10.137043, 0 }, + { -0.250194, 0.076614, 10.117889, 0 }, + { -0.238223, 0.077812, 10.121481, 0 }, + { -0.245406, 0.065841, 10.186124, 0 }, + { -0.233435, 0.065841, 10.046063, 0 }, + { -0.237026, 0.094571, 10.243585, 0 }, + { -0.231040, 0.093374, 10.014939, 0 }, + { -0.243011, 0.084994, 10.223234, 0 }, + { -0.256179, 0.064643, 9.987406, 0 }, + { -0.250194, 0.098162, 10.247176, 0 }, + { -0.229843, 0.073023, 9.891638, 0 }, + { -0.268150, 0.062249, 10.406390, 0 }, + { -0.247800, 0.073023, 9.883258, 0 }, + { -0.237026, 0.076614, 10.360901, 0 }, + { -0.247800, 0.081403, 9.975434, 0 }, + { -0.225055, 0.080206, 10.178942, 0 }, + { -0.263362, 0.071826, 10.163380, 0 }, + { -0.237026, 0.076614, 10.062823, 0 }, + { -0.265756, 0.075417, 10.214854, 0 }, + { -0.234632, 0.083797, 10.053246, 0 }, + { -0.254982, 0.071826, 10.210066, 0 }, + { -0.241814, 0.076614, 10.001771, 0 }, + { -0.221464, 0.117316, 10.239994, 0 }, + { -0.269348, 0.076614, 10.064020, 0 }, + { -0.220266, 0.092177, 10.166970, 0 }, + { -0.252588, 0.075417, 10.111904, 0 }, + { -0.232237, 0.068235, 10.122678, 0 }, + { -0.259771, 0.075417, 10.110707, 0 }, + { -0.246603, 0.095768, 10.137043, 0 }, + { -0.235829, 0.076614, 10.138240, 0 }, + { -0.256179, 0.071826, 10.102327, 0 }, + { -0.229843, 0.089783, 10.175350, 0 }, + { -0.260968, 0.082600, 10.089159, 0 }, + { -0.225055, 0.086191, 10.169365, 0 }, + { -0.262165, 0.087388, 10.103524, 0 }, + { -0.234632, 0.077812, 10.149014, 0 }, + { -0.241814, 0.070629, 10.079582, 0 }, + { -0.256179, 0.077812, 10.163380, 0 }, + { -0.226252, 0.068235, 10.096342, 0 }, + { -0.253785, 0.080206, 10.117889, 0 }, + { -0.244208, 0.077812, 10.163380, 0 }, + { -0.269348, 0.076614, 10.097539, 0 }, + { -0.238223, 0.069432, 10.169365, 0 }, + { -0.254982, 0.068235, 10.096342, 0 }, + { -0.231040, 0.061052, 10.159788, 0 }, + { -0.248997, 0.075417, 10.079582, 0 }, + { -0.258574, 0.071826, 10.162182, 0 }, + { -0.232237, 0.079009, 10.102327, 0 }, + { -0.256179, 0.100556, 10.138240, 0 }, + { -0.232237, 0.084994, 10.116693, 0 }, + { -0.235829, 0.080206, 10.110707, 0 }, + { -0.225055, 0.065841, 10.129861, 0 }, + { -0.217872, 0.082600, 10.090356, 0 }, + { -0.244208, 0.081403, 10.157393, 0 }, }; const size_t kBodyDetectOnOffTestDataLength = diff --git a/test/body_detection_test_data.h b/test/body_detection_test_data.h index 4c22c3236f..913701455b 100644 --- a/test/body_detection_test_data.h +++ b/test/body_detection_test_data.h @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/build.mk b/test/build.mk index fac9544ca4..9ab2cf0f7a 100644 --- a/test/build.mk +++ b/test/build.mk @@ -1,10 +1,18 @@ # -*- makefile -*- -# Copyright 2013 The Chromium OS Authors. All rights reserved. +# Copyright 2013 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # Device test binaries -test-list-y ?= flash_write_protect pingpong timer_calib timer_dos timer_jump mutex utils utils_str +test-list-y ?= flash_write_protect \ + pingpong \ + stdlib \ + timer_calib \ + timer_dos \ + timer_jump \ + mutex \ + utils \ + utils_str #disable: powerdemo # Emulator tests @@ -25,6 +33,7 @@ test-list-host += cec test-list-host += charge_manager test-list-host += charge_manager_drp_charging test-list-host += charge_ramp +test-list-host += chipset test-list-host += compile_time_macros test-list-host += console_edit test-list-host += crc @@ -66,6 +75,7 @@ test-list-host += motion_lid test-list-host += motion_sense_fifo test-list-host += mutex test-list-host += newton_fit +test-list-host += nvidia_gpu test-list-host += online_calibration test-list-host += online_calibration_spoof test-list-host += pingpong @@ -82,6 +92,10 @@ test-list-host += sha256_unrolled test-list-host += shmalloc test-list-host += static_if test-list-host += static_if_error +# TODO(b/237823627): When building for the host, we're linking against the +# toolchain's C standard library, so these tests are actually testing the +# toolchain's C standard library. +test-list-host += stdlib test-list-host += system test-list-host += thermal test-list-host += timer_dos @@ -157,10 +171,12 @@ cec-y=cec.o charge_manager-y=charge_manager.o fake_usbc.o charge_manager_drp_charging-y=charge_manager.o fake_usbc.o charge_ramp-y+=charge_ramp.o +chipset-y+=chipset.o compile_time_macros-y=compile_time_macros.o console_edit-y=console_edit.o cortexm_fpu-y=cortexm_fpu.o crc-y=crc.o +debug-y=debug.o entropy-y=entropy.o extpwr_gpio-y=extpwr_gpio.o fan-y=fan.o @@ -191,6 +207,7 @@ motion_angle-y=motion_angle.o motion_angle_data_literals.o motion_common.o motion_angle_tablet-y=motion_angle_tablet.o motion_angle_data_literals_tablet.o motion_common.o motion_lid-y=motion_lid.o motion_sense_fifo-y=motion_sense_fifo.o +nvidia_gpu-y=nvidia_gpu.o online_calibration-y=online_calibration.o online_calibration_spoof-y=online_calibration_spoof.o gyro_cal_init_for_test.o rgb_keyboard-y=rgb_keyboard.o @@ -216,6 +233,7 @@ sha256-y=sha256.o sha256_unrolled-y=sha256.o shmalloc-y=shmalloc.o static_if-y=static_if.o +stdlib-y=stdlib.o stm32f_rtc-y=stm32f_rtc.o stress-y=stress.o system-y=system.o diff --git a/test/button.c b/test/button.c index e457eaa786..c1acba7048 100644 --- a/test/button.c +++ b/test/button.c @@ -1,9 +1,9 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * * Test non-keyboard buttons. -* + * * Using GPIOS and buttons[] defined in board/host/board.c * Volume down is active low with a debounce time of 30 mSec. * Volume up is active high with a debounce time of 60 mSec. @@ -272,7 +272,7 @@ static void button_test_init(void) button_state[i] = UNCHANGED; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/button.tasklist b/test/button.tasklist index 5a8fb1bfbe..e2f8671c60 100644 --- a/test/button.tasklist +++ b/test/button.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/cbi.c b/test/cbi.c index 0ef2129377..ce01545644 100644 --- a/test/cbi.c +++ b/test/cbi.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -129,7 +129,7 @@ DECLARE_EC_TEST(test_not_found) DECLARE_EC_TEST(test_too_large) { - uint8_t buf[CBI_IMAGE_SIZE-1]; + uint8_t buf[CBI_IMAGE_SIZE - 1]; const int tag = 0xff; /* Data too large */ @@ -162,12 +162,12 @@ DECLARE_EC_TEST(test_all_tags) zassert_equal(cbi_set_board_info(CBI_TAG_SKU_ID, &d8, sizeof(d8)), EC_SUCCESS, NULL); count++; - zassert_equal(cbi_set_board_info(CBI_TAG_DRAM_PART_NUM, - string, sizeof(string)), + zassert_equal(cbi_set_board_info(CBI_TAG_DRAM_PART_NUM, string, + sizeof(string)), EC_SUCCESS, NULL); count++; - zassert_equal(cbi_set_board_info(CBI_TAG_OEM_NAME, - string, sizeof(string)), + zassert_equal(cbi_set_board_info(CBI_TAG_OEM_NAME, string, + sizeof(string)), EC_SUCCESS, NULL); count++; zassert_equal(cbi_set_board_info(CBI_TAG_MODEL_ID, &d8, sizeof(d8)), @@ -176,8 +176,7 @@ DECLARE_EC_TEST(test_all_tags) zassert_equal(cbi_set_board_info(CBI_TAG_FW_CONFIG, &d8, sizeof(d8)), EC_SUCCESS, NULL); count++; - zassert_equal(cbi_set_board_info(CBI_TAG_PCB_SUPPLIER, &d8, - sizeof(d8)), + zassert_equal(cbi_set_board_info(CBI_TAG_PCB_SUPPLIER, &d8, sizeof(d8)), EC_SUCCESS, NULL); count++; zassert_equal(cbi_set_board_info(CBI_TAG_SSFC, &d8, sizeof(d8)), @@ -186,6 +185,10 @@ DECLARE_EC_TEST(test_all_tags) zassert_equal(cbi_set_board_info(CBI_TAG_REWORK_ID, &d8, sizeof(d8)), EC_SUCCESS, NULL); count++; + zassert_equal(cbi_set_board_info(CBI_TAG_FACTORY_CALIBRATION_DATA, &d8, + sizeof(d8)), + EC_SUCCESS, NULL); + count++; /* Read out all */ zassert_equal(cbi_get_board_version(&d32), EC_SUCCESS, NULL); @@ -220,6 +223,8 @@ DECLARE_EC_TEST(test_all_tags) zassert_equal(d32, d8, "0x%x, 0x%x", d32, d8); zassert_equal(cbi_get_ssfc(&d32), EC_SUCCESS, NULL); zassert_equal(d32, d8, "0x%x, 0x%x", d32, d8); + zassert_equal(cbi_get_factory_calibration_data(&d32), EC_SUCCESS, NULL); + zassert_equal(d32, d8, "0x%x, 0x%x", d32, d8); zassert_equal(cbi_get_rework_id(&d64), EC_SUCCESS, NULL); /* This should be zassert_equal, but for EC test fmt is always "0x%x" * which will generate compilation error. @@ -250,7 +255,7 @@ DECLARE_EC_TEST(test_bad_crc) zassert_equal(cbi_set_board_info(tag, &d8, sizeof(d8)), EC_SUCCESS, NULL); i2c_read8(I2C_PORT_EEPROM, I2C_ADDR_EEPROM_FLAGS, - offsetof(struct cbi_header, crc), &crc); + offsetof(struct cbi_header, crc), &crc); i2c_write8(I2C_PORT_EEPROM, I2C_ADDR_EEPROM_FLAGS, offsetof(struct cbi_header, crc), ++crc); cbi_invalidate_cache(); @@ -263,24 +268,21 @@ DECLARE_EC_TEST(test_bad_crc) TEST_SUITE(test_suite_cbi) { - ztest_test_suite(test_cbi, - ztest_unit_test_setup_teardown(test_uint8, test_setup, - test_teardown), - ztest_unit_test_setup_teardown(test_uint32, test_setup, - test_teardown), - ztest_unit_test_setup_teardown(test_string, test_setup, - test_teardown), - ztest_unit_test_setup_teardown(test_not_found, - test_setup, - test_teardown), - ztest_unit_test_setup_teardown(test_too_large, - test_setup, - test_teardown), - ztest_unit_test_setup_teardown(test_all_tags, - test_setup, - test_teardown), - ztest_unit_test_setup_teardown(test_bad_crc, - test_setup, - test_teardown)); + ztest_test_suite( + test_cbi, + ztest_unit_test_setup_teardown(test_uint8, test_setup, + test_teardown), + ztest_unit_test_setup_teardown(test_uint32, test_setup, + test_teardown), + ztest_unit_test_setup_teardown(test_string, test_setup, + test_teardown), + ztest_unit_test_setup_teardown(test_not_found, test_setup, + test_teardown), + ztest_unit_test_setup_teardown(test_too_large, test_setup, + test_teardown), + ztest_unit_test_setup_teardown(test_all_tags, test_setup, + test_teardown), + ztest_unit_test_setup_teardown(test_bad_crc, test_setup, + test_teardown)); ztest_run_test_suite(test_cbi); } diff --git a/test/cbi.tasklist b/test/cbi.tasklist index 52c0d390ef..08d31e0102 100644 --- a/test/cbi.tasklist +++ b/test/cbi.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/cbi_wp.c b/test/cbi_wp.c index 7bdfa4b0c8..625447dcb3 100644 --- a/test/cbi_wp.c +++ b/test/cbi_wp.c @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -49,8 +49,7 @@ DECLARE_EC_TEST(test_wp) TEST_SUITE(test_suite_cbi_wp) { ztest_test_suite(test_cbi_wp, - ztest_unit_test_setup_teardown(test_wp, - test_setup, + ztest_unit_test_setup_teardown(test_wp, test_setup, test_teardown)); ztest_run_test_suite(test_cbi_wp); } diff --git a/test/cbi_wp.tasklist b/test/cbi_wp.tasklist index e54ea001bd..cd866d90e1 100644 --- a/test/cbi_wp.tasklist +++ b/test/cbi_wp.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/cec.c b/test/cec.c index 9377e4fcd3..7718b7b705 100644 --- a/test/cec.c +++ b/test/cec.c @@ -1,4 +1,4 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. +/* Copyright 2018 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -18,7 +18,6 @@ struct overflow_msg { BUILD_ASSERT(offsetof(struct overflow_msg, overflow_detector) == offsetof(struct cec_msg_transfer, buf) + MAX_CEC_MSG_LEN); - struct overflow_queue { struct cec_rx_queue queue; uint8_t overflow_detector[CEC_RX_BUFFER_SIZE]; @@ -35,7 +34,7 @@ static int test_msg_overflow(void) int i; /* Overwrite the buffer by 1 byte */ - for (i = 0; i < (MAX_CEC_MSG_LEN+1)*8; i++) { + for (i = 0; i < (MAX_CEC_MSG_LEN + 1) * 8; i++) { cec_transfer_set_bit(&overflow_msg.transfer, 1); cec_transfer_inc_bit(&overflow_msg.transfer); } @@ -60,8 +59,6 @@ static int test_msg_overflow(void) return EC_SUCCESS; } - - static int verify_no_queue_overflow(void) { int i; @@ -73,11 +70,9 @@ static int verify_no_queue_overflow(void) return EC_SUCCESS; } - static void clear_queue(void) { memset(queue, 0, sizeof(struct cec_rx_queue)); - } static int fill_queue(uint8_t *msg, int msg_size) @@ -92,12 +87,12 @@ static int fill_queue(uint8_t *msg, int msg_size) */ clear_queue(); - for (i = 0; i < (CEC_RX_BUFFER_SIZE - 1)/(msg_size + 1); i++) + for (i = 0; i < (CEC_RX_BUFFER_SIZE - 1) / (msg_size + 1); i++) TEST_ASSERT(cec_rx_queue_push(queue, msg, msg_size) == 0); /* Now the queue should be full */ TEST_ASSERT(cec_rx_queue_push(queue, msg, msg_size) == - EC_ERROR_OVERFLOW); + EC_ERROR_OVERFLOW); /* Verify nothing was written outside of the queue */ TEST_ASSERT(verify_no_queue_overflow() == EC_SUCCESS); @@ -119,7 +114,7 @@ static int test_queue_overflow(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { queue = &overflow_queue.queue; diff --git a/test/cec.tasklist b/test/cec.tasklist index e7634958a9..df71bfc0f9 100644 --- a/test/cec.tasklist +++ b/test/cec.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. +/* Copyright 2018 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * diff --git a/test/charge_manager.c b/test/charge_manager.c index 2a64ca3e98..9a27a419d0 100644 --- a/test/charge_manager.c +++ b/test/charge_manager.c @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -18,16 +18,11 @@ /* Charge supplier priority: lower number indicates higher priority. */ const int supplier_priority[] = { - [CHARGE_SUPPLIER_TEST1] = 0, - [CHARGE_SUPPLIER_TEST2] = 1, - [CHARGE_SUPPLIER_TEST3] = 1, - [CHARGE_SUPPLIER_TEST4] = 1, - [CHARGE_SUPPLIER_TEST5] = 3, - [CHARGE_SUPPLIER_TEST6] = 3, - [CHARGE_SUPPLIER_TEST7] = 5, - [CHARGE_SUPPLIER_TEST8] = 6, - [CHARGE_SUPPLIER_TEST9] = 6, - [CHARGE_SUPPLIER_TEST10] = 7, + [CHARGE_SUPPLIER_TEST1] = 0, [CHARGE_SUPPLIER_TEST2] = 1, + [CHARGE_SUPPLIER_TEST3] = 1, [CHARGE_SUPPLIER_TEST4] = 1, + [CHARGE_SUPPLIER_TEST5] = 3, [CHARGE_SUPPLIER_TEST6] = 3, + [CHARGE_SUPPLIER_TEST7] = 5, [CHARGE_SUPPLIER_TEST8] = 6, + [CHARGE_SUPPLIER_TEST9] = 6, [CHARGE_SUPPLIER_TEST10] = 7, }; BUILD_ASSERT((int)CHARGE_SUPPLIER_COUNT == (int)CHARGE_SUPPLIER_TEST_COUNT); BUILD_ASSERT(ARRAY_SIZE(supplier_priority) == CHARGE_SUPPLIER_COUNT); @@ -39,8 +34,8 @@ static int new_power_request[CONFIG_USB_PD_PORT_MAX_COUNT]; static enum pd_power_role power_role[CONFIG_USB_PD_PORT_MAX_COUNT]; /* Callback functions called by CM on state change */ -void board_set_charge_limit(int port, int supplier, int charge_ma, - int max_ma, int charge_mv) +void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma, + int charge_mv) { active_charge_limit = charge_ma; } @@ -156,8 +151,8 @@ static int test_initialization(void) TEST_ASSERT(active_charge_port == CHARGE_PORT_NONE); /* Update last pair and verify a charge port has been selected */ - charge_manager_update_charge(CHARGE_SUPPLIER_COUNT-1, - board_get_usb_pd_port_count()-1, + charge_manager_update_charge(CHARGE_SUPPLIER_COUNT - 1, + board_get_usb_pd_port_count() - 1, &charge); wait_for_charge_manager_refresh(); TEST_ASSERT(active_charge_port != CHARGE_PORT_NONE); @@ -787,7 +782,7 @@ static int test_unknown_dualrole_capability(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); @@ -801,5 +796,8 @@ void run_test(int argc, char **argv) RUN_TEST(test_rejected_port); RUN_TEST(test_unknown_dualrole_capability); + /* Some handlers are still running after the test ends. */ + sleep(2); + test_print_result(); } diff --git a/test/charge_manager.tasklist b/test/charge_manager.tasklist index 1f6f139a63..8c05d700ee 100644 --- a/test/charge_manager.tasklist +++ b/test/charge_manager.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/charge_manager_drp_charging.tasklist b/test/charge_manager_drp_charging.tasklist index e39c934e44..7b9e5153c4 100644 --- a/test/charge_manager_drp_charging.tasklist +++ b/test/charge_manager_drp_charging.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2015 The Chromium OS Authors. All rights reserved. +/* Copyright 2015 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/charge_ramp.c b/test/charge_ramp.c index 84cac57b8e..a4d53b31d6 100644 --- a/test/charge_ramp.c +++ b/test/charge_ramp.c @@ -1,4 +1,4 @@ -/* Copyright 2015 The Chromium OS Authors. All rights reserved. +/* Copyright 2015 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -19,7 +19,7 @@ #define TASK_EVENT_OVERCURRENT (1 << 0) -#define RAMP_STABLE_DELAY (120*SECOND) +#define RAMP_STABLE_DELAY (120 * SECOND) /* * Time to delay for detecting the charger type. This value follows @@ -27,7 +27,7 @@ * CHARGE_DETECT_DELAY so we guarantee we wake up before the ramp * has started. */ -#define CHARGE_DETECT_DELAY_TEST (CHARGE_DETECT_DELAY - 100*MSEC) +#define CHARGE_DETECT_DELAY_TEST (CHARGE_DETECT_DELAY - 100 * MSEC) static int system_load_current_ma; static int vbus_low_current_ma = 500; @@ -73,8 +73,8 @@ int board_is_vbus_too_low(int port, enum chg_ramp_vbus_state ramp_state) vbus_low_current_ma; } -void board_set_charge_limit(int port, int supplier, int limit_ma, - int max_ma, int max_mv) +void board_set_charge_limit(int port, int supplier, int limit_ma, int max_ma, + int max_mv) { charge_limit_ma = limit_ma; if (charge_limit_ma > overcurrent_current_ma) @@ -96,9 +96,8 @@ static void plug_charger_with_ts(int supplier_type, int port, int min_current, static void plug_charger(int supplier_type, int port, int min_current, int vbus_low_current, int overcurrent_current) { - plug_charger_with_ts(supplier_type, port, min_current, - vbus_low_current, overcurrent_current, - get_time()); + plug_charger_with_ts(supplier_type, port, min_current, vbus_low_current, + overcurrent_current, get_time()); } static void unplug_charger(void) @@ -137,7 +136,7 @@ static int test_no_ramp(void) * the charge limit. This just needs at least transition to the * CHG_RAMP_OVERCURRENT_DETECT state. */ - usleep(CHARGE_DETECT_DELAY_TEST + 200*MSEC); + usleep(CHARGE_DETECT_DELAY_TEST + 200 * MSEC); /* That's right. Start at 500 mA */ TEST_ASSERT(charge_limit_ma == 500); TEST_ASSERT(wait_stable_no_overcurrent()); @@ -442,14 +441,14 @@ static int test_equal_priority_overcurrent(void) * switches to the other one. */ while (1) { - plug_charger_with_ts(CHARGE_SUPPLIER_TEST4, 0, 500, 3000, - 2000, oc_time); + plug_charger_with_ts(CHARGE_SUPPLIER_TEST4, 0, 500, 3000, 2000, + oc_time); oc_time = get_time(); oc_time.val += 600 * MSEC; if (wait_stable_no_overcurrent()) break; - plug_charger_with_ts(CHARGE_SUPPLIER_TEST4, 1, 500, 3000, - 2000, oc_time); + plug_charger_with_ts(CHARGE_SUPPLIER_TEST4, 1, 500, 3000, 2000, + oc_time); oc_time = get_time(); oc_time.val += 600 * MSEC; if (wait_stable_no_overcurrent()) @@ -497,7 +496,7 @@ static int test_ramp_limit(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/charge_ramp.tasklist b/test/charge_ramp.tasklist index 1e18846c75..ff0b0b7fd0 100644 --- a/test/charge_ramp.tasklist +++ b/test/charge_ramp.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2015 The Chromium OS Authors. All rights reserved. +/* Copyright 2015 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/chipset.c b/test/chipset.c new file mode 100644 index 0000000000..6c9031e3f0 --- /dev/null +++ b/test/chipset.c @@ -0,0 +1,32 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Test chipset + */ + +#define CONFIG_CMD_AP_RESET_LOG + +#include "chipset.h" +#include "test_util.h" + +static int test_get_shutdown_reason(void) +{ + enum chipset_shutdown_reason reason = chipset_get_shutdown_reason(); + + TEST_ASSERT(reason == 0); + report_ap_reset(CHIPSET_SHUTDOWN_POWERFAIL); + reason = chipset_get_shutdown_reason(); + TEST_ASSERT(reason == CHIPSET_SHUTDOWN_POWERFAIL); + + return EC_SUCCESS; +} + +void run_test(int argc, const char **argv) +{ + test_reset(); + + RUN_TEST(test_get_shutdown_reason); + + test_print_result(); +} diff --git a/test/chipset.tasklist b/test/chipset.tasklist new file mode 100644 index 0000000000..45964224fe --- /dev/null +++ b/test/chipset.tasklist @@ -0,0 +1,10 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/** + * See CONFIG_TASK_LIST in config.h for details. + */ +#define CONFIG_TEST_TASK_LIST \ + TASK_TEST(CHIPSET, chipset_task, NULL, TASK_STACK_SIZE) diff --git a/test/compile_time_macros.c b/test/compile_time_macros.c index 7d4bee4aa6..544da9e0d8 100644 --- a/test/compile_time_macros.c +++ b/test/compile_time_macros.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -9,10 +9,9 @@ #include "common.h" #include "test_util.h" - static int test_BIT(void) { - TEST_EQ(BIT(0), 0x00000001U, "%u"); + TEST_EQ(BIT(0), 0x00000001U, "%u"); TEST_EQ(BIT(25), 0x02000000U, "%u"); TEST_EQ(BIT(31), 0x80000000U, "%u"); @@ -21,7 +20,7 @@ static int test_BIT(void) static int test_BIT_ULL(void) { - TEST_EQ(BIT_ULL(0), 0x0000000000000001ULL, "%Lu"); + TEST_EQ(BIT_ULL(0), 0x0000000000000001ULL, "%Lu"); TEST_EQ(BIT_ULL(25), 0x0000000002000000ULL, "%Lu"); TEST_EQ(BIT_ULL(50), 0x0004000000000000ULL, "%Lu"); TEST_EQ(BIT_ULL(63), 0x8000000000000000ULL, "%Lu"); @@ -70,10 +69,10 @@ static int test_WRITE_BIT(void) static int test_GENMASK(void) { - TEST_EQ(GENMASK(0, 0), 0x00000001U, "%u"); - TEST_EQ(GENMASK(31, 0), 0xFFFFFFFFU, "%u"); - TEST_EQ(GENMASK(4, 4), 0x00000010U, "%u"); - TEST_EQ(GENMASK(4, 0), 0x0000001FU, "%u"); + TEST_EQ(GENMASK(0, 0), 0x00000001U, "%u"); + TEST_EQ(GENMASK(31, 0), 0xFFFFFFFFU, "%u"); + TEST_EQ(GENMASK(4, 4), 0x00000010U, "%u"); + TEST_EQ(GENMASK(4, 0), 0x0000001FU, "%u"); TEST_EQ(GENMASK(21, 21), 0x00200000U, "%u"); TEST_EQ(GENMASK(31, 31), 0x80000000U, "%u"); @@ -82,11 +81,11 @@ static int test_GENMASK(void) static int test_GENMASK_ULL(void) { - TEST_EQ(GENMASK_ULL(0, 0), 0x0000000000000001ULL, "%Lu"); - TEST_EQ(GENMASK_ULL(31, 0), 0x00000000FFFFFFFFULL, "%Lu"); - TEST_EQ(GENMASK_ULL(63, 0), 0xFFFFFFFFFFFFFFFFULL, "%Lu"); - TEST_EQ(GENMASK_ULL(4, 4), 0x0000000000000010ULL, "%Lu"); - TEST_EQ(GENMASK_ULL(4, 0), 0x000000000000001FULL, "%Lu"); + TEST_EQ(GENMASK_ULL(0, 0), 0x0000000000000001ULL, "%Lu"); + TEST_EQ(GENMASK_ULL(31, 0), 0x00000000FFFFFFFFULL, "%Lu"); + TEST_EQ(GENMASK_ULL(63, 0), 0xFFFFFFFFFFFFFFFFULL, "%Lu"); + TEST_EQ(GENMASK_ULL(4, 4), 0x0000000000000010ULL, "%Lu"); + TEST_EQ(GENMASK_ULL(4, 0), 0x000000000000001FULL, "%Lu"); TEST_EQ(GENMASK_ULL(21, 21), 0x0000000000200000ULL, "%Lu"); TEST_EQ(GENMASK_ULL(31, 31), 0x0000000080000000ULL, "%Lu"); TEST_EQ(GENMASK_ULL(63, 63), 0x8000000000000000ULL, "%Lu"); @@ -106,7 +105,7 @@ test_static int test_IS_ARRAY(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/compile_time_macros.tasklist b/test/compile_time_macros.tasklist index 5ffe662d01..2d4595f76a 100644 --- a/test/compile_time_macros.tasklist +++ b/test/compile_time_macros.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/console_edit.c b/test/console_edit.c index 8d0721c14e..3ffb79609a 100644 --- a/test/console_edit.c +++ b/test/console_edit.c @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -10,18 +10,20 @@ #include "test_util.h" #include "timer.h" #include "util.h" +#include "uart.h" +#include "ec_commands.h" static int cmd_1_call_cnt; static int cmd_2_call_cnt; -static int command_test_1(int argc, char **argv) +static int command_test_1(int argc, const char **argv) { cmd_1_call_cnt++; return EC_SUCCESS; } DECLARE_CONSOLE_COMMAND(test1, command_test_1, NULL, NULL); -static int command_test_2(int argc, char **argv) +static int command_test_2(int argc, const char **argv) { cmd_2_call_cnt++; return EC_SUCCESS; @@ -40,7 +42,7 @@ enum arrow_key_t { static void arrow_key(enum arrow_key_t k, int repeat) { - static char seq[4] = {0x1B, '[', 0, 0}; + static char seq[4] = { 0x1B, '[', 0, 0 }; seq[2] = 'A' + k; while (repeat--) UART_INJECT(seq); @@ -63,7 +65,7 @@ static void end_key(void) static void ctrl_key(char c) { - static char seq[2] = {0, 0}; + static char seq[2] = { 0, 0 }; seq[0] = c - '@'; UART_INJECT(seq); } @@ -98,7 +100,8 @@ static int test_backspace(void) cmd_1_call_cnt = 0; UART_INJECT("testx\b1\n"); msleep(30); - TEST_CHECK(cmd_1_call_cnt == 1); + TEST_ASSERT(cmd_1_call_cnt == 1); + return EC_SUCCESS; } static int test_insert_char(void) @@ -108,7 +111,8 @@ static int test_insert_char(void) arrow_key(ARROW_LEFT, 2); UART_INJECT("s\n"); msleep(30); - TEST_CHECK(cmd_1_call_cnt == 1); + TEST_ASSERT(cmd_1_call_cnt == 1); + return EC_SUCCESS; } static int test_delete_char(void) @@ -118,7 +122,8 @@ static int test_delete_char(void) arrow_key(ARROW_LEFT, 1); UART_INJECT("\b\n"); msleep(30); - TEST_CHECK(cmd_1_call_cnt == 1); + TEST_ASSERT(cmd_1_call_cnt == 1); + return EC_SUCCESS; } static int test_insert_delete_char(void) @@ -130,7 +135,8 @@ static int test_insert_delete_char(void) arrow_key(ARROW_RIGHT, 1); UART_INJECT("s\n"); msleep(30); - TEST_CHECK(cmd_1_call_cnt == 1); + TEST_ASSERT(cmd_1_call_cnt == 1); + return EC_SUCCESS; } static int test_home_end_key(void) @@ -142,7 +148,8 @@ static int test_home_end_key(void) end_key(); UART_INJECT("1\n"); msleep(30); - TEST_CHECK(cmd_1_call_cnt == 1); + TEST_ASSERT(cmd_1_call_cnt == 1); + return EC_SUCCESS; } static int test_ctrl_k(void) @@ -153,7 +160,8 @@ static int test_ctrl_k(void) ctrl_key('K'); UART_INJECT("\n"); msleep(30); - TEST_CHECK(cmd_1_call_cnt == 1); + TEST_ASSERT(cmd_1_call_cnt == 1); + return EC_SUCCESS; } static int test_history_up(void) @@ -164,7 +172,8 @@ static int test_history_up(void) arrow_key(ARROW_UP, 1); UART_INJECT("\n"); msleep(30); - TEST_CHECK(cmd_1_call_cnt == 2); + TEST_ASSERT(cmd_1_call_cnt == 2); + return EC_SUCCESS; } static int test_history_up_up(void) @@ -178,7 +187,8 @@ static int test_history_up_up(void) arrow_key(ARROW_UP, 2); UART_INJECT("\n"); msleep(30); - TEST_CHECK(cmd_1_call_cnt == 2 && cmd_2_call_cnt == 1); + TEST_ASSERT(cmd_1_call_cnt == 2 && cmd_2_call_cnt == 1); + return EC_SUCCESS; } static int test_history_up_up_down(void) @@ -193,7 +203,8 @@ static int test_history_up_up_down(void) arrow_key(ARROW_DOWN, 1); UART_INJECT("\n"); msleep(30); - TEST_CHECK(cmd_1_call_cnt == 1 && cmd_2_call_cnt == 2); + TEST_ASSERT(cmd_1_call_cnt == 1 && cmd_2_call_cnt == 2); + return EC_SUCCESS; } static int test_history_edit(void) @@ -205,7 +216,8 @@ static int test_history_edit(void) arrow_key(ARROW_UP, 1); UART_INJECT("\b2\n"); msleep(30); - TEST_CHECK(cmd_1_call_cnt == 1 && cmd_2_call_cnt == 1); + TEST_ASSERT(cmd_1_call_cnt == 1 && cmd_2_call_cnt == 1); + return EC_SUCCESS; } static int test_history_stash(void) @@ -219,13 +231,14 @@ static int test_history_stash(void) arrow_key(ARROW_DOWN, 1); UART_INJECT("2\n"); msleep(30); - TEST_CHECK(cmd_1_call_cnt == 1 && cmd_2_call_cnt == 1); + TEST_ASSERT(cmd_1_call_cnt == 1 && cmd_2_call_cnt == 1); + return EC_SUCCESS; } static int test_history_list(void) { const char *exp_output = "history\n" /* Input command */ - "test3\n" /* Output 4 last commands */ + "test3\n" /* Output 4 last commands */ "test4\n" "test5\n" "history\n" @@ -258,8 +271,8 @@ static int test_output_channel(void) cputs(CC_TASK, "shouldn't see this either\n"); cflush(); test_capture_console(0); - TEST_ASSERT(compare_multiline_string(test_get_captured_console(), - "") == 0); + TEST_ASSERT(compare_multiline_string(test_get_captured_console(), "") == + 0); UART_INJECT("chan restore\n"); msleep(30); test_capture_console(1); @@ -273,7 +286,35 @@ static int test_output_channel(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +/* This test is identical to console::buf_notify_null in + * zephyr/test/drivers/default/src/console.c. Please keep them in sync to + * verify that uart_console_read_buffer works identically in legacy EC and + * zephyr. + */ +static int test_buf_notify_null(void) +{ + char buffer[100]; + uint16_t write_count; + + /* Flush the console buffer before we start. */ + TEST_ASSERT(uart_console_read_buffer_init() == 0); + + /* Write a nul char to the buffer. */ + cprintf(CC_SYSTEM, "ab%cc", 0); + cflush(); + + /* Check if the nul is present in the buffer. */ + TEST_ASSERT(uart_console_read_buffer_init() == 0); + TEST_ASSERT(uart_console_read_buffer(CONSOLE_READ_RECENT, buffer, + sizeof(buffer), + &write_count) == 0); + TEST_ASSERT(strncmp(buffer, "abc", 4) == 0); + TEST_EQ(write_count, 4, "%d"); + + return EC_SUCCESS; +} + +void run_test(int argc, const char **argv) { test_reset(); @@ -290,6 +331,7 @@ void run_test(int argc, char **argv) RUN_TEST(test_history_stash); RUN_TEST(test_history_list); RUN_TEST(test_output_channel); + RUN_TEST(test_buf_notify_null); test_print_result(); } diff --git a/test/console_edit.tasklist b/test/console_edit.tasklist index da0ab6211a..100cb6b5bd 100644 --- a/test/console_edit.tasklist +++ b/test/console_edit.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/cortexm_fpu.c b/test/cortexm_fpu.c index 8564e2a4ef..c27edbaf40 100644 --- a/test/cortexm_fpu.c +++ b/test/cortexm_fpu.c @@ -1,4 +1,4 @@ -/* Copyright 2022 The Chromium OS Authors. All rights reserved. +/* Copyright 2022 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -33,11 +33,7 @@ static float divf(float a, float b) { float result; - asm volatile( - "fdivs %0, %1, %2" - : "=w"(result) - : "w"(a), "w"(b) - ); + asm volatile("fdivs %0, %1, %2" : "=w"(result) : "w"(a), "w"(b)); return result; } @@ -162,7 +158,7 @@ test_static int test_cortexm_fpu_inexact(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/cortexm_fpu.tasklist b/test/cortexm_fpu.tasklist index 7f9fb4dd8a..16313e9055 100644 --- a/test/cortexm_fpu.tasklist +++ b/test/cortexm_fpu.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2022 The Chromium OS Authors. All rights reserved. +/* Copyright 2022 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/crc.c b/test/crc.c index e65be72ace..9943a7ac0c 100644 --- a/test/crc.c +++ b/test/crc.c @@ -1,4 +1,4 @@ -/* Copyright 2016 The Chromium OS Authors. All rights reserved. +/* Copyright 2016 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -37,7 +37,7 @@ static int test_8(void) { uint32_t crc; const uint32_t input = 0xdeadbeef; - const uint8_t *p = (const uint8_t *) &input; + const uint8_t *p = (const uint8_t *)&input; int i; crc32_init(); @@ -83,7 +83,7 @@ static int test_cros_crc8(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/crc.tasklist b/test/crc.tasklist index f46a2eaa1d..bf2309064a 100644 --- a/test/crc.tasklist +++ b/test/crc.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2016 The Chromium OS Authors. All rights reserved. +/* Copyright 2016 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/debug.c b/test/debug.c new file mode 100644 index 0000000000..2c637ab725 --- /dev/null +++ b/test/debug.c @@ -0,0 +1,47 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "common.h" +#include "debug.h" +#include "string.h" +#include "test_util.h" + +static bool debugger_connected; + +static void print_usage(void) +{ + ccprintf("usage: runtest [debugger|no_debugger]\n"); +} + +test_static int test_debugger_is_connected(void) +{ + ccprintf("debugger_is_connected: %d\n", debugger_connected); + TEST_EQ(debugger_is_connected(), debugger_connected, "%d"); + return EC_SUCCESS; +} + +void run_test(int argc, const char **argv) +{ + test_reset(); + + if (argc < 2) { + print_usage(); + test_fail(); + return; + } + + if (strncmp(argv[1], "debugger", sizeof("debugger")) == 0) + debugger_connected = true; + else if (strncmp(argv[1], "no_debugger", sizeof("no_debugger")) == 0) { + debugger_connected = false; + } else { + print_usage(); + test_fail(); + return; + } + + RUN_TEST(test_debugger_is_connected); + test_print_result(); +} diff --git a/test/debug.tasklist b/test/debug.tasklist new file mode 100644 index 0000000000..959f62ef79 --- /dev/null +++ b/test/debug.tasklist @@ -0,0 +1,9 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/** + * See CONFIG_TASK_LIST in config.h for details. + */ +#define CONFIG_TEST_TASK_LIST diff --git a/test/entropy.c b/test/entropy.c index fb066a6c5b..8fbdb9147f 100644 --- a/test/entropy.c +++ b/test/entropy.c @@ -1,4 +1,4 @@ -/* Copyright 2017 The Chromium OS Authors. All rights reserved. +/* Copyright 2017 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -26,10 +26,10 @@ uint32_t log2(int32_t val) int val1 = 31 - __builtin_clz(val); int val2 = 32 - __builtin_clz(val - 1); - return log2_mult * (val1 + val2)/2; + return log2_mult * (val1 + val2) / 2; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { const int loopcount = 512; @@ -52,7 +52,7 @@ void run_test(int argc, char **argv) t1 = get_time(); if (i == 0) ccprintf("Got %zd bytes in %" PRId64 " us\n", - sizeof(buffer), t1.val - t0.val); + sizeof(buffer), t1.val - t0.val); for (j = 0; j < sizeof(buffer); j++) buckets[buffer[j]]++; @@ -82,7 +82,7 @@ void run_test(int argc, char **argv) ccprintf("\n"); ccprintf("Entropy: %u/1000 bits\n", - entropy * 1000 / (log2_mult * totalcount)); + entropy * 1000 / (log2_mult * totalcount)); /* We want at least 2 bits of entropy (out of a maximum of 8) */ if ((entropy / (log2_mult * totalcount)) >= 2) diff --git a/test/entropy.tasklist b/test/entropy.tasklist index 80072bb620..329f9a3d28 100644 --- a/test/entropy.tasklist +++ b/test/entropy.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2017 The Chromium OS Authors. All rights reserved. +/* Copyright 2017 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/extpwr_gpio.c b/test/extpwr_gpio.c index d1f77c9167..8a17a9580c 100644 --- a/test/extpwr_gpio.c +++ b/test/extpwr_gpio.c @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -51,7 +51,7 @@ static int test_hook(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/extpwr_gpio.tasklist b/test/extpwr_gpio.tasklist index da0ab6211a..100cb6b5bd 100644 --- a/test/extpwr_gpio.tasklist +++ b/test/extpwr_gpio.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/fake_battery.c b/test/fake_battery.c index 4442300572..9dabbb31d9 100644 --- a/test/fake_battery.c +++ b/test/fake_battery.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * diff --git a/test/fake_usbc.c b/test/fake_usbc.c index 2cabb2dee0..1d9c42a97a 100644 --- a/test/fake_usbc.c +++ b/test/fake_usbc.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -15,17 +15,20 @@ __overridable int pd_is_vbus_present(int port) } __overridable void pd_request_data_swap(int port) -{} +{ +} __overridable void pd_request_power_swap(int port) -{} +{ +} void pd_request_vconn_swap_off(int port) -{} +{ +} void pd_request_vconn_swap_on(int port) -{} - +{ +} static enum pd_data_role data_role; __overridable enum pd_data_role pd_get_data_role(int port) @@ -68,10 +71,12 @@ int tc_check_vconn_swap(int port) } void tc_ctvpd_detected(int port) -{} +{ +} void tc_disc_ident_complete(int port) -{} +{ +} static int attached_snk; int tc_is_attached_snk(int port) @@ -91,28 +96,36 @@ int tc_is_vconn_src(int port) } void tc_hard_reset_request(int port) -{} +{ +} void tc_hard_reset_complete(int port) -{} +{ +} void tc_partner_dr_data(int port, int en) -{} +{ +} void tc_partner_dr_power(int port, int en) -{} +{ +} void tc_partner_unconstrainedpower(int port, int en) -{} +{ +} void tc_partner_usb_comm(int port, int en) -{} +{ +} void tc_pd_connection(int port, int en) -{} +{ +} void tc_pr_swap_complete(int port, bool success) -{} +{ +} void tc_prs_snk_src_assert_rp(int port) { @@ -127,16 +140,20 @@ void tc_prs_src_snk_assert_rd(int port) } void tc_src_power_off(int port) -{} +{ +} void tc_set_timeout(int port, uint64_t timeout) -{} +{ +} __overridable void tc_start_error_recovery(int port) -{} +{ +} __overridable void tc_snk_power_off(int port) -{} +{ +} __overridable void pe_invalidate_explicit_contract(int port) { @@ -148,7 +165,7 @@ __overridable enum pd_dual_role_states pd_get_dual_role(int port) } __overridable void pd_dev_get_rw_hash(int port, uint16_t *dev_id, - uint8_t *rw_hash, uint32_t *current_image) + uint8_t *rw_hash, uint32_t *current_image) { } @@ -185,7 +202,7 @@ enum idh_ptype get_usb_pd_mux_cable_type(int port) return IDH_PTYPE_UNDEF; } -const uint32_t * const pd_get_src_caps(int port) +const uint32_t *const pd_get_src_caps(int port) { return NULL; } @@ -200,8 +217,7 @@ uint8_t pd_get_src_cap_cnt(int port) } #endif -#if !defined(CONFIG_USB_DRP_ACC_TRYSRC) && \ - !defined(CONFIG_USB_CTVPD) +#if !defined(CONFIG_USB_DRP_ACC_TRYSRC) && !defined(CONFIG_USB_CTVPD) int pd_is_connected(int port) { return true; @@ -271,12 +287,12 @@ void dpm_mode_exit_complete(int port) } void dpm_vdm_acked(int port, enum tcpci_msg_type type, int vdo_count, - uint32_t *vdm) + uint32_t *vdm) { } void dpm_vdm_naked(int port, enum tcpci_msg_type type, uint16_t svid, - uint8_t vdm_cmd) + uint8_t vdm_cmd) { } @@ -312,6 +328,14 @@ void dpm_remove_source(int port) { } +void dpm_bist_shared_mode_enter(int port) +{ +} + +void dpm_bist_shared_mode_exit(int port) +{ +} + int dpm_get_source_pdo(const uint32_t **src_pdo, const int port) { *src_pdo = pd_src_pdo; @@ -323,9 +347,13 @@ int dpm_get_status_msg(int port, uint8_t *msg, uint32_t *len) return EC_SUCCESS; } +void dpm_handle_alert(int port, uint32_t ado) +{ +} + static enum tcpc_rp_value lcl_rp; __overridable void typec_select_src_current_limit_rp(int port, - enum tcpc_rp_value rp) + enum tcpc_rp_value rp) { lcl_rp = rp; } diff --git a/test/fan.c b/test/fan.c index d03aa0213c..76c3208cc6 100644 --- a/test/fan.c +++ b/test/fan.c @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -10,14 +10,13 @@ #include "fan.h" #include "hooks.h" #include "host_command.h" -#include "printf.h" #include "temp_sensor.h" #include "test_util.h" #include "thermal.h" #include "timer.h" #include "util.h" -#define FAN_RPM(fan) fans[fan].rpm +#define FAN_RPM(fan) fans[fan].rpm /*****************************************************************************/ /* Tests */ @@ -105,9 +104,16 @@ static int test_fan(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { RUN_TEST(test_fan); test_print_result(); } + +/* Doesn't do anything, but it makes this test stop intermittently covering + * some code in core/host/task.c:fast_forward(). + */ +void interrupt_generator(void) +{ +} diff --git a/test/fan.tasklist b/test/fan.tasklist index 25dcf124db..836bdd08ed 100644 --- a/test/fan.tasklist +++ b/test/fan.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/flash.c b/test/flash.c index 4f9ca74016..bd1b646f1f 100644 --- a/test/flash.c +++ b/test/flash.c @@ -1,4 +1,4 @@ -/* Copyright 2012 The Chromium OS Authors. All rights reserved. +/* Copyright 2012 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -103,60 +103,59 @@ static int verify_erase(int offset, int size) return EC_SUCCESS; } - -#define VERIFY_NO_WRITE(off, sz, d) \ - do { \ - record_flash(off, sz); \ +#define VERIFY_NO_WRITE(off, sz, d) \ + do { \ + record_flash(off, sz); \ TEST_ASSERT(host_command_write(off, sz, d) != EC_SUCCESS); \ - TEST_ASSERT(verify_flash(off, sz) == EC_SUCCESS); \ + TEST_ASSERT(verify_flash(off, sz) == EC_SUCCESS); \ } while (0) -#define VERIFY_NO_ERASE(off, sz) \ - do { \ - record_flash(off, sz); \ +#define VERIFY_NO_ERASE(off, sz) \ + do { \ + record_flash(off, sz); \ TEST_ASSERT(host_command_erase(off, sz) != EC_SUCCESS); \ - TEST_ASSERT(verify_flash(off, sz) == EC_SUCCESS); \ + TEST_ASSERT(verify_flash(off, sz) == EC_SUCCESS); \ } while (0) -#define VERIFY_WRITE(off, sz, d) \ - do { \ +#define VERIFY_WRITE(off, sz, d) \ + do { \ TEST_ASSERT(host_command_write(off, sz, d) == EC_SUCCESS); \ - TEST_ASSERT(verify_write(off, sz, d) == EC_SUCCESS); \ + TEST_ASSERT(verify_write(off, sz, d) == EC_SUCCESS); \ } while (0) -#define VERIFY_ERASE(off, sz) \ - do { \ +#define VERIFY_ERASE(off, sz) \ + do { \ TEST_ASSERT(host_command_erase(off, sz) == EC_SUCCESS); \ - TEST_ASSERT(verify_erase(off, sz) == EC_SUCCESS); \ + TEST_ASSERT(verify_erase(off, sz) == EC_SUCCESS); \ } while (0) -#define SET_WP_FLAGS(m, f) \ - TEST_ASSERT(host_command_protect(m, ((f) ? m : 0), \ - NULL, NULL, NULL) == EC_RES_SUCCESS) +#define SET_WP_FLAGS(m, f) \ + TEST_ASSERT(host_command_protect(m, ((f) ? m : 0), NULL, NULL, \ + NULL) == EC_RES_SUCCESS) -#define ASSERT_WP_FLAGS(f) \ - do { \ - uint32_t flags; \ +#define ASSERT_WP_FLAGS(f) \ + do { \ + uint32_t flags; \ TEST_ASSERT(host_command_protect(0, 0, &flags, NULL, NULL) == \ - EC_RES_SUCCESS); \ - TEST_ASSERT(flags & (f)); \ + EC_RES_SUCCESS); \ + TEST_ASSERT(flags &(f)); \ } while (0) -#define ASSERT_WP_NO_FLAGS(f) \ - do { \ - uint32_t flags; \ +#define ASSERT_WP_NO_FLAGS(f) \ + do { \ + uint32_t flags; \ TEST_ASSERT(host_command_protect(0, 0, &flags, NULL, NULL) == \ - EC_RES_SUCCESS); \ - TEST_ASSERT((flags & (f)) == 0); \ + EC_RES_SUCCESS); \ + TEST_ASSERT((flags & (f)) == 0); \ } while (0) -#define VERIFY_REGION_INFO(r, o, s) \ - do { \ - uint32_t offset, size; \ +#define VERIFY_REGION_INFO(r, o, s) \ + do { \ + uint32_t offset, size; \ TEST_ASSERT(host_command_region_info(r, &offset, &size) == \ - EC_RES_SUCCESS); \ - TEST_ASSERT(offset == (o)); \ - TEST_ASSERT(size == (s)); \ + EC_RES_SUCCESS); \ + TEST_ASSERT(offset == (o)); \ + TEST_ASSERT(size == (s)); \ } while (0) int host_command_read(int offset, int size, char *out) @@ -195,9 +194,8 @@ int host_command_erase(int offset, int size) sizeof(params), NULL, 0); } -int host_command_protect(uint32_t mask, uint32_t flags, - uint32_t *flags_out, uint32_t *valid_out, - uint32_t *writable_out) +int host_command_protect(uint32_t mask, uint32_t flags, uint32_t *flags_out, + uint32_t *valid_out, uint32_t *writable_out) { struct ec_params_flash_protect params; struct ec_response_flash_protect resp; @@ -222,7 +220,7 @@ int host_command_protect(uint32_t mask, uint32_t flags, } int host_command_region_info(enum ec_flash_region reg, uint32_t *offset, - uint32_t *size) + uint32_t *size) { struct ec_params_flash_region_info params; struct ec_response_flash_region_info resp; @@ -350,29 +348,31 @@ static int test_flash_info(void) { struct ec_response_flash_info_1 resp; - TEST_ASSERT(test_send_host_command(EC_CMD_FLASH_INFO, 1, NULL, 0, - &resp, sizeof(resp)) == EC_RES_SUCCESS); + TEST_ASSERT(test_send_host_command(EC_CMD_FLASH_INFO, 1, NULL, 0, &resp, + sizeof(resp)) == EC_RES_SUCCESS); - TEST_CHECK((resp.flash_size == CONFIG_FLASH_SIZE_BYTES) && - (resp.write_block_size == CONFIG_FLASH_WRITE_SIZE) && - (resp.erase_block_size == CONFIG_FLASH_ERASE_SIZE) && - (resp.protect_block_size == CONFIG_FLASH_BANK_SIZE)); + TEST_ASSERT(resp.flash_size == CONFIG_FLASH_SIZE_BYTES); + TEST_ASSERT(resp.write_block_size == CONFIG_FLASH_WRITE_SIZE); + TEST_ASSERT(resp.erase_block_size == CONFIG_FLASH_ERASE_SIZE); + TEST_ASSERT(resp.protect_block_size == CONFIG_FLASH_BANK_SIZE); + return EC_SUCCESS; } static int test_region_info(void) { VERIFY_REGION_INFO(EC_FLASH_REGION_RO, CONFIG_EC_PROTECTED_STORAGE_OFF + - CONFIG_RO_STORAGE_OFF, EC_FLASH_REGION_RO_SIZE); + CONFIG_RO_STORAGE_OFF, + EC_FLASH_REGION_RO_SIZE); VERIFY_REGION_INFO(EC_FLASH_REGION_ACTIVE, CONFIG_EC_WRITABLE_STORAGE_OFF + - CONFIG_RW_STORAGE_OFF, + CONFIG_RW_STORAGE_OFF, CONFIG_EC_WRITABLE_STORAGE_SIZE); - VERIFY_REGION_INFO(EC_FLASH_REGION_WP_RO, - CONFIG_WP_STORAGE_OFF, CONFIG_WP_STORAGE_SIZE); + VERIFY_REGION_INFO(EC_FLASH_REGION_WP_RO, CONFIG_WP_STORAGE_OFF, + CONFIG_WP_STORAGE_SIZE); VERIFY_REGION_INFO(EC_FLASH_REGION_UPDATE, CONFIG_EC_WRITABLE_STORAGE_OFF + - CONFIG_RW_STORAGE_OFF, + CONFIG_RW_STORAGE_OFF, CONFIG_EC_WRITABLE_STORAGE_SIZE); return EC_SUCCESS; @@ -401,9 +401,11 @@ static int test_write_protect(void) /* Check we cannot erase anything */ TEST_ASSERT(crec_flash_physical_erase(CONFIG_RO_STORAGE_OFF, - CONFIG_FLASH_ERASE_SIZE) != EC_SUCCESS); + CONFIG_FLASH_ERASE_SIZE) != + EC_SUCCESS); TEST_ASSERT(crec_flash_physical_erase(CONFIG_RW_STORAGE_OFF, - CONFIG_FLASH_ERASE_SIZE) != EC_SUCCESS); + CONFIG_FLASH_ERASE_SIZE) != + EC_SUCCESS); /* We should not even try to write/erase */ VERIFY_NO_ERASE(CONFIG_RO_STORAGE_OFF, CONFIG_FLASH_ERASE_SIZE); @@ -419,7 +421,8 @@ static int test_boot_write_protect(void) /* Check write protect state persists through reboot */ ASSERT_WP_FLAGS(EC_FLASH_PROTECT_RO_NOW | EC_FLASH_PROTECT_RO_AT_BOOT); TEST_ASSERT(crec_flash_physical_erase(CONFIG_RO_STORAGE_OFF, - CONFIG_FLASH_ERASE_SIZE) != EC_SUCCESS); + CONFIG_FLASH_ERASE_SIZE) != + EC_SUCCESS); return EC_SUCCESS; } @@ -500,7 +503,7 @@ int task_test(void *data) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { msleep(30); /* Wait for TASK_ID_TEST to initialize */ task_wake(TASK_ID_TEST); diff --git a/test/flash.tasklist b/test/flash.tasklist index dae84c1635..dbebe0dabb 100644 --- a/test/flash.tasklist +++ b/test/flash.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/flash_physical.c b/test/flash_physical.c index 06dd495254..8136f6b5e3 100644 --- a/test/flash_physical.c +++ b/test/flash_physical.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -30,7 +30,6 @@ struct flash_info flash_info = { #error "Flash info not defined for this chip. Please add it." #endif - test_static int test_lock_option_bytes(void) { TEST_EQ(flash_option_bytes_locked(), true, "%d"); @@ -119,7 +118,7 @@ test_static int test_flash_config(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { ccprintf("Running flash physical test\n"); RUN_TEST(test_flash_config); diff --git a/test/flash_physical.tasklist b/test/flash_physical.tasklist index 51734f058d..a1f1a94e2d 100644 --- a/test/flash_physical.tasklist +++ b/test/flash_physical.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/flash_write_protect.c b/test/flash_write_protect.c index 888482076f..138aab24ff 100644 --- a/test/flash_write_protect.c +++ b/test/flash_write_protect.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -97,7 +97,6 @@ test_static int test_cbi_wb_asserted_immediately(void) /* Now make sure EC_CBI_WP is asserted immediately. */ TEST_EQ(gpio_get_level(GPIO_EC_CBI_WP), 1, "%d"); - return EC_SUCCESS; } @@ -131,7 +130,7 @@ int task_test(void *unused) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { msleep(30); /* Wait for TASK_ID_TEST to initialize */ task_wake(TASK_ID_TEST); diff --git a/test/flash_write_protect.tasklist b/test/flash_write_protect.tasklist index 21619decc3..974106d6c2 100644 --- a/test/flash_write_protect.tasklist +++ b/test/flash_write_protect.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/float.tasklist b/test/float.tasklist index 9ad0114d8a..5216cd488c 100644 --- a/test/float.tasklist +++ b/test/float.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. +/* Copyright 2018 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -1,4 +1,4 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. +/* Copyright 2018 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -36,9 +36,9 @@ #error "No such test configuration." #endif -#define IS_FPV3_VECTOR_EQUAL(a, b, diff) \ - (IS_FP_EQUAL((a)[0], (b)[0], (diff)) && \ - IS_FP_EQUAL((a)[1], (b)[1], (diff)) && \ +#define IS_FPV3_VECTOR_EQUAL(a, b, diff) \ + (IS_FP_EQUAL((a)[0], (b)[0], (diff)) && \ + IS_FP_EQUAL((a)[1], (b)[1], (diff)) && \ IS_FP_EQUAL((a)[2], (b)[2], (diff))) #define IS_FP_EQUAL(a, b, diff) ((a) >= ((b)-diff) && (a) <= ((b) + diff)) #define IS_FLOAT_EQUAL(a, b, diff) IS_FP_EQUAL(a, b, diff) @@ -47,9 +47,9 @@ static int test_fpv3_scalar_mul(void) { const int N = 3; const float s = 2.0f; - floatv3_t r = {1.0f, 2.0f, 4.0f}; + floatv3_t r = { 1.0f, 2.0f, 4.0f }; /* Golden result g = s * r; */ - const floatv3_t g = {2.0f, 4.0f, 8.0f}; + const floatv3_t g = { 2.0f, 4.0f, 8.0f }; int i; fpv3_t a; @@ -68,8 +68,8 @@ static int test_fpv3_dot(void) { const int N = 3; int i; - floatv3_t a = {1.8f, 2.12f, 4.12f}; - floatv3_t b = {3.1f, 4.3f, 5.8f}; + floatv3_t a = { 1.8f, 2.12f, 4.12f }; + floatv3_t b = { 3.1f, 4.3f, 5.8f }; /* Golden result g = dot(a, b). */ float g = 38.592f; fpv3_t fpa, fpb; @@ -81,8 +81,7 @@ static int test_fpv3_dot(void) } result = fpv3_dot(fpa, fpb); - TEST_ASSERT(IS_FP_EQUAL(result, FLOAT_TO_FP(g), - DOT_TOLERANCE)); + TEST_ASSERT(IS_FP_EQUAL(result, FLOAT_TO_FP(g), DOT_TOLERANCE)); return EC_SUCCESS; } @@ -91,7 +90,7 @@ static int test_fpv3_norm_squared(void) { const int N = 3; int i; - floatv3_t a = {3.0f, 4.0f, 5.0f}; + floatv3_t a = { 3.0f, 4.0f, 5.0f }; /* Golden result g = norm_squared(a). */ float g = 50.0f; fpv3_t fpa; @@ -108,7 +107,7 @@ static int test_fpv3_norm_squared(void) static int test_fpv3_norm(void) { const int N = 3; - floatv3_t a = {3.1f, 4.2f, 5.3f}; + floatv3_t a = { 3.1f, 4.2f, 5.3f }; /* Golden result g = norm(a). */ float g = 7.439086f; int i; @@ -188,17 +187,14 @@ static int test_mat33_fp_scalar_mul(void) { const int N = 3; float scale = 3.11f; - mat33_float_t a = { - {1.0f, 2.0f, 3.0f}, - {1.1f, 2.2f, 3.3f}, - {0.38f, 13.2f, 88.3f} - }; + mat33_float_t a = { { 1.0f, 2.0f, 3.0f }, + { 1.1f, 2.2f, 3.3f }, + { 0.38f, 13.2f, 88.3f } }; /* Golden result g = scalar_mul(a, scale). */ - mat33_float_t g = {{3.11f, 6.22f, 9.33f}, - {3.421f, 6.842f, 10.263f}, - {1.18179988861083984375f, 41.051998138427734375f, - 274.613006591796875f} - }; + mat33_float_t g = { { 3.11f, 6.22f, 9.33f }, + { 3.421f, 6.842f, 10.263f }, + { 1.18179988861083984375f, 41.051998138427734375f, + 274.613006591796875f } }; int i, j; mat33_fp_t fpa; @@ -219,9 +215,9 @@ static int test_mat33_fp_scalar_mul(void) static int test_mat33_fp_get_eigenbasis(void) { mat33_fp_t s = { - {FLOAT_TO_FP(4.0f), FLOAT_TO_FP(2.0f), FLOAT_TO_FP(2.0f)}, - {FLOAT_TO_FP(2.0f), FLOAT_TO_FP(4.0f), FLOAT_TO_FP(2.0f)}, - {FLOAT_TO_FP(2.0f), FLOAT_TO_FP(2.0f), FLOAT_TO_FP(4.0f)} + { FLOAT_TO_FP(4.0f), FLOAT_TO_FP(2.0f), FLOAT_TO_FP(2.0f) }, + { FLOAT_TO_FP(2.0f), FLOAT_TO_FP(4.0f), FLOAT_TO_FP(2.0f) }, + { FLOAT_TO_FP(2.0f), FLOAT_TO_FP(2.0f), FLOAT_TO_FP(4.0f) } }; fpv3_t e_vals; mat33_fp_t e_vecs; @@ -229,15 +225,15 @@ static int test_mat33_fp_get_eigenbasis(void) /* Golden result from float version. */ mat33_fp_t gold_vecs = { - {FLOAT_TO_FP(0.55735206f), FLOAT_TO_FP(0.55735206f), - FLOAT_TO_FP(0.55735206f)}, - {FLOAT_TO_FP(0.70710677f), FLOAT_TO_FP(-0.70710677f), - FLOAT_TO_FP(0.0f)}, - {FLOAT_TO_FP(-0.40824828f), FLOAT_TO_FP(-0.40824828f), - FLOAT_TO_FP(0.81649655f)} + { FLOAT_TO_FP(0.55735206f), FLOAT_TO_FP(0.55735206f), + FLOAT_TO_FP(0.55735206f) }, + { FLOAT_TO_FP(0.70710677f), FLOAT_TO_FP(-0.70710677f), + FLOAT_TO_FP(0.0f) }, + { FLOAT_TO_FP(-0.40824828f), FLOAT_TO_FP(-0.40824828f), + FLOAT_TO_FP(0.81649655f) } }; - fpv3_t gold_vals = {FLOAT_TO_FP(8.0f), FLOAT_TO_FP(2.0f), - FLOAT_TO_FP(2.0f)}; + fpv3_t gold_vals = { FLOAT_TO_FP(8.0f), FLOAT_TO_FP(2.0f), + FLOAT_TO_FP(2.0f) }; mat33_fp_get_eigenbasis(s, e_vals, e_vecs); @@ -257,28 +253,26 @@ static int test_mat44_fp_decompose_lup(void) { int i, j; sizev4_t pivot; - mat44_fp_t fpa = { - {FLOAT_TO_FP(11.0f), FLOAT_TO_FP(9.0f), - FLOAT_TO_FP(24.0f), FLOAT_TO_FP(2.0f)}, - {FLOAT_TO_FP(1.0f), FLOAT_TO_FP(5.0f), - FLOAT_TO_FP(2.0f), FLOAT_TO_FP(6.0f)}, - {FLOAT_TO_FP(3.0f), FLOAT_TO_FP(17.0f), - FLOAT_TO_FP(18.0f), FLOAT_TO_FP(1.0f)}, - {FLOAT_TO_FP(2.0f), FLOAT_TO_FP(5.0f), - FLOAT_TO_FP(7.0f), FLOAT_TO_FP(1.0f)} - }; + mat44_fp_t fpa = { { FLOAT_TO_FP(11.0f), FLOAT_TO_FP(9.0f), + FLOAT_TO_FP(24.0f), FLOAT_TO_FP(2.0f) }, + { FLOAT_TO_FP(1.0f), FLOAT_TO_FP(5.0f), + FLOAT_TO_FP(2.0f), FLOAT_TO_FP(6.0f) }, + { FLOAT_TO_FP(3.0f), FLOAT_TO_FP(17.0f), + FLOAT_TO_FP(18.0f), FLOAT_TO_FP(1.0f) }, + { FLOAT_TO_FP(2.0f), FLOAT_TO_FP(5.0f), + FLOAT_TO_FP(7.0f), FLOAT_TO_FP(1.0f) } }; /* Golden result from float version. */ mat44_fp_t gold_lu = { - {FLOAT_TO_FP(11.0f), FLOAT_TO_FP(0.8181818f), - FLOAT_TO_FP(2.1818182f), FLOAT_TO_FP(0.18181819f)}, - {FLOAT_TO_FP(3.0f), FLOAT_TO_FP(14.545455f), - FLOAT_TO_FP(0.78749999f), FLOAT_TO_FP(0.031249999f)}, - {FLOAT_TO_FP(1.0f), FLOAT_TO_FP(4.181818f), - FLOAT_TO_FP(-3.4749996f), FLOAT_TO_FP(-1.6366909f)}, - {FLOAT_TO_FP(2.0f), FLOAT_TO_FP(3.3636365f), - FLOAT_TO_FP(-0.012500112f), FLOAT_TO_FP(0.5107912f)} + { FLOAT_TO_FP(11.0f), FLOAT_TO_FP(0.8181818f), + FLOAT_TO_FP(2.1818182f), FLOAT_TO_FP(0.18181819f) }, + { FLOAT_TO_FP(3.0f), FLOAT_TO_FP(14.545455f), + FLOAT_TO_FP(0.78749999f), FLOAT_TO_FP(0.031249999f) }, + { FLOAT_TO_FP(1.0f), FLOAT_TO_FP(4.181818f), + FLOAT_TO_FP(-3.4749996f), FLOAT_TO_FP(-1.6366909f) }, + { FLOAT_TO_FP(2.0f), FLOAT_TO_FP(3.3636365f), + FLOAT_TO_FP(-0.012500112f), FLOAT_TO_FP(0.5107912f) } }; - sizev4_t gold_pivot = {0, 2, 2, 3}; + sizev4_t gold_pivot = { 0, 2, 2, 3 }; mat44_fp_decompose_lup(fpa, pivot); @@ -296,22 +290,21 @@ static int test_mat44_fp_solve(void) { int i; fpv4_t x; - mat44_fp_t A = { - {FLOAT_TO_FP(11.0f), FLOAT_TO_FP(0.8181818f), - FLOAT_TO_FP(2.1818182f), FLOAT_TO_FP(0.18181819f)}, - {FLOAT_TO_FP(3.0f), FLOAT_TO_FP(14.545454), - FLOAT_TO_FP(0.7875f), FLOAT_TO_FP(0.03125f)}, - {FLOAT_TO_FP(1.0f), FLOAT_TO_FP(4.181818f), - FLOAT_TO_FP(-3.4750001f), FLOAT_TO_FP(-1.6366906f)}, - {FLOAT_TO_FP(2.0f), FLOAT_TO_FP(3.3636365f), - FLOAT_TO_FP(-0.012500286f), FLOAT_TO_FP(0.5107909f)} - }; - sizev4_t pivot = {0, 2, 2, 3}; - fpv4_t b = {FLOAT_TO_FP(1.0f), FLOAT_TO_FP(3.3f), FLOAT_TO_FP(0.8f), - FLOAT_TO_FP(8.9f)}; + mat44_fp_t A = { { FLOAT_TO_FP(11.0f), FLOAT_TO_FP(0.8181818f), + FLOAT_TO_FP(2.1818182f), FLOAT_TO_FP(0.18181819f) }, + { FLOAT_TO_FP(3.0f), FLOAT_TO_FP(14.545454), + FLOAT_TO_FP(0.7875f), FLOAT_TO_FP(0.03125f) }, + { FLOAT_TO_FP(1.0f), FLOAT_TO_FP(4.181818f), + FLOAT_TO_FP(-3.4750001f), FLOAT_TO_FP(-1.6366906f) }, + { FLOAT_TO_FP(2.0f), FLOAT_TO_FP(3.3636365f), + FLOAT_TO_FP(-0.012500286f), + FLOAT_TO_FP(0.5107909f) } }; + sizev4_t pivot = { 0, 2, 2, 3 }; + fpv4_t b = { FLOAT_TO_FP(1.0f), FLOAT_TO_FP(3.3f), FLOAT_TO_FP(0.8f), + FLOAT_TO_FP(8.9f) }; /* Golden result from float version. */ - fpv4_t gold_x = {FLOAT_TO_FP(-43.507435f), FLOAT_TO_FP(-21.459525f), - FLOAT_TO_FP(26.629248f), FLOAT_TO_FP(16.80776f)}; + fpv4_t gold_x = { FLOAT_TO_FP(-43.507435f), FLOAT_TO_FP(-21.459525f), + FLOAT_TO_FP(26.629248f), FLOAT_TO_FP(16.80776f) }; mat44_fp_solve(A, x, b, pivot); @@ -375,7 +368,7 @@ test_static int test_isinf(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/fp.tasklist b/test/fp.tasklist index 9ad0114d8a..5216cd488c 100644 --- a/test/fp.tasklist +++ b/test/fp.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. +/* Copyright 2018 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/fpsensor.c b/test/fpsensor.c index 1e7015882d..588374d4db 100644 --- a/test/fpsensor.c +++ b/test/fpsensor.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -84,7 +84,7 @@ test_static int test_host_command_protocol_info_spi(void) FP_TRANSPORT_TYPE_SPI, &expected_info[FP_TRANSPORT_TYPE_SPI]); } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { if (IS_ENABLED(HAS_TASK_FPSENSOR)) { /* TODO(b/171924356): The "emulator" build only builds RO and diff --git a/test/fpsensor.mocklist b/test/fpsensor.mocklist index 3968a04e7e..3f2c60c583 100644 --- a/test/fpsensor.mocklist +++ b/test/fpsensor.mocklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -6,6 +6,7 @@ #ifdef BOARD_HOST #define CONFIG_TEST_MOCK_LIST \ MOCK(FP_SENSOR) \ + MOCK(FPSENSOR_CRYPTO) \ MOCK(FPSENSOR_DETECT) \ MOCK(FPSENSOR_STATE) \ MOCK(MKBP_EVENTS) \ diff --git a/test/fpsensor.tasklist b/test/fpsensor.tasklist index ba137b7613..6c3ec6d65e 100644 --- a/test/fpsensor.tasklist +++ b/test/fpsensor.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/fpsensor_crypto.c b/test/fpsensor_crypto.c index d0fd92cf7c..9265a608b4 100644 --- a/test/fpsensor_crypto.c +++ b/test/fpsensor_crypto.c @@ -1,30 +1,33 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include <stdbool.h> +#include "builtin/assert.h" #include "common.h" #include "ec_commands.h" #include "fpsensor_crypto.h" #include "fpsensor_state.h" +#include "mock/fpsensor_crypto_mock.h" #include "mock/fpsensor_state_mock.h" #include "mock/rollback_mock.h" #include "mock/timer_mock.h" #include "test_util.h" #include "util.h" +extern int get_ikm(uint8_t *ikm); + static const uint8_t fake_positive_match_salt[] = { 0x04, 0x1f, 0x5a, 0xac, 0x5f, 0x79, 0x10, 0xaf, 0x04, 0x1d, 0x46, 0x3a, 0x5f, 0x08, 0xee, 0xcb, }; static const uint8_t fake_user_id[] = { - 0x28, 0xb5, 0x5a, 0x55, 0x57, 0x1b, 0x26, 0x88, - 0xce, 0xc5, 0xd1, 0xfe, 0x1d, 0x58, 0x5b, 0x94, - 0x51, 0xa2, 0x60, 0x49, 0x9f, 0xea, 0xb1, 0xea, - 0xf7, 0x04, 0x2f, 0x0b, 0x20, 0xa5, 0x93, 0x64, + 0x28, 0xb5, 0x5a, 0x55, 0x57, 0x1b, 0x26, 0x88, 0xce, 0xc5, 0xd1, + 0xfe, 0x1d, 0x58, 0x5b, 0x94, 0x51, 0xa2, 0x60, 0x49, 0x9f, 0xea, + 0xb1, 0xea, 0xf7, 0x04, 0x2f, 0x0b, 0x20, 0xa5, 0x93, 0x64, }; /* @@ -83,10 +86,9 @@ static const uint8_t fake_user_id[] = { * go run util/all_tests.go */ static const uint8_t expected_positive_match_secret_for_empty_user_id[] = { - 0x8d, 0xc4, 0x5b, 0xdf, 0x55, 0x1e, 0xa8, 0x72, - 0xd6, 0xdd, 0xa1, 0x4c, 0xb8, 0xa1, 0x76, 0x2b, - 0xde, 0x38, 0xd5, 0x03, 0xce, 0xe4, 0x74, 0x51, - 0x63, 0x6c, 0x6a, 0x26, 0xa9, 0xb7, 0xfa, 0x68, + 0x8d, 0xc4, 0x5b, 0xdf, 0x55, 0x1e, 0xa8, 0x72, 0xd6, 0xdd, 0xa1, + 0x4c, 0xb8, 0xa1, 0x76, 0x2b, 0xde, 0x38, 0xd5, 0x03, 0xce, 0xe4, + 0x74, 0x51, 0x63, 0x6c, 0x6a, 0x26, 0xa9, 0xb7, 0xfa, 0x68, }; /* @@ -94,20 +96,82 @@ static const uint8_t expected_positive_match_secret_for_empty_user_id[] = { * |fake_user_id| instead of all-zero user_id. */ static const uint8_t expected_positive_match_secret_for_fake_user_id[] = { - 0x0d, 0xf5, 0xac, 0x7c, 0xad, 0x37, 0x0a, 0x66, - 0x2f, 0x71, 0xf6, 0xc6, 0xca, 0x8a, 0x41, 0x69, - 0x8a, 0xd3, 0xcf, 0x0b, 0xc4, 0x5a, 0x5f, 0x4d, - 0x54, 0xeb, 0x7b, 0xad, 0x5d, 0x1b, 0xbe, 0x30, + 0x0d, 0xf5, 0xac, 0x7c, 0xad, 0x37, 0x0a, 0x66, 0x2f, 0x71, 0xf6, + 0xc6, 0xca, 0x8a, 0x41, 0x69, 0x8a, 0xd3, 0xcf, 0x0b, 0xc4, 0x5a, + 0x5f, 0x4d, 0x54, 0xeb, 0x7b, 0xad, 0x5d, 0x1b, 0xbe, 0x30, }; +test_static int test_get_ikm_failure_seed_not_set(void) +{ + uint8_t ikm; + + TEST_ASSERT(fp_tpm_seed_is_set() == 0); + TEST_ASSERT(get_ikm(&ikm) == EC_ERROR_ACCESS_DENIED); + return EC_SUCCESS; +} + +test_static int test_get_ikm_failure_cannot_get_rollback_secret(void) +{ + uint8_t ikm[CONFIG_ROLLBACK_SECRET_SIZE + FP_CONTEXT_TPM_BYTES]; + + /* Given that the tmp seed has been set. */ + TEST_ASSERT(fp_tpm_seed_is_set()); + + /* GIVEN that reading the rollback secret will fail. */ + mock_ctrl_rollback.get_secret_fail = true; + + /* THEN get_ikm should fail. */ + TEST_ASSERT(get_ikm(ikm) == EC_ERROR_HW_INTERNAL); + + /* + * Enable get_rollback_secret to succeed before returning from this + * test function. + */ + mock_ctrl_rollback.get_secret_fail = false; + + return EC_SUCCESS; +} + +test_static int test_get_ikm_success(void) +{ + /* + * Expected ikm is the concatenation of the rollback secret and the + * seed from the TPM. + */ + uint8_t ikm[CONFIG_ROLLBACK_SECRET_SIZE + FP_CONTEXT_TPM_BYTES]; + static const uint8_t expected_ikm[] = { + 0xcf, 0xe3, 0x23, 0x76, 0x35, 0x04, 0xc2, 0x0f, 0x0d, 0xb6, + 0x02, 0xa9, 0x68, 0xba, 0x2a, 0x61, 0x86, 0x2a, 0x85, 0xd1, + 0xca, 0x09, 0x54, 0x8a, 0x6b, 0xe2, 0xe3, 0x38, 0xde, 0x5d, + 0x59, 0x14, 0xd9, 0x71, 0xaf, 0xc4, 0xcd, 0x36, 0xe3, 0x60, + 0xf8, 0x5a, 0xa0, 0xa6, 0x2c, 0xb3, 0xf5, 0xe2, 0xeb, 0xb9, + 0xd8, 0x2f, 0xb5, 0x78, 0x5c, 0x79, 0x82, 0xce, 0x06, 0x3f, + 0xcc, 0x23, 0xb9, 0xe7 + }; + + /* GIVEN that the TPM seed has been set. */ + TEST_ASSERT(fp_tpm_seed_is_set()); + + /* GIVEN that reading the rollback secret will succeed. */ + mock_ctrl_rollback.get_secret_fail = false; + + /* THEN get_ikm will succeed. */ + TEST_ASSERT(get_ikm(ikm) == EC_SUCCESS); + TEST_ASSERT_ARRAY_EQ(ikm, expected_ikm, + CONFIG_ROLLBACK_SECRET_SIZE + + FP_CONTEXT_TPM_BYTES); + + return EC_SUCCESS; +} + static int test_hkdf_expand_raw(const uint8_t *prk, size_t prk_size, const uint8_t *info, size_t info_size, const uint8_t *expected_okm, size_t okm_size) { uint8_t actual_okm[okm_size]; - TEST_ASSERT(hkdf_expand(actual_okm, okm_size, prk, prk_size, - info, info_size) == EC_SUCCESS); + TEST_ASSERT(hkdf_expand(actual_okm, okm_size, prk, prk_size, info, + info_size) == EC_SUCCESS); TEST_ASSERT_ARRAY_EQ(expected_okm, actual_okm, okm_size); return EC_SUCCESS; } @@ -122,16 +186,14 @@ test_static int test_hkdf_expand(void) 0x22, 0xec, 0x84, 0x4a, 0xd7, 0xc2, 0xb3, 0xe5, }; static const uint8_t info1[] = { - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, }; static const uint8_t expected_okm1[] = { - 0x3c, 0xb2, 0x5f, 0x25, 0xfa, 0xac, 0xd5, 0x7a, - 0x90, 0x43, 0x4f, 0x64, 0xd0, 0x36, 0x2f, 0x2a, - 0x2d, 0x2d, 0x0a, 0x90, 0xcf, 0x1a, 0x5a, 0x4c, - 0x5d, 0xb0, 0x2d, 0x56, 0xec, 0xc4, 0xc5, 0xbf, - 0x34, 0x00, 0x72, 0x08, 0xd5, 0xb8, 0x87, 0x18, - 0x58, 0x65, + 0x3c, 0xb2, 0x5f, 0x25, 0xfa, 0xac, 0xd5, 0x7a, 0x90, + 0x43, 0x4f, 0x64, 0xd0, 0x36, 0x2f, 0x2a, 0x2d, 0x2d, + 0x0a, 0x90, 0xcf, 0x1a, 0x5a, 0x4c, 0x5d, 0xb0, 0x2d, + 0x56, 0xec, 0xc4, 0xc5, 0xbf, 0x34, 0x00, 0x72, 0x08, + 0xd5, 0xb8, 0x87, 0x18, 0x58, 0x65, }; static const uint8_t prk2[] = { 0x06, 0xa6, 0xb8, 0x8c, 0x58, 0x53, 0x36, 0x1a, @@ -140,28 +202,24 @@ test_static int test_hkdf_expand(void) 0x4a, 0x19, 0x3f, 0x40, 0xc1, 0x5f, 0xc2, 0x44, }; static const uint8_t info2[] = { - 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, - 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, - 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, - 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, - 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, - 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, - 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, + 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, + 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, + 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, + 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, + 0xec, 0xed, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, + 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, }; static const uint8_t expected_okm2[] = { - 0xb1, 0x1e, 0x39, 0x8d, 0xc8, 0x03, 0x27, 0xa1, - 0xc8, 0xe7, 0xf7, 0x8c, 0x59, 0x6a, 0x49, 0x34, - 0x4f, 0x01, 0x2e, 0xda, 0x2d, 0x4e, 0xfa, 0xd8, - 0xa0, 0x50, 0xcc, 0x4c, 0x19, 0xaf, 0xa9, 0x7c, - 0x59, 0x04, 0x5a, 0x99, 0xca, 0xc7, 0x82, 0x72, - 0x71, 0xcb, 0x41, 0xc6, 0x5e, 0x59, 0x0e, 0x09, - 0xda, 0x32, 0x75, 0x60, 0x0c, 0x2f, 0x09, 0xb8, - 0x36, 0x77, 0x93, 0xa9, 0xac, 0xa3, 0xdb, 0x71, - 0xcc, 0x30, 0xc5, 0x81, 0x79, 0xec, 0x3e, 0x87, - 0xc1, 0x4c, 0x01, 0xd5, 0xc1, 0xf3, 0x43, 0x4f, + 0xb1, 0x1e, 0x39, 0x8d, 0xc8, 0x03, 0x27, 0xa1, 0xc8, 0xe7, + 0xf7, 0x8c, 0x59, 0x6a, 0x49, 0x34, 0x4f, 0x01, 0x2e, 0xda, + 0x2d, 0x4e, 0xfa, 0xd8, 0xa0, 0x50, 0xcc, 0x4c, 0x19, 0xaf, + 0xa9, 0x7c, 0x59, 0x04, 0x5a, 0x99, 0xca, 0xc7, 0x82, 0x72, + 0x71, 0xcb, 0x41, 0xc6, 0x5e, 0x59, 0x0e, 0x09, 0xda, 0x32, + 0x75, 0x60, 0x0c, 0x2f, 0x09, 0xb8, 0x36, 0x77, 0x93, 0xa9, + 0xac, 0xa3, 0xdb, 0x71, 0xcc, 0x30, 0xc5, 0x81, 0x79, 0xec, + 0x3e, 0x87, 0xc1, 0x4c, 0x01, 0xd5, 0xc1, 0xf3, 0x43, 0x4f, 0x1d, 0x87, }; static const uint8_t prk3[] = { @@ -171,52 +229,48 @@ test_static int test_hkdf_expand(void) 0xac, 0x43, 0x4c, 0x1c, 0x29, 0x3c, 0xcb, 0x04, }; static const uint8_t expected_okm3[] = { - 0x8d, 0xa4, 0xe7, 0x75, 0xa5, 0x63, 0xc1, 0x8f, - 0x71, 0x5f, 0x80, 0x2a, 0x06, 0x3c, 0x5a, 0x31, - 0xb8, 0xa1, 0x1f, 0x5c, 0x5e, 0xe1, 0x87, 0x9e, - 0xc3, 0x45, 0x4e, 0x5f, 0x3c, 0x73, 0x8d, 0x2d, - 0x9d, 0x20, 0x13, 0x95, 0xfa, 0xa4, 0xb6, 0x1a, - 0x96, 0xc8, + 0x8d, 0xa4, 0xe7, 0x75, 0xa5, 0x63, 0xc1, 0x8f, 0x71, + 0x5f, 0x80, 0x2a, 0x06, 0x3c, 0x5a, 0x31, 0xb8, 0xa1, + 0x1f, 0x5c, 0x5e, 0xe1, 0x87, 0x9e, 0xc3, 0x45, 0x4e, + 0x5f, 0x3c, 0x73, 0x8d, 0x2d, 0x9d, 0x20, 0x13, 0x95, + 0xfa, 0xa4, 0xb6, 0x1a, 0x96, 0xc8, }; static uint8_t unused_output[SHA256_DIGEST_SIZE] = { 0 }; TEST_ASSERT(test_hkdf_expand_raw(prk1, sizeof(prk1), info1, sizeof(info1), expected_okm1, - sizeof(expected_okm1)) - == EC_SUCCESS); + sizeof(expected_okm1)) == EC_SUCCESS); TEST_ASSERT(test_hkdf_expand_raw(prk2, sizeof(prk2), info2, sizeof(info2), expected_okm2, - sizeof(expected_okm2)) - == EC_SUCCESS); + sizeof(expected_okm2)) == EC_SUCCESS); TEST_ASSERT(test_hkdf_expand_raw(prk3, sizeof(prk3), NULL, 0, - expected_okm3, sizeof(expected_okm3)) - == EC_SUCCESS); - - TEST_ASSERT(hkdf_expand(NULL, sizeof(unused_output), prk1, - sizeof(prk1), info1, sizeof(info1)) - == EC_ERROR_INVAL); - TEST_ASSERT(hkdf_expand(unused_output, sizeof(unused_output), - NULL, sizeof(prk1), info1, sizeof(info1)) - == EC_ERROR_INVAL); - TEST_ASSERT(hkdf_expand(unused_output, sizeof(unused_output), - prk1, sizeof(prk1), NULL, sizeof(info1)) - == EC_ERROR_INVAL); + expected_okm3, + sizeof(expected_okm3)) == EC_SUCCESS); + + TEST_ASSERT(hkdf_expand(NULL, sizeof(unused_output), prk1, sizeof(prk1), + info1, sizeof(info1)) == EC_ERROR_INVAL); + TEST_ASSERT(hkdf_expand(unused_output, sizeof(unused_output), NULL, + sizeof(prk1), info1, + sizeof(info1)) == EC_ERROR_INVAL); + TEST_ASSERT(hkdf_expand(unused_output, sizeof(unused_output), prk1, + sizeof(prk1), NULL, + sizeof(info1)) == EC_ERROR_INVAL); /* Info size too long. */ - TEST_ASSERT(hkdf_expand(unused_output, sizeof(unused_output), - prk1, sizeof(prk1), info1, 1024) - == EC_ERROR_INVAL); + TEST_ASSERT(hkdf_expand(unused_output, sizeof(unused_output), prk1, + sizeof(prk1), info1, 1024) == EC_ERROR_INVAL); /* OKM size too big. */ - TEST_ASSERT(hkdf_expand(unused_output, 256 * SHA256_DIGEST_SIZE, - prk1, sizeof(prk1), info1, sizeof(info1)) - == EC_ERROR_INVAL); + TEST_ASSERT(hkdf_expand(unused_output, 256 * SHA256_DIGEST_SIZE, prk1, + sizeof(prk1), info1, + sizeof(info1)) == EC_ERROR_INVAL); return EC_SUCCESS; } test_static int test_derive_encryption_key_failure_seed_not_set(void) { static uint8_t unused_key[SBP_ENC_KEY_LEN]; - static const uint8_t unused_salt[FP_CONTEXT_ENCRYPTION_SALT_BYTES] - = { 0 }; + static const uint8_t unused_salt[FP_CONTEXT_ENCRYPTION_SALT_BYTES] = { + 0 + }; /* GIVEN that the TPM seed is not set. */ if (fp_tpm_seed_is_set()) { @@ -314,8 +368,9 @@ test_static int test_derive_encryption_key(void) test_static int test_derive_encryption_key_failure_rollback_fail(void) { static uint8_t unused_key[SBP_ENC_KEY_LEN]; - static const uint8_t unused_salt[FP_CONTEXT_ENCRYPTION_SALT_BYTES] - = { 0 }; + static const uint8_t unused_salt[FP_CONTEXT_ENCRYPTION_SALT_BYTES] = { + 0 + }; /* GIVEN that reading the rollback secret will fail. */ mock_ctrl_rollback.get_secret_fail = true; @@ -346,11 +401,10 @@ test_static int test_derive_positive_match_secret_fail_seed_not_set(void) /* Deriving positive match secret will fail. */ TEST_ASSERT(derive_positive_match_secret(output, - fake_positive_match_salt) - == EC_ERROR_ACCESS_DENIED); + fake_positive_match_salt) == + EC_ERROR_ACCESS_DENIED); return EC_SUCCESS; - } test_static int test_derive_new_pos_match_secret(void) @@ -367,30 +421,26 @@ test_static int test_derive_new_pos_match_secret(void) * GIVEN that the TPM seed is set, and reading the rollback secret will * succeed. */ - TEST_ASSERT( - fp_tpm_seed_is_set() && !mock_ctrl_rollback.get_secret_fail); + TEST_ASSERT(fp_tpm_seed_is_set() && + !mock_ctrl_rollback.get_secret_fail); /* GIVEN that the salt is not trivial. */ TEST_ASSERT(!bytes_are_trivial(fake_positive_match_salt, sizeof(fake_positive_match_salt))); /* THEN the derivation will succeed. */ - TEST_ASSERT(derive_positive_match_secret(output, - fake_positive_match_salt) - == EC_SUCCESS); + TEST_ASSERT(derive_positive_match_secret( + output, fake_positive_match_salt) == EC_SUCCESS); TEST_ASSERT_ARRAY_EQ( - output, - expected_positive_match_secret_for_empty_user_id, + output, expected_positive_match_secret_for_empty_user_id, sizeof(expected_positive_match_secret_for_empty_user_id)); /* Now change the user_id to be non-trivial. */ memcpy(user_id, fake_user_id, sizeof(fake_user_id)); - TEST_ASSERT(derive_positive_match_secret(output, - fake_positive_match_salt) - == EC_SUCCESS); + TEST_ASSERT(derive_positive_match_secret( + output, fake_positive_match_salt) == EC_SUCCESS); TEST_ASSERT_ARRAY_EQ( - output, - expected_positive_match_secret_for_fake_user_id, + output, expected_positive_match_secret_for_fake_user_id, sizeof(expected_positive_match_secret_for_fake_user_id)); memset(user_id, 0, sizeof(user_id)); @@ -409,8 +459,8 @@ test_static int test_derive_positive_match_secret_fail_rollback_fail(void) /* Deriving positive match secret will fail. */ TEST_ASSERT(derive_positive_match_secret(output, - fake_positive_match_salt) - == EC_ERROR_HW_INTERNAL); + fake_positive_match_salt) == + EC_ERROR_HW_INTERNAL); mock_ctrl_rollback.get_secret_fail = false; return EC_SUCCESS; @@ -424,8 +474,94 @@ test_static int test_derive_positive_match_secret_fail_salt_trivial(void) static const uint8_t salt[FP_CONTEXT_ENCRYPTION_SALT_BYTES] = { 0 }; /* THEN deriving positive match secret will fail. */ - TEST_ASSERT(derive_positive_match_secret(output, salt) - == EC_ERROR_INVAL); + TEST_ASSERT(derive_positive_match_secret(output, salt) == + EC_ERROR_INVAL); + return EC_SUCCESS; +} + +test_static int test_derive_positive_match_secret_fail_trivial_key_0x00(void) +{ + static uint8_t output[FP_POSITIVE_MATCH_SECRET_BYTES]; + + /* GIVEN that the user ID is set to a known value. */ + memcpy(user_id, fake_user_id, sizeof(fake_user_id)); + + /* + * GIVEN that the TPM seed is set, and reading the rollback secret will + * succeed. + */ + TEST_ASSERT(fp_tpm_seed_is_set() && + !mock_ctrl_rollback.get_secret_fail); + + /* GIVEN that the salt is not trivial. */ + TEST_ASSERT(!bytes_are_trivial(fake_positive_match_salt, + sizeof(fake_positive_match_salt))); + + /* GIVEN that the sha256 output is trivial (0x00) */ + mock_ctrl_fpsensor_crypto.output_type = + MOCK_CTRL_FPSENSOR_CRYPTO_SHA256_TYPE_ZEROS; + + /* THEN the derivation will fail with EC_ERROR_HW_INTERNAL. */ + TEST_ASSERT(derive_positive_match_secret(output, + fake_positive_match_salt) == + EC_ERROR_HW_INTERNAL); + + /* Now verify success is possible after reverting */ + + /* GIVEN that the sha256 output is non-trivial */ + mock_ctrl_fpsensor_crypto.output_type = + MOCK_CTRL_FPSENSOR_CRYPTO_SHA256_TYPE_REAL; + + /* THEN the derivation will succeed */ + TEST_ASSERT(derive_positive_match_secret( + output, fake_positive_match_salt) == EC_SUCCESS); + + /* Clean up any mock changes */ + mock_ctrl_fpsensor_crypto = MOCK_CTRL_DEFAULT_FPSENSOR_CRYPTO; + + return EC_SUCCESS; +} + +test_static int test_derive_positive_match_secret_fail_trivial_key_0xff(void) +{ + static uint8_t output[FP_POSITIVE_MATCH_SECRET_BYTES]; + + /* GIVEN that the user ID is set to a known value. */ + memcpy(user_id, fake_user_id, sizeof(fake_user_id)); + + /* + * GIVEN that the TPM seed is set, and reading the rollback secret will + * succeed. + */ + TEST_ASSERT(fp_tpm_seed_is_set() && + !mock_ctrl_rollback.get_secret_fail); + + /* GIVEN that the salt is not trivial. */ + TEST_ASSERT(!bytes_are_trivial(fake_positive_match_salt, + sizeof(fake_positive_match_salt))); + + /* GIVEN that the sha256 output is trivial (0xFF) */ + mock_ctrl_fpsensor_crypto.output_type = + MOCK_CTRL_FPSENSOR_CRYPTO_SHA256_TYPE_FF; + + /* THEN the derivation will fail with EC_ERROR_HW_INTERNAL. */ + TEST_ASSERT(derive_positive_match_secret(output, + fake_positive_match_salt) == + EC_ERROR_HW_INTERNAL); + + /* Now verify success is possible after reverting */ + + /* GIVEN that the sha256 output is non-trivial */ + mock_ctrl_fpsensor_crypto.output_type = + MOCK_CTRL_FPSENSOR_CRYPTO_SHA256_TYPE_REAL; + + /* THEN the derivation will succeed */ + TEST_ASSERT(derive_positive_match_secret( + output, fake_positive_match_salt) == EC_SUCCESS); + + /* Clean up any mock changes */ + mock_ctrl_fpsensor_crypto = MOCK_CTRL_DEFAULT_FPSENSOR_CRYPTO; + return EC_SUCCESS; } @@ -435,8 +571,8 @@ static int test_enable_positive_match_secret_once( const int8_t kIndexToEnable = 0; timestamp_t now = get_time(); - TEST_ASSERT(fp_enable_positive_match_secret( - kIndexToEnable, dumb_state) == EC_SUCCESS); + TEST_ASSERT(fp_enable_positive_match_secret(kIndexToEnable, + dumb_state) == EC_SUCCESS); TEST_ASSERT(dumb_state->template_matched == kIndexToEnable); TEST_ASSERT(dumb_state->readable); TEST_ASSERT(dumb_state->deadline.val == now.val + (5 * SECOND)); @@ -446,18 +582,19 @@ static int test_enable_positive_match_secret_once( test_static int test_enable_positive_match_secret(void) { - struct positive_match_secret_state dumb_state = { - .template_matched = FP_NO_SUCH_TEMPLATE, - .readable = false, - .deadline.val = 0, - }; - - TEST_ASSERT(test_enable_positive_match_secret_once(&dumb_state) - == EC_SUCCESS); + struct positive_match_secret_state + dumb_state = { .template_matched = FP_NO_SUCH_TEMPLATE, + .readable = false, + .deadline = { + .val = 0, + } }; + + TEST_ASSERT(test_enable_positive_match_secret_once(&dumb_state) == + EC_SUCCESS); /* Trying to enable again before reading secret should fail. */ TEST_ASSERT(fp_enable_positive_match_secret(0, &dumb_state) == - EC_ERROR_UNKNOWN); + EC_ERROR_UNKNOWN); TEST_ASSERT(dumb_state.template_matched == FP_NO_SUCH_TEMPLATE); TEST_ASSERT(!dumb_state.readable); TEST_ASSERT(dumb_state.deadline.val == 0); @@ -467,14 +604,15 @@ test_static int test_enable_positive_match_secret(void) test_static int test_disable_positive_match_secret(void) { - struct positive_match_secret_state dumb_state = { - .template_matched = FP_NO_SUCH_TEMPLATE, - .readable = false, - .deadline.val = 0, - }; - - TEST_ASSERT(test_enable_positive_match_secret_once(&dumb_state) - == EC_SUCCESS); + struct positive_match_secret_state + dumb_state = { .template_matched = FP_NO_SUCH_TEMPLATE, + .readable = false, + .deadline = { + .val = 0, + } }; + + TEST_ASSERT(test_enable_positive_match_secret_once(&dumb_state) == + EC_SUCCESS); fp_disable_positive_match_secret(&dumb_state); TEST_ASSERT(dumb_state.template_matched == FP_NO_SUCH_TEMPLATE); @@ -601,8 +739,7 @@ test_static int test_command_read_match_secret_unreadable(void) positive_match_secret_state.readable = false; /* EVEN IF the finger is just matched. */ - TEST_ASSERT(positive_match_secret_state.template_matched - == params.fgr); + TEST_ASSERT(positive_match_secret_state.template_matched == params.fgr); /* EVEN IF encryption salt is non-trivial. */ memcpy(fp_positive_match_salt[0], fake_positive_match_salt, @@ -614,25 +751,29 @@ test_static int test_command_read_match_secret_unreadable(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { RUN_TEST(test_hkdf_expand); RUN_TEST(test_derive_encryption_key_failure_seed_not_set); RUN_TEST(test_derive_positive_match_secret_fail_seed_not_set); - + RUN_TEST(test_get_ikm_failure_seed_not_set); /* * Set the TPM seed here because it can only be set once and cannot be * cleared. */ ASSERT(fpsensor_state_mock_set_tpm_seed(default_fake_tpm_seed) == - EC_SUCCESS); + EC_SUCCESS); /* The following test requires TPM seed to be already set. */ + RUN_TEST(test_get_ikm_failure_cannot_get_rollback_secret); + RUN_TEST(test_get_ikm_success); RUN_TEST(test_derive_encryption_key); RUN_TEST(test_derive_encryption_key_failure_rollback_fail); RUN_TEST(test_derive_new_pos_match_secret); RUN_TEST(test_derive_positive_match_secret_fail_rollback_fail); RUN_TEST(test_derive_positive_match_secret_fail_salt_trivial); + RUN_TEST(test_derive_positive_match_secret_fail_trivial_key_0x00); + RUN_TEST(test_derive_positive_match_secret_fail_trivial_key_0xff); RUN_TEST(test_enable_positive_match_secret); RUN_TEST(test_disable_positive_match_secret); RUN_TEST(test_command_read_match_secret); diff --git a/test/fpsensor_hw.c b/test/fpsensor_hw.c index f420001665..ff5b78ace2 100644 --- a/test/fpsensor_hw.c +++ b/test/fpsensor_hw.c @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -32,8 +32,7 @@ test_static int test_fp_check_hwid(void) return EC_SUCCESS; } - -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { RUN_TEST(test_fp_check_hwid); test_print_result(); diff --git a/test/fpsensor_hw.tasklist b/test/fpsensor_hw.tasklist index 299cf25390..35fa6f24bd 100644 --- a/test/fpsensor_hw.tasklist +++ b/test/fpsensor_hw.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/fpsensor_state.c b/test/fpsensor_state.c index 3822fe49ab..0b61e1c2d4 100644 --- a/test/fpsensor_state.c +++ b/test/fpsensor_state.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -186,7 +186,198 @@ test_static int test_fp_set_maintenance_mode(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +test_static int test_fp_command_read_match_secret_fail_fgr_less_than_zero(void) +{ + /* Create invalid param with fgr < 0 */ + struct ec_params_fp_read_match_secret test_match_secret = { + .fgr = -1, + }; + + TEST_ASSERT(test_send_host_command(EC_CMD_FP_READ_MATCH_SECRET, 0, + &test_match_secret, + sizeof(test_match_secret), NULL, + 0) == EC_RES_INVALID_PARAM); + + return EC_SUCCESS; +} + +test_static int test_fp_command_read_match_secret_fail_fgr_large_than_max(void) +{ + /* Create invalid param with fgr = FP_MAX_FINGER_COUNT */ + struct ec_params_fp_read_match_secret test_match_secret = { + .fgr = FP_MAX_FINGER_COUNT, + }; + + TEST_ASSERT(test_send_host_command(EC_CMD_FP_READ_MATCH_SECRET, 0, + &test_match_secret, + sizeof(test_match_secret), NULL, + 0) == EC_RES_INVALID_PARAM); + return EC_SUCCESS; +} + +test_static int test_fp_command_read_match_secret_fail_timeout(void) +{ + /* Create valid param with 0 <= fgr < 5 */ + struct ec_params_fp_read_match_secret test_match_secret_1 = { + .fgr = 1, + }; + + /* Disable positive secret match to create 0 deadline val */ + fp_disable_positive_match_secret(&positive_match_secret_state); + + TEST_ASSERT(positive_match_secret_state.deadline.val == 0); + + TEST_ASSERT(test_send_host_command(EC_CMD_FP_READ_MATCH_SECRET, 0, + &test_match_secret_1, + sizeof(test_match_secret_1), NULL, + 0) == EC_RES_TIMEOUT); + + return EC_SUCCESS; +} + +test_static int test_fp_command_read_match_secret_unmatched_fgr(void) +{ + /* Create valid param with 0 <= fgr < 5 */ + uint16_t matched_fgr = 1; + uint16_t unmatched_fgr = 2; + struct ec_params_fp_read_match_secret test_match_secret_1 = { + .fgr = matched_fgr, + }; + /* Create positive secret match state with valid deadline value, + * readable state, and wrong template matched + */ + struct positive_match_secret_state test_state = { + .deadline.val = 5000000, + .readable = true, + .template_matched = unmatched_fgr, + }; + + /* Test for the wrong matched finger state */ + positive_match_secret_state = test_state; + + TEST_ASSERT(test_send_host_command(EC_CMD_FP_READ_MATCH_SECRET, 0, + &test_match_secret_1, + sizeof(test_match_secret_1), NULL, + 0) == EC_RES_ACCESS_DENIED); + + return EC_SUCCESS; +} + +test_static int test_fp_command_read_match_secret_unreadable_state(void) +{ + /* Create valid param with 0 <= fgr < 5 */ + uint16_t matched_fgr = 1; + struct ec_params_fp_read_match_secret test_match_secret_1 = { + .fgr = matched_fgr, + }; + /* + * Create positive secret match state with valid deadline value , + * unreadable state, and correct matched template + */ + struct positive_match_secret_state test_state = { + .deadline.val = 5000000, + .readable = false, + .template_matched = matched_fgr, + }; + + /* Test for the unreadable state */ + positive_match_secret_state = test_state; + + TEST_ASSERT(test_send_host_command(EC_CMD_FP_READ_MATCH_SECRET, 0, + &test_match_secret_1, + sizeof(test_match_secret_1), NULL, + 0) == EC_RES_ACCESS_DENIED); + + return EC_SUCCESS; +} + +test_static int test_fp_command_read_match_secret_derive_fail(void) +{ + struct ec_response_fp_read_match_secret response = { 0 }; + /* Create valid param with 0 <= fgr < 5 */ + uint16_t matched_fgr = 1; + struct ec_params_fp_read_match_secret test_match_secret_1 = { + .fgr = matched_fgr, + }; + /* Create positive secret match state with valid deadline value, + * readable state, and correct template matched + */ + struct positive_match_secret_state test_state_1 = { + .deadline.val = 5000000, + .readable = true, + .template_matched = matched_fgr, + }; + positive_match_secret_state = test_state_1; + /* Set fp_positive_match_salt to the trivial value */ + memcpy(fp_positive_match_salt, trivial_fp_positive_match_salt, + sizeof(trivial_fp_positive_match_salt)); + + /* Test with the correct matched finger state and a trivial + * fp_positive_match_salt + */ + TEST_ASSERT(test_send_host_command( + EC_CMD_FP_READ_MATCH_SECRET, 0, + &test_match_secret_1, sizeof(test_match_secret_1), + &response, sizeof(response)) == EC_RES_ERROR); + return EC_SUCCESS; +} + +test_static int test_fp_command_read_match_secret_derive_succeed(void) +{ + struct ec_response_fp_read_match_secret response = { 0 }; + /* Create valid param with 0 <= fgr < 5 */ + uint16_t matched_fgr = 1; + struct ec_params_fp_read_match_secret test_match_secret_1 = { + .fgr = matched_fgr, + }; + + /* Expected positive_match_secret same as in test/fpsensor_crypto.c*/ + static const uint8_t + expected_positive_match_secret_for_empty_user_id[] = { + 0x8d, 0xc4, 0x5b, 0xdf, 0x55, 0x1e, 0xa8, 0x72, + 0xd6, 0xdd, 0xa1, 0x4c, 0xb8, 0xa1, 0x76, 0x2b, + 0xde, 0x38, 0xd5, 0x03, 0xce, 0xe4, 0x74, 0x51, + 0x63, 0x6c, 0x6a, 0x26, 0xa9, 0xb7, 0xfa, 0x68, + }; + /* Create positive secret match state with valid deadline value, + * readable state, and correct template matched + */ + struct positive_match_secret_state test_state_1 = { + .deadline.val = 5000000, + .readable = true, + .template_matched = matched_fgr, + }; + positive_match_secret_state = test_state_1; + /* Set fp_positive_match_salt to the trivial value */ + memcpy(fp_positive_match_salt, default_fake_fp_positive_match_salt, + sizeof(default_fake_fp_positive_match_salt)); + + TEST_ASSERT_ARRAY_EQ( + (uint8_t const *)fp_positive_match_salt, + (uint8_t const *)default_fake_fp_positive_match_salt, + sizeof(default_fake_fp_positive_match_salt)); + + /* Initialize an empty user_id to compare positive_match_secret */ + memset(user_id, 0, sizeof(user_id)); + + TEST_ASSERT(fp_tpm_seed_is_set()); + /* Test with the correct matched finger state and the default fake + * fp_positive_match_salt + */ + TEST_ASSERT(test_send_host_command( + EC_CMD_FP_READ_MATCH_SECRET, 0, + &test_match_secret_1, sizeof(test_match_secret_1), + &response, sizeof(response)) == EC_SUCCESS); + + TEST_ASSERT_ARRAY_EQ( + response.positive_match_secret, + expected_positive_match_secret_for_empty_user_id, + sizeof(expected_positive_match_secret_for_empty_user_id)); + + return EC_SUCCESS; +} + +void run_test(int argc, const char **argv) { RUN_TEST(test_fp_enc_status_valid_flags); RUN_TEST(test_fp_tpm_seed_not_set); @@ -194,5 +385,12 @@ void run_test(int argc, char **argv) RUN_TEST(test_set_fp_tpm_seed_again); RUN_TEST(test_fp_set_sensor_mode); RUN_TEST(test_fp_set_maintenance_mode); + RUN_TEST(test_fp_command_read_match_secret_fail_fgr_less_than_zero); + RUN_TEST(test_fp_command_read_match_secret_fail_fgr_large_than_max); + RUN_TEST(test_fp_command_read_match_secret_fail_timeout); + RUN_TEST(test_fp_command_read_match_secret_unmatched_fgr); + RUN_TEST(test_fp_command_read_match_secret_unreadable_state); + RUN_TEST(test_fp_command_read_match_secret_derive_fail); + RUN_TEST(test_fp_command_read_match_secret_derive_succeed); test_print_result(); } diff --git a/test/genvif/Makefile b/test/genvif/Makefile index 566b6bb042..a41e8308cc 100644 --- a/test/genvif/Makefile +++ b/test/genvif/Makefile @@ -1,4 +1,4 @@ -# Copyright 2020 The Chromium OS Authors. All rights reserved. +# Copyright 2020 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # diff --git a/test/genvif/genvif.sh b/test/genvif/genvif.sh index 4a275ed2c1..b54d1de9eb 100755 --- a/test/genvif/genvif.sh +++ b/test/genvif/genvif.sh @@ -1,5 +1,5 @@ #!/bin/bash -e -# Copyright 2020 The Chromium OS Authors. All rights reserved. +# Copyright 2020 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. diff --git a/test/genvif/src/atomic.h b/test/genvif/src/atomic.h index f2fa112e81..d58e57a1c2 100644 --- a/test/genvif/src/atomic.h +++ b/test/genvif/src/atomic.h @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/genvif/src/board.h b/test/genvif/src/board.h index 06122eeab9..c596b833e0 100644 --- a/test/genvif/src/board.h +++ b/test/genvif/src/board.h @@ -1,12 +1,12 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ -#define PD_OPERATING_POWER_MW 15000 -#define PD_MAX_POWER_MW 65000 -#define PD_MAX_CURRENT_MA 3250 -#define PD_MAX_VOLTAGE_MV 20000 +#define PD_OPERATING_POWER_MW 15000 +#define PD_MAX_POWER_MW 65000 +#define PD_MAX_CURRENT_MA 3250 +#define PD_MAX_VOLTAGE_MV 20000 /* Stubs required by the shared code */ #define GPIO_PIN(port, index) (GPIO_##port, BIT(index)) diff --git a/test/genvif/src/config_chip.h b/test/genvif/src/config_chip.h index f2fa112e81..d58e57a1c2 100644 --- a/test/genvif/src/config_chip.h +++ b/test/genvif/src/config_chip.h @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/genvif/src/fuzz_config.h b/test/genvif/src/fuzz_config.h index f2fa112e81..d58e57a1c2 100644 --- a/test/genvif/src/fuzz_config.h +++ b/test/genvif/src/fuzz_config.h @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/genvif/src/gpio.inc b/test/genvif/src/gpio.inc index 6b96e08645..65e3066695 100644 --- a/test/genvif/src/gpio.inc +++ b/test/genvif/src/gpio.inc @@ -1,6 +1,6 @@ /* -*- mode:c -*- * - * Copyright 2022 The Chromium OS Authors. All rights reserved. + * Copyright 2022 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/genvif/src/helper.c b/test/genvif/src/helper.c index d604e63cfa..f3b5d97317 100644 --- a/test/genvif/src/helper.c +++ b/test/genvif/src/helper.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -7,8 +7,8 @@ #include "usb_pd.h" #ifndef CONFIG_USB_PD_CUSTOM_PDO -#define PDO_FIXED_FLAGS (PDO_FIXED_DUAL_ROLE | PDO_FIXED_DATA_SWAP |\ - PDO_FIXED_COMM_CAP) +#define PDO_FIXED_FLAGS \ + (PDO_FIXED_DUAL_ROLE | PDO_FIXED_DATA_SWAP | PDO_FIXED_COMM_CAP) const uint32_t pd_src_pdo[] = { PDO_FIXED(5000, 1500, PDO_FIXED_FLAGS), diff --git a/test/genvif/src/test_config.h b/test/genvif/src/test_config.h index f2fa112e81..d58e57a1c2 100644 --- a/test/genvif/src/test_config.h +++ b/test/genvif/src/test_config.h @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/genvif/src/timer.h b/test/genvif/src/timer.h index f2fa112e81..d58e57a1c2 100644 --- a/test/genvif/src/timer.h +++ b/test/genvif/src/timer.h @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/gyro_cal.c b/test/gyro_cal.c index 3b55ab86d4..c8e8d30589 100644 --- a/test/gyro_cal.c +++ b/test/gyro_cal.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -495,7 +495,7 @@ static int test_gyro_cal_remove_bias(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/gyro_cal.tasklist b/test/gyro_cal.tasklist index 7d28eb5b64..7209a7441e 100644 --- a/test/gyro_cal.tasklist +++ b/test/gyro_cal.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/gyro_cal_init_for_test.c b/test/gyro_cal_init_for_test.c index 3963e5a207..0ba1a65e6b 100644 --- a/test/gyro_cal_init_for_test.c +++ b/test/gyro_cal_init_for_test.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/gyro_cal_init_for_test.h b/test/gyro_cal_init_for_test.h index e32040bab9..8af51b8e10 100644 --- a/test/gyro_cal_init_for_test.h +++ b/test/gyro_cal_init_for_test.h @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/hooks.c b/test/hooks.c index 8d12494688..0913f257b3 100644 --- a/test/hooks.c +++ b/test/hooks.c @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -41,7 +41,7 @@ static void tick2_hook(void) tick_count_seen_by_tick2 = tick_hook_count; } /* tick2_hook() prio means it should be called after tick_hook() */ -DECLARE_HOOK(HOOK_TICK, tick2_hook, HOOK_PRIO_DEFAULT+1); +DECLARE_HOOK(HOOK_TICK, tick2_hook, HOOK_PRIO_DEFAULT + 1); static void second_hook(void) { @@ -62,9 +62,7 @@ static void non_deferred_func(void) deferred_call_count++; } -static const struct deferred_data non_deferred_func_data = { - non_deferred_func -}; +static const struct deferred_data non_deferred_func_data = { non_deferred_func }; static int test_init_hook(void) { @@ -85,8 +83,7 @@ static int test_ticks(void) usleep(1300 * MSEC); interval = tick_time[1].val - tick_time[0].val; - error_pct = (interval - HOOK_TICK_INTERVAL) * 100 / - HOOK_TICK_INTERVAL; + error_pct = (interval - HOOK_TICK_INTERVAL) * 100 / HOOK_TICK_INTERVAL; TEST_ASSERT_ABS_LESS(error_pct, 10); interval = second_time[1].val - second_time[0].val; @@ -159,7 +156,7 @@ static int test_repeating_deferred(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/hooks.tasklist b/test/hooks.tasklist index da0ab6211a..100cb6b5bd 100644 --- a/test/hooks.tasklist +++ b/test/hooks.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/host_command.c b/test/host_command.c index ba1d4dcd96..e88ddc852c 100644 --- a/test/host_command.c +++ b/test/host_command.c @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -8,6 +8,7 @@ #include "common.h" #include "console.h" #include "host_command.h" +#include "printf.h" #include "task.h" #include "test_util.h" #include "timer.h" @@ -177,6 +178,7 @@ static int test_hostcmd_reuse_response_buffer(void) struct ec_host_request *h = (struct ec_host_request *)resp_buf; struct ec_params_hello *d = (struct ec_params_hello *)(resp_buf + sizeof(*h)); + char str_buf[hex_str_buf_size(BUFFER_SIZE)]; h->struct_version = 3; h->checksum = 0; @@ -201,16 +203,18 @@ static int test_hostcmd_reuse_response_buffer(void) h->checksum = calculate_checksum(resp_buf, pkt.request_size); - ccprintf("\nBuffer contents before process 0x%ph\n", - HEX_BUF(resp_buf, BUFFER_SIZE)); + snprintf_hex_buffer(str_buf, sizeof(str_buf), + HEX_BUF(resp_buf, BUFFER_SIZE)); + ccprintf("\nBuffer contents before process 0x%s\n", str_buf); host_packet_receive(&pkt); task_wait_event(-1); - ccprintf("\nBuffer contents after process 0x%ph\n", - HEX_BUF(resp_buf, BUFFER_SIZE)); + snprintf_hex_buffer(str_buf, sizeof(str_buf), + HEX_BUF(resp_buf, BUFFER_SIZE)); + ccprintf("\nBuffer contents after process 0x%s\n", str_buf); - TEST_EQ(calculate_checksum(resp_buf, - sizeof(*resp) + resp->data_len), 0, "%d"); + TEST_EQ(calculate_checksum(resp_buf, sizeof(*resp) + resp->data_len), 0, + "%d"); TEST_EQ(resp->result, EC_RES_SUCCESS, "%d"); TEST_EQ(r->out_data, 0x12243648, "0x%x"); @@ -239,6 +243,7 @@ static void hostcmd_fill_chip_info(void) static int test_hostcmd_clears_unused_data(void) { int i, found_null; + char str_buf[hex_str_buf_size(BUFFER_SIZE)]; /* Set the buffer to junk and ensure that is gets cleared */ memset(resp_buf, 0xAA, BUFFER_SIZE); @@ -246,11 +251,12 @@ static int test_hostcmd_clears_unused_data(void) hostcmd_send(); - ccprintf("\nBuffer contents 0x%ph\n", - HEX_BUF(resp_buf, BUFFER_SIZE)); + snprintf_hex_buffer(str_buf, sizeof(str_buf), + HEX_BUF(resp_buf, BUFFER_SIZE)); + ccprintf("\nBuffer contents 0x%s\n", str_buf); - TEST_EQ(calculate_checksum(resp_buf, - sizeof(*resp) + resp->data_len), 0, "%d"); + TEST_EQ(calculate_checksum(resp_buf, sizeof(*resp) + resp->data_len), 0, + "%d"); TEST_EQ(resp->result, EC_RES_SUCCESS, "%d"); /* Ensure partial strings have 0s after the NULL byte */ @@ -300,7 +306,7 @@ static int test_hostcmd_clears_unused_data(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { wait_for_task_started(); test_reset(); diff --git a/test/host_command.tasklist b/test/host_command.tasklist index da0ab6211a..100cb6b5bd 100644 --- a/test/host_command.tasklist +++ b/test/host_command.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/i2c_bitbang.c b/test/i2c_bitbang.c index dd84c0b83a..6916110b5c 100644 --- a/test/i2c_bitbang.c +++ b/test/i2c_bitbang.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -10,15 +10,11 @@ #include "test_util.h" #include "util.h" -const struct i2c_port_t i2c_bitbang_ports[] = { - { - .name = "", - .port = 0, - .kbps = 100, - .scl = GPIO_I2C_SCL, - .sda = GPIO_I2C_SDA - } -}; +const struct i2c_port_t i2c_bitbang_ports[] = { { .name = "", + .port = 0, + .kbps = 100, + .scl = GPIO_I2C_SCL, + .sda = GPIO_I2C_SDA } }; const unsigned int i2c_bitbang_ports_used = 1; struct pin_state { @@ -29,7 +25,7 @@ int history_count; void reset_state(void) { - history[0] = (struct pin_state) {1, 1}; + history[0] = (struct pin_state){ 1, 1 }; history_count = 1; bitbang_set_started(0); } @@ -48,7 +44,7 @@ void gpio_set_level(enum gpio_signal signal, int level) new.scl = level; if (new.scl != history[history_count - 1].scl || - new.sda != history[history_count - 1].sda) + new.sda != history[history_count - 1].sda) history[history_count++] = new; } @@ -66,12 +62,12 @@ static int test_i2c_start_stop(void) { struct pin_state expected[] = { /* start */ - {1, 1}, - {1, 0}, - {0, 0}, + { 1, 1 }, + { 1, 0 }, + { 0, 0 }, /* stop */ - {1, 0}, - {1, 1}, + { 1, 0 }, + { 1, 1 }, }; int i; @@ -94,14 +90,14 @@ static int test_i2c_repeated_start(void) { struct pin_state expected[] = { /* start */ - {1, 1}, - {1, 0}, - {0, 0}, + { 1, 1 }, + { 1, 0 }, + { 0, 0 }, /* repeated start */ - {0, 1}, - {1, 1}, - {1, 0}, - {0, 0}, + { 0, 1 }, + { 1, 1 }, + { 1, 0 }, + { 0, 0 }, }; int i; @@ -124,47 +120,47 @@ static int test_i2c_write(void) { struct pin_state expected[] = { /* start */ - {1, 1}, - {1, 0}, - {0, 0}, + { 1, 1 }, + { 1, 0 }, + { 0, 0 }, /* bit 7: 0 */ - {1, 0}, - {0, 0}, + { 1, 0 }, + { 0, 0 }, /* bit 6: 1 */ - {0, 1}, - {1, 1}, - {0, 1}, + { 0, 1 }, + { 1, 1 }, + { 0, 1 }, /* bit 5: 0 */ - {0, 0}, - {1, 0}, - {0, 0}, + { 0, 0 }, + { 1, 0 }, + { 0, 0 }, /* bit 4: 1 */ - {0, 1}, - {1, 1}, - {0, 1}, + { 0, 1 }, + { 1, 1 }, + { 0, 1 }, /* bit 3: 0 */ - {0, 0}, - {1, 0}, - {0, 0}, + { 0, 0 }, + { 1, 0 }, + { 0, 0 }, /* bit 2: 1 */ - {0, 1}, - {1, 1}, - {0, 1}, + { 0, 1 }, + { 1, 1 }, + { 0, 1 }, /* bit 1: 1 */ - {1, 1}, - {0, 1}, + { 1, 1 }, + { 0, 1 }, /* bit 0: 0 */ - {0, 0}, - {1, 0}, - {0, 0}, + { 0, 0 }, + { 1, 0 }, + { 0, 0 }, /* read bit */ - {0, 1}, - {1, 1}, - {0, 1}, + { 0, 1 }, + { 1, 1 }, + { 0, 1 }, /* stop */ - {0, 0}, - {1, 0}, - {1, 1}, + { 0, 0 }, + { 1, 0 }, + { 1, 1 }, }; int i, ret; @@ -186,7 +182,7 @@ static int test_i2c_write(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/i2c_bitbang.tasklist b/test/i2c_bitbang.tasklist index 9fc1a80f4d..844ddb6c10 100644 --- a/test/i2c_bitbang.tasklist +++ b/test/i2c_bitbang.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/inductive_charging.c b/test/inductive_charging.c index d487e171fd..a5b23d1d8c 100644 --- a/test/inductive_charging.c +++ b/test/inductive_charging.c @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -17,8 +17,8 @@ #define START_CHARGE_DELAY 5000 /* ms */ #define MONITOR_CHARGE_DONE_DELAY 1000 /* ms */ -#define TEST_CHECK_CHARGE_DELAY (START_CHARGE_DELAY + \ - MONITOR_CHARGE_DONE_DELAY + 500) /* ms */ +#define TEST_CHECK_CHARGE_DELAY \ + (START_CHARGE_DELAY + MONITOR_CHARGE_DONE_DELAY + 500) /* ms */ static void wait_for_lid_debounce(void) { @@ -157,7 +157,7 @@ static int test_debounce_charge_done(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/inductive_charging.tasklist b/test/inductive_charging.tasklist index f5c894ccaf..dbe560d4aa 100644 --- a/test/inductive_charging.tasklist +++ b/test/inductive_charging.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/interrupt.c b/test/interrupt.c index ca98309e1f..efd8b47a34 100644 --- a/test/interrupt.c +++ b/test/interrupt.c @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -88,7 +88,7 @@ static int test_wait_for_ready(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/interrupt.tasklist b/test/interrupt.tasklist index da0ab6211a..100cb6b5bd 100644 --- a/test/interrupt.tasklist +++ b/test/interrupt.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/irq_locking.c b/test/irq_locking.c index 6d08b1175d..c46b94e8c5 100644 --- a/test/irq_locking.c +++ b/test/irq_locking.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -71,7 +71,7 @@ void before_test(void) interrupt_enable_count = 0; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/irq_locking.tasklist b/test/irq_locking.tasklist index 2d7fbb0541..5659b9033d 100644 --- a/test/irq_locking.tasklist +++ b/test/irq_locking.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/is_enabled.c b/test/is_enabled.c index fe93bafc31..d54f709bf9 100644 --- a/test/is_enabled.c +++ b/test/is_enabled.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -7,8 +7,8 @@ #include "common.h" #include "test_util.h" -#undef CONFIG_UNDEFINED -#define CONFIG_BLANK +#undef CONFIG_UNDEFINED +#define CONFIG_BLANK static int test_undef(void) { @@ -24,7 +24,7 @@ static int test_blank(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/is_enabled.tasklist b/test/is_enabled.tasklist index 5ffe662d01..2d4595f76a 100644 --- a/test/is_enabled.tasklist +++ b/test/is_enabled.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/is_enabled_error.c b/test/is_enabled_error.c index 3fcd80afe0..b5d6994c4d 100644 --- a/test/is_enabled_error.c +++ b/test/is_enabled_error.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -7,7 +7,7 @@ #include "common.h" #include "test_util.h" -#define CONFIG_VALUE TEST_VALUE +#define CONFIG_VALUE TEST_VALUE static int test_invalid_value(void) { @@ -17,7 +17,7 @@ static int test_invalid_value(void) return EC_ERROR_UNKNOWN; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/is_enabled_error.sh b/test/is_enabled_error.sh index 1e5407f31f..c99c4f0e26 100644 --- a/test/is_enabled_error.sh +++ b/test/is_enabled_error.sh @@ -1,5 +1,5 @@ #!/bin/bash -e -# Copyright 2019 The Chromium OS Authors. All rights reserved. +# Copyright 2019 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. diff --git a/test/is_enabled_error.tasklist b/test/is_enabled_error.tasklist index 5ffe662d01..2d4595f76a 100644 --- a/test/is_enabled_error.tasklist +++ b/test/is_enabled_error.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/kasa.c b/test/kasa.c index 6dea8a20e7..23968faf7c 100644 --- a/test/kasa.c +++ b/test/kasa.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -62,7 +62,7 @@ static int test_kasa_calculate(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/kasa.tasklist b/test/kasa.tasklist index 0e3696c3f0..d3fcf83121 100644 --- a/test/kasa.tasklist +++ b/test/kasa.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/kb_8042.c b/test/kb_8042.c index 9705b506fe..e7d7690cff 100644 --- a/test/kb_8042.c +++ b/test/kb_8042.c @@ -1,10 +1,12 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * * Tests for keyboard MKBP protocol */ +#include <stdbool.h> +#include "atkbd_protocol.h" #include "common.h" #include "console.h" #include "ec_commands.h" @@ -15,16 +17,28 @@ #include "keyboard_scan.h" #include "lpc.h" #include "power_button.h" +#include "queue.h" #include "system.h" +#include "task.h" #include "test_util.h" #include "timer.h" #include "util.h" -static const char *action[2] = {"release", "press"}; +static const char *action[2] = { "release", "press" }; -#define BUF_SIZE 16 -static char lpc_char_buf[BUF_SIZE]; -static unsigned int lpc_char_cnt; +/* + * This simulates the hardware output buffer. The x86 will read the output + * buffer from IOx60. Since we don't have actual hardware, we emulate the + * output buffer. + */ +static volatile struct { + bool full; + uint8_t data; + bool irq; + bool from_aux; +} output_buffer; + +static struct queue const aux_to_device = QUEUE_NULL(16, uint8_t); /*****************************************************************************/ /* Mock functions */ @@ -34,97 +48,517 @@ int lid_is_open(void) return 1; } +int lpc_keyboard_has_char(void) +{ + return output_buffer.full; +} + void lpc_keyboard_put_char(uint8_t chr, int send_irq) { - lpc_char_buf[lpc_char_cnt++] = chr; + if (lpc_keyboard_has_char()) { + ccprintf("%s:%s ERROR: output buffer is full!\n", __FILE__, + __func__); + /* We can't fail the test, but we can abort!. */ + exit(1); + } + + output_buffer.data = chr; + output_buffer.irq = send_irq; + output_buffer.from_aux = false; + output_buffer.full = true; +} + +void send_aux_data_to_device(uint8_t data) +{ + if (queue_add_unit(&aux_to_device, &data) == 0) { + ccprintf("%s: ERROR: aux_to_device queue is full!\n", __FILE__); + /* We can't fail the test, but we can abort!. */ + exit(1); + } } +void lpc_aux_put_char(uint8_t chr, int send_irq) +{ + if (lpc_keyboard_has_char()) { + ccprintf("%s:%s ERROR: output buffer is full!\n", __FILE__, + __func__); + /* We can't fail the test, but we can abort!. */ + exit(1); + } + + output_buffer.data = chr; + output_buffer.irq = send_irq; + output_buffer.from_aux = true; + output_buffer.full = true; +} /*****************************************************************************/ /* Test utilities */ +/* + * This is a bit tricky, the second parameter to _Static_assert must be a string + * literal, so we use that property to assert x is a string literal. + */ +#define ASSERT_IS_STRING_LITERAL(x) _Static_assert(true, x) + +int _wait_for_data(int delay_ms) +{ + while (!output_buffer.full) { + if (delay_ms <= 0) + break; + delay_ms -= 1; + + msleep(1); + } + TEST_ASSERT(output_buffer.full); + + return EC_SUCCESS; +} + +#define WAIT_FOR_DATA(d) TEST_EQ(_wait_for_data(d), EC_SUCCESS, "%d") + +#define VERIFY_LPC_CHAR_ALL(s, d, aux, _irq) \ + do { \ + const uint8_t *expected = s; \ + ASSERT_IS_STRING_LITERAL(s); \ + for (int _i = 0; _i < sizeof(s) - 1; ++_i) { \ + WAIT_FOR_DATA(d); \ + TEST_EQ(output_buffer.from_aux, aux, "%d"); \ + if (_irq >= 0) \ + TEST_EQ(output_buffer.irq, \ + _irq > 0 ? true : false, "%d"); \ + TEST_EQ(output_buffer.data, expected[_i], "0x%x"); \ + output_buffer.full = false; \ + task_wake(TASK_ID_KEYPROTO); \ + } \ + } while (0) + +#define VERIFY_LPC_CHAR_DELAY(s, d) \ + do { \ + msleep(d); \ + VERIFY_LPC_CHAR_ALL(s, 10, false, -1); \ + } while (0) +#define VERIFY_LPC_CHAR(s) VERIFY_LPC_CHAR_ALL(s, 30, false, -1) +#define VERIFY_ATKBD_ACK(s) VERIFY_LPC_CHAR("\xfa") /* ATKBD_RET_ACK */ + +#define VERIFY_NO_CHAR() \ + do { \ + msleep(30); \ + TEST_EQ(output_buffer.full, 0, "%d"); \ + } while (0) + +#define VERIFY_AUX_TO_HOST(expected_data, expected_irq) \ + VERIFY_LPC_CHAR_ALL(expected_data, 30, true, expected_irq) + +#define VERIFY_AUX_TO_HOST_EMPTY VERIFY_NO_CHAR + +#define VERIFY_AUX_TO_DEVICE(expected_data) \ + do { \ + uint8_t _data; \ + msleep(30); \ + TEST_EQ(queue_remove_unit(&aux_to_device, &_data), (size_t)1, \ + "%zd"); \ + TEST_EQ(_data, expected_data, "%#x"); \ + } while (0) + +#define VERIFY_AUX_TO_DEVICE_EMPTY() \ + do { \ + msleep(30); \ + TEST_ASSERT(queue_is_empty(&aux_to_device)); \ + } while (0) + static void press_key(int c, int r, int pressed) { ccprintf("Input %s (%d, %d)\n", action[pressed], c, r); keyboard_state_changed(r, c, pressed); } -static void enable_keystroke(int enabled) +static int _enable_keystroke(int enabled) { - uint8_t data = enabled ? I8042_CMD_ENABLE : I8042_CMD_RESET_DIS; + uint8_t data = enabled ? ATKBD_CMD_ENABLE : ATKBD_CMD_RESET_DIS; keyboard_host_write(data, 0); - msleep(30); + VERIFY_ATKBD_ACK(); + + return EC_SUCCESS; } +#define ENABLE_KEYSTROKE(enabled) \ + TEST_EQ(_enable_keystroke(enabled), EC_SUCCESS, "%d") -static void reset_8042(void) +static int _reset_8042(void) { - keyboard_host_write(I8042_CMD_RESET_DEF, 0); - msleep(30); + keyboard_host_write(ATKBD_CMD_RESET_DEF, 0); + VERIFY_ATKBD_ACK(); + + return EC_SUCCESS; } +#define RESET_8042() TEST_EQ(_reset_8042(), EC_SUCCESS, "%d") -static void set_typematic(uint8_t val) +static int _set_typematic(uint8_t val) { - keyboard_host_write(I8042_CMD_SETREP, 0); - msleep(30); + keyboard_host_write(ATKBD_CMD_SETREP, 0); + VERIFY_ATKBD_ACK(); + keyboard_host_write(val, 0); - msleep(30); + VERIFY_ATKBD_ACK(); + + return EC_SUCCESS; } +#define SET_TYPEMATIC(val) TEST_EQ(_set_typematic(val), EC_SUCCESS, "%d") -static void set_scancode(uint8_t s) +static int _set_scancode(uint8_t s) { - keyboard_host_write(I8042_CMD_SSCANSET, 0); - msleep(30); + keyboard_host_write(ATKBD_CMD_SSCANSET, 0); + VERIFY_ATKBD_ACK(); + keyboard_host_write(s, 0); - msleep(30); + VERIFY_ATKBD_ACK(); + + return EC_SUCCESS; } +#define SET_SCANCODE(s) TEST_EQ(_set_scancode(s), EC_SUCCESS, "%d") -static void write_cmd_byte(uint8_t val) +static int _write_cmd_byte(uint8_t val) { keyboard_host_write(I8042_WRITE_CMD_BYTE, 1); - msleep(30); + VERIFY_NO_CHAR(); + keyboard_host_write(val, 0); - msleep(30); + VERIFY_NO_CHAR(); + + return EC_SUCCESS; } +#define WRITE_CMD_BYTE(val) TEST_EQ(_write_cmd_byte(val), EC_SUCCESS, "%d") -static uint8_t read_cmd_byte(void) +static int _read_cmd_byte(uint8_t *cmd) { - lpc_char_cnt = 0; keyboard_host_write(I8042_READ_CMD_BYTE, 1); - msleep(30); - return lpc_char_buf[0]; + WAIT_FOR_DATA(30); + TEST_EQ(output_buffer.from_aux, 0, "%d"); + + *cmd = output_buffer.data; + output_buffer.full = false; + task_wake(TASK_ID_KEYPROTO); + + return EC_SUCCESS; +} +#define READ_CMD_BYTE() \ + ({ \ + uint8_t cmd; \ + TEST_EQ(_read_cmd_byte(&cmd), EC_SUCCESS, "%d"); \ + cmd; \ + }) + +/* + * We unfortunately don't have an Input Buffer Full (IBF). Instead we + * directly write to the task's input queue. Ideally we would have an + * emulator that emulates the 8042 input/output buffers. + */ +#define i8042_write_cmd(cmd) keyboard_host_write(cmd, 1) +#define i8042_write_data(data) keyboard_host_write(data, 0) + +/*****************************************************************************/ +/* Tests */ + +void before_test(void) +{ + /* Make sure all tests start with the controller in the same state */ + _write_cmd_byte(I8042_XLATE | I8042_AUX_DIS | I8042_KBD_DIS); +} + +void after_test(void) +{ + if (output_buffer.full) { + ccprintf("%s:%s ERROR: output buffer is not empty!\n", __FILE__, + __func__); + /* We can't fail the test, but we can abort!. */ + exit(1); + } } -static int __verify_lpc_char(char *arr, unsigned int sz, int delay_ms) +static int test_8042_aux_loopback(void) { - int i; + /* Disable all IRQs */ + WRITE_CMD_BYTE(0); + + i8042_write_cmd(I8042_ECHO_MOUSE); + i8042_write_data(0x01); + VERIFY_AUX_TO_HOST("\x01", 0); + + /* Enable AUX IRQ */ + WRITE_CMD_BYTE(I8042_ENIRQ12); + + i8042_write_cmd(I8042_ECHO_MOUSE); + i8042_write_data(0x02); + VERIFY_AUX_TO_HOST("\x02", 1); - lpc_char_cnt = 0; - for (i = 0; i < sz; ++i) - lpc_char_buf[i] = 0; - msleep(delay_ms); - TEST_ASSERT_ARRAY_EQ(arr, lpc_char_buf, sz); return EC_SUCCESS; } -#define VERIFY_LPC_CHAR(s) \ - TEST_ASSERT(__verify_lpc_char(s, strlen(s), 30) == EC_SUCCESS) -#define VERIFY_LPC_CHAR_DELAY(s, t) \ - TEST_ASSERT(__verify_lpc_char(s, strlen(s), t) == EC_SUCCESS) +static int test_8042_aux_two_way_communication(void) +{ + /* Enable AUX IRQ */ + WRITE_CMD_BYTE(I8042_ENIRQ12); + + i8042_write_cmd(I8042_SEND_TO_MOUSE); + i8042_write_data(0x01); + /* No response expected from the 8042 controller*/ + VERIFY_AUX_TO_HOST_EMPTY(); + VERIFY_AUX_TO_DEVICE(0x01); + + /* Simulate the AUX device sending a response to the host */ + send_aux_data_to_host_interrupt(0x02); + VERIFY_AUX_TO_HOST("\x02", 1); + + return EC_SUCCESS; +} -static int __verify_no_char(void) +static int test_8042_aux_inhibit(void) { - lpc_char_cnt = 0; - msleep(30); - TEST_CHECK(lpc_char_cnt == 0); + /* Enable AUX IRQ, but inhibit the AUX device from sending data. */ + WRITE_CMD_BYTE(I8042_ENIRQ12 | I8042_AUX_DIS); + + /* Simulate the AUX device sending a response to the host */ + send_aux_data_to_host_interrupt(0x02); + VERIFY_AUX_TO_HOST_EMPTY(); + + /* Stop inhibiting the AUX device */ + WRITE_CMD_BYTE(I8042_ENIRQ12); + /* + * This is wrong. When the CLK is inhibited the device will queue up + * events/scan codes in it's internal buffer. Once the inhibit is + * released, the device will start clocking out the data. So in this + * test we should be receiving a 0x02 byte, but we don't. + * + * In order to fix this we either need to plumb an inhibit function + * to the AUX PS/2 controller so it can hold the CLK line low, and thus + * tell the AUX device to buffer. Or, we can have the 8042 controller + * buffer the data internally and start replying it when the device is + * no longer inhibited. + */ + VERIFY_AUX_TO_HOST_EMPTY(); + + return EC_SUCCESS; } -#define VERIFY_NO_CHAR() TEST_ASSERT(__verify_no_char() == EC_SUCCESS) +static int test_8042_aux_controller_commands(void) +{ + uint8_t ctrl; -/*****************************************************************************/ -/* Tests */ + /* Start with empty controller flags. i.e., AUX Enabled */ + WRITE_CMD_BYTE(0); + + /* Send the AUX DISABLE command and verify the ctrl got updated */ + i8042_write_cmd(I8042_DIS_MOUSE); + ctrl = READ_CMD_BYTE(); + TEST_ASSERT(ctrl & I8042_AUX_DIS); + + /* Send the AUX ENABLE command and verify the ctrl got updated */ + i8042_write_cmd(I8042_ENA_MOUSE); + ctrl = READ_CMD_BYTE(); + TEST_ASSERT(!(ctrl & I8042_AUX_DIS)); + + return EC_SUCCESS; +} + +static int test_8042_aux_test_command(void) +{ + i8042_write_cmd(I8042_TEST_MOUSE); + + VERIFY_LPC_CHAR("\x00"); + + return EC_SUCCESS; +} + +static int test_8042_self_test(void) +{ + i8042_write_cmd(I8042_RESET_SELF_TEST); + VERIFY_LPC_CHAR("\x55"); + + return EC_SUCCESS; +} + +static int test_8042_keyboard_test_command(void) +{ + i8042_write_cmd(I8042_TEST_KB_PORT); + VERIFY_LPC_CHAR("\x00"); /* Data and Clock are not stuck */ + + return EC_SUCCESS; +} + +static int test_8042_keyboard_controller_commands(void) +{ + uint8_t ctrl; + + /* Start with empty controller flags. i.e., Keyboard Enabled */ + WRITE_CMD_BYTE(0); + + /* Send the Keyboard DISABLE command and verify the ctrl got updated */ + i8042_write_cmd(I8042_DIS_KB); + ctrl = READ_CMD_BYTE(); + TEST_ASSERT(ctrl & I8042_KBD_DIS); + + /* Send the Keyboard ENABLE command and verify the ctrl got updated */ + i8042_write_cmd(I8042_ENA_KB); + ctrl = READ_CMD_BYTE(); + TEST_ASSERT(!(ctrl & I8042_KBD_DIS)); + + return EC_SUCCESS; +} + +static int test_8042_keyboard_key_pressed_while_inhibited(void) +{ + ENABLE_KEYSTROKE(1); + + /* Inhibit the keyboard device from sending data. */ + WRITE_CMD_BYTE(I8042_XLATE | I8042_KBD_DIS); + + /* Simulate a keypress on the keyboard */ + press_key(1, 1, 1); + + /* + * FIXME: This is wrong! We shouldn't be sending scan codes to the + * host while the keyboard channel is inhibited. This should be + * VERIFY_NO_CHAR(); + */ + VERIFY_LPC_CHAR("\x01"); + + /* FIXME: This is also wrong for the same reason as above! */ + press_key(1, 1, 0); + VERIFY_LPC_CHAR("\x81"); + + /* Stop inhibiting the keyboard */ + WRITE_CMD_BYTE(0); + + /* + * FIXME: This is wrong. When the CLK is inhibited the device will queue + * up events/scan codes in it's internal buffer. Once the inhibit is + * released, the device will start clocking out the data. So in this + * test we should be receiving the 0x01, and x81 here, but we received + * them above. + */ + VERIFY_NO_CHAR(); + + return EC_SUCCESS; +} + +static int test_8042_keyboard_key_pressed_before_inhibit_using_cmd_byte(void) +{ + ENABLE_KEYSTROKE(1); + /* Simulate a keypress on the keyboard */ + press_key(1, 1, 1); + press_key(1, 1, 0); + + /* + * We should have a press scan code in the output buffer, and a + * release scan code queued up in the keyboard queue. + */ + WAIT_FOR_DATA(30); + + /* Inhibit the keyboard device from sending data. */ + keyboard_host_write(I8042_WRITE_CMD_BYTE, 1); + keyboard_host_write(I8042_XLATE | I8042_KBD_DIS, 0); + /* Wait for controller to processes the command */ + msleep(10); + + /* Stop inhibiting the keyboard */ + keyboard_host_write(I8042_WRITE_CMD_BYTE, 1); + keyboard_host_write(I8042_XLATE, 0); + /* Wait for controller to processes the command */ + msleep(10); + + /* Verify the scan codes from above */ + VERIFY_LPC_CHAR("\x01"); + VERIFY_LPC_CHAR("\x81"); + + return EC_SUCCESS; +} + +static int +test_8042_keyboard_key_pressed_before_inhibit_using_cmd_byte_with_read(void) +{ + uint8_t cmd; + + ENABLE_KEYSTROKE(1); + /* Simulate a keypress on the keyboard */ + press_key(1, 1, 1); + press_key(1, 1, 0); + + /* + * We should have a press scan code in the output buffer, and a + * release scan code queued up in the keyboard queue. + */ + WAIT_FOR_DATA(30); + + /* Inhibit the keyboard device from sending data. */ + keyboard_host_write(I8042_WRITE_CMD_BYTE, 1); + keyboard_host_write(I8042_XLATE | I8042_KBD_DIS, 0); + /* Wait for controller to processes the command */ + msleep(10); + + /* Read the key press scan code from the output buffer. */ + VERIFY_LPC_CHAR("\x01"); + + /* + * With the keyboard output suppressed, we should be able to read from + * the 8042 controller. + */ + cmd = READ_CMD_BYTE(); + + /* Verify we got the cmd byte we set above */ + TEST_EQ(cmd, I8042_XLATE | I8042_KBD_DIS, "%d"); + + /* Stop inhibiting the keyboard */ + keyboard_host_write(I8042_WRITE_CMD_BYTE, 1); + keyboard_host_write(I8042_XLATE, 0); + /* Wait for controller to processes the command */ + msleep(10); + + /* Verify the key release scan code from above */ + /* + * FIXME: This is wrong. We should receive the key release scan code + * 0x81. Instead the `I8042_READ_CMD_BYTE` above cleared the keyboard's + * output queue. It did this because the 8042 and keyboard output queues + * are implemented as the same thing. + */ + VERIFY_NO_CHAR(); + + return EC_SUCCESS; +} + +static int test_8042_keyboard_key_pressed_before_inhibit_using_cmd(void) +{ + ENABLE_KEYSTROKE(1); + /* Simulate a keypress on the keyboard */ + press_key(1, 1, 1); + press_key(1, 1, 0); + + /* + * We should have a press scan code in the output buffer, and a + * release scan code queued up in the keyboard queue. + */ + WAIT_FOR_DATA(30); + + /* Inhibit the keyboard device from sending data. */ + keyboard_host_write(I8042_DIS_KB, 1); + + /* Stop inhibiting the keyboard */ + keyboard_host_write(I8042_ENA_KB, 1); + + /* Verify the scan codes from above */ + VERIFY_LPC_CHAR("\x01"); + /* + * FIXME: This is wrong. When the keyboard CLK is inhibited the keyboard + * will queue up events/scan codes in it's internal buffer. Once the + * inhibit is released, the keyboard will start clocking out the data. + * So in this test we should be receiving 0x81, but the keyboard buffer + * was cleared by the I8042_DIS_KB above. + */ + VERIFY_NO_CHAR(); + return EC_SUCCESS; +} static int test_single_key_press(void) { - enable_keystroke(1); + ENABLE_KEYSTROKE(1); press_key(1, 1, 1); VERIFY_LPC_CHAR("\x01"); press_key(1, 1, 0); @@ -140,7 +574,7 @@ static int test_single_key_press(void) static int test_disable_keystroke(void) { - enable_keystroke(0); + ENABLE_KEYSTROKE(0); press_key(1, 1, 1); VERIFY_NO_CHAR(); press_key(1, 1, 0); @@ -151,12 +585,12 @@ static int test_disable_keystroke(void) static int test_typematic(void) { - enable_keystroke(1); + ENABLE_KEYSTROKE(1); /* * 250ms delay, 8 chars / sec. */ - set_typematic(0xf); + SET_TYPEMATIC(0xf); press_key(1, 1, 1); VERIFY_LPC_CHAR_DELAY("\x01\x01\x01\x01\x01", 650); @@ -166,7 +600,7 @@ static int test_typematic(void) /* * 500ms delay, 10.9 chars / sec. */ - reset_8042(); + RESET_8042(); press_key(1, 1, 1); VERIFY_LPC_CHAR_DELAY("\x01\x01\x01", 650); @@ -176,17 +610,208 @@ static int test_typematic(void) return EC_SUCCESS; } +static int test_atkbd_get_scancode(void) +{ + SET_SCANCODE(1); + + keyboard_host_write(ATKBD_CMD_GSCANSET, 0); + VERIFY_ATKBD_ACK(); + + /* Writing a 0 scan code will return the current scan code. */ + keyboard_host_write(0, 0); + VERIFY_ATKBD_ACK(); + VERIFY_LPC_CHAR("\x01"); + + SET_SCANCODE(2); + + keyboard_host_write(ATKBD_CMD_GSCANSET, 0); + VERIFY_ATKBD_ACK(); + + /* Writing a 0 scan code will return the current scan code. */ + keyboard_host_write(0, 0); + VERIFY_ATKBD_ACK(); + VERIFY_LPC_CHAR("\x02"); + + return EC_SUCCESS; +} + +static int test_atkbd_set_scancode_with_keystroke_disabled(void) +{ + ENABLE_KEYSTROKE(0); + + SET_SCANCODE(1); + + press_key(1, 1, 1); + VERIFY_NO_CHAR(); + + return EC_SUCCESS; +} + +static int test_atkbd_set_scancode_with_key_press_before_set(void) +{ + ENABLE_KEYSTROKE(0); + ENABLE_KEYSTROKE(1); + + /* Push data into the output buffer and keyboard queue */ + press_key(1, 1, 1); + press_key(1, 1, 0); + + /* + * ATKBD_CMD_SSCANSET should cause the keyboard to stop scanning, flush + * the keyboards output queue, and reset the typematic key. + */ + keyboard_host_write(ATKBD_CMD_SSCANSET, 0); + /* Read out the scan code that got pushed into the output buffer before + * the command was sent. + */ + VERIFY_LPC_CHAR("\x01"); + + /* + * FIXME: This is wrong. The keyboard's output queue should have been + * flushed when it received the `ATKBD_CMD_SSCANSET` command. + */ + VERIFY_LPC_CHAR("\x81"); + + /* This is the ACK for `ATKBD_CMD_SSCANSET`. */ + VERIFY_ATKBD_ACK(); + + /* The keyboard has flushed the buffer so no more keys. */ + VERIFY_NO_CHAR(); + + /* Finish setting scan code 1 */ + keyboard_host_write(1, 0); + VERIFY_ATKBD_ACK(); + + /* Key scanning should be restored. */ + press_key(1, 1, 1); + press_key(1, 1, 0); + VERIFY_LPC_CHAR("\x01\x81"); + + return EC_SUCCESS; +} + +static int test_atkbd_set_scancode_with_key_press_during_set(void) +{ + ENABLE_KEYSTROKE(1); + + /* + * ATKBD_CMD_SSCANSET should cause the keyboard to stop scanning, flush + * the keyboards output queue, and reset the typematic key. + */ + keyboard_host_write(ATKBD_CMD_SSCANSET, 0); + VERIFY_ATKBD_ACK(); + + /* These keypresses should be dropped. */ + press_key(1, 1, 1); + press_key(1, 1, 0); + /* + * FIXME: So this is wrong. scanning should be stopped while waiting + * for the scan code to be sent. + */ + VERIFY_LPC_CHAR("\x01\x81"); + + /* Finish setting scan code 1 */ + keyboard_host_write(1, 0); + VERIFY_ATKBD_ACK(); + + /* Key scanning should be restored. */ + press_key(1, 1, 1); + press_key(1, 1, 0); + VERIFY_LPC_CHAR("\x01\x81"); + + return EC_SUCCESS; +} + +static int test_atkbd_echo(void) +{ + i8042_write_data(ATKBD_CMD_DIAG_ECHO); + VERIFY_ATKBD_ACK(); + + VERIFY_LPC_CHAR("\xee"); + + return EC_SUCCESS; +} + +static int test_atkbd_get_id(void) +{ + i8042_write_data(ATKBD_CMD_GETID); + VERIFY_ATKBD_ACK(); + + VERIFY_LPC_CHAR("\xab\x83"); + + i8042_write_data(ATKBD_CMD_OK_GETID); + VERIFY_ATKBD_ACK(); + + VERIFY_LPC_CHAR("\xab\x83"); + + return EC_SUCCESS; +} + +static int test_atkbd_set_leds_keypress_during(void) +{ + /* This should pause scanning. */ + i8042_write_data(ATKBD_CMD_SETLEDS); + VERIFY_ATKBD_ACK(); + + /* Simulate keypress while keyboard is waiting for option byte */ + press_key(1, 1, 1); + press_key(1, 1, 0); + /* FIXME: This is wrong, we shouldn't have any key strokes */ + VERIFY_LPC_CHAR("\x01\x81"); + + i8042_write_data(0x01); + VERIFY_ATKBD_ACK(); + + return EC_SUCCESS; +} + +static int test_atkbd_set_leds_abort_set(void) +{ + i8042_write_data(ATKBD_CMD_SETLEDS); + VERIFY_ATKBD_ACK(); + + /* + * The spec says if we send a command instead of the option byte, the + * keyboard will abort the SETLEDS command and processes the new + * command. The way we can differentiate between a command and the + * option byte is the option byte must have the top 5 bits set to 0. + */ + i8042_write_data(ATKBD_CMD_DIAG_ECHO); + VERIFY_ATKBD_ACK(); + + /* FIXME: This is wrong. We are expecting the 0xee echo byte. */ + VERIFY_NO_CHAR(); + + return EC_SUCCESS; +} + +static int test_atkbd_set_ex_leds(void) +{ + i8042_write_data(ATKBD_CMD_EX_SETLEDS); + VERIFY_ATKBD_ACK(); + + /* The extra set led command expects two option bytes. */ + + i8042_write_data(0x1); + VERIFY_ATKBD_ACK(); + + i8042_write_data(0x2); + VERIFY_ATKBD_ACK(); + + return EC_SUCCESS; +} + static int test_scancode_set2(void) { - set_scancode(2); + SET_SCANCODE(2); - write_cmd_byte(read_cmd_byte() | I8042_XLATE); + WRITE_CMD_BYTE(READ_CMD_BYTE() | I8042_XLATE); press_key(1, 1, 1); VERIFY_LPC_CHAR("\x01"); press_key(1, 1, 0); VERIFY_LPC_CHAR("\x81"); - write_cmd_byte(read_cmd_byte() & ~I8042_XLATE); + WRITE_CMD_BYTE(READ_CMD_BYTE() & ~I8042_XLATE); press_key(1, 1, 1); VERIFY_LPC_CHAR("\x76"); press_key(1, 1, 0); @@ -197,8 +822,13 @@ static int test_scancode_set2(void) static int test_power_button(void) { + ENABLE_KEYSTROKE(0); + gpio_set_level(GPIO_POWER_BUTTON_L, 1); - set_scancode(1); + msleep(100); + + SET_SCANCODE(1); + ENABLE_KEYSTROKE(1); test_chipset_on(); gpio_set_level(GPIO_POWER_BUTTON_L, 0); @@ -207,8 +837,8 @@ static int test_power_button(void) gpio_set_level(GPIO_POWER_BUTTON_L, 1); VERIFY_LPC_CHAR_DELAY("\xe0\xde", 100); - set_scancode(2); - write_cmd_byte(read_cmd_byte() & ~I8042_XLATE); + SET_SCANCODE(2); + WRITE_CMD_BYTE(READ_CMD_BYTE() & ~I8042_XLATE); gpio_set_level(GPIO_POWER_BUTTON_L, 0); VERIFY_LPC_CHAR_DELAY("\xe0\x37", 100); @@ -229,8 +859,8 @@ static int test_power_button(void) static int test_sysjump(void) { - set_scancode(2); - enable_keystroke(1); + SET_SCANCODE(2); + ENABLE_KEYSTROKE(1); system_run_image_copy(EC_IMAGE_RW); @@ -240,13 +870,13 @@ static int test_sysjump(void) static int test_sysjump_cont(void) { - write_cmd_byte(read_cmd_byte() | I8042_XLATE); + WRITE_CMD_BYTE(READ_CMD_BYTE() | I8042_XLATE); press_key(1, 1, 1); VERIFY_LPC_CHAR("\x01"); press_key(1, 1, 0); VERIFY_LPC_CHAR("\x81"); - write_cmd_byte(read_cmd_byte() & ~I8042_XLATE); + WRITE_CMD_BYTE(READ_CMD_BYTE() & ~I8042_XLATE); press_key(1, 1, 1); VERIFY_LPC_CHAR("\x76"); press_key(1, 1, 0); @@ -274,8 +904,8 @@ static const struct ec_response_keybd_config keybd_config = { }, }; -__override const struct ec_response_keybd_config -*board_vivaldi_keybd_config(void) +__override const struct ec_response_keybd_config * +board_vivaldi_keybd_config(void) { return &keybd_config; } @@ -285,8 +915,8 @@ static int test_ec_cmd_get_keybd_config(void) struct ec_response_keybd_config resp; int rv; - rv = test_send_host_command(EC_CMD_GET_KEYBD_CONFIG, 0, NULL, 0, - &resp, sizeof(resp)); + rv = test_send_host_command(EC_CMD_GET_KEYBD_CONFIG, 0, NULL, 0, &resp, + sizeof(resp)); if (rv != EC_RES_SUCCESS) { ccprintf("Error: EC_CMD_GET_KEYBD_CONFIG cmd returns %d\n", rv); return EC_ERROR_INVAL; @@ -303,32 +933,56 @@ static int test_ec_cmd_get_keybd_config(void) static int test_vivaldi_top_keys(void) { - set_scancode(2); + SET_SCANCODE(2); /* Test REFRESH key */ - write_cmd_byte(read_cmd_byte() | I8042_XLATE); - press_key(2, 3, 1); /* Press T2 */ - VERIFY_LPC_CHAR("\xe0\x67"); /* Check REFRESH scancode in set-1 */ + WRITE_CMD_BYTE(READ_CMD_BYTE() | I8042_XLATE); + press_key(2, 3, 1); /* Press T2 */ + VERIFY_LPC_CHAR("\xe0\x67"); /* Check REFRESH scancode in set-1 */ /* Test SNAPSHOT key */ - write_cmd_byte(read_cmd_byte() | I8042_XLATE); - press_key(4, 3, 1); /* Press T2 */ - VERIFY_LPC_CHAR("\xe0\x13"); /* Check SNAPSHOT scancode in set-1 */ + WRITE_CMD_BYTE(READ_CMD_BYTE() | I8042_XLATE); + press_key(4, 3, 1); /* Press T2 */ + VERIFY_LPC_CHAR("\xe0\x13"); /* Check SNAPSHOT scancode in set-1 */ /* Test VOL_UP key */ - write_cmd_byte(read_cmd_byte() | I8042_XLATE); - press_key(5, 3, 1); /* Press T2 */ - VERIFY_LPC_CHAR("\xe0\x30"); /* Check VOL_UP scancode in set-1 */ + WRITE_CMD_BYTE(READ_CMD_BYTE() | I8042_XLATE); + press_key(5, 3, 1); /* Press T2 */ + VERIFY_LPC_CHAR("\xe0\x30"); /* Check VOL_UP scancode in set-1 */ return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); wait_for_task_started(); if (system_get_image_copy() == EC_IMAGE_RO) { + RUN_TEST(test_8042_aux_loopback); + RUN_TEST(test_8042_aux_two_way_communication); + RUN_TEST(test_8042_aux_inhibit); + RUN_TEST(test_8042_aux_controller_commands); + RUN_TEST(test_8042_aux_test_command); + RUN_TEST(test_8042_self_test); + RUN_TEST(test_8042_keyboard_test_command); + RUN_TEST(test_8042_keyboard_controller_commands); + RUN_TEST(test_8042_keyboard_key_pressed_while_inhibited); + RUN_TEST( + test_8042_keyboard_key_pressed_before_inhibit_using_cmd_byte); + RUN_TEST( + test_8042_keyboard_key_pressed_before_inhibit_using_cmd_byte_with_read); + RUN_TEST( + test_8042_keyboard_key_pressed_before_inhibit_using_cmd); + RUN_TEST(test_atkbd_get_scancode); + RUN_TEST(test_atkbd_set_scancode_with_keystroke_disabled); + RUN_TEST(test_atkbd_set_scancode_with_key_press_before_set); + RUN_TEST(test_atkbd_set_scancode_with_key_press_during_set); + RUN_TEST(test_atkbd_echo); + RUN_TEST(test_atkbd_get_id); + RUN_TEST(test_atkbd_set_leds_keypress_during); + RUN_TEST(test_atkbd_set_leds_abort_set); + RUN_TEST(test_atkbd_set_ex_leds); RUN_TEST(test_single_key_press); RUN_TEST(test_disable_keystroke); RUN_TEST(test_typematic); diff --git a/test/kb_8042.tasklist b/test/kb_8042.tasklist index 8cd35e6145..4d74e3c269 100644 --- a/test/kb_8042.tasklist +++ b/test/kb_8042.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/kb_mkbp.c b/test/kb_mkbp.c index 3b191a47ac..0bfd1e5a15 100644 --- a/test/kb_mkbp.c +++ b/test/kb_mkbp.c @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -19,7 +19,7 @@ static uint8_t state[KEYBOARD_COLS_MAX]; static int ec_int_level; -static const char *action[2] = {"release", "press"}; +static const char *action[2] = { "release", "press" }; /*****************************************************************************/ /* Mock functions */ @@ -43,7 +43,7 @@ int lid_is_open(void) /*****************************************************************************/ /* Test utilities */ -#define FIFO_EMPTY() (ec_int_level == 1) +#define FIFO_EMPTY() (ec_int_level == 1) #define FIFO_NOT_EMPTY() (ec_int_level == 0) void clear_state(void) @@ -71,7 +71,7 @@ int press_key(int c, int r, int pressed) int verify_key(int c, int r, int pressed) { struct host_cmd_handler_args args; - struct ec_response_get_next_event event; + struct ec_response_get_next_event event; int i; args.version = 0; @@ -104,7 +104,7 @@ int verify_key(int c, int r, int pressed) int verify_key_v2(int c, int r, int pressed, int expect_more) { struct host_cmd_handler_args args; - struct ec_response_get_next_event_v1 event; + struct ec_response_get_next_event_v1 event; int i; args.version = 2; @@ -286,7 +286,7 @@ int fifo_underrun(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { ec_int_level = 1; test_reset(); diff --git a/test/kb_mkbp.tasklist b/test/kb_mkbp.tasklist index d84996c71c..a255779878 100644 --- a/test/kb_mkbp.tasklist +++ b/test/kb_mkbp.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/kb_scan.c b/test/kb_scan.c index a43808c0c1..82693ff525 100644 --- a/test/kb_scan.c +++ b/test/kb_scan.c @@ -1,7 +1,7 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. - * Copyright 2013 Google Inc. + * Copyright 2013 Google LLC * * Tests for keyboard scan deghosting and debouncing. */ @@ -20,15 +20,15 @@ #include "timer.h" #include "util.h" -#define KEYDOWN_DELAY_MS 10 -#define KEYDOWN_RETRY 10 -#define NO_KEYDOWN_DELAY_MS 100 +#define KEYDOWN_DELAY_MS 10 +#define KEYDOWN_RETRY 10 +#define NO_KEYDOWN_DELAY_MS 100 -#define CHECK_KEY_COUNT(old, expected) \ - do { \ +#define CHECK_KEY_COUNT(old, expected) \ + do { \ if (verify_key_presses(old, expected) != EC_SUCCESS) \ - return EC_ERROR_UNKNOWN; \ - old = fifo_add_count; \ + return EC_ERROR_UNKNOWN; \ + old = fifo_add_count; \ } while (0) /* Emulated physical key state */ @@ -121,13 +121,10 @@ void chipset_reset(void) } #endif -#define mock_defined_key(k, p) mock_key(KEYBOARD_ROW_ ## k, \ - KEYBOARD_COL_ ## k, \ - p) +#define mock_defined_key(k, p) mock_key(KEYBOARD_ROW_##k, KEYBOARD_COL_##k, p) -#define mock_default_key(k, p) mock_key(KEYBOARD_DEFAULT_ROW_ ## k, \ - KEYBOARD_DEFAULT_COL_ ## k, \ - p) +#define mock_default_key(k, p) \ + mock_key(KEYBOARD_DEFAULT_ROW_##k, KEYBOARD_DEFAULT_COL_##k, p) static void mock_key(int r, int c, int keydown) { @@ -403,7 +400,7 @@ static int debounce_test(void) * Push down each subsequent key, until all 8 are pressed, each * time bouncing the former one once. */ - for (i = 1 ; i < 8; i++) { + for (i = 1; i < 8; i++) { mock_key(i, 1, 1); task_wake(TASK_ID_KEYSCAN); msleep(3); @@ -547,12 +544,14 @@ static int lid_test(void) static int test_check_boot_esc(void) { - TEST_CHECK(keyboard_scan_get_boot_keys() == BOOT_KEY_ESC); + TEST_ASSERT(keyboard_scan_get_boot_keys() == BOOT_KEY_ESC); + return EC_SUCCESS; } static int test_check_boot_down(void) { - TEST_CHECK(keyboard_scan_get_boot_keys() == BOOT_KEY_DOWN_ARROW); + TEST_ASSERT(keyboard_scan_get_boot_keys() == BOOT_KEY_DOWN_ARROW); + return EC_SUCCESS; } void test_init(void) @@ -587,7 +586,7 @@ static void run_test_step1(void) else RUN_TEST(debounce_test); - if (0) /* crbug.com/976974 */ + if (0) /* crbug.com/976974 */ RUN_TEST(simulate_key_test); #ifdef EMU_BUILD RUN_TEST(runtime_key_test); @@ -646,7 +645,7 @@ int test_task(void *data) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { msleep(30); /* Wait for TASK_ID_TEST to initialize */ task_wake(TASK_ID_TEST); diff --git a/test/kb_scan.tasklist b/test/kb_scan.tasklist index ded03b1112..3cac36bb23 100644 --- a/test/kb_scan.tasklist +++ b/test/kb_scan.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/legacy_nvmem_dump.h b/test/legacy_nvmem_dump.h index 6816673c23..401694d9d6 100644 --- a/test/legacy_nvmem_dump.h +++ b/test/legacy_nvmem_dump.h @@ -1,5 +1,5 @@ /* - * Copyright 2016 The Chromium OS Authors. All rights reserved. + * Copyright 2016 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -12,10 +12,10 @@ * This binary dump is placed in a separate file not to free up the test file * using it. */ - 0x00, 0x65, 0x8e, 0x10, 0x80, 0xca, 0x52, 0x1e, 0x95, 0x81, 0x12, 0x4f, - 0x36, 0x78, 0x9a, 0x34, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x10, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, +0x00, 0x65, 0x8e, 0x10, 0x80, 0xca, 0x52, 0x1e, 0x95, 0x81, 0x12, 0x4f, 0x36, + 0x78, 0x9a, 0x34, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x10, 0xff, 0xff, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -32,12 +32,12 @@ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x63, 0x72, 0x6f, 0x73, 0x2d, 0x70, - 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x00, 0xe1, 0xac, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x37, 0x01, 0x00, - 0x03, 0x00, 0x00, 0x00, 0xbd, 0xfe, 0xff, 0xff, 0x85, 0xfc, 0x05, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb0, 0xde, 0x01, 0x00, 0xb4, 0xde, 0x01, 0x00, - 0x9b, 0x0f, 0x06, 0x00, 0xbc, 0xde, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0d, 0x00, 0x63, 0x72, 0x6f, 0x73, 0x2d, 0x70, 0x61, + 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x00, 0xe1, 0xac, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6b, 0x37, 0x01, 0x00, 0x03, + 0x00, 0x00, 0x00, 0xbd, 0xfe, 0xff, 0xff, 0x85, 0xfc, 0x05, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xb0, 0xde, 0x01, 0x00, 0xb4, 0xde, 0x01, 0x00, 0x9b, + 0x0f, 0x06, 0x00, 0xbc, 0xde, 0x01, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -48,34 +48,33 @@ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, - 0x5b, 0x15, 0xa1, 0x0a, 0x05, 0x12, 0x58, 0x84, 0xbf, 0xf6, 0xc9, 0xf3, - 0xdd, 0xb7, 0x26, 0xce, 0x56, 0x9e, 0x5f, 0x7a, 0xa8, 0xd4, 0x8a, 0x67, - 0x5c, 0x26, 0x35, 0x0e, 0xb2, 0x13, 0x2c, 0x79, 0x20, 0x00, 0x26, 0xca, - 0x7d, 0xb8, 0x1a, 0x1f, 0x0b, 0x5c, 0x0a, 0xf3, 0xb5, 0xe2, 0x6a, 0xec, - 0x1a, 0x0d, 0x90, 0x8b, 0x92, 0x3c, 0x07, 0xb0, 0x41, 0xb0, 0x27, 0x20, - 0x88, 0x33, 0xfe, 0x5c, 0xf2, 0x7b, 0x20, 0x00, 0x9e, 0xb7, 0xa2, 0x4c, - 0xad, 0x6c, 0xc0, 0x92, 0x92, 0xef, 0xbc, 0x56, 0x65, 0x47, 0xf9, 0x09, - 0xd1, 0xc4, 0xbc, 0x36, 0xe8, 0x3a, 0xc2, 0x8a, 0x11, 0x3a, 0xca, 0xe1, - 0x66, 0xd7, 0x85, 0x57, 0x20, 0x00, 0x0c, 0x6d, 0xc7, 0x61, 0x92, 0xfc, - 0x1b, 0x24, 0x02, 0xc1, 0x92, 0x0e, 0xf4, 0xa1, 0x75, 0xbe, 0xb1, 0x3d, - 0x29, 0xfe, 0x1e, 0xe2, 0x65, 0xf5, 0x25, 0xae, 0xaf, 0xfe, 0x73, 0x32, - 0x35, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x5b, + 0x15, 0xa1, 0x0a, 0x05, 0x12, 0x58, 0x84, 0xbf, 0xf6, 0xc9, 0xf3, 0xdd, + 0xb7, 0x26, 0xce, 0x56, 0x9e, 0x5f, 0x7a, 0xa8, 0xd4, 0x8a, 0x67, 0x5c, + 0x26, 0x35, 0x0e, 0xb2, 0x13, 0x2c, 0x79, 0x20, 0x00, 0x26, 0xca, 0x7d, + 0xb8, 0x1a, 0x1f, 0x0b, 0x5c, 0x0a, 0xf3, 0xb5, 0xe2, 0x6a, 0xec, 0x1a, + 0x0d, 0x90, 0x8b, 0x92, 0x3c, 0x07, 0xb0, 0x41, 0xb0, 0x27, 0x20, 0x88, + 0x33, 0xfe, 0x5c, 0xf2, 0x7b, 0x20, 0x00, 0x9e, 0xb7, 0xa2, 0x4c, 0xad, + 0x6c, 0xc0, 0x92, 0x92, 0xef, 0xbc, 0x56, 0x65, 0x47, 0xf9, 0x09, 0xd1, + 0xc4, 0xbc, 0x36, 0xe8, 0x3a, 0xc2, 0x8a, 0x11, 0x3a, 0xca, 0xe1, 0x66, + 0xd7, 0x85, 0x57, 0x20, 0x00, 0x0c, 0x6d, 0xc7, 0x61, 0x92, 0xfc, 0x1b, + 0x24, 0x02, 0xc1, 0x92, 0x0e, 0xf4, 0xa1, 0x75, 0xbe, 0xb1, 0x3d, 0x29, + 0xfe, 0x1e, 0xe2, 0x65, 0xf5, 0x25, 0xae, 0xaf, 0xfe, 0x73, 0x32, 0x35, + 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, - 0x52, 0x01, 0x7b, 0x53, 0xc5, 0x95, 0xa0, 0x3a, 0x07, 0xd5, 0x62, 0x7f, - 0xd3, 0x9c, 0x85, 0xaa, 0xfc, 0x56, 0xa0, 0xfa, 0x3a, 0xe8, 0x17, 0x38, - 0xc3, 0x59, 0x65, 0xbe, 0x75, 0x1b, 0xdc, 0xdc, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x52, + 0x01, 0x7b, 0x53, 0xc5, 0x95, 0xa0, 0x3a, 0x07, 0xd5, 0x62, 0x7f, 0xd3, + 0x9c, 0x85, 0xaa, 0xfc, 0x56, 0xa0, 0xfa, 0x3a, 0xe8, 0x17, 0x38, 0xc3, + 0x59, 0x65, 0xbe, 0x75, 0x1b, 0xdc, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x84, 0xe7, 0x7e, 0x46, 0xfe, 0xbd, - 0x10, 0xdd, 0x5b, 0x09, 0xb2, 0xe2, 0xb1, 0x3f, 0xbf, 0x9a, 0xf3, 0xd7, - 0xfb, 0xf7, 0x28, 0xbb, 0x24, 0x10, 0xa3, 0xf3, 0x18, 0xa4, 0xa2, 0x16, - 0xd5, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x84, 0xe7, 0x7e, 0x46, 0xfe, 0xbd, 0x10, + 0xdd, 0x5b, 0x09, 0xb2, 0xe2, 0xb1, 0x3f, 0xbf, 0x9a, 0xf3, 0xd7, 0xfb, + 0xf7, 0x28, 0xbb, 0x24, 0x10, 0xa3, 0xf3, 0x18, 0xa4, 0xa2, 0x16, 0xd5, + 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -86,15 +85,16 @@ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x03, 0xff, 0xff, 0xff, 0x0b, 0x00, - 0x03, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x03, 0xff, 0xff, 0xff, 0x0d, 0x00, - 0x03, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, - 0x00, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x03, 0xff, 0xff, 0xff, 0x0b, 0x00, 0x03, + 0xff, 0xff, 0xff, 0x0c, 0x00, 0x03, 0xff, 0xff, 0xff, 0x0d, 0x00, 0x03, + 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x00, + 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0xe8, 0x03, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, @@ -113,7 +113,7 @@ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, /* Manually added nonempty pcr. Array 0, index 0 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x02, 0x03, 0x04, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, diff --git a/test/lid_sw.c b/test/lid_sw.c index 8163f74716..123676a1fa 100644 --- a/test/lid_sw.c +++ b/test/lid_sw.c @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -83,7 +83,7 @@ static int test_debounce(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/lid_sw.tasklist b/test/lid_sw.tasklist index da0ab6211a..100cb6b5bd 100644 --- a/test/lid_sw.tasklist +++ b/test/lid_sw.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/lightbar.c b/test/lightbar.c index 363d73a36b..90400d1cf5 100644 --- a/test/lightbar.c +++ b/test/lightbar.c @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -20,9 +20,8 @@ static int get_seq(void) /* Get the state */ memset(&resp, 0, sizeof(resp)); params.cmd = LIGHTBAR_CMD_GET_SEQ; - rv = test_send_host_command(EC_CMD_LIGHTBAR_CMD, 0, - ¶ms, sizeof(params), - &resp, sizeof(resp)); + rv = test_send_host_command(EC_CMD_LIGHTBAR_CMD, 0, ¶ms, + sizeof(params), &resp, sizeof(resp)); if (rv != EC_RES_SUCCESS) { ccprintf("%s:%s(): rv = %d\n", __FILE__, __func__, rv); return -1; @@ -41,9 +40,8 @@ static int set_seq(int s) memset(&resp, 0, sizeof(resp)); params.cmd = LIGHTBAR_CMD_SEQ; params.seq.num = s; - rv = test_send_host_command(EC_CMD_LIGHTBAR_CMD, 0, - ¶ms, sizeof(params), - &resp, sizeof(resp)); + rv = test_send_host_command(EC_CMD_LIGHTBAR_CMD, 0, ¶ms, + sizeof(params), &resp, sizeof(resp)); if (rv != EC_RES_SUCCESS) { ccprintf("%s:%s(): rv = %d\n", __FILE__, __func__, rv); return -1; @@ -169,9 +167,8 @@ test_static int test_stop_timeout(void) TEST_ASSERT(set_seq(i) == EC_RES_SUCCESS); usleep(SECOND); /* What happened? */ - if (i == LIGHTBAR_RUN || - i == LIGHTBAR_S0S3 || i == LIGHTBAR_S3 || - i == LIGHTBAR_S3S5 || i == LIGHTBAR_S5) + if (i == LIGHTBAR_RUN || i == LIGHTBAR_S0S3 || + i == LIGHTBAR_S3 || i == LIGHTBAR_S3S5 || i == LIGHTBAR_S5) /* RUN or shutdown sequences should stop it */ TEST_ASSERT(get_seq() == LIGHTBAR_S0); else @@ -290,7 +287,7 @@ const struct lb_brightness_def lb_brightness_levels[] = { }, }; const unsigned int lb_brightness_levels_count = - ARRAY_SIZE(lb_brightness_levels); + ARRAY_SIZE(lb_brightness_levels); int lux_level_to_google_color(const int lux); extern int google_color_id; @@ -303,8 +300,8 @@ int lid_is_open(void) test_static int test_als_lightbar(void) { int lux_data[] = { 500, 100, 35, 15, 30, 35, 55, 70, 55, 100 }; - int exp_gcid[] = { 0, 0, 1, 2, 2, 2, 1, 0, 0, 0 }; - int exp_chg[] = { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0 }; + int exp_gcid[] = { 0, 0, 1, 2, 2, 2, 1, 0, 0, 0 }; + int exp_chg[] = { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0 }; int i; BUILD_ASSERT(ARRAY_SIZE(lux_data) == ARRAY_SIZE(exp_gcid)); @@ -319,7 +316,7 @@ test_static int test_als_lightbar(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { /* Ensure tasks are started before running tests */ usleep(SECOND); diff --git a/test/lightbar.tasklist b/test/lightbar.tasklist index b5e714765d..78c08cc652 100644 --- a/test/lightbar.tasklist +++ b/test/lightbar.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/mag_cal.c b/test/mag_cal.c index 8ee3b41480..245bad786c 100644 --- a/test/mag_cal.c +++ b/test/mag_cal.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -17,35 +17,17 @@ * the high values and [-5,5] (+- 1.53 uT) for the low values. */ static intv3_t samples[] = { - { -522, 5, -5 }, - { -528, -3, 1 }, - { -531, -2, 0 }, - { -525, -1, 3 }, + { -522, 5, -5 }, { -528, -3, 1 }, { -531, -2, 0 }, { -525, -1, 3 }, - { 527, 3, -2 }, - { 523, -5, 1 }, - { 520, -3, 2 }, - { 522, 0, -4 }, + { 527, 3, -2 }, { 523, -5, 1 }, { 520, -3, 2 }, { 522, 0, -4 }, - { -3, -519, -2 }, - { 1, -521, 5 }, - { 2, -526, 4 }, - { 0, -532, -5 }, + { -3, -519, -2 }, { 1, -521, 5 }, { 2, -526, 4 }, { 0, -532, -5 }, - { -5, 528, 4 }, - { -2, 531, -4 }, - { 1, 522, 2 }, - { 5, 532, 3 }, + { -5, 528, 4 }, { -2, 531, -4 }, { 1, 522, 2 }, { 5, 532, 3 }, - { -5, 0, -524 }, - { -1, -2, -527 }, - { -3, 4, -532 }, - { 5, 3, -531 }, + { -5, 0, -524 }, { -1, -2, -527 }, { -3, 4, -532 }, { 5, 3, -531 }, - { 4, -2, 524 }, - { 1, 3, 520 }, - { 5, -5, 528 }, - { 0, 2, 521 }, + { 4, -2, 524 }, { 1, 3, 520 }, { 5, -5, 528 }, { 0, 2, 521 }, }; static int test_mag_cal_computes_bias(void) @@ -81,7 +63,7 @@ static int test_mag_cal_computes_bias(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/mag_cal.tasklist b/test/mag_cal.tasklist index ff715f69cd..a8b04538aa 100644 --- a/test/mag_cal.tasklist +++ b/test/mag_cal.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/math_util.c b/test/math_util.c index 6482888e55..1ee9b1484b 100644 --- a/test/math_util.c +++ b/test/math_util.c @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -25,7 +25,7 @@ const unsigned int motion_sensor_count = ARRAY_SIZE(motion_sensors); /* Test utilities */ /* Macro to compare two floats and check if they are equal within diff. */ -#define IS_FLOAT_EQUAL(a, b, diff) ((a) >= ((b) - diff) && (a) <= ((b) + diff)) +#define IS_FLOAT_EQUAL(a, b, diff) ((a) >= ((b)-diff) && (a) <= ((b) + diff)) #define ACOS_TOLERANCE_DEG 0.5f #define RAD_TO_DEG (180.0f / 3.1415926f) @@ -45,21 +45,19 @@ static int test_acos(void) return EC_SUCCESS; } - const mat33_fp_t test_matrices[] = { - {{ 0, FLOAT_TO_FP(-1), 0}, - {FLOAT_TO_FP(-1), 0, 0}, - { 0, 0, FLOAT_TO_FP(1)} }, - {{ FLOAT_TO_FP(1), 0, FLOAT_TO_FP(5)}, - { FLOAT_TO_FP(2), FLOAT_TO_FP(1), FLOAT_TO_FP(6)}, - { FLOAT_TO_FP(3), FLOAT_TO_FP(4), 0} } + { { 0, FLOAT_TO_FP(-1), 0 }, + { FLOAT_TO_FP(-1), 0, 0 }, + { 0, 0, FLOAT_TO_FP(1) } }, + { { FLOAT_TO_FP(1), 0, FLOAT_TO_FP(5) }, + { FLOAT_TO_FP(2), FLOAT_TO_FP(1), FLOAT_TO_FP(6) }, + { FLOAT_TO_FP(3), FLOAT_TO_FP(4), 0 } } }; - static int test_rotate(void) { int i, j, k; - intv3_t v = {1, 2, 3}; + intv3_t v = { 1, 2, 3 }; intv3_t w; for (i = 0; i < ARRAY_SIZE(test_matrices); i++) { @@ -122,7 +120,7 @@ test_static int test_temp_conversion(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/math_util.tasklist b/test/math_util.tasklist index f5c894ccaf..dbe560d4aa 100644 --- a/test/math_util.tasklist +++ b/test/math_util.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/motion_angle.c b/test/motion_angle.c index 30f663de14..3f206de078 100644 --- a/test/motion_angle.c +++ b/test/motion_angle.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -32,10 +32,10 @@ int filler(const struct motion_sensor_t *s, const float v) static int test_lid_angle_less180(void) { int index = 0, lid_angle; - struct motion_sensor_t *lid = &motion_sensors[ - CONFIG_LID_ANGLE_SENSOR_LID]; - struct motion_sensor_t *base = &motion_sensors[ - CONFIG_LID_ANGLE_SENSOR_BASE]; + struct motion_sensor_t *lid = + &motion_sensors[CONFIG_LID_ANGLE_SENSOR_LID]; + struct motion_sensor_t *base = + &motion_sensors[CONFIG_LID_ANGLE_SENSOR_BASE]; /* We don't have TASK_CHIP so simulate init ourselves */ hook_notify(HOOK_CHIPSET_SHUTDOWN); @@ -56,42 +56,39 @@ static int test_lid_angle_less180(void) cprints(CC_ACCEL, "start loop"); /* Check we will never enter tablet mode. */ while (index < kAccelerometerLaptopModeTestDataLength) { - feed_accel_data(kAccelerometerLaptopModeTestData, - &index, filler); + feed_accel_data(kAccelerometerLaptopModeTestData, &index, + filler); wait_for_valid_sample(); lid_angle = motion_lid_get_angle(); cprints(CC_ACCEL, "%d : LID(%d, %d, %d)/BASE(%d, %d, %d): %d", - index / TEST_LID_SAMPLE_SIZE, - lid->xyz[X], lid->xyz[Y], lid->xyz[Z], - base->xyz[X], base->xyz[Y], base->xyz[Z], - lid_angle); + index / TEST_LID_SAMPLE_SIZE, lid->xyz[X], lid->xyz[Y], + lid->xyz[Z], base->xyz[X], base->xyz[Y], base->xyz[Z], + lid_angle); /* We need few sample to debounce and enter laptop mode. */ TEST_ASSERT(index < TEST_LID_SAMPLE_SIZE * - (TABLET_MODE_DEBOUNCE_COUNT + 2) || + (TABLET_MODE_DEBOUNCE_COUNT + 2) || !tablet_get_mode()); } /* Check we will never exit tablet mode. */ index = 0; while (index < kAccelerometerFullyOpenTestDataLength) { - feed_accel_data(kAccelerometerFullyOpenTestData, - &index, filler); + feed_accel_data(kAccelerometerFullyOpenTestData, &index, + filler); wait_for_valid_sample(); lid_angle = motion_lid_get_angle(); cprints(CC_ACCEL, "%d : LID(%d, %d, %d)/BASE(%d, %d, %d): %d", - index / TEST_LID_SAMPLE_SIZE, - lid->xyz[X], lid->xyz[Y], lid->xyz[Z], - base->xyz[X], base->xyz[Y], base->xyz[Z], - lid_angle); + index / TEST_LID_SAMPLE_SIZE, lid->xyz[X], lid->xyz[Y], + lid->xyz[Z], base->xyz[X], base->xyz[Y], base->xyz[Z], + lid_angle); TEST_ASSERT(index < TEST_LID_SAMPLE_SIZE * - (TABLET_MODE_DEBOUNCE_COUNT + 2) || + (TABLET_MODE_DEBOUNCE_COUNT + 2) || tablet_get_mode()); } return EC_SUCCESS; } - -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/motion_angle.tasklist b/test/motion_angle.tasklist index 0b774ebb4a..6c99c23eea 100644 --- a/test/motion_angle.tasklist +++ b/test/motion_angle.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/motion_angle_data_literals.c b/test/motion_angle_data_literals.c index 74d00f8232..d22a8230a2 100644 --- a/test/motion_angle_data_literals.c +++ b/test/motion_angle_data_literals.c @@ -1,4 +1,4 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. +/* Copyright 2018 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -12,991 +12,993 @@ * [ CONFIG_ACCEL_STD_REF_FRAME_OLD must be defined to used this array. ] */ const float kAccelerometerLaptopModeTestData[] = { - -0.166016f, -0.00488281f, 0.924805f, -0.770508f, -0.0488281f, - -0.510742f, -0.199219f, -0.0078125f, 0.953125f, -0.782227f, - -0.0244141f, -0.652344f, -0.177734f, -0.0136719f, 0.936523f, - -0.772461f, -0.0527344f, -0.59375f, -0.176758f, -0.00878906f, - 0.9375f, -0.777344f, -0.0419922f, -0.637695f, -0.165039f, - -0.00878906f, 0.942383f, -0.782227f, -0.046875f, -0.613281f, - -0.180664f, -0.00976562f, 0.943359f, -0.777344f, -0.0419922f, - -0.601562f, -0.189453f, -0.00488281f, 0.943359f, -0.776367f, - -0.0263672f, -0.613281f, -0.166992f, -0.00488281f, 0.935547f, - -0.78125f, -0.0380859f, -0.609375f, -0.176758f, -0.00878906f, - 0.947266f, -0.790039f, -0.0576172f, -0.585938f, -0.173828f, - -0.0126953f, 0.93457f, -0.780273f, -0.0654297f, -0.666016f, - -0.169922f, -0.00195312f, 0.928711f, -0.775391f, -0.0351562f, - -0.561523f, -0.193359f, 0.0f, 0.941406f, -0.795898f, - -0.0478516f, -0.640625f, -0.162109f, -0.00585938f, 0.917969f, - -0.768555f, -0.0146484f, -0.685547f, -0.166992f, -0.0136719f, - 0.921875f, -0.755859f, -0.0166016f, -0.425781f, -0.175781f, - -0.0810547f, 1.00098f, -0.802734f, -0.117188f, -0.585938f, - -0.210938f, 0.0214844f, 0.881836f, -0.750977f, -0.0302734f, - -0.677734f, -0.285156f, 0.00976562f, 0.967773f, -0.763672f, - -0.0283203f, -0.850586f, -0.222656f, -0.0136719f, 0.943359f, - -0.763672f, -0.0507812f, -0.640625f, -0.236328f, 0.0859375f, - 0.892578f, -0.742188f, 0.0302734f, -0.484375f, -0.269531f, - 0.0263672f, 0.913086f, -0.714844f, -0.00585938f, -0.745117f, - -0.275391f, 0.0927734f, 0.977539f, -0.776367f, -0.078125f, - -0.750977f, -0.155273f, -0.0341797f, 1.2334f, -1.06445f, - -0.0478516f, -0.823242f, -0.196289f, 0.046875f, 1.19141f, - -1.00391f, -0.140625f, -0.541016f, 0.0917969f, 0.21582f, - 0.717773f, -0.764648f, -0.0341797f, -0.607422f, -0.0351562f, - 0.0888672f, 0.207031f, -0.214844f, -0.18457f, -0.0664062f, - -0.0898438f, 0.0556641f, 0.418945f, -0.232422f, 0.43457f, - 0.0361328f, 0.143555f, 0.376953f, 1.23633f, -1.09082f, - 0.529297f, 0.0507812f, 0.205078f, 0.438477f, 1.66602f, - -1.59668f, 0.325195f, -1.20996f, -0.0791016f, 0.404297f, - 1.50977f, -1.40918f, 0.31543f, -1.30273f, -0.0654297f, - 0.141602f, 0.699219f, -0.589844f, 0.0732422f, -0.27832f, - 0.00488281f, 0.00683594f, 0.0566406f, -0.0410156f, -0.0292969f, - -0.0234375f, -0.0488281f, -0.00195312f, -0.0292969f, 0.0849609f, - -0.139648f, 0.0585938f, 0.677734f, 0.667969f, 1.36523f, - -1.11816f, 0.412109f, 0.844727f, 0.142578f, 0.790039f, - 1.73145f, -1.68066f, 0.464844f, -1.29492f, -0.0800781f, - 0.803711f, 0.879883f, -0.765625f, -0.0400391f, -0.616211f, - -0.170898f, 0.879883f, 0.510742f, 0.158203f, 0.381836f, - -0.270508f, -0.0693359f, 0.651367f, 0.431641f, 0.104492f, - 0.991211f, -0.0634766f, -0.0478516f, 0.750977f, 0.283203f, - -0.0332031f, 1.52051f, -0.00195312f, -0.201172f, 1.08984f, - 0.173828f, 0.0849609f, 1.44141f, -0.214844f, -0.0107422f, - 1.29785f, 0.520508f, 0.00488281f, 1.73047f, -0.523438f, - 0.136719f, 1.42188f, 0.987305f, 0.0527344f, 1.74707f, - -0.525391f, 0.34668f, 0.469727f, 0.428711f, 0.114258f, - -0.788086f, 0.177734f, 0.400391f, -0.106445f, 0.328125f, - -0.566406f, -0.948242f, 0.670898f, 0.467773f, -0.21875f, - 0.55957f, -0.767578f, -0.232422f, 0.195312f, 0.625f, - -0.271484f, 0.865234f, -0.765625f, 0.299805f, 0.0703125f, - 0.378906f, -0.526367f, 0.548828f, -0.231445f, -0.569336f, - 0.455078f, 0.303711f, -0.866211f, -0.485352f, 0.566406f, - -1.60547f, 0.481445f, 0.183594f, -0.782227f, -0.260742f, - 0.243164f, -1.41504f, 0.373047f, 0.172852f, -0.935547f, - -0.412109f, 0.133789f, -1.69727f, 0.178711f, 0.407227f, - -0.952148f, -0.227539f, 0.0751953f, -1.67188f, 0.339844f, - 0.498047f, -0.795898f, 0.209961f, 0.177734f, -1.3916f, - 0.458984f, 0.295898f, 0.0390625f, 0.697266f, 0.258789f, - -0.0703125f, -0.131836f, 0.56543f, 0.250977f, 0.913086f, - -0.353516f, 0.90332f, 0.191406f, 0.708008f, 0.352539f, - 0.853516f, -0.839844f, 0.955078f, 0.636719f, 0.657227f, - 0.389648f, 0.620117f, -0.725586f, 0.43457f, 0.485352f, - 0.424805f, 0.479492f, 0.287109f, -0.505859f, -0.209961f, - 0.0927734f, 0.21582f, 0.709961f, 0.492188f, -0.413086f, - -0.0869141f, 0.0673828f, -0.119141f, 1.20508f, 0.392578f, - 0.229492f, 0.927734f, -0.297852f, 0.142578f, 1.0293f, - 0.430664f, 0.0449219f, 1.71875f, -0.0283203f, 0.0107422f, - 1.18164f, 0.0517578f, 0.0751953f, 1.80273f, -0.0693359f, - -0.19043f, 1.1748f, 0.236328f, 0.0839844f, 1.78711f, - -0.472656f, -0.270508f, 1.10254f, 0.964844f, 0.118164f, - 1.75684f, -0.901367f, -0.211914f, 1.11133f, 0.65625f, - 0.308594f, 0.142578f, 0.396484f, 0.239258f, 0.0800781f, - 0.973633f, -0.824219f, -0.25293f, 0.485352f, 0.351562f, - -0.0771484f, 1.08984f, -0.632812f, 0.240234f, -0.258789f, - 0.436523f, -0.514648f, 0.491211f, 0.0664062f, -0.244141f, - -0.148438f, -0.171875f, -0.477539f, -0.459961f, 1.1084f, - -0.822266f, -0.114258f, -0.192383f, -0.608398f, -0.771484f, - 1.11133f, -1.25488f, 1.01953f, -0.0839844f, -0.620117f, - -0.794922f, 0.660156f, -0.876953f, 0.0957031f, -0.242188f, - -0.711914f, -0.55957f, 0.736328f, -0.649414f, -0.0263672f, - -0.258789f, -0.498047f, -0.973633f, 0.957031f, -0.660156f, - 0.186523f, -0.262695f, -0.595703f, -0.787109f, 0.893555f, - -0.429688f, -0.0234375f, -0.254883f, -0.449219f, -0.783203f, - 0.90918f, 0.106445f, -0.161133f, -0.287109f, -0.0800781f, - -0.729492f, 0.933594f, -0.126953f, -0.0742188f, -0.550781f, - -0.271484f, -0.989258f, 1.00098f, -0.879883f, 0.0234375f, - -0.543945f, -0.50293f, -1.18945f, 1.24023f, -1.33398f, - 0.325195f, -0.262695f, -0.307617f, -0.912109f, 1.39062f, - -1.06055f, 0.0107422f, -0.00292969f, -0.573242f, -0.4375f, - 1.15625f, -0.651367f, -0.310547f, 0.188477f, -0.730469f, - -0.121094f, 0.611328f, -0.779297f, 0.335938f, 0.731445f, - -0.475586f, -0.00390625f, 0.100586f, -0.693359f, 0.254883f, - 0.813477f, -0.345703f, 0.420898f, -0.400391f, -0.539062f, - 0.365234f, 0.720703f, 0.0214844f, 0.673828f, -0.370117f, - 0.0585938f, 0.499023f, 0.523438f, 0.198242f, 0.759766f, - -0.544922f, 0.543945f, 0.226562f, 0.473633f, 0.34082f, - 0.595703f, -0.682617f, 0.292969f, -0.217773f, 0.0742188f, - 0.553711f, 0.762695f, -0.504883f, 0.292969f, 0.0751953f, - 0.0126953f, 0.427734f, 0.769531f, -0.265625f, 0.552734f, - -0.0175781f, -0.30957f, 0.253906f, 0.322266f, 0.117188f, - 0.263672f, -0.706055f, -0.991211f, 0.266602f, 0.501953f, - 0.00585938f, 0.0341797f, -1.24805f, -1.21777f, 0.488281f, - 0.461914f, 0.0986328f, 0.362305f, -1.1709f, -1.17188f, - 0.50293f, 0.458984f, 0.108398f, 0.460938f, -1.52148f, - -1.27051f, 0.379883f, 0.90625f, 0.0400391f, 0.524414f, - -1.77832f, -0.951172f, 0.397461f, 0.589844f, 0.520508f, - 0.439453f, -1.99902f, -0.643555f, 0.313477f, 0.766602f, - 0.450195f, 0.286133f, -1.29883f, -0.375f, 0.225586f, - 0.697266f, 0.299805f, 0.108398f, -0.976562f, 0.09375f, - 0.0361328f, 0.851562f, -0.210938f, 0.0615234f, -0.0898438f, - 0.59082f, 0.313477f, 0.756836f, -0.731445f, 0.296875f, - -0.0927734f, 0.552734f, 0.223633f, 0.558594f, -0.806641f, - 0.00195312f, 0.03125f, 0.728516f, 0.276367f, 0.744141f, - -0.994141f, 0.197266f, -0.425781f, 0.316406f, 0.046875f, - 0.601562f, -0.633789f, -0.0576172f, -0.320312f, 0.786133f, - 0.0986328f, 1.0f, -1.19922f, 0.34668f, -0.546875f, - 0.481445f, 0.00390625f, 0.876953f, -1.04297f, -0.0507812f, - -0.775391f, 0.333984f, -0.0175781f, 1.02539f, -1.07129f, - -0.12207f, -0.212891f, 0.28125f, 0.00488281f, 0.998047f, - -0.97168f, 0.178711f, -0.444336f, 0.178711f, 0.0136719f, - 0.896484f, -0.9375f, 0.0117188f, -0.291992f, 0.132812f, - 0.0234375f, 0.975586f, -0.943359f, -0.0078125f, 0.0546875f, - 0.244141f, -0.0771484f, 1.05469f, -1.02148f, 0.313477f, - -0.349609f, 0.148438f, 0.0839844f, 0.619141f, -0.75f, - -0.589844f, -0.0488281f, 0.0263672f, -0.176758f, 0.697266f, - -0.691406f, -0.625977f, -0.417969f, 0.408203f, 0.265625f, - 1.01953f, -1.09863f, 0.106445f, 0.0117188f, 0.157227f, - 0.424805f, 1.07422f, -0.816406f, 0.498047f, 0.0996094f, - 0.00585938f, 0.53418f, 0.771484f, -0.610352f, 0.744141f, - 0.0195312f, 0.0478516f, 0.552734f, 0.734375f, -0.72168f, - 0.518555f, -0.144531f, -0.0361328f, 0.513672f, 0.822266f, - -0.736328f, 0.65918f, -0.179688f, -0.104492f, 0.425781f, - 1.00098f, -0.885742f, 0.739258f, -0.681641f, -0.443359f, - 0.375977f, 0.884766f, -0.724609f, 0.110352f, -0.289062f, - -0.414062f, 0.494141f, 0.53125f, -0.422852f, 0.216797f, - -0.786133f, -0.569336f, 0.749023f, 0.75293f, -0.529297f, - 0.730469f, -0.911133f, -0.68457f, 0.611328f, 0.959961f, - -0.623047f, 1.06543f, -0.499023f, -0.392578f, 0.761719f, - 0.43457f, -0.357422f, 0.631836f, -0.746094f, -0.370117f, - 0.777344f, 0.379883f, -0.225586f, 0.677734f, -0.478516f, - -0.358398f, 0.788086f, 0.569336f, -0.34082f, 0.939453f, - -0.238281f, -0.230469f, 0.861328f, 0.448242f, -0.219727f, - 0.966797f, -0.310547f, -0.242188f, 0.863281f, 0.369141f, - -0.0859375f, 0.87207f, -0.400391f, -0.385742f, 0.841797f, - 0.401367f, -0.0634766f, 0.912109f, -0.458008f, 0.0107422f, - 0.753906f, 0.758789f, -0.675781f, 0.765625f, -0.342773f, - -0.123047f, 0.855469f, 0.599609f, -0.490234f, 0.963867f, - -0.118164f, -0.0117188f, 0.889648f, 0.637695f, -0.607422f, - 0.803711f, -0.597656f, -0.242188f, 0.855469f, 0.550781f, - -0.607422f, 0.576172f, -0.759766f, -0.220703f, 0.832031f, - 0.477539f, -0.491211f, 0.470703f, -0.575195f, -0.0869141f, - 1.01074f, 0.371094f, -0.25293f, 0.678711f, -0.316406f, - -0.197266f, 1.04785f, 0.386719f, -0.046875f, 0.967773f, - -0.761719f, -0.282227f, 0.956055f, 0.270508f, 0.230469f, - 1.39746f, -0.864258f, -0.417969f, 0.761719f, 0.457031f, - 0.0263672f, 1.38379f, -0.714844f, -0.288086f, 0.535156f, - 0.689453f, -0.507812f, 0.68457f, -0.433594f, -0.0908203f, - 0.210938f, 0.825195f, -0.649414f, 0.326172f, -0.793945f, - 0.0527344f, 0.0546875f, 0.911133f, -0.616211f, -0.0214844f, - -0.00195312f, -0.229492f, -0.0253906f, 0.775391f, -0.611328f, - -0.360352f, 0.0371094f, 0.161133f, 0.0253906f, 0.625f, - -0.624023f, -0.344727f, -0.146484f, 0.371094f, 0.255859f, - 1.41797f, -1.27832f, 0.614258f, 0.764648f, 0.869141f, - 0.426758f, 0.758789f, -1.04395f, 0.401367f, 0.263672f, - 0.563477f, 0.450195f, 0.774414f, -0.908203f, 0.384766f, - -0.262695f, 0.664062f, 0.509766f, 0.798828f, -0.757812f, - 0.770508f, 0.491211f, 0.62207f, 0.487305f, 0.496094f, - -0.530273f, 0.375977f, 1.18652f, 0.736328f, 0.386719f, - 0.470703f, -0.647461f, 0.379883f, 0.47168f, 0.834961f, - 0.289062f, 0.475586f, -0.654297f, 0.448242f, 0.395508f, - 0.930664f, 0.0830078f, 0.157227f, -0.304688f, 0.0634766f, - 1.30078f, 0.905273f, -0.102539f, 0.0576172f, -0.303711f, - -0.334961f, 0.885742f, 0.709961f, -0.143555f, 0.0390625f, - -0.18457f, -0.498047f, 1.1084f, 0.744141f, 0.0283203f, - 0.383789f, -0.371094f, -0.126953f, 1.17285f, 0.506836f, - 0.109375f, 0.680664f, -0.244141f, -0.0830078f, 0.577148f, - 0.12793f, 0.25f, 0.972656f, -0.328125f, 0.34082f, - -0.234375f, -0.327148f, 0.470703f, 0.987305f, -0.535156f, - 0.730469f, -0.957031f, -0.509766f, 0.602539f, 0.938477f, - -0.640625f, 0.836914f, -1.13672f, -0.56543f, 0.450195f, - 0.737305f, -0.449219f, 0.649414f, -1.08105f, -0.364258f, - 0.338867f, 0.667969f, -0.533203f, 0.654297f, -1.0918f, - -0.505859f, 0.422852f, 0.745117f, -0.443359f, 0.319336f, - -0.753906f, -0.563477f, 0.374023f, 0.640625f, -0.435547f, - 0.220703f, -0.868164f, -0.701172f, 0.317383f, 0.702148f, - -0.527344f, 0.138672f, -0.848633f, -0.431641f, 0.220703f, - 0.329102f, -0.25293f, -0.232422f, -0.875977f, -0.442383f, - 0.550781f, 0.783203f, -0.441406f, 0.160156f, -0.107422f, - 0.0683594f, 0.317383f, 1.12012f, -1.02344f, 0.322266f, - -0.469727f, -0.151367f, 0.43457f, 0.65625f, -0.745117f, - 0.216797f, -1.03223f, -0.200195f, 0.240234f, 1.11035f, - -0.90332f, 0.239258f, 0.0429688f, -0.228516f, 0.00390625f, - 0.836914f, -0.770508f, -0.280273f, -0.18457f, 0.0117188f, - 0.214844f, 0.767578f, -0.774414f, -0.0703125f, -0.954102f, - -0.508789f, -0.046875f, 1.00391f, -0.930664f, 0.0292969f, - 0.407227f, -0.519531f, 0.0361328f, 0.753906f, -0.777344f, - -0.0214844f, 0.741211f, -0.27832f, -0.0332031f, 1.15625f, - -0.862305f, -0.115234f, 0.821289f, -0.598633f, 0.00488281f, - 0.929688f, -1.01172f, -0.0996094f, 0.351562f, -0.524414f, - 0.118164f, 1.1709f, -0.938477f, 0.00878906f, 0.948242f, - -0.475586f, 0.443359f, 0.893555f, -0.597656f, 0.0107422f, - 0.558594f, -0.87207f, 0.0810547f, 0.487305f, -0.808594f, - 0.212891f, 0.0878906f, -0.612305f, 0.263672f, 0.400391f, - -0.709961f, 0.380859f, -0.0839844f, -0.566406f, 0.466797f, - 0.445312f, -0.769531f, 0.636719f, -0.273438f, -0.648438f, - 0.34375f, 0.56543f, -0.829102f, 0.417969f, -0.272461f, - -0.746094f, 0.202148f, 0.421875f, -0.445312f, 0.229492f, - 0.178711f, -0.408203f, 0.477539f, 0.693359f, -0.675781f, - 0.145508f, 0.37207f, -0.576172f, 0.0449219f, 0.845703f, - -0.920898f, -0.0185547f, 0.487305f, -0.460938f, 0.0253906f, - 1.04785f, -0.87207f, 0.176758f, 0.356445f, -0.217773f, - 0.0332031f, 0.945312f, -0.556641f, -0.110352f, 0.725586f, - 0.0810547f, -0.0361328f, 1.11426f, -0.396484f, 0.00488281f, - 0.743164f, 0.27832f, 0.0175781f, 0.839844f, -0.0371094f, - -0.00878906f, 0.964844f, 0.547852f, 0.0224609f, 0.518555f, - 0.386719f, -0.0585938f, 1.11816f, 0.712891f, 0.19043f, - 0.523438f, 0.429688f, -0.179688f, 1.18164f, 0.40332f, - 0.241211f, 1.19043f, -0.0234375f, 0.119141f, 0.90918f, - -0.078125f, 0.250977f, 0.973633f, -0.277344f, 0.227539f, - 0.908203f, -0.232422f, 0.269531f, 0.807617f, -0.59668f, - 0.253906f, 0.398438f, -0.506836f, 0.255859f, 0.694336f, - -0.742188f, 0.345703f, 0.412109f, -0.576172f, 0.189453f, - 0.708984f, -0.808594f, 0.230469f, 0.242188f, -0.550781f, - 0.0693359f, 0.695312f, -0.856445f, -0.0253906f, 0.177734f, - -0.6875f, -0.00976562f, 0.731445f, -0.991211f, -0.03125f, - 0.0175781f, -0.805664f, -0.192383f, 0.827148f, -0.947266f, - 0.0820312f, 0.254883f, -0.504883f, -0.259766f, 0.87207f, - -0.693359f, -0.345703f, 0.639648f, -0.162109f, -0.443359f, - 1.05176f, -0.595703f, -0.496094f, 0.485352f, -0.0380859f, - -0.490234f, 0.763672f, -0.382812f, -0.634766f, 0.369141f, - 0.136719f, -0.650391f, 0.536133f, -0.126953f, -0.901367f, - 0.275391f, 0.155273f, -0.75293f, 0.476562f, -0.183594f, - -1.00488f, 0.206055f, -0.0908203f, -1.06836f, 0.3125f, - -0.183594f, -1.30762f, 0.37793f, -0.185547f, -0.885742f, - 0.496094f, -0.250977f, -1.14941f, 0.0517578f, -0.242188f, - -0.753906f, 0.395508f, -0.133789f, -1.10156f, 0.183594f, - -0.398438f, -0.767578f, 0.951172f, -0.359375f, -0.866211f, - 0.373047f, -0.0224609f, -0.0537109f, 0.921875f, -0.263672f, - -0.251953f, 0.455078f, 0.230469f, 0.485352f, 0.84082f, - 0.0351562f, 0.0810547f, 0.554688f, 0.186523f, 0.774414f, - 0.720703f, 0.381836f, 0.71875f, 0.495117f, 0.530273f, - 0.771484f, 0.90332f, 0.34668f, 0.897461f, 0.456055f, - 0.575195f, 0.560547f, 0.133789f, 0.62793f, 0.795898f, - 0.400391f, 0.594727f, 0.577148f, -0.142578f, 0.691406f, - 0.770508f, 0.12793f, 0.679688f, 0.751953f, -0.201172f, - 0.728516f, 0.805664f, -0.0175781f, 0.46875f, 0.655273f, - -0.608398f, 0.750977f, 0.540039f, -0.0166016f, 0.30957f, - 0.755859f, -0.563477f, 0.609375f, 0.763672f, -0.310547f, - 0.0791016f, 0.668945f, -0.575195f, 0.398438f, 0.767578f, - -0.47168f, -0.12793f, 0.631836f, -0.768555f, 0.293945f, - 0.760742f, -0.743164f, -0.311523f, 0.509766f, -0.755859f, - 0.15918f, 0.614258f, -0.832031f, -0.575195f, 0.448242f, - -0.771484f, -0.0605469f, 0.341797f, -0.652344f, -0.8125f, - 0.262695f, -0.205078f, -0.541992f, 0.337891f, -0.8125f, - -1.20996f, 0.179688f, -0.311523f, -0.682617f, 0.0556641f, - -0.944336f, -1.29102f, 0.09375f, 0.503906f, -0.87793f, - -0.0742188f, -0.805664f, -1.53613f, -0.107422f, 0.50293f, - -0.807617f, -0.423828f, 0.0888672f, -0.847656f, -0.342773f, - 0.719727f, -0.87793f, -0.336914f, 0.115234f, -0.500977f, - -0.487305f, 0.395508f, -0.398438f, -0.624023f, 0.3125f, - -0.0693359f, -0.605469f, 0.429688f, -0.283203f, -0.813477f, - 0.246094f, 0.0898438f, -0.764648f, 0.356445f, -0.106445f, - -1.05371f, 0.595703f, 0.251953f, -0.729492f, 0.336914f, - -0.0595703f, -1.06445f, 0.824219f, 0.320312f, -0.50293f, - 0.459961f, -0.161133f, -0.820312f, 0.516602f, 0.410156f, - -0.401367f, 0.407227f, -0.106445f, -0.740234f, 0.546875f, - 0.663086f, -0.170898f, 0.574219f, -0.419922f, -0.271484f, - -0.0273438f, 0.239258f, -0.0361328f, 0.80957f, -0.576172f, - 0.0664062f, 0.0332031f, 0.181641f, 0.245117f, 1.06641f, - -0.826172f, 0.30957f, -0.241211f, 0.03125f, 0.422852f, - 1.14648f, -0.916992f, 0.672852f, -0.242188f, 0.0234375f, - 0.425781f, 1.16895f, -1.08887f, 0.748047f, -0.384766f, - 0.102539f, 0.457031f, 0.992188f, -0.896484f, 0.65625f, - -0.144531f, 0.0332031f, 0.295898f, 0.8125f, -0.706055f, - 0.166016f, -0.237305f, 0.0996094f, 0.130859f, 0.723633f, - -0.769531f, -0.125f, -0.339844f, -0.277344f, -0.00390625f, - 1.2959f, -0.999023f, 0.0185547f, 0.0527344f, 0.270508f, - 0.104492f, 1.05469f, -1.0918f, 0.205078f, 0.00390625f, - 0.141602f, 0.000976562f, 1.15039f, -1.14844f, 0.0664062f, - -0.0566406f, 0.0732422f, 0.0302734f, 1.08398f, -1.04004f, - 0.124023f, -0.114258f, 0.19043f, 0.0263672f, 0.985352f, - -1.00293f, 0.0634766f, -0.0585938f, 0.257812f, -0.0527344f, - 0.96875f, -0.990234f, -0.0361328f, -0.179688f, 0.266602f, - -0.219727f, 0.882812f, -0.879883f, -0.289062f, -0.00292969f, - 0.351562f, -0.313477f, 0.826172f, -0.84668f, -0.322266f, - 0.337891f, 0.478516f, -0.426758f, 0.594727f, -0.621094f, - -0.435547f, 0.676758f, 0.47168f, -0.432617f, 0.333008f, - -0.338867f, -0.767578f, 0.419922f, 0.576172f, -0.673828f, - 0.321289f, -0.53125f, -0.96582f, 0.290039f, 0.426758f, - -0.526367f, 0.230469f, -0.508789f, -1.05859f, 0.195312f, - 0.493164f, -0.479492f, 0.78418f, -0.992188f, -0.453125f, - -0.185547f, 0.375977f, -0.291992f, 0.77832f, -0.884766f, - -0.361328f, 0.438477f, -0.118164f, -0.222656f, 0.923828f, - -0.796875f, 0.0234375f, -0.375f, 0.0332031f, -0.216797f, - 0.908203f, -0.984375f, -0.295898f, -0.384766f, 0.0234375f, - -0.305664f, 1.12695f, -1.04004f, -0.344727f, -0.136719f, - 0.119141f, -0.385742f, 1.06738f, -1.01855f, -0.245117f, - -0.106445f, -0.114258f, -0.365234f, 0.962891f, -0.923828f, - -0.430664f, -0.637695f, -0.347656f, -0.436523f, 0.702148f, - -0.547852f, -0.618164f, -0.447266f, -0.241211f, -0.462891f, - 0.729492f, -0.609375f, -0.578125f, -0.486328f, -0.0556641f, - -0.536133f, 0.50293f, -0.480469f, -0.526367f, -0.210938f, - -0.0585938f, -0.637695f, 0.723633f, -0.319336f, -0.348633f, - -0.00292969f, -0.305664f, -0.629883f, 0.431641f, 0.266602f, - -0.612305f, -0.260742f, 0.0166016f, -0.65332f, -0.272461f, - 0.800781f, -1.09863f, -0.166992f, -0.0859375f, -0.520508f, - -0.473633f, 0.586914f, -0.696289f, -0.682617f, -0.149414f, - 0.198242f, -0.805664f, 1.1377f, 0.444336f, -0.458984f, - -0.577148f, 0.522461f, -0.683594f, 1.25586f, 0.827148f, - -0.249023f, -0.851562f, 0.84668f, -0.448242f, 1.26953f, - 0.855469f, -0.155273f, -0.765625f, 1.0f, -0.337891f, - 0.973633f, 0.660156f, -0.0859375f, -0.476562f, 1.11035f, - -0.00976562f, 0.547852f, 0.958984f, -0.34082f, -0.504883f, - 0.853516f, 0.0664062f, 0.378906f, 0.758789f, -0.749023f, - -0.509766f, 0.739258f, 0.499023f, -0.144531f, 0.84668f, - -0.931641f, -0.329102f, 0.740234f, 0.791992f, -0.168945f, - 0.594727f, -0.435547f, -0.268555f, 0.336914f, 0.817383f, - -0.430664f, -0.0253906f, -0.735352f, -0.0683594f, 0.152344f, - 0.725586f, -0.68457f, -0.294922f, -1.25391f, -0.125f, - 0.0917969f, 0.907227f, -0.633789f, -0.28125f, -0.222656f, - 0.0f, 0.188477f, 1.06445f, -0.929688f, 0.144531f, - -0.139648f, -0.00390625f, -0.21582f, 1.21387f, -0.952148f, - -0.0253906f, -0.389648f, 0.148438f, -0.283203f, 1.14844f, - -0.890625f, -0.204102f, -0.222656f, -0.0332031f, -0.451172f, - 0.625f, -0.486328f, -0.716797f, -0.103516f, 0.265625f, - -0.667969f, 0.231445f, -0.385742f, -0.977539f, 0.111328f, - 0.222656f, -0.766602f, 0.300781f, -0.390625f, -1.07129f, - 0.230469f, 0.318359f, -0.787109f, 0.427734f, -0.512695f, - -0.886719f, 0.240234f, 0.260742f, -0.647461f, 0.566406f, - -0.686523f, -0.723633f, -0.198242f, 0.0722656f, -0.3125f, - 0.771484f, -0.725586f, -0.478516f, -0.176758f, -0.113281f, - -0.262695f, 0.78125f, -0.644531f, -0.210938f, -0.0126953f, - -0.317383f, 0.0673828f, 0.944336f, -0.764648f, 0.1875f, - -0.636719f, -0.401367f, 0.118164f, 0.982422f, -0.826172f, - 0.105469f, -1.0625f, -0.298828f, 0.0537109f, 0.949219f, - -0.788086f, 0.176758f, -0.611328f, -0.0322266f, 0.0439453f, - 0.885742f, -0.730469f, 0.301758f, -0.463867f, -0.144531f, - -0.180664f, 1.08398f, -0.97168f, -0.470703f, 0.128906f, - 0.0146484f, -0.112305f, 0.889648f, -0.946289f, -0.165039f, - -1.34277f, -0.258789f, -0.211914f, 0.962891f, -0.844727f, - -0.588867f, 0.144531f, -0.228516f, -0.207031f, 0.974609f, - -0.848633f, -0.0273438f, -0.570312f, -0.228516f, 0.00195312f, - 1.03125f, -0.977539f, -0.0605469f, -0.733398f, -0.0908203f, - 0.0996094f, 0.856445f, -0.854492f, -0.000976562f, -0.458008f, - -0.135742f, 0.222656f, 1.34082f, -1.13574f, 0.639648f, - 0.015625f, -0.234375f, 0.136719f, 0.835938f, -0.822266f, - -0.114258f, -0.673828f, -0.186523f, 0.169922f, 0.925781f, - -0.839844f, 0.175781f, -0.394531f, 0.224609f, -0.0458984f, - 0.94043f, -0.964844f, -0.0556641f, -0.15332f, 0.163086f, - -0.0175781f, 0.944336f, -0.951172f, -0.0478516f, -0.302734f, - 0.117188f, -0.00683594f, 0.973633f, -0.970703f, -0.0810547f, - -0.301758f, 0.09375f, -0.000976562f, 1.01953f, -0.978516f, - 0.0292969f, -0.293945f, 0.0683594f, -0.00683594f, 1.0127f, - -0.966797f, -0.0175781f, -0.314453f, 0.181641f, 0.0126953f, - 0.982422f, -0.990234f, 0.03125f, -0.194336f, 0.155273f, - -0.00292969f, 0.962891f, -0.932617f, -0.00390625f, -0.0976562f, - 0.144531f, -0.0205078f, 0.913086f, -0.914062f, -0.0908203f, - -0.296875f, 0.166992f, -0.015625f, 0.930664f, -0.950195f, - -0.0888672f, -0.28418f, 0.196289f, -0.0107422f, 0.953125f, - -0.960938f, -0.0273438f, -0.195312f, 0.125f, 0.0126953f, - 0.986328f, -0.951172f, 0.0634766f, -0.231445f, 0.162109f, - -0.0136719f, 0.981445f, -0.974609f, -0.0449219f, -0.0761719f, - 0.186523f, -0.015625f, 0.950195f, -0.962891f, -0.0576172f, - -0.162109f, 0.154297f, -0.0292969f, 0.970703f, -0.973633f, - -0.0136719f, -0.394531f, 0.102539f, -0.00878906f, 0.970703f, - -0.915039f, 0.0546875f, -0.313477f, 0.110352f, -0.0234375f, - 0.947266f, -0.922852f, -0.139648f, -0.181641f, 0.12207f, - 0.0625f, 0.780273f, -0.899414f, -0.84375f, -0.0888672f, - -0.318359f, 1.00781f, 0.888672f, 0.27832f, 0.0195312f, - -1.08594f, 0.137695f, 0.56543f, 1.12891f, -0.235352f, - 1.65039f, -0.0820312f, 0.100586f, 0.987305f, 0.261719f, - -0.0615234f, 1.32227f, 0.669922f, 0.0f, 1.04102f, - 0.231445f, -0.174805f, 1.11426f, -0.261719f, -0.0527344f, - 0.958008f, 0.332031f, -0.28418f, 1.26953f, -0.612305f, - 0.208984f, 0.964844f, 1.15625f, -0.486328f, 2.0f, - -0.760742f, 0.0458984f, 1.44629f, 1.21289f, 0.924805f, - 1.1875f, -0.259766f, 0.114258f, 0.210938f, 0.486328f, - -0.422852f, -0.984375f, 1.08789f, 0.453125f, -0.229492f, - 0.457031f, -0.682617f, -0.500977f, 0.210938f, 0.391602f, - -0.303711f, 0.725586f, -0.80957f, -0.391602f, 0.0976562f, - 0.958984f, 0.0185547f, 1.69922f, -1.36035f, 1.98242f, - -0.392578f, -0.461914f, -0.37793f, -0.0712891f, 0.928711f, - -1.60254f, 0.133789f, -0.0419922f, -1.12109f, -0.201172f, - 0.0732422f, -1.99902f, 0.629883f, -0.174805f, -0.894531f, - 0.0742188f, -0.147461f, -1.23633f, -0.259766f, 0.0410156f, - -1.00879f, -0.0166016f, -0.0205078f, -1.99902f, 0.267578f, - -0.0664062f, -0.164062f, 0.511719f, 0.825195f, -1.21191f, - -0.515625f, 0.46875f, 0.0898438f, 1.09766f, -0.144531f, - 1.59375f, 0.166016f, 0.428711f, 0.294922f, 0.8125f, - -0.770508f, 0.535156f, 0.280273f, 0.231445f, 0.504883f, - 0.864258f, -0.884766f, 0.524414f, -0.183594f, 0.0820312f, - 0.713867f, 0.405273f, -0.520508f, -0.326172f, 0.0126953f, - -0.310547f, 1.38086f, 0.831055f, 0.380859f, 1.3125f, - -1.60645f, 0.151367f, 1.01953f, 0.580078f, -0.0283203f, - 2.0f, 1.03516f, -0.0634766f, 1.03418f, 0.332031f, - -0.0859375f, 1.32129f, -0.234375f, 0.0917969f, 1.49219f, - 0.30957f, -0.118164f, 1.76953f, -0.717773f, 0.174805f, - 1.59863f, 0.0947266f, 1.1875f, 0.429688f, 0.442383f, - 0.00976562f, 0.435547f, 0.345703f, -0.114258f, 0.238281f, - -0.689453f, 0.30957f, 0.0732422f, 0.606445f, -0.650391f, - -0.0947266f, -0.03125f, 0.183594f, -0.144531f, 0.746094f, - -0.793945f, -0.574219f, -0.0742188f, 0.196289f, -0.199219f, - 1.13867f, -1.11816f, -0.227539f, -0.462891f, 0.0517578f, - -0.0341797f, 1.18945f, -1.1084f, -0.0283203f, -0.342773f, - 0.174805f, -0.0078125f, 1.05176f, -1.03906f, 0.0253906f, - -0.375977f, -0.169922f, 0.00292969f, 0.837891f, -0.716797f, - -0.0205078f, -0.373047f, 0.293945f, 0.0175781f, 0.833984f, - -0.916016f, -0.0996094f, -0.149414f, 0.200195f, -0.00195312f, - 0.865234f, -0.916016f, -0.0117188f, -0.390625f, 0.290039f, - 0.0234375f, 0.985352f, -0.987305f, 0.0439453f, -0.214844f, - 0.0917969f, 0.0615234f, 1.02832f, -1.00684f, 0.152344f, - -0.452148f, 0.0615234f, -0.00585938f, 1.02148f, -0.976562f, - -0.0927734f, -0.286133f, 0.189453f, -0.0644531f, 1.02539f, - -1.02246f, 0.0166016f, -0.243164f, 0.109375f, -0.09375f, - 0.981445f, -0.931641f, 0.0458984f, -0.460938f, 0.0537109f, - -0.0429688f, 1.05859f, -0.850586f, 0.0771484f, -0.0507812f, - 0.108398f, -0.177734f, 0.779297f, -0.74707f, -0.378906f, - -0.413086f, -0.205078f, -0.0488281f, 0.946289f, -0.760742f, - -0.180664f, -0.228516f, -0.208008f, -0.0615234f, 1.05371f, - -0.953125f, -0.34668f, -1.16797f, -0.0322266f, -0.276367f, - 1.06641f, -0.863281f, -0.0244141f, -0.290039f, -0.0429688f, - 0.0439453f, 1.28223f, -1.06348f, 0.181641f, -0.514648f, - -0.0214844f, 0.0f, 0.861328f, -0.738281f, -0.0449219f, - 0.0722656f, 0.125f, 0.193359f, 1.15039f, -1.0957f, - 0.225586f, -0.137695f, 0.12207f, -0.0400391f, 0.732422f, - -0.818359f, -0.40918f, -0.672852f, -0.425781f, 0.839844f, - 0.856445f, 0.198242f, -0.363281f, 0.206055f, -0.214844f, - 1.20215f, 0.943359f, 0.0195312f, 2.0f, 0.874023f, - 0.0839844f, 0.827148f, 0.587891f, -0.384766f, 1.57715f, - 0.108398f, -0.116211f, 0.952148f, 0.246094f, -0.336914f, - 0.463867f, -0.740234f, 0.0185547f, 0.950195f, 0.55957f, - -0.442383f, 1.09668f, 0.0585938f, 0.132812f, 1.37695f, - 2.0f, -0.59375f, 2.0f, -0.676758f, -0.199219f, - -0.0205078f, 0.268555f, -0.5f, -1.94629f, 1.2832f, - 0.0078125f, -0.201172f, 0.674805f, -0.708984f, -0.490234f, - -0.515625f, 0.0439453f, -0.0830078f, 1.14355f, -1.01953f, - -0.0224609f, -0.282227f, 0.0214844f, -0.078125f, 1.09668f, - -0.961914f, 0.0253906f, -0.56543f, 0.30957f, 0.964844f, - 1.56836f, -0.272461f, 1.91309f, -0.53418f, -0.695312f, - -0.878906f, -0.0146484f, 0.277344f, -1.6416f, 0.0244141f, - 0.0898438f, -0.785156f, 0.229492f, -0.259766f, -1.06055f, - -0.241211f, 0.0224609f, -0.769531f, 0.748047f, -0.680664f, - -0.629883f, -0.549805f, -0.195312f, -0.796875f, -0.399414f, - 0.0859375f, -1.99902f, 0.24707f, 0.208984f, 0.563477f, - 1.91797f, 0.0585938f, 2.0f, -0.990234f, 0.327148f, - -0.0917969f, 1.16797f, -0.94043f, 0.623047f, -1.1748f, - -0.0205078f, -0.0449219f, 0.883789f, -0.905273f, -0.370117f, - -0.601562f, 0.0332031f, -0.0527344f, 0.928711f, -0.833984f, - -0.180664f, -0.267578f, 0.0351562f, -0.0175781f, 0.998047f, - -0.922852f, -0.000976562f, -0.371094f, 0.0341797f, -0.0166016f, - 0.977539f, -0.900391f, -0.00292969f, -0.37207f, 0.0449219f, - -0.0439453f, 0.989258f, -0.904297f, -0.0576172f, -0.37207f, - 0.270508f, -0.368164f, 0.0576172f, -0.607422f, -1.95508f, - -0.182617f, -0.390625f, 1.62598f, 1.52734f, 1.2793f, - 2.0f, -1.99902f, 0.226562f, 1.01465f, 0.669922f, - -0.373047f, 1.71484f, 1.99707f, -0.0654297f, 1.00391f, - 0.330078f, -0.432617f, 0.704102f, -0.96875f, 0.0800781f, - 0.964844f, 0.702148f, -0.5625f, 1.39746f, -0.203125f, - 0.255859f, 1.74512f, 1.52539f, 0.417969f, 2.0f, - -0.0976562f, -0.482422f, 0.09375f, 0.151367f, -0.328125f, - -1.88867f, -0.0595703f, 0.117188f, 0.0751953f, 0.870117f, - -0.870117f, 0.046875f, -0.280273f, 0.125f, 0.124023f, - 1.0791f, -0.964844f, 0.338867f, -0.0791016f, 0.0751953f, - 0.12207f, 0.920898f, -0.888672f, 0.0273438f, -0.250977f, - 0.00488281f, 0.165039f, 1.01074f, -0.944336f, 0.137695f, - -0.387695f, -0.142578f, 0.238281f, 1.77246f, -1.42285f, - 0.90625f, -0.856445f, 0.0556641f, -0.219727f, -0.785156f, - 1.47266f, -1.99902f, 1.27246f, -0.132812f, -0.746094f, - 0.172852f, -0.0830078f, -1.3584f, 0.638672f, 0.0175781f, - -0.786133f, 0.754883f, -0.729492f, -0.808594f, -0.291992f, - 0.170898f, -0.746094f, 0.623047f, -0.667969f, -0.743164f, - -0.241211f, 0.0693359f, -0.725586f, 0.495117f, -0.545898f, - -0.969727f, -0.131836f, 0.0234375f, -0.52832f, 0.280273f, - -0.327148f, -1.0498f, -0.210938f, -0.253906f, 0.234375f, - 0.661133f, -0.0332031f, -0.708008f, -0.458984f, 0.31543f, - 0.480469f, 1.59082f, -1.22266f, 1.41602f, -0.270508f, - 0.263672f, 0.318359f, 1.21289f, -1.12207f, 0.853516f, - -0.272461f, 0.158203f, 1.84766f, 2.0f, 0.341797f, - 2.0f, -0.788086f, -0.264648f, -0.326172f, -1.25977f, - 0.842773f, -1.99902f, -0.947266f, 0.249023f, -0.642578f, - 0.745117f, -0.744141f, -0.404297f, -0.266602f, 0.0898438f, - -0.568359f, 0.501953f, -0.494141f, -0.858398f, 0.0722656f, - -0.543945f, 1.16895f, 1.12012f, 1.47461f, -1.12988f, - -0.27832f, 0.53125f, 0.875f, 0.845703f, -0.318359f, - 1.68555f, 1.29199f, -0.00195312f, 0.861328f, 0.601562f, - -0.519531f, 1.16211f, -1.05957f, 0.0507812f, 0.904297f, - 0.625977f, -0.525391f, 1.16797f, -0.163086f, 0.125977f, - 1.99902f, 2.0f, 2.0f, 2.0f, -0.00195312f, - -1.11719f, -0.3125f, -0.320312f, 0.585938f, -1.99902f, - 0.647461f, 0.198242f, -0.538086f, 0.993164f, -0.897461f, - -0.227539f, -0.354492f, 0.0976562f, -0.416016f, 0.623047f, - -0.682617f, -0.832031f, -0.223633f, -0.160156f, 0.0751953f, - -0.791992f, 1.13379f, -1.99902f, -0.755859f, 0.669922f, - 1.02637f, 1.26758f, -0.293945f, 2.0f, 1.93457f, - -0.0126953f, 0.773438f, 0.475586f, -0.59375f, 0.329102f, - -0.588867f, 0.113281f, 0.740234f, 0.749023f, -0.716797f, - 0.941406f, -0.0878906f, 0.71875f, 1.8125f, 2.0f, - -0.289062f, 2.0f, -1.01074f, 0.0117188f, -0.183594f, - -0.969727f, 0.893555f, -1.99902f, 0.333008f, 0.188477f, - -0.643555f, 0.504883f, -0.511719f, -0.804688f, -0.957031f, - 0.0546875f, -0.305664f, -0.0449219f, -0.145508f, -1.875f, - 0.0996094f, -0.155273f, 1.59668f, 1.5293f, 1.46973f, - 2.0f, -1.9834f, 0.375f, 1.20508f, 0.736328f, - -0.399414f, 2.0f, 2.0f, 0.123047f, 0.834961f, - 1.04004f, -0.808594f, 1.31934f, -0.634766f, 0.548828f, - 0.129883f, -1.64746f, 2.0f, -1.99902f, 0.819336f, - 0.0273438f, -0.254883f, 0.722656f, -0.691406f, -0.464844f, - -1.05566f, 0.0634766f, -0.206055f, 1.02148f, -0.90332f, - 0.0595703f, -0.03125f, 0.129883f, -0.177734f, 0.697266f, - -0.713867f, -0.351562f, -0.169922f, -0.119141f, -0.172852f, - 1.01855f, -0.989258f, -0.12793f, -0.670898f, -0.146484f, - -0.261719f, 1.16602f, -1.05664f, -0.302734f, -0.25293f, - -0.0458984f, -0.198242f, 0.90625f, -0.876953f, -0.144531f, - -0.424805f, -0.151367f, -0.147461f, 0.926758f, -0.835938f, - -0.191406f, -0.326172f, -0.128906f, -0.216797f, 0.910156f, - -0.851562f, -0.291992f, -0.549805f, -0.0517578f, -0.0869141f, - 1.07715f, -0.977539f, -0.0361328f, -0.418945f, -0.148438f, - -0.133789f, 0.907227f, -0.836914f, -0.213867f, -0.768555f, - -0.0664062f, 0.182617f, 1.0498f, -0.915039f, 0.400391f, - -0.523438f, 0.015625f, 0.0f, 1.13184f, -1.09961f, - -0.244141f, -0.330078f, -0.115234f, 0.0166016f, 0.944336f, - -0.868164f, -0.430664f, -0.246094f, -0.0185547f, -0.00976562f, - 0.819336f, -0.822266f, -0.380859f, -1.1709f, 0.0605469f, - -0.0498047f, 0.777344f, -0.703125f, 0.0800781f, -0.451172f, - 0.304688f, 0.0517578f, 0.825195f, -0.771484f, 0.145508f, - 0.495117f, -0.0888672f, -0.243164f, 1.48145f, -1.22168f, - 0.0615234f, -0.192383f, -0.0537109f, 0.0195312f, 1.21582f, - -1.06836f, 0.175781f, -0.394531f, 0.237305f, -0.0126953f, - 0.800781f, -0.920898f, -0.12207f, -0.391602f, -0.0917969f, - -0.0791016f, 1.08008f, -1.03613f, -0.0654297f, -0.423828f, - 0.0478516f, -0.0253906f, 0.873047f, -0.884766f, -0.0722656f, - -0.579102f, 0.0136719f, -0.0917969f, 0.954102f, -0.922852f, - -0.172852f, -0.244141f, 0.0f, -0.141602f, 0.929688f, - -0.894531f, -0.179688f, -0.291992f, 0.0283203f, -0.0947266f, - 0.961914f, -0.926758f, -0.135742f, -0.329102f, 0.0576172f, - -0.0351562f, 0.999023f, -0.958984f, -0.0498047f, -0.248047f, - 0.0869141f, -0.078125f, 1.01074f, -0.954102f, 0.00976562f, - -0.217773f, 0.0986328f, -0.0556641f, 0.916992f, -0.914062f, - -0.136719f, -0.219727f, 0.0488281f, -0.139648f, 0.985352f, - -0.952148f, -0.152344f, -0.286133f, 0.0166016f, -0.0917969f, - 1.0459f, -0.972656f, -0.0605469f, -0.228516f, 0.0507812f, - -0.0810547f, 0.956055f, -0.9375f, -0.18457f, -0.275391f, - 0.0703125f, -0.0986328f, 0.948242f, -0.928711f, -0.162109f, - -0.333008f}; + -0.166016f, -0.00488281f, 0.924805f, -0.770508f, -0.0488281f, + -0.510742f, -0.199219f, -0.0078125f, 0.953125f, -0.782227f, + -0.0244141f, -0.652344f, -0.177734f, -0.0136719f, 0.936523f, + -0.772461f, -0.0527344f, -0.59375f, -0.176758f, -0.00878906f, + 0.9375f, -0.777344f, -0.0419922f, -0.637695f, -0.165039f, + -0.00878906f, 0.942383f, -0.782227f, -0.046875f, -0.613281f, + -0.180664f, -0.00976562f, 0.943359f, -0.777344f, -0.0419922f, + -0.601562f, -0.189453f, -0.00488281f, 0.943359f, -0.776367f, + -0.0263672f, -0.613281f, -0.166992f, -0.00488281f, 0.935547f, + -0.78125f, -0.0380859f, -0.609375f, -0.176758f, -0.00878906f, + 0.947266f, -0.790039f, -0.0576172f, -0.585938f, -0.173828f, + -0.0126953f, 0.93457f, -0.780273f, -0.0654297f, -0.666016f, + -0.169922f, -0.00195312f, 0.928711f, -0.775391f, -0.0351562f, + -0.561523f, -0.193359f, 0.0f, 0.941406f, -0.795898f, + -0.0478516f, -0.640625f, -0.162109f, -0.00585938f, 0.917969f, + -0.768555f, -0.0146484f, -0.685547f, -0.166992f, -0.0136719f, + 0.921875f, -0.755859f, -0.0166016f, -0.425781f, -0.175781f, + -0.0810547f, 1.00098f, -0.802734f, -0.117188f, -0.585938f, + -0.210938f, 0.0214844f, 0.881836f, -0.750977f, -0.0302734f, + -0.677734f, -0.285156f, 0.00976562f, 0.967773f, -0.763672f, + -0.0283203f, -0.850586f, -0.222656f, -0.0136719f, 0.943359f, + -0.763672f, -0.0507812f, -0.640625f, -0.236328f, 0.0859375f, + 0.892578f, -0.742188f, 0.0302734f, -0.484375f, -0.269531f, + 0.0263672f, 0.913086f, -0.714844f, -0.00585938f, -0.745117f, + -0.275391f, 0.0927734f, 0.977539f, -0.776367f, -0.078125f, + -0.750977f, -0.155273f, -0.0341797f, 1.2334f, -1.06445f, + -0.0478516f, -0.823242f, -0.196289f, 0.046875f, 1.19141f, + -1.00391f, -0.140625f, -0.541016f, 0.0917969f, 0.21582f, + 0.717773f, -0.764648f, -0.0341797f, -0.607422f, -0.0351562f, + 0.0888672f, 0.207031f, -0.214844f, -0.18457f, -0.0664062f, + -0.0898438f, 0.0556641f, 0.418945f, -0.232422f, 0.43457f, + 0.0361328f, 0.143555f, 0.376953f, 1.23633f, -1.09082f, + 0.529297f, 0.0507812f, 0.205078f, 0.438477f, 1.66602f, + -1.59668f, 0.325195f, -1.20996f, -0.0791016f, 0.404297f, + 1.50977f, -1.40918f, 0.31543f, -1.30273f, -0.0654297f, + 0.141602f, 0.699219f, -0.589844f, 0.0732422f, -0.27832f, + 0.00488281f, 0.00683594f, 0.0566406f, -0.0410156f, -0.0292969f, + -0.0234375f, -0.0488281f, -0.00195312f, -0.0292969f, 0.0849609f, + -0.139648f, 0.0585938f, 0.677734f, 0.667969f, 1.36523f, + -1.11816f, 0.412109f, 0.844727f, 0.142578f, 0.790039f, + 1.73145f, -1.68066f, 0.464844f, -1.29492f, -0.0800781f, + 0.803711f, 0.879883f, -0.765625f, -0.0400391f, -0.616211f, + -0.170898f, 0.879883f, 0.510742f, 0.158203f, 0.381836f, + -0.270508f, -0.0693359f, 0.651367f, 0.431641f, 0.104492f, + 0.991211f, -0.0634766f, -0.0478516f, 0.750977f, 0.283203f, + -0.0332031f, 1.52051f, -0.00195312f, -0.201172f, 1.08984f, + 0.173828f, 0.0849609f, 1.44141f, -0.214844f, -0.0107422f, + 1.29785f, 0.520508f, 0.00488281f, 1.73047f, -0.523438f, + 0.136719f, 1.42188f, 0.987305f, 0.0527344f, 1.74707f, + -0.525391f, 0.34668f, 0.469727f, 0.428711f, 0.114258f, + -0.788086f, 0.177734f, 0.400391f, -0.106445f, 0.328125f, + -0.566406f, -0.948242f, 0.670898f, 0.467773f, -0.21875f, + 0.55957f, -0.767578f, -0.232422f, 0.195312f, 0.625f, + -0.271484f, 0.865234f, -0.765625f, 0.299805f, 0.0703125f, + 0.378906f, -0.526367f, 0.548828f, -0.231445f, -0.569336f, + 0.455078f, 0.303711f, -0.866211f, -0.485352f, 0.566406f, + -1.60547f, 0.481445f, 0.183594f, -0.782227f, -0.260742f, + 0.243164f, -1.41504f, 0.373047f, 0.172852f, -0.935547f, + -0.412109f, 0.133789f, -1.69727f, 0.178711f, 0.407227f, + -0.952148f, -0.227539f, 0.0751953f, -1.67188f, 0.339844f, + 0.498047f, -0.795898f, 0.209961f, 0.177734f, -1.3916f, + 0.458984f, 0.295898f, 0.0390625f, 0.697266f, 0.258789f, + -0.0703125f, -0.131836f, 0.56543f, 0.250977f, 0.913086f, + -0.353516f, 0.90332f, 0.191406f, 0.708008f, 0.352539f, + 0.853516f, -0.839844f, 0.955078f, 0.636719f, 0.657227f, + 0.389648f, 0.620117f, -0.725586f, 0.43457f, 0.485352f, + 0.424805f, 0.479492f, 0.287109f, -0.505859f, -0.209961f, + 0.0927734f, 0.21582f, 0.709961f, 0.492188f, -0.413086f, + -0.0869141f, 0.0673828f, -0.119141f, 1.20508f, 0.392578f, + 0.229492f, 0.927734f, -0.297852f, 0.142578f, 1.0293f, + 0.430664f, 0.0449219f, 1.71875f, -0.0283203f, 0.0107422f, + 1.18164f, 0.0517578f, 0.0751953f, 1.80273f, -0.0693359f, + -0.19043f, 1.1748f, 0.236328f, 0.0839844f, 1.78711f, + -0.472656f, -0.270508f, 1.10254f, 0.964844f, 0.118164f, + 1.75684f, -0.901367f, -0.211914f, 1.11133f, 0.65625f, + 0.308594f, 0.142578f, 0.396484f, 0.239258f, 0.0800781f, + 0.973633f, -0.824219f, -0.25293f, 0.485352f, 0.351562f, + -0.0771484f, 1.08984f, -0.632812f, 0.240234f, -0.258789f, + 0.436523f, -0.514648f, 0.491211f, 0.0664062f, -0.244141f, + -0.148438f, -0.171875f, -0.477539f, -0.459961f, 1.1084f, + -0.822266f, -0.114258f, -0.192383f, -0.608398f, -0.771484f, + 1.11133f, -1.25488f, 1.01953f, -0.0839844f, -0.620117f, + -0.794922f, 0.660156f, -0.876953f, 0.0957031f, -0.242188f, + -0.711914f, -0.55957f, 0.736328f, -0.649414f, -0.0263672f, + -0.258789f, -0.498047f, -0.973633f, 0.957031f, -0.660156f, + 0.186523f, -0.262695f, -0.595703f, -0.787109f, 0.893555f, + -0.429688f, -0.0234375f, -0.254883f, -0.449219f, -0.783203f, + 0.90918f, 0.106445f, -0.161133f, -0.287109f, -0.0800781f, + -0.729492f, 0.933594f, -0.126953f, -0.0742188f, -0.550781f, + -0.271484f, -0.989258f, 1.00098f, -0.879883f, 0.0234375f, + -0.543945f, -0.50293f, -1.18945f, 1.24023f, -1.33398f, + 0.325195f, -0.262695f, -0.307617f, -0.912109f, 1.39062f, + -1.06055f, 0.0107422f, -0.00292969f, -0.573242f, -0.4375f, + 1.15625f, -0.651367f, -0.310547f, 0.188477f, -0.730469f, + -0.121094f, 0.611328f, -0.779297f, 0.335938f, 0.731445f, + -0.475586f, -0.00390625f, 0.100586f, -0.693359f, 0.254883f, + 0.813477f, -0.345703f, 0.420898f, -0.400391f, -0.539062f, + 0.365234f, 0.720703f, 0.0214844f, 0.673828f, -0.370117f, + 0.0585938f, 0.499023f, 0.523438f, 0.198242f, 0.759766f, + -0.544922f, 0.543945f, 0.226562f, 0.473633f, 0.34082f, + 0.595703f, -0.682617f, 0.292969f, -0.217773f, 0.0742188f, + 0.553711f, 0.762695f, -0.504883f, 0.292969f, 0.0751953f, + 0.0126953f, 0.427734f, 0.769531f, -0.265625f, 0.552734f, + -0.0175781f, -0.30957f, 0.253906f, 0.322266f, 0.117188f, + 0.263672f, -0.706055f, -0.991211f, 0.266602f, 0.501953f, + 0.00585938f, 0.0341797f, -1.24805f, -1.21777f, 0.488281f, + 0.461914f, 0.0986328f, 0.362305f, -1.1709f, -1.17188f, + 0.50293f, 0.458984f, 0.108398f, 0.460938f, -1.52148f, + -1.27051f, 0.379883f, 0.90625f, 0.0400391f, 0.524414f, + -1.77832f, -0.951172f, 0.397461f, 0.589844f, 0.520508f, + 0.439453f, -1.99902f, -0.643555f, 0.313477f, 0.766602f, + 0.450195f, 0.286133f, -1.29883f, -0.375f, 0.225586f, + 0.697266f, 0.299805f, 0.108398f, -0.976562f, 0.09375f, + 0.0361328f, 0.851562f, -0.210938f, 0.0615234f, -0.0898438f, + 0.59082f, 0.313477f, 0.756836f, -0.731445f, 0.296875f, + -0.0927734f, 0.552734f, 0.223633f, 0.558594f, -0.806641f, + 0.00195312f, 0.03125f, 0.728516f, 0.276367f, 0.744141f, + -0.994141f, 0.197266f, -0.425781f, 0.316406f, 0.046875f, + 0.601562f, -0.633789f, -0.0576172f, -0.320312f, 0.786133f, + 0.0986328f, 1.0f, -1.19922f, 0.34668f, -0.546875f, + 0.481445f, 0.00390625f, 0.876953f, -1.04297f, -0.0507812f, + -0.775391f, 0.333984f, -0.0175781f, 1.02539f, -1.07129f, + -0.12207f, -0.212891f, 0.28125f, 0.00488281f, 0.998047f, + -0.97168f, 0.178711f, -0.444336f, 0.178711f, 0.0136719f, + 0.896484f, -0.9375f, 0.0117188f, -0.291992f, 0.132812f, + 0.0234375f, 0.975586f, -0.943359f, -0.0078125f, 0.0546875f, + 0.244141f, -0.0771484f, 1.05469f, -1.02148f, 0.313477f, + -0.349609f, 0.148438f, 0.0839844f, 0.619141f, -0.75f, + -0.589844f, -0.0488281f, 0.0263672f, -0.176758f, 0.697266f, + -0.691406f, -0.625977f, -0.417969f, 0.408203f, 0.265625f, + 1.01953f, -1.09863f, 0.106445f, 0.0117188f, 0.157227f, + 0.424805f, 1.07422f, -0.816406f, 0.498047f, 0.0996094f, + 0.00585938f, 0.53418f, 0.771484f, -0.610352f, 0.744141f, + 0.0195312f, 0.0478516f, 0.552734f, 0.734375f, -0.72168f, + 0.518555f, -0.144531f, -0.0361328f, 0.513672f, 0.822266f, + -0.736328f, 0.65918f, -0.179688f, -0.104492f, 0.425781f, + 1.00098f, -0.885742f, 0.739258f, -0.681641f, -0.443359f, + 0.375977f, 0.884766f, -0.724609f, 0.110352f, -0.289062f, + -0.414062f, 0.494141f, 0.53125f, -0.422852f, 0.216797f, + -0.786133f, -0.569336f, 0.749023f, 0.75293f, -0.529297f, + 0.730469f, -0.911133f, -0.68457f, 0.611328f, 0.959961f, + -0.623047f, 1.06543f, -0.499023f, -0.392578f, 0.761719f, + 0.43457f, -0.357422f, 0.631836f, -0.746094f, -0.370117f, + 0.777344f, 0.379883f, -0.225586f, 0.677734f, -0.478516f, + -0.358398f, 0.788086f, 0.569336f, -0.34082f, 0.939453f, + -0.238281f, -0.230469f, 0.861328f, 0.448242f, -0.219727f, + 0.966797f, -0.310547f, -0.242188f, 0.863281f, 0.369141f, + -0.0859375f, 0.87207f, -0.400391f, -0.385742f, 0.841797f, + 0.401367f, -0.0634766f, 0.912109f, -0.458008f, 0.0107422f, + 0.753906f, 0.758789f, -0.675781f, 0.765625f, -0.342773f, + -0.123047f, 0.855469f, 0.599609f, -0.490234f, 0.963867f, + -0.118164f, -0.0117188f, 0.889648f, 0.637695f, -0.607422f, + 0.803711f, -0.597656f, -0.242188f, 0.855469f, 0.550781f, + -0.607422f, 0.576172f, -0.759766f, -0.220703f, 0.832031f, + 0.477539f, -0.491211f, 0.470703f, -0.575195f, -0.0869141f, + 1.01074f, 0.371094f, -0.25293f, 0.678711f, -0.316406f, + -0.197266f, 1.04785f, 0.386719f, -0.046875f, 0.967773f, + -0.761719f, -0.282227f, 0.956055f, 0.270508f, 0.230469f, + 1.39746f, -0.864258f, -0.417969f, 0.761719f, 0.457031f, + 0.0263672f, 1.38379f, -0.714844f, -0.288086f, 0.535156f, + 0.689453f, -0.507812f, 0.68457f, -0.433594f, -0.0908203f, + 0.210938f, 0.825195f, -0.649414f, 0.326172f, -0.793945f, + 0.0527344f, 0.0546875f, 0.911133f, -0.616211f, -0.0214844f, + -0.00195312f, -0.229492f, -0.0253906f, 0.775391f, -0.611328f, + -0.360352f, 0.0371094f, 0.161133f, 0.0253906f, 0.625f, + -0.624023f, -0.344727f, -0.146484f, 0.371094f, 0.255859f, + 1.41797f, -1.27832f, 0.614258f, 0.764648f, 0.869141f, + 0.426758f, 0.758789f, -1.04395f, 0.401367f, 0.263672f, + 0.563477f, 0.450195f, 0.774414f, -0.908203f, 0.384766f, + -0.262695f, 0.664062f, 0.509766f, 0.798828f, -0.757812f, + 0.770508f, 0.491211f, 0.62207f, 0.487305f, 0.496094f, + -0.530273f, 0.375977f, 1.18652f, 0.736328f, 0.386719f, + 0.470703f, -0.647461f, 0.379883f, 0.47168f, 0.834961f, + 0.289062f, 0.475586f, -0.654297f, 0.448242f, 0.395508f, + 0.930664f, 0.0830078f, 0.157227f, -0.304688f, 0.0634766f, + 1.30078f, 0.905273f, -0.102539f, 0.0576172f, -0.303711f, + -0.334961f, 0.885742f, 0.709961f, -0.143555f, 0.0390625f, + -0.18457f, -0.498047f, 1.1084f, 0.744141f, 0.0283203f, + 0.383789f, -0.371094f, -0.126953f, 1.17285f, 0.506836f, + 0.109375f, 0.680664f, -0.244141f, -0.0830078f, 0.577148f, + 0.12793f, 0.25f, 0.972656f, -0.328125f, 0.34082f, + -0.234375f, -0.327148f, 0.470703f, 0.987305f, -0.535156f, + 0.730469f, -0.957031f, -0.509766f, 0.602539f, 0.938477f, + -0.640625f, 0.836914f, -1.13672f, -0.56543f, 0.450195f, + 0.737305f, -0.449219f, 0.649414f, -1.08105f, -0.364258f, + 0.338867f, 0.667969f, -0.533203f, 0.654297f, -1.0918f, + -0.505859f, 0.422852f, 0.745117f, -0.443359f, 0.319336f, + -0.753906f, -0.563477f, 0.374023f, 0.640625f, -0.435547f, + 0.220703f, -0.868164f, -0.701172f, 0.317383f, 0.702148f, + -0.527344f, 0.138672f, -0.848633f, -0.431641f, 0.220703f, + 0.329102f, -0.25293f, -0.232422f, -0.875977f, -0.442383f, + 0.550781f, 0.783203f, -0.441406f, 0.160156f, -0.107422f, + 0.0683594f, 0.317383f, 1.12012f, -1.02344f, 0.322266f, + -0.469727f, -0.151367f, 0.43457f, 0.65625f, -0.745117f, + 0.216797f, -1.03223f, -0.200195f, 0.240234f, 1.11035f, + -0.90332f, 0.239258f, 0.0429688f, -0.228516f, 0.00390625f, + 0.836914f, -0.770508f, -0.280273f, -0.18457f, 0.0117188f, + 0.214844f, 0.767578f, -0.774414f, -0.0703125f, -0.954102f, + -0.508789f, -0.046875f, 1.00391f, -0.930664f, 0.0292969f, + 0.407227f, -0.519531f, 0.0361328f, 0.753906f, -0.777344f, + -0.0214844f, 0.741211f, -0.27832f, -0.0332031f, 1.15625f, + -0.862305f, -0.115234f, 0.821289f, -0.598633f, 0.00488281f, + 0.929688f, -1.01172f, -0.0996094f, 0.351562f, -0.524414f, + 0.118164f, 1.1709f, -0.938477f, 0.00878906f, 0.948242f, + -0.475586f, 0.443359f, 0.893555f, -0.597656f, 0.0107422f, + 0.558594f, -0.87207f, 0.0810547f, 0.487305f, -0.808594f, + 0.212891f, 0.0878906f, -0.612305f, 0.263672f, 0.400391f, + -0.709961f, 0.380859f, -0.0839844f, -0.566406f, 0.466797f, + 0.445312f, -0.769531f, 0.636719f, -0.273438f, -0.648438f, + 0.34375f, 0.56543f, -0.829102f, 0.417969f, -0.272461f, + -0.746094f, 0.202148f, 0.421875f, -0.445312f, 0.229492f, + 0.178711f, -0.408203f, 0.477539f, 0.693359f, -0.675781f, + 0.145508f, 0.37207f, -0.576172f, 0.0449219f, 0.845703f, + -0.920898f, -0.0185547f, 0.487305f, -0.460938f, 0.0253906f, + 1.04785f, -0.87207f, 0.176758f, 0.356445f, -0.217773f, + 0.0332031f, 0.945312f, -0.556641f, -0.110352f, 0.725586f, + 0.0810547f, -0.0361328f, 1.11426f, -0.396484f, 0.00488281f, + 0.743164f, 0.27832f, 0.0175781f, 0.839844f, -0.0371094f, + -0.00878906f, 0.964844f, 0.547852f, 0.0224609f, 0.518555f, + 0.386719f, -0.0585938f, 1.11816f, 0.712891f, 0.19043f, + 0.523438f, 0.429688f, -0.179688f, 1.18164f, 0.40332f, + 0.241211f, 1.19043f, -0.0234375f, 0.119141f, 0.90918f, + -0.078125f, 0.250977f, 0.973633f, -0.277344f, 0.227539f, + 0.908203f, -0.232422f, 0.269531f, 0.807617f, -0.59668f, + 0.253906f, 0.398438f, -0.506836f, 0.255859f, 0.694336f, + -0.742188f, 0.345703f, 0.412109f, -0.576172f, 0.189453f, + 0.708984f, -0.808594f, 0.230469f, 0.242188f, -0.550781f, + 0.0693359f, 0.695312f, -0.856445f, -0.0253906f, 0.177734f, + -0.6875f, -0.00976562f, 0.731445f, -0.991211f, -0.03125f, + 0.0175781f, -0.805664f, -0.192383f, 0.827148f, -0.947266f, + 0.0820312f, 0.254883f, -0.504883f, -0.259766f, 0.87207f, + -0.693359f, -0.345703f, 0.639648f, -0.162109f, -0.443359f, + 1.05176f, -0.595703f, -0.496094f, 0.485352f, -0.0380859f, + -0.490234f, 0.763672f, -0.382812f, -0.634766f, 0.369141f, + 0.136719f, -0.650391f, 0.536133f, -0.126953f, -0.901367f, + 0.275391f, 0.155273f, -0.75293f, 0.476562f, -0.183594f, + -1.00488f, 0.206055f, -0.0908203f, -1.06836f, 0.3125f, + -0.183594f, -1.30762f, 0.37793f, -0.185547f, -0.885742f, + 0.496094f, -0.250977f, -1.14941f, 0.0517578f, -0.242188f, + -0.753906f, 0.395508f, -0.133789f, -1.10156f, 0.183594f, + -0.398438f, -0.767578f, 0.951172f, -0.359375f, -0.866211f, + 0.373047f, -0.0224609f, -0.0537109f, 0.921875f, -0.263672f, + -0.251953f, 0.455078f, 0.230469f, 0.485352f, 0.84082f, + 0.0351562f, 0.0810547f, 0.554688f, 0.186523f, 0.774414f, + 0.720703f, 0.381836f, 0.71875f, 0.495117f, 0.530273f, + 0.771484f, 0.90332f, 0.34668f, 0.897461f, 0.456055f, + 0.575195f, 0.560547f, 0.133789f, 0.62793f, 0.795898f, + 0.400391f, 0.594727f, 0.577148f, -0.142578f, 0.691406f, + 0.770508f, 0.12793f, 0.679688f, 0.751953f, -0.201172f, + 0.728516f, 0.805664f, -0.0175781f, 0.46875f, 0.655273f, + -0.608398f, 0.750977f, 0.540039f, -0.0166016f, 0.30957f, + 0.755859f, -0.563477f, 0.609375f, 0.763672f, -0.310547f, + 0.0791016f, 0.668945f, -0.575195f, 0.398438f, 0.767578f, + -0.47168f, -0.12793f, 0.631836f, -0.768555f, 0.293945f, + 0.760742f, -0.743164f, -0.311523f, 0.509766f, -0.755859f, + 0.15918f, 0.614258f, -0.832031f, -0.575195f, 0.448242f, + -0.771484f, -0.0605469f, 0.341797f, -0.652344f, -0.8125f, + 0.262695f, -0.205078f, -0.541992f, 0.337891f, -0.8125f, + -1.20996f, 0.179688f, -0.311523f, -0.682617f, 0.0556641f, + -0.944336f, -1.29102f, 0.09375f, 0.503906f, -0.87793f, + -0.0742188f, -0.805664f, -1.53613f, -0.107422f, 0.50293f, + -0.807617f, -0.423828f, 0.0888672f, -0.847656f, -0.342773f, + 0.719727f, -0.87793f, -0.336914f, 0.115234f, -0.500977f, + -0.487305f, 0.395508f, -0.398438f, -0.624023f, 0.3125f, + -0.0693359f, -0.605469f, 0.429688f, -0.283203f, -0.813477f, + 0.246094f, 0.0898438f, -0.764648f, 0.356445f, -0.106445f, + -1.05371f, 0.595703f, 0.251953f, -0.729492f, 0.336914f, + -0.0595703f, -1.06445f, 0.824219f, 0.320312f, -0.50293f, + 0.459961f, -0.161133f, -0.820312f, 0.516602f, 0.410156f, + -0.401367f, 0.407227f, -0.106445f, -0.740234f, 0.546875f, + 0.663086f, -0.170898f, 0.574219f, -0.419922f, -0.271484f, + -0.0273438f, 0.239258f, -0.0361328f, 0.80957f, -0.576172f, + 0.0664062f, 0.0332031f, 0.181641f, 0.245117f, 1.06641f, + -0.826172f, 0.30957f, -0.241211f, 0.03125f, 0.422852f, + 1.14648f, -0.916992f, 0.672852f, -0.242188f, 0.0234375f, + 0.425781f, 1.16895f, -1.08887f, 0.748047f, -0.384766f, + 0.102539f, 0.457031f, 0.992188f, -0.896484f, 0.65625f, + -0.144531f, 0.0332031f, 0.295898f, 0.8125f, -0.706055f, + 0.166016f, -0.237305f, 0.0996094f, 0.130859f, 0.723633f, + -0.769531f, -0.125f, -0.339844f, -0.277344f, -0.00390625f, + 1.2959f, -0.999023f, 0.0185547f, 0.0527344f, 0.270508f, + 0.104492f, 1.05469f, -1.0918f, 0.205078f, 0.00390625f, + 0.141602f, 0.000976562f, 1.15039f, -1.14844f, 0.0664062f, + -0.0566406f, 0.0732422f, 0.0302734f, 1.08398f, -1.04004f, + 0.124023f, -0.114258f, 0.19043f, 0.0263672f, 0.985352f, + -1.00293f, 0.0634766f, -0.0585938f, 0.257812f, -0.0527344f, + 0.96875f, -0.990234f, -0.0361328f, -0.179688f, 0.266602f, + -0.219727f, 0.882812f, -0.879883f, -0.289062f, -0.00292969f, + 0.351562f, -0.313477f, 0.826172f, -0.84668f, -0.322266f, + 0.337891f, 0.478516f, -0.426758f, 0.594727f, -0.621094f, + -0.435547f, 0.676758f, 0.47168f, -0.432617f, 0.333008f, + -0.338867f, -0.767578f, 0.419922f, 0.576172f, -0.673828f, + 0.321289f, -0.53125f, -0.96582f, 0.290039f, 0.426758f, + -0.526367f, 0.230469f, -0.508789f, -1.05859f, 0.195312f, + 0.493164f, -0.479492f, 0.78418f, -0.992188f, -0.453125f, + -0.185547f, 0.375977f, -0.291992f, 0.77832f, -0.884766f, + -0.361328f, 0.438477f, -0.118164f, -0.222656f, 0.923828f, + -0.796875f, 0.0234375f, -0.375f, 0.0332031f, -0.216797f, + 0.908203f, -0.984375f, -0.295898f, -0.384766f, 0.0234375f, + -0.305664f, 1.12695f, -1.04004f, -0.344727f, -0.136719f, + 0.119141f, -0.385742f, 1.06738f, -1.01855f, -0.245117f, + -0.106445f, -0.114258f, -0.365234f, 0.962891f, -0.923828f, + -0.430664f, -0.637695f, -0.347656f, -0.436523f, 0.702148f, + -0.547852f, -0.618164f, -0.447266f, -0.241211f, -0.462891f, + 0.729492f, -0.609375f, -0.578125f, -0.486328f, -0.0556641f, + -0.536133f, 0.50293f, -0.480469f, -0.526367f, -0.210938f, + -0.0585938f, -0.637695f, 0.723633f, -0.319336f, -0.348633f, + -0.00292969f, -0.305664f, -0.629883f, 0.431641f, 0.266602f, + -0.612305f, -0.260742f, 0.0166016f, -0.65332f, -0.272461f, + 0.800781f, -1.09863f, -0.166992f, -0.0859375f, -0.520508f, + -0.473633f, 0.586914f, -0.696289f, -0.682617f, -0.149414f, + 0.198242f, -0.805664f, 1.1377f, 0.444336f, -0.458984f, + -0.577148f, 0.522461f, -0.683594f, 1.25586f, 0.827148f, + -0.249023f, -0.851562f, 0.84668f, -0.448242f, 1.26953f, + 0.855469f, -0.155273f, -0.765625f, 1.0f, -0.337891f, + 0.973633f, 0.660156f, -0.0859375f, -0.476562f, 1.11035f, + -0.00976562f, 0.547852f, 0.958984f, -0.34082f, -0.504883f, + 0.853516f, 0.0664062f, 0.378906f, 0.758789f, -0.749023f, + -0.509766f, 0.739258f, 0.499023f, -0.144531f, 0.84668f, + -0.931641f, -0.329102f, 0.740234f, 0.791992f, -0.168945f, + 0.594727f, -0.435547f, -0.268555f, 0.336914f, 0.817383f, + -0.430664f, -0.0253906f, -0.735352f, -0.0683594f, 0.152344f, + 0.725586f, -0.68457f, -0.294922f, -1.25391f, -0.125f, + 0.0917969f, 0.907227f, -0.633789f, -0.28125f, -0.222656f, + 0.0f, 0.188477f, 1.06445f, -0.929688f, 0.144531f, + -0.139648f, -0.00390625f, -0.21582f, 1.21387f, -0.952148f, + -0.0253906f, -0.389648f, 0.148438f, -0.283203f, 1.14844f, + -0.890625f, -0.204102f, -0.222656f, -0.0332031f, -0.451172f, + 0.625f, -0.486328f, -0.716797f, -0.103516f, 0.265625f, + -0.667969f, 0.231445f, -0.385742f, -0.977539f, 0.111328f, + 0.222656f, -0.766602f, 0.300781f, -0.390625f, -1.07129f, + 0.230469f, 0.318359f, -0.787109f, 0.427734f, -0.512695f, + -0.886719f, 0.240234f, 0.260742f, -0.647461f, 0.566406f, + -0.686523f, -0.723633f, -0.198242f, 0.0722656f, -0.3125f, + 0.771484f, -0.725586f, -0.478516f, -0.176758f, -0.113281f, + -0.262695f, 0.78125f, -0.644531f, -0.210938f, -0.0126953f, + -0.317383f, 0.0673828f, 0.944336f, -0.764648f, 0.1875f, + -0.636719f, -0.401367f, 0.118164f, 0.982422f, -0.826172f, + 0.105469f, -1.0625f, -0.298828f, 0.0537109f, 0.949219f, + -0.788086f, 0.176758f, -0.611328f, -0.0322266f, 0.0439453f, + 0.885742f, -0.730469f, 0.301758f, -0.463867f, -0.144531f, + -0.180664f, 1.08398f, -0.97168f, -0.470703f, 0.128906f, + 0.0146484f, -0.112305f, 0.889648f, -0.946289f, -0.165039f, + -1.34277f, -0.258789f, -0.211914f, 0.962891f, -0.844727f, + -0.588867f, 0.144531f, -0.228516f, -0.207031f, 0.974609f, + -0.848633f, -0.0273438f, -0.570312f, -0.228516f, 0.00195312f, + 1.03125f, -0.977539f, -0.0605469f, -0.733398f, -0.0908203f, + 0.0996094f, 0.856445f, -0.854492f, -0.000976562f, -0.458008f, + -0.135742f, 0.222656f, 1.34082f, -1.13574f, 0.639648f, + 0.015625f, -0.234375f, 0.136719f, 0.835938f, -0.822266f, + -0.114258f, -0.673828f, -0.186523f, 0.169922f, 0.925781f, + -0.839844f, 0.175781f, -0.394531f, 0.224609f, -0.0458984f, + 0.94043f, -0.964844f, -0.0556641f, -0.15332f, 0.163086f, + -0.0175781f, 0.944336f, -0.951172f, -0.0478516f, -0.302734f, + 0.117188f, -0.00683594f, 0.973633f, -0.970703f, -0.0810547f, + -0.301758f, 0.09375f, -0.000976562f, 1.01953f, -0.978516f, + 0.0292969f, -0.293945f, 0.0683594f, -0.00683594f, 1.0127f, + -0.966797f, -0.0175781f, -0.314453f, 0.181641f, 0.0126953f, + 0.982422f, -0.990234f, 0.03125f, -0.194336f, 0.155273f, + -0.00292969f, 0.962891f, -0.932617f, -0.00390625f, -0.0976562f, + 0.144531f, -0.0205078f, 0.913086f, -0.914062f, -0.0908203f, + -0.296875f, 0.166992f, -0.015625f, 0.930664f, -0.950195f, + -0.0888672f, -0.28418f, 0.196289f, -0.0107422f, 0.953125f, + -0.960938f, -0.0273438f, -0.195312f, 0.125f, 0.0126953f, + 0.986328f, -0.951172f, 0.0634766f, -0.231445f, 0.162109f, + -0.0136719f, 0.981445f, -0.974609f, -0.0449219f, -0.0761719f, + 0.186523f, -0.015625f, 0.950195f, -0.962891f, -0.0576172f, + -0.162109f, 0.154297f, -0.0292969f, 0.970703f, -0.973633f, + -0.0136719f, -0.394531f, 0.102539f, -0.00878906f, 0.970703f, + -0.915039f, 0.0546875f, -0.313477f, 0.110352f, -0.0234375f, + 0.947266f, -0.922852f, -0.139648f, -0.181641f, 0.12207f, + 0.0625f, 0.780273f, -0.899414f, -0.84375f, -0.0888672f, + -0.318359f, 1.00781f, 0.888672f, 0.27832f, 0.0195312f, + -1.08594f, 0.137695f, 0.56543f, 1.12891f, -0.235352f, + 1.65039f, -0.0820312f, 0.100586f, 0.987305f, 0.261719f, + -0.0615234f, 1.32227f, 0.669922f, 0.0f, 1.04102f, + 0.231445f, -0.174805f, 1.11426f, -0.261719f, -0.0527344f, + 0.958008f, 0.332031f, -0.28418f, 1.26953f, -0.612305f, + 0.208984f, 0.964844f, 1.15625f, -0.486328f, 2.0f, + -0.760742f, 0.0458984f, 1.44629f, 1.21289f, 0.924805f, + 1.1875f, -0.259766f, 0.114258f, 0.210938f, 0.486328f, + -0.422852f, -0.984375f, 1.08789f, 0.453125f, -0.229492f, + 0.457031f, -0.682617f, -0.500977f, 0.210938f, 0.391602f, + -0.303711f, 0.725586f, -0.80957f, -0.391602f, 0.0976562f, + 0.958984f, 0.0185547f, 1.69922f, -1.36035f, 1.98242f, + -0.392578f, -0.461914f, -0.37793f, -0.0712891f, 0.928711f, + -1.60254f, 0.133789f, -0.0419922f, -1.12109f, -0.201172f, + 0.0732422f, -1.99902f, 0.629883f, -0.174805f, -0.894531f, + 0.0742188f, -0.147461f, -1.23633f, -0.259766f, 0.0410156f, + -1.00879f, -0.0166016f, -0.0205078f, -1.99902f, 0.267578f, + -0.0664062f, -0.164062f, 0.511719f, 0.825195f, -1.21191f, + -0.515625f, 0.46875f, 0.0898438f, 1.09766f, -0.144531f, + 1.59375f, 0.166016f, 0.428711f, 0.294922f, 0.8125f, + -0.770508f, 0.535156f, 0.280273f, 0.231445f, 0.504883f, + 0.864258f, -0.884766f, 0.524414f, -0.183594f, 0.0820312f, + 0.713867f, 0.405273f, -0.520508f, -0.326172f, 0.0126953f, + -0.310547f, 1.38086f, 0.831055f, 0.380859f, 1.3125f, + -1.60645f, 0.151367f, 1.01953f, 0.580078f, -0.0283203f, + 2.0f, 1.03516f, -0.0634766f, 1.03418f, 0.332031f, + -0.0859375f, 1.32129f, -0.234375f, 0.0917969f, 1.49219f, + 0.30957f, -0.118164f, 1.76953f, -0.717773f, 0.174805f, + 1.59863f, 0.0947266f, 1.1875f, 0.429688f, 0.442383f, + 0.00976562f, 0.435547f, 0.345703f, -0.114258f, 0.238281f, + -0.689453f, 0.30957f, 0.0732422f, 0.606445f, -0.650391f, + -0.0947266f, -0.03125f, 0.183594f, -0.144531f, 0.746094f, + -0.793945f, -0.574219f, -0.0742188f, 0.196289f, -0.199219f, + 1.13867f, -1.11816f, -0.227539f, -0.462891f, 0.0517578f, + -0.0341797f, 1.18945f, -1.1084f, -0.0283203f, -0.342773f, + 0.174805f, -0.0078125f, 1.05176f, -1.03906f, 0.0253906f, + -0.375977f, -0.169922f, 0.00292969f, 0.837891f, -0.716797f, + -0.0205078f, -0.373047f, 0.293945f, 0.0175781f, 0.833984f, + -0.916016f, -0.0996094f, -0.149414f, 0.200195f, -0.00195312f, + 0.865234f, -0.916016f, -0.0117188f, -0.390625f, 0.290039f, + 0.0234375f, 0.985352f, -0.987305f, 0.0439453f, -0.214844f, + 0.0917969f, 0.0615234f, 1.02832f, -1.00684f, 0.152344f, + -0.452148f, 0.0615234f, -0.00585938f, 1.02148f, -0.976562f, + -0.0927734f, -0.286133f, 0.189453f, -0.0644531f, 1.02539f, + -1.02246f, 0.0166016f, -0.243164f, 0.109375f, -0.09375f, + 0.981445f, -0.931641f, 0.0458984f, -0.460938f, 0.0537109f, + -0.0429688f, 1.05859f, -0.850586f, 0.0771484f, -0.0507812f, + 0.108398f, -0.177734f, 0.779297f, -0.74707f, -0.378906f, + -0.413086f, -0.205078f, -0.0488281f, 0.946289f, -0.760742f, + -0.180664f, -0.228516f, -0.208008f, -0.0615234f, 1.05371f, + -0.953125f, -0.34668f, -1.16797f, -0.0322266f, -0.276367f, + 1.06641f, -0.863281f, -0.0244141f, -0.290039f, -0.0429688f, + 0.0439453f, 1.28223f, -1.06348f, 0.181641f, -0.514648f, + -0.0214844f, 0.0f, 0.861328f, -0.738281f, -0.0449219f, + 0.0722656f, 0.125f, 0.193359f, 1.15039f, -1.0957f, + 0.225586f, -0.137695f, 0.12207f, -0.0400391f, 0.732422f, + -0.818359f, -0.40918f, -0.672852f, -0.425781f, 0.839844f, + 0.856445f, 0.198242f, -0.363281f, 0.206055f, -0.214844f, + 1.20215f, 0.943359f, 0.0195312f, 2.0f, 0.874023f, + 0.0839844f, 0.827148f, 0.587891f, -0.384766f, 1.57715f, + 0.108398f, -0.116211f, 0.952148f, 0.246094f, -0.336914f, + 0.463867f, -0.740234f, 0.0185547f, 0.950195f, 0.55957f, + -0.442383f, 1.09668f, 0.0585938f, 0.132812f, 1.37695f, + 2.0f, -0.59375f, 2.0f, -0.676758f, -0.199219f, + -0.0205078f, 0.268555f, -0.5f, -1.94629f, 1.2832f, + 0.0078125f, -0.201172f, 0.674805f, -0.708984f, -0.490234f, + -0.515625f, 0.0439453f, -0.0830078f, 1.14355f, -1.01953f, + -0.0224609f, -0.282227f, 0.0214844f, -0.078125f, 1.09668f, + -0.961914f, 0.0253906f, -0.56543f, 0.30957f, 0.964844f, + 1.56836f, -0.272461f, 1.91309f, -0.53418f, -0.695312f, + -0.878906f, -0.0146484f, 0.277344f, -1.6416f, 0.0244141f, + 0.0898438f, -0.785156f, 0.229492f, -0.259766f, -1.06055f, + -0.241211f, 0.0224609f, -0.769531f, 0.748047f, -0.680664f, + -0.629883f, -0.549805f, -0.195312f, -0.796875f, -0.399414f, + 0.0859375f, -1.99902f, 0.24707f, 0.208984f, 0.563477f, + 1.91797f, 0.0585938f, 2.0f, -0.990234f, 0.327148f, + -0.0917969f, 1.16797f, -0.94043f, 0.623047f, -1.1748f, + -0.0205078f, -0.0449219f, 0.883789f, -0.905273f, -0.370117f, + -0.601562f, 0.0332031f, -0.0527344f, 0.928711f, -0.833984f, + -0.180664f, -0.267578f, 0.0351562f, -0.0175781f, 0.998047f, + -0.922852f, -0.000976562f, -0.371094f, 0.0341797f, -0.0166016f, + 0.977539f, -0.900391f, -0.00292969f, -0.37207f, 0.0449219f, + -0.0439453f, 0.989258f, -0.904297f, -0.0576172f, -0.37207f, + 0.270508f, -0.368164f, 0.0576172f, -0.607422f, -1.95508f, + -0.182617f, -0.390625f, 1.62598f, 1.52734f, 1.2793f, + 2.0f, -1.99902f, 0.226562f, 1.01465f, 0.669922f, + -0.373047f, 1.71484f, 1.99707f, -0.0654297f, 1.00391f, + 0.330078f, -0.432617f, 0.704102f, -0.96875f, 0.0800781f, + 0.964844f, 0.702148f, -0.5625f, 1.39746f, -0.203125f, + 0.255859f, 1.74512f, 1.52539f, 0.417969f, 2.0f, + -0.0976562f, -0.482422f, 0.09375f, 0.151367f, -0.328125f, + -1.88867f, -0.0595703f, 0.117188f, 0.0751953f, 0.870117f, + -0.870117f, 0.046875f, -0.280273f, 0.125f, 0.124023f, + 1.0791f, -0.964844f, 0.338867f, -0.0791016f, 0.0751953f, + 0.12207f, 0.920898f, -0.888672f, 0.0273438f, -0.250977f, + 0.00488281f, 0.165039f, 1.01074f, -0.944336f, 0.137695f, + -0.387695f, -0.142578f, 0.238281f, 1.77246f, -1.42285f, + 0.90625f, -0.856445f, 0.0556641f, -0.219727f, -0.785156f, + 1.47266f, -1.99902f, 1.27246f, -0.132812f, -0.746094f, + 0.172852f, -0.0830078f, -1.3584f, 0.638672f, 0.0175781f, + -0.786133f, 0.754883f, -0.729492f, -0.808594f, -0.291992f, + 0.170898f, -0.746094f, 0.623047f, -0.667969f, -0.743164f, + -0.241211f, 0.0693359f, -0.725586f, 0.495117f, -0.545898f, + -0.969727f, -0.131836f, 0.0234375f, -0.52832f, 0.280273f, + -0.327148f, -1.0498f, -0.210938f, -0.253906f, 0.234375f, + 0.661133f, -0.0332031f, -0.708008f, -0.458984f, 0.31543f, + 0.480469f, 1.59082f, -1.22266f, 1.41602f, -0.270508f, + 0.263672f, 0.318359f, 1.21289f, -1.12207f, 0.853516f, + -0.272461f, 0.158203f, 1.84766f, 2.0f, 0.341797f, + 2.0f, -0.788086f, -0.264648f, -0.326172f, -1.25977f, + 0.842773f, -1.99902f, -0.947266f, 0.249023f, -0.642578f, + 0.745117f, -0.744141f, -0.404297f, -0.266602f, 0.0898438f, + -0.568359f, 0.501953f, -0.494141f, -0.858398f, 0.0722656f, + -0.543945f, 1.16895f, 1.12012f, 1.47461f, -1.12988f, + -0.27832f, 0.53125f, 0.875f, 0.845703f, -0.318359f, + 1.68555f, 1.29199f, -0.00195312f, 0.861328f, 0.601562f, + -0.519531f, 1.16211f, -1.05957f, 0.0507812f, 0.904297f, + 0.625977f, -0.525391f, 1.16797f, -0.163086f, 0.125977f, + 1.99902f, 2.0f, 2.0f, 2.0f, -0.00195312f, + -1.11719f, -0.3125f, -0.320312f, 0.585938f, -1.99902f, + 0.647461f, 0.198242f, -0.538086f, 0.993164f, -0.897461f, + -0.227539f, -0.354492f, 0.0976562f, -0.416016f, 0.623047f, + -0.682617f, -0.832031f, -0.223633f, -0.160156f, 0.0751953f, + -0.791992f, 1.13379f, -1.99902f, -0.755859f, 0.669922f, + 1.02637f, 1.26758f, -0.293945f, 2.0f, 1.93457f, + -0.0126953f, 0.773438f, 0.475586f, -0.59375f, 0.329102f, + -0.588867f, 0.113281f, 0.740234f, 0.749023f, -0.716797f, + 0.941406f, -0.0878906f, 0.71875f, 1.8125f, 2.0f, + -0.289062f, 2.0f, -1.01074f, 0.0117188f, -0.183594f, + -0.969727f, 0.893555f, -1.99902f, 0.333008f, 0.188477f, + -0.643555f, 0.504883f, -0.511719f, -0.804688f, -0.957031f, + 0.0546875f, -0.305664f, -0.0449219f, -0.145508f, -1.875f, + 0.0996094f, -0.155273f, 1.59668f, 1.5293f, 1.46973f, + 2.0f, -1.9834f, 0.375f, 1.20508f, 0.736328f, + -0.399414f, 2.0f, 2.0f, 0.123047f, 0.834961f, + 1.04004f, -0.808594f, 1.31934f, -0.634766f, 0.548828f, + 0.129883f, -1.64746f, 2.0f, -1.99902f, 0.819336f, + 0.0273438f, -0.254883f, 0.722656f, -0.691406f, -0.464844f, + -1.05566f, 0.0634766f, -0.206055f, 1.02148f, -0.90332f, + 0.0595703f, -0.03125f, 0.129883f, -0.177734f, 0.697266f, + -0.713867f, -0.351562f, -0.169922f, -0.119141f, -0.172852f, + 1.01855f, -0.989258f, -0.12793f, -0.670898f, -0.146484f, + -0.261719f, 1.16602f, -1.05664f, -0.302734f, -0.25293f, + -0.0458984f, -0.198242f, 0.90625f, -0.876953f, -0.144531f, + -0.424805f, -0.151367f, -0.147461f, 0.926758f, -0.835938f, + -0.191406f, -0.326172f, -0.128906f, -0.216797f, 0.910156f, + -0.851562f, -0.291992f, -0.549805f, -0.0517578f, -0.0869141f, + 1.07715f, -0.977539f, -0.0361328f, -0.418945f, -0.148438f, + -0.133789f, 0.907227f, -0.836914f, -0.213867f, -0.768555f, + -0.0664062f, 0.182617f, 1.0498f, -0.915039f, 0.400391f, + -0.523438f, 0.015625f, 0.0f, 1.13184f, -1.09961f, + -0.244141f, -0.330078f, -0.115234f, 0.0166016f, 0.944336f, + -0.868164f, -0.430664f, -0.246094f, -0.0185547f, -0.00976562f, + 0.819336f, -0.822266f, -0.380859f, -1.1709f, 0.0605469f, + -0.0498047f, 0.777344f, -0.703125f, 0.0800781f, -0.451172f, + 0.304688f, 0.0517578f, 0.825195f, -0.771484f, 0.145508f, + 0.495117f, -0.0888672f, -0.243164f, 1.48145f, -1.22168f, + 0.0615234f, -0.192383f, -0.0537109f, 0.0195312f, 1.21582f, + -1.06836f, 0.175781f, -0.394531f, 0.237305f, -0.0126953f, + 0.800781f, -0.920898f, -0.12207f, -0.391602f, -0.0917969f, + -0.0791016f, 1.08008f, -1.03613f, -0.0654297f, -0.423828f, + 0.0478516f, -0.0253906f, 0.873047f, -0.884766f, -0.0722656f, + -0.579102f, 0.0136719f, -0.0917969f, 0.954102f, -0.922852f, + -0.172852f, -0.244141f, 0.0f, -0.141602f, 0.929688f, + -0.894531f, -0.179688f, -0.291992f, 0.0283203f, -0.0947266f, + 0.961914f, -0.926758f, -0.135742f, -0.329102f, 0.0576172f, + -0.0351562f, 0.999023f, -0.958984f, -0.0498047f, -0.248047f, + 0.0869141f, -0.078125f, 1.01074f, -0.954102f, 0.00976562f, + -0.217773f, 0.0986328f, -0.0556641f, 0.916992f, -0.914062f, + -0.136719f, -0.219727f, 0.0488281f, -0.139648f, 0.985352f, + -0.952148f, -0.152344f, -0.286133f, 0.0166016f, -0.0917969f, + 1.0459f, -0.972656f, -0.0605469f, -0.228516f, 0.0507812f, + -0.0810547f, 0.956055f, -0.9375f, -0.18457f, -0.275391f, + 0.0703125f, -0.0986328f, 0.948242f, -0.928711f, -0.162109f, + -0.333008f +}; const size_t kAccelerometerLaptopModeTestDataLength = - ARRAY_SIZE(kAccelerometerLaptopModeTestData); + ARRAY_SIZE(kAccelerometerLaptopModeTestData); const float kAccelerometerFullyOpenTestData[] = { - 0.892578f, -0.0810547f, 0.0146484f, 0.929688f, -0.0644531f, - -0.0234375f, 0.996094f, -0.0136719f, 0.0185547f, 1.02344f, - -0.0615234f, -0.0449219f, 0.978516f, 0.125977f, 0.0400391f, - 0.996094f, 0.0332031f, -0.0117188f, 0.963867f, 0.107422f, - 0.0214844f, 0.980469f, 0.0185547f, -0.00683594f, 0.952148f, - 0.0361328f, 0.0253906f, 0.976562f, -0.00390625f, -0.0126953f, - 0.97168f, 0.0205078f, 0.0517578f, 1.01074f, 0.015625f, - -0.0234375f, 0.953125f, -0.000976562f, 0.0390625f, 0.977539f, - -0.0224609f, -0.00976562f, 0.954102f, 0.0244141f, 0.0439453f, - 0.986328f, 0.00292969f, -0.000976562f, 0.967773f, 0.0537109f, - 0.046875f, 0.99707f, 0.0175781f, -0.000976562f, 0.951172f, - 0.0390625f, 0.0341797f, 0.974609f, -0.00878906f, -0.000976562f, - 0.948242f, 0.0185547f, 0.0478516f, 0.976562f, -0.000976562f, - -0.00683594f, 0.958984f, 0.0263672f, 0.078125f, 0.982422f, - -0.0205078f, 0.0283203f, 0.930664f, 0.00878906f, 0.0664062f, - 0.970703f, 0.00390625f, -0.0078125f, 0.945312f, 0.0380859f, - -0.00585938f, 0.972656f, 0.0419922f, -0.0478516f, 1.01953f, - 0.240234f, -0.182617f, 1.00977f, 0.18457f, -0.126953f, - 1.05566f, 0.0751953f, -0.0888672f, 1.09766f, 0.0732422f, - -0.0898438f, 1.21484f, 0.119141f, -0.000976562f, 1.23633f, - 0.194336f, -0.447266f, 1.31445f, 0.213867f, -0.118164f, - 1.30762f, 0.0908203f, -0.260742f, 0.860352f, 0.141602f, - -0.166016f, 0.868164f, 0.0429688f, -0.258789f, 0.727539f, - 0.0419922f, -0.21875f, 0.740234f, 0.0126953f, -0.162109f, - 0.652344f, -0.00292969f, -0.185547f, 0.666992f, 0.0800781f, - -0.272461f, 0.852539f, -0.0478516f, -0.228516f, 0.819336f, - -0.0996094f, -0.180664f, 0.959961f, -0.0537109f, -0.240234f, - 0.935547f, -0.0917969f, -0.269531f, 0.988281f, -0.0507812f, - -0.197266f, 0.981445f, -0.0712891f, -0.323242f, 0.964844f, - -0.0683594f, -0.203125f, 0.941406f, -0.0898438f, -0.236328f, - 0.942383f, -0.0429688f, -0.206055f, 0.921875f, -0.0527344f, - -0.239258f, 0.976562f, -0.0742188f, -0.261719f, 0.958008f, - -0.09375f, -0.311523f, 0.949219f, -0.0839844f, -0.242188f, - 0.949219f, -0.0742188f, -0.323242f, 0.973633f, -0.0263672f, - -0.238281f, 0.958984f, -0.0488281f, -0.293945f, 0.931641f, - -0.0214844f, -0.225586f, 0.931641f, 0.0195312f, -0.225586f, - 0.810547f, -0.0947266f, -0.15332f, 0.947266f, 0.241211f, - -0.100586f, 0.326172f, 0.286133f, -0.12207f, 0.855469f, - 0.677734f, -0.228516f, 0.229492f, 1.08398f, 0.0224609f, - 0.822266f, 0.759766f, -0.0722656f, 0.294922f, 1.42676f, - 0.147461f, 0.239258f, 0.755859f, 0.142578f, -0.120117f, - 1.00977f, -0.0722656f, -0.154297f, 0.832031f, -0.0576172f, - -0.15332f, 1.10156f, -0.0273438f, -0.119141f, 1.05078f, - 0.0166016f, -0.0927734f, 1.09961f, -0.0703125f, -0.0751953f, - 1.04688f, -0.00195312f, -0.078125f, 0.897461f, -0.0625f, - -0.078125f, 0.854492f, -0.0947266f, -0.123047f, 0.811523f, - -0.0488281f, -0.113281f, 0.796875f, 0.0f, -0.0488281f, - 0.961914f, -0.177734f, -0.0898438f, 0.859375f, -0.172852f, - 0.0126953f, 1.1084f, -0.158203f, 0.0292969f, 1.0791f, - -0.152344f, 0.154297f, 1.29492f, -0.126953f, 0.134766f, - 1.23145f, -0.0878906f, -0.200195f, 0.667969f, -0.216797f, - -0.0888672f, 0.935547f, -0.143555f, 0.000976562f, 1.13281f, - -0.0498047f, 0.00195312f, 1.05469f, -0.231445f, 0.0927734f, - 0.956055f, -0.292969f, 0.0625f, 0.927734f, -0.112305f, - 0.0585938f, 0.975586f, -0.163086f, 0.0957031f, 1.03418f, - -0.229492f, 0.000976562f, 0.985352f, -0.09375f, -0.00585938f, - 0.945312f, -0.140625f, -0.0302734f, 0.998047f, -0.208008f, - -0.0507812f, 0.916016f, -0.112305f, 0.123047f, 0.981445f, - -0.205078f, 0.129883f, 1.02832f, -0.211914f, 0.105469f, - 1.01367f, -0.142578f, 0.111328f, 1.00098f, -0.110352f, - 0.0986328f, 0.999023f, -0.15918f, 0.0839844f, 0.922852f, - -0.223633f, 0.261719f, 1.06641f, -0.138672f, 0.240234f, - 0.916016f, -0.296875f, 0.00488281f, 1.04199f, -0.128906f, - 0.0341797f, 1.0791f, -0.265625f, 0.015625f, 0.963867f, - -0.161133f, 0.015625f, 0.958008f, -0.0722656f, -0.125f, - 1.03125f, -0.19043f, -0.0722656f, 1.16602f, -0.126953f, - -0.143555f, 1.12793f, -0.197266f, -0.120117f, 1.26465f, - -0.232422f, -0.226562f, 1.125f, -0.0712891f, -0.0927734f, - 1.26465f, -0.145508f, -0.551758f, 0.90918f, -0.163086f, - -0.228516f, 1.2041f, -0.0371094f, -0.493164f, 0.827148f, - 0.0371094f, -0.162109f, 0.568359f, -0.195312f, -0.641602f, - 0.438477f, -0.212891f, -0.513672f, 0.208008f, -0.0488281f, - -0.776367f, 0.0488281f, -0.115234f, -0.84375f, -0.314453f, - 0.106445f, -0.966797f, -0.0078125f, 0.00976562f, -1.01953f, - -0.220703f, -0.0322266f, -0.994141f, 0.0117188f, -0.248047f, - -0.975586f, 0.121094f, -0.0205078f, -0.947266f, 0.00292969f, - -0.160156f, -0.9375f, 0.0175781f, -0.0986328f, -0.916992f, - -0.0195312f, -0.208008f, -0.9375f, -0.0654297f, -0.134766f, - -0.948242f, -0.0185547f, -0.231445f, -0.977539f, -0.0537109f, - -0.198242f, -1.0166f, 0.0439453f, -0.433594f, -0.994141f, - -0.0595703f, -0.389648f, -1.07129f, 0.0859375f, -0.109375f, - -1.01953f, 0.0966797f, -0.12207f, -1.01074f, 0.125977f, - -0.192383f, -1.0f, 0.0820312f, -0.166016f, -1.04688f, - 0.0751953f, -0.265625f, -1.00879f, 0.139648f, -0.135742f, - -1.00977f, 0.0644531f, -0.235352f, -0.989258f, 0.100586f, - -0.144531f, -0.858398f, 0.0273438f, -0.22168f, -0.878906f, - -0.0634766f, -0.1875f, -0.905273f, -0.0195312f, -0.232422f, - -0.926758f, -0.0732422f, -0.319336f, -1.05078f, -0.00878906f, - -0.5625f, -1.05176f, 0.111328f, -0.456055f, -0.942383f, - -0.0146484f, -0.171875f, -0.946289f, -0.0224609f, -0.174805f, - -0.901367f, -0.0283203f, -0.332031f, -0.948242f, -0.0732422f, - -0.262695f, -0.867188f, 0.0351562f, -0.271484f, -0.913086f, - -0.0878906f, -0.259766f, -1.2793f, -0.226562f, -0.382812f, - -1.2334f, 0.0400391f, -0.260742f, -1.22949f, -0.216797f, - -0.432617f, -1.21191f, -0.131836f, -0.368164f, -1.10938f, - -0.323242f, -0.505859f, -1.01953f, -0.197266f, -0.405273f, - -1.25488f, -0.347656f, -0.448242f, -0.803711f, 0.0595703f, - -0.253906f, -0.489258f, -0.00390625f, 0.101562f, 0.15332f, - -0.423828f, -0.0195312f, 0.527344f, -0.350586f, -0.24707f, - 0.363281f, -1.33789f, -0.214844f, 0.322266f, -0.768555f, - -0.279297f, 0.266602f, -0.918945f, -0.320312f, 0.0634766f, - -0.97168f, -0.102539f, 0.114258f, -0.891602f, -0.158203f, - 0.0283203f, -0.998047f, -0.198242f, 0.0634766f, -0.931641f, - -0.239258f, 0.147461f, -0.963867f, -0.219727f, 0.142578f, - -1.02051f, -0.279297f, 0.105469f, -0.955078f, -0.238281f, - 0.104492f, -1.02637f, -0.291992f, -0.0302734f, -1.02637f, - -0.225586f, 0.000976562f, -0.907227f, -0.12793f, 0.03125f, - -0.979492f, -0.100586f, 0.0625f, -0.921875f, -0.155273f, - 0.146484f, -0.929688f, -0.158203f, 0.155273f, -0.981445f, - -0.171875f, 0.212891f, -0.927734f, -0.166992f, 0.198242f, - -1.05371f, -0.197266f, 0.189453f, -0.954102f, -0.113281f, - 0.189453f, -1.00293f, -0.180664f, 0.111328f, -0.967773f, - -0.109375f, 0.125977f, -0.966797f, -0.146484f, 0.0712891f, - -0.982422f, -0.0908203f, 0.112305f, -0.928711f, -0.149414f, - 0.0146484f, -1.00781f, -0.0996094f, 0.102539f, -0.810547f, - -0.157227f, -0.0117188f, -0.820312f, -0.0371094f, 0.28418f, - -0.446289f, -0.166016f, 0.208008f, -0.03125f, -0.0761719f, - 0.755859f, -0.280273f, -0.316406f, 1.42188f, 0.198242f, - -0.49707f, 1.37207f, -0.556641f, -0.382812f, 1.36523f, - 0.110352f, -0.342773f, 1.25391f, -0.225586f, -0.570312f, - 0.958984f, 0.0722656f, -0.237305f, 0.984375f, 0.0957031f, - -0.416992f, 0.853516f, 0.0400391f, -0.416016f, 0.873047f, - 0.0644531f, -0.370117f, 1.04004f, 0.0273438f, -0.408203f, - 0.920898f, -0.0986328f, -0.514648f, 0.956055f, 0.0527344f, - -0.428711f, 0.960938f, 0.109375f, -0.522461f, 0.801758f, - -0.277344f, -0.634766f, 0.882812f, 0.0527344f, -0.34668f, - 0.981445f, -0.09375f, -0.298828f, 0.952148f, -0.213867f, - -0.25293f, 0.90918f, -0.132812f, -0.493164f, 0.885742f, - -0.177734f, -0.525391f, 0.915039f, -0.0605469f, -0.439453f, - 0.87207f, -0.0986328f, -0.506836f, 0.905273f, -0.0732422f, - -0.462891f, 0.870117f, -0.0966797f, -0.511719f, 0.897461f, - -0.0234375f, -0.464844f, 0.868164f, -0.0283203f, -0.474609f, - 0.919922f, 0.0205078f, -0.34375f, 0.889648f, -0.00390625f, - -0.445312f, 0.804688f, -0.0263672f, -0.417969f, 0.806641f, - 0.0410156f, -0.399414f, 0.914062f, -0.0722656f, -0.386719f, - 0.890625f, -0.0615234f, -0.40625f, 0.928711f, 0.0253906f, - -0.118164f, 0.943359f, -0.000976562f, -0.398438f, 0.811523f, - -0.0605469f, -0.234375f, 0.879883f, 0.198242f, -0.509766f, - 0.958008f, 0.0361328f, -0.328125f, 0.938477f, -0.00976562f, - -0.429688f, 0.916016f, -0.0185547f, -0.266602f, 0.898438f, - -0.0380859f, -0.450195f, 0.870117f, 0.162109f, -0.210938f, - 0.899414f, 0.117188f, -0.517578f, 0.756836f, -0.0820312f, - -0.361328f, 0.868164f, -0.0576172f, -1.29883f, 0.515625f, - -0.00195312f, -1.13281f, 0.628906f, 0.00390625f, -0.103516f, - 0.485352f, -0.046875f, -0.922852f, 0.412109f, -0.108398f, - -0.898438f, 0.446289f, -0.111328f, -0.925781f, 0.375977f, - -0.125977f, -0.825195f, 0.446289f, -0.0966797f, -0.958008f, - 0.389648f, -0.0810547f, -1.00781f, 0.532227f, -0.104492f, - -1.0791f, 0.459961f, -0.138672f, -0.941406f, 0.509766f, - -0.107422f, -1.14062f, 0.447266f, -0.195312f, -0.867188f, - 0.474609f, -0.233398f, -0.751953f, 0.612305f, -0.126953f, - -0.661133f, 0.702148f, -0.199219f, -0.260742f, 0.856445f, - -0.0292969f, -0.743164f, 0.921875f, -0.0371094f, -0.293945f, - 0.902344f, -0.103516f, -0.416016f, 0.955078f, -0.00488281f, - -0.232422f, 0.951172f, -0.0498047f, -0.331055f, 0.871094f, - 0.00390625f, -0.186523f, 0.905273f, 0.0566406f, -0.249023f, - 0.677734f, 0.0253906f, 0.145508f, 0.826172f, 0.251953f, - -0.428711f, 0.764648f, 0.488281f, -0.265625f, 0.886719f, - 0.256836f, -0.408203f, 0.744141f, 0.689453f, -0.611328f, - 0.755859f, 0.431641f, -0.525391f, 0.588867f, 0.637695f, - -0.750977f, 0.578125f, 0.568359f, -0.540039f, 0.512695f, - 0.530273f, -0.722656f, 0.498047f, 0.526367f, -0.788086f, - 0.647461f, 0.522461f, -0.862305f, 0.567383f, 0.422852f, - -0.765625f, 0.648438f, 0.405273f, -0.938477f, 0.583008f, - 0.272461f, -1.15137f, 0.481445f, 0.00585938f, -0.788086f, - 0.454102f, -0.0615234f, -0.885742f, 0.306641f, -0.333984f, - -0.678711f, 0.322266f, -0.288086f, -0.615234f, 0.220703f, - -0.476562f, -0.748047f, 0.223633f, -0.396484f, -0.729492f, - 0.235352f, -0.510742f, -0.806641f, 0.227539f, -0.476562f, - -0.665039f, 0.275391f, -0.47168f, -0.938477f, 0.345703f, - -0.369141f, -0.709961f, 0.482422f, -0.393555f, -0.380859f, - 0.759766f, -0.143555f, -0.529297f, 0.956055f, -0.0185547f, - -0.12207f, 1.15527f, 0.0380859f, -0.529297f, 1.04102f, - 0.203125f, -0.0283203f, 1.11719f, 0.0888672f, -0.258789f, - 1.02734f, 0.297852f, -0.0244141f, 1.03223f, 0.211914f, - -0.0859375f, 0.798828f, 0.216797f, 0.19043f, 0.891602f, - 0.256836f, -0.102539f, 0.662109f, 0.263672f, 0.208984f, - 0.810547f, 0.380859f, -0.235352f, 0.707031f, 0.507812f, - -0.0800781f, 0.902344f, 0.470703f, -0.301758f, 0.577148f, - 0.674805f, -0.500977f, 0.748047f, 0.472656f, -0.493164f, - 0.478516f, 0.611328f, -1.04395f, 0.491211f, 0.651367f, - -0.581055f, 0.25293f, 0.325195f, -0.950195f, 0.224609f, - 0.404297f, -1.04883f, 0.116211f, -0.00292969f, -0.980469f, - 0.0566406f, 0.0195312f, -0.821289f, 0.0166016f, -0.141602f, - -0.959961f, -0.0322266f, -0.158203f, -0.837891f, 0.119141f, - -0.224609f, -1.00781f, 0.09375f, -0.151367f, -1.00684f, - 0.248047f, -0.238281f, -0.973633f, 0.271484f, -0.324219f, - -0.942383f, 0.443359f, -0.298828f, -0.845703f, 0.581055f, - -0.291992f, -0.700195f, 0.65918f, -0.319336f, -0.262695f, - 0.818359f, -0.286133f, -0.579102f, 0.827148f, -0.272461f, - -0.0908203f, 0.935547f, -0.233398f, -0.374023f, 0.920898f, - -0.137695f, 0.000976562f, 0.964844f, -0.12793f, -0.285156f, - 0.880859f, -0.0244141f, -0.0830078f, 0.930664f, 0.00976562f, - -0.15332f, 0.731445f, 0.172852f, 0.0380859f, 0.876953f, - 0.264648f, -0.194336f, 0.601562f, 0.613281f, -0.132812f, - 0.803711f, 0.53418f, -0.268555f, 0.933594f, 0.899414f, - -0.332031f, 0.923828f, 0.521484f, -0.425781f, 0.972656f, - 0.959961f, -0.506836f, 0.797852f, 0.506836f, -0.125977f, - 0.740234f, 0.756836f, -0.262695f, 0.783203f, 0.691406f, - -0.422852f, 0.474609f, 0.459961f, 0.00390625f, 0.683594f, - 0.941406f, -0.0625f, 0.0810547f, 1.06934f, 0.0625f, - 0.546875f, 0.967773f, 0.0351562f, 0.202148f, 1.32422f, - -0.148438f, 0.269531f, 0.818359f, -0.3125f, 0.0742188f, - 1.23633f, -0.188477f, -0.0263672f, 0.713867f, -0.139648f, - -0.230469f, 0.8125f, -0.134766f, -0.246094f, 0.734375f, - -0.09375f, -0.22168f, 1.17188f, -0.158203f, -0.209961f, - 1.09766f, -0.141602f, 0.00976562f, 0.991211f, -0.238281f, - 0.0341797f, 0.979492f, -0.207031f, -0.0166016f, 1.00293f, - -0.228516f, 0.0527344f, 1.28711f, -0.167969f, 0.164062f, - 0.925781f, -0.255859f, 0.170898f, 0.956055f, -0.256836f, - 0.191406f, 0.936523f, -0.145508f, 0.205078f, 0.904297f, - -0.257812f, 0.117188f, 0.870117f, -0.188477f, 0.166992f, - 1.02441f, -0.288086f, 0.163086f, 0.938477f, -0.262695f, - 0.138672f, 0.947266f, -0.219727f, 0.0947266f, 0.992188f, - -0.0732422f, 0.116211f, 1.00293f, -0.203125f, 0.0205078f, - 0.933594f, -0.235352f, -0.0126953f, 0.844727f, -0.0693359f, - 0.119141f, 1.00195f, -0.110352f, 0.135742f, 1.00391f, - -0.101562f, 0.0546875f, 1.06543f, -0.18457f, 0.0507812f, - 0.933594f, -0.112305f, 0.00976562f, 0.973633f, -0.193359f, - -0.0185547f, 0.885742f, -0.279297f, -0.0107422f, 1.02344f, - -0.078125f, -0.0107422f, 1.0127f, 0.140625f, -0.142578f, - 0.994141f, -0.132812f, -0.145508f, 0.90918f, -0.000976562f, - -0.22168f, 1.0498f, -0.148438f, -0.185547f, 1.2207f, - -0.172852f, -0.196289f, 1.0957f, -0.183594f, -0.0390625f, - 1.34863f, -0.21875f, -0.745117f, 0.952148f, 0.0126953f, - -0.196289f, 1.29492f, -0.150391f, -0.768555f, 0.853516f, - -0.163086f, -0.25f, 0.358398f, -0.0507812f, -0.80957f, - 0.139648f, 0.125f, -0.790039f, -0.257812f, 0.175781f, - -0.795898f, -0.135742f, 0.00585938f, -0.841797f, -0.279297f, - 0.0419922f, -0.708984f, 0.0175781f, -0.0957031f, -0.75f, - -0.204102f, 0.0419922f, -0.78125f, 0.0322266f, -0.125f, - -0.787109f, -0.0380859f, -0.0683594f, -1.06641f, 0.0947266f, - -0.238281f, -1.02148f, 0.117188f, -0.176758f, -1.77539f, - 0.0117188f, -0.31543f, -1.80566f, -0.0625f, -0.273438f, - -0.764648f, 0.143555f, -0.21875f, -0.746094f, 0.162109f, - -0.0351562f, -0.858398f, 0.186523f, -0.250977f, -0.918945f, - 0.0458984f, 0.135742f, -0.988281f, 0.241211f, -0.192383f, - -0.963867f, 0.277344f, -0.129883f, -0.994141f, 0.22168f, - -0.169922f, -0.96582f, 0.290039f, -0.217773f, -0.990234f, - 0.185547f, -0.152344f, -0.978516f, 0.169922f, -0.0361328f, - -0.912109f, 0.119141f, -0.352539f, -0.838867f, 0.183594f, - -0.0380859f, -0.753906f, 0.274414f, -0.575195f, -0.770508f, - 0.192383f, -0.482422f, -0.904297f, -0.0234375f, -0.498047f, - -0.817383f, 0.0527344f, -0.277344f, -0.428711f, 0.114258f, - -0.634766f, -0.427734f, -0.0429688f, -0.405273f, -0.318359f, - 0.118164f, -0.870117f, -0.193359f, 0.171875f, -0.938477f, - -0.1875f, 0.208008f, -1.04688f, -0.246094f, 0.0849609f, - -1.72461f, -0.353516f, 0.234375f, -1.05859f, -0.304688f, - 0.151367f, -1.38672f, -0.663086f, 0.242188f, -0.939453f, - -0.481445f, 0.189453f, -0.87793f, -0.831055f, 0.358398f, - -0.555664f, -0.621094f, 0.444336f, -0.287109f, -0.802734f, - 0.367188f, -0.25293f, -0.753906f, 0.413086f, 0.0126953f, - -1.0127f, 0.335938f, -0.250977f, -0.942383f, 0.563477f, - 0.000976562f, -1.33691f, 0.138672f, -0.365234f, -0.996094f, - 0.542969f, -0.0400391f, -1.44434f, 0.239258f, -0.655273f, - -0.625977f, 0.313477f, -0.444336f, -0.589844f, -0.106445f, - -0.217773f, 0.00585938f, -0.760742f, -0.219727f, 0.0654297f, - -0.626953f, -0.0439453f, 0.0732422f, -1.22168f, 0.0126953f, - 0.210938f, -0.754883f, -0.0839844f, 0.161133f, -0.980469f, - -0.124023f, 0.141602f, -0.828125f, -0.199219f, 0.152344f, - -0.80957f, -0.230469f, 0.231445f, -0.865234f, -0.259766f, - 0.232422f, -0.892578f, -0.305664f, 0.323242f, -0.87793f, - -0.294922f, 0.274414f, -1.0791f, -0.435547f, 0.222656f, - -0.863281f, -0.375f, 0.219727f, -1.0166f, -0.525391f, - 0.0341797f, -0.834961f, -0.454102f, 0.0371094f, -0.984375f, - -0.486328f, -0.135742f, -0.700195f, -0.339844f, -0.0078125f, - -1.20508f, -0.665039f, -0.791016f, 0.00390625f, -0.277344f, - 0.0136719f, -0.492188f, -0.779297f, -1.49316f, 0.0957031f, - -0.179688f, -0.587891f, 0.665039f, 0.398438f, -0.980469f, - 0.428711f, 0.254883f, -0.828125f, 0.724609f, 0.663086f, - -0.90625f, 0.555664f, 0.0791016f, -0.837891f, 0.591797f, - 0.257812f, -0.806641f, 0.609375f, 0.0458984f, -0.779297f, - 0.529297f, 0.00292969f, -0.829102f, 0.640625f, 0.0371094f, - -0.797852f, 0.583008f, 0.208984f, -0.864258f, 0.583984f, - -0.0615234f, -0.758789f, 0.72168f, 0.0947266f, -0.921875f, - 0.605469f, -0.264648f, -0.75293f, 0.701172f, 0.107422f, - -0.735352f, 0.44043f, -0.527344f, -0.398438f, 0.46875f, - -0.421875f, -0.424805f, 0.0810547f, -0.754883f, -0.241211f, - -0.107422f, -1.13574f, -0.410156f, -0.0400391f, -0.942383f, - -0.454102f, -0.12207f, -1.24902f, -0.509766f, -0.393555f, - -0.959961f, -0.511719f, -0.381836f, -1.04883f, -0.924805f, - -0.756836f, -1.17969f, -0.521484f, -0.105469f, -1.16504f, - -0.767578f, -0.477539f, -0.401367f, -0.0341797f, -0.341797f, - 0.0507812f, 0.389648f, -0.507812f, 0.186523f, 0.438477f, - -1.33594f, 0.625977f, 0.518555f, -0.671875f, 0.182617f, - 0.432617f, -1.18359f, 0.132812f, 0.414062f, -0.782227f, - 0.0615234f, 0.401367f, -1.30176f, -0.0683594f, -0.100586f, - -0.586914f, 0.0302734f, 0.191406f, -0.983398f, -0.0273438f, - -0.735352f, -0.224609f, -0.342773f, -0.241211f, -0.566406f, - 0.015625f, -1.1084f, -0.00976562f, -0.652344f, -0.75293f, - 0.239258f, -0.449219f, -1.08789f, 0.107422f, -0.572266f, - -0.887695f, 0.407227f, -0.423828f, -0.919922f, 0.173828f, - -0.705078f, -0.825195f, 0.411133f, -0.484375f, -0.799805f, - 0.237305f, -0.776367f, -0.745117f, 0.459961f, -0.819336f, - -0.749023f, 0.208008f, -0.788086f, -0.716797f, 0.226562f, - -0.795898f, -0.72168f, 0.123047f, -0.790039f, -0.705078f, - 0.101562f, -0.720703f, -0.745117f, -0.0517578f, -0.771484f, - -0.701172f, -0.0175781f, -0.758789f, -0.765625f, -0.0917969f, - -0.745117f, -0.751953f, -0.149414f, -0.6875f, -0.660156f, - -0.0166016f, -0.782227f, -0.592773f, -0.0205078f, -0.726562f, - -0.376953f, 0.119141f, -0.599609f, -0.371094f, 0.0107422f, - -0.736328f, -0.325195f, 0.0771484f, -0.768555f, -0.388672f, - -0.0273438f, -0.750977f, -0.477539f, 0.107422f, -0.919922f, - -0.514648f, 0.125f, -0.961914f, -0.37793f, 0.0136719f, - -0.981445f, -0.447266f, -0.0107422f, -0.823242f, -0.303711f, - 0.0986328f, -1.00684f, -0.366211f, 0.0986328f, -1.14551f, - -0.239258f, 0.140625f, -0.894531f, -0.297852f, 0.0849609f, - -0.949219f, -0.341797f, 0.131836f, -0.966797f, -0.380859f, - 0.0947266f, -0.75293f, -0.391602f, 0.0839844f, -0.908203f, - -0.40625f, 0.161133f, -0.860352f, -0.452148f, 0.1875f, - -0.950195f, -0.496094f, 0.200195f, -0.828125f, -0.581055f, - 0.0771484f, -0.93457f, -0.607422f, 0.0996094f, -0.863281f, - -0.59375f, 0.0927734f, -0.802734f, -0.604492f, 0.0947266f, - -0.807617f, -0.722656f, 0.101562f, -0.844727f, -0.711914f, - 0.149414f, -1.03125f, -0.77832f, 0.125977f, -0.78418f, - -0.740234f, 0.121094f, -0.891602f, -0.808594f, 0.164062f, - -0.650391f, -0.80957f, 0.0888672f, -0.416992f, -0.866211f, - 0.155273f, -0.382812f, -0.880859f, 0.0849609f, -0.264648f, - -0.775391f, 0.229492f, -0.389648f, -0.814453f, 0.0664062f, - -0.226562f, -0.625f, 0.414062f, -0.274414f, -0.681641f, - 0.0292969f, -0.0478516f, -0.711914f, 0.794922f, -0.388672f, - -0.584961f, 0.368164f, -0.257812f, -0.545898f, 1.09277f, - -0.277344f, -0.125977f, 0.822266f, -0.365234f, -0.467773f, - 0.714844f, -0.413086f, -0.136719f, 1.57227f, -0.0947266f, - -0.223633f, 0.817383f, -0.0556641f, -0.0322266f, 1.18945f, - -0.191406f, -0.498047f, 0.991211f, -0.231445f, -0.246094f, - 0.8125f, -0.239258f, -0.755859f, 0.853516f, -0.228516f, - -0.821289f, 0.503906f, -0.121094f, -0.795898f, 0.523438f, - -0.220703f, -0.773438f, 0.517578f, -0.274414f, -0.757812f, - 0.539062f, -0.222656f, -0.770508f, 0.396484f, -0.115234f, - -1.2334f, 0.485352f, -0.217773f, -0.94043f, 1.01758f, - -0.202148f, -0.605469f, 0.0546875f, 0.0957031f, -0.639648f, - -0.661133f, 0.245117f, -0.750977f, 0.0615234f, -0.726562f, - -0.879883f, -0.432617f, -1.05859f, -1.29688f, 0.00488281f, - 0.193359f, -0.939453f, 0.209961f, -0.209961f, -0.793945f, - 0.251953f, 0.722656f, -0.447266f, 0.0615234f, 0.855469f, - -0.454102f, -0.0126953f, 0.0527344f, -0.342773f, 0.154297f, - 1.3877f, -0.65918f, 0.133789f, 0.0576172f, -0.233398f, - -0.12207f, 0.46582f, -1.09961f, 0.438477f, -0.641602f, - -0.861328f, 0.197266f, -1.99902f, -0.932617f, 0.234375f, - 0.389648f, -0.792969f, -0.0908203f, 1.66797f, -1.0459f, - 0.0107422f, -0.543945f, -0.80957f, 0.206055f, -0.27832f, - -0.915039f, 0.104492f, -0.301758f, -0.891602f, 0.0556641f, - -0.681641f, -0.901367f, 0.0498047f, -0.461914f, -0.927734f, - -0.0390625f, -0.229492f, -1.04004f, 0.0869141f, -0.435547f, - -1.02148f, 0.0947266f, -0.527344f, -0.979492f, 0.0751953f, - 0.266602f, -0.786133f, -0.0224609f, -0.0947266f, -0.702148f, - -0.00683594f, -0.316406f, -0.698242f, -0.317383f, 1.92578f, - -1.0498f, 0.0273438f, -1.14258f, -0.226562f, 0.233398f, - -0.995117f, -0.9375f, 0.0146484f, -0.223633f, -0.49707f, - -0.0078125f, -1.95703f, -0.847656f, 0.157227f, 0.129883f, - -0.459961f, -0.114258f, 2.0f, -1.13574f, -0.0839844f, - -0.0878906f, -0.783203f, 0.131836f, -0.803711f, -0.90332f, - 0.208984f, -0.365234f, -0.97168f, -0.0322266f, 0.186523f, - -0.924805f, 0.00292969f, -0.272461f, -0.890625f, 0.015625f, - -0.333008f, -0.932617f, 0.180664f, -0.459961f, -0.90918f, - 0.240234f, -0.625977f, -1.1582f, 0.0996094f, -0.170898f, - -1.08887f, -0.00976562f, -0.849609f, -0.430664f, 0.139648f, - -0.308594f, -0.572266f, -0.722656f, 1.83496f, -1.00977f, - 0.387695f, 0.487305f, -0.268555f, 0.0712891f, -0.0136719f, - -1.5332f, 0.290039f, -0.0351562f, -0.861328f, 1.98535f, - -1.16602f, -0.602539f, 0.441406f, 0.175781f, -0.605469f, - -0.831055f, 0.686523f, -0.984375f, 0.494141f, -0.489258f, - -0.895508f, 0.371094f, -0.665039f, -1.14258f, -0.214844f, - -0.140625f, -1.06348f, -0.0996094f, 0.255859f, -0.874023f, - 0.193359f, -0.0947266f, -0.959961f, -0.0966797f, 0.00195312f, - -0.996094f, -0.0117188f, -0.174805f, -0.962891f, 0.106445f, - -0.162109f, -1.04297f, -0.0283203f, -0.306641f, -1.06738f, - -0.0224609f, -0.129883f, -1.03223f, 0.129883f, 0.195312f, - -1.08789f, -0.130859f, 0.649414f, -0.572266f, -0.0136719f, - -0.793945f, -0.382812f, 0.0f, -1.08301f, -0.78125f, - -0.0224609f, -0.339844f, -0.629883f, -0.0947266f, -1.83789f, - -1.01562f, 0.046875f, 0.223633f, -0.808594f, 0.0957031f, - 1.09766f, -0.756836f, -0.0488281f, 0.157227f, -0.59082f, - -0.103516f, 0.929688f, -0.816406f, -0.0322266f, -0.426758f, - -0.868164f, -0.209961f, -1.99902f, -0.986328f, -0.00878906f, - -0.365234f, -0.980469f, 0.0439453f, 0.59375f, -0.994141f, - 0.0253906f, 0.0371094f, -0.970703f, -0.0273438f, -0.120117f, - -0.935547f, 0.00195312f, -0.235352f, -0.952148f, -0.0263672f, - -0.194336f, -0.917969f, -0.0195312f, -0.261719f, -0.928711f, - -0.0234375f, -0.219727f, -0.945312f, 0.0107422f, -0.228516f, - -0.938477f, 0.00683594f, -0.178711f, -0.791016f, 0.03125f, - -0.255859f, -0.789062f, 0.0f, -0.141602f, -0.789062f, - 0.232422f, -0.285156f, -0.788086f, 0.228516f, -0.28125f, - -1.0f, 0.258789f, -0.277344f, -0.999023f, 0.28125f, - -0.25293f, -1.06152f, 0.046875f, -0.421875f, -1.07715f, - 0.0390625f, -0.224609f, -0.923828f, -0.0205078f, -0.335938f, - -0.984375f, -0.0966797f, -0.34668f, -0.990234f, -0.191406f, - -0.301758f, -1.03613f, -0.241211f, -0.37207f, -0.975586f, - -0.267578f, -0.460938f, -1.00977f, -0.320312f, -0.382812f, - -0.913086f, -0.257812f, -0.457031f, -0.925781f, -0.256836f, - -0.34668f, -0.889648f, -0.237305f, -0.393555f, -0.897461f, - -0.239258f, -0.429688f, -0.844727f, -0.21875f, -0.428711f, - -0.87207f, -0.203125f, -0.368164f, -0.84668f, -0.101562f, - -0.423828f, -0.875977f, -0.165039f, -0.363281f, -0.884766f, - -0.0625f, -0.473633f, -0.90332f, -0.078125f, -0.138672f, - -0.918945f, -0.198242f, -0.25f, -0.928711f, -0.138672f, - -0.267578f, -1.08203f, 0.00488281f, -0.575195f, -1.125f, - -0.0332031f, -0.4375f, -0.924805f, 0.078125f, -0.305664f, - -0.93457f, -0.0166016f, -0.475586f, -0.94043f, -0.00488281f, - -0.533203f, -0.956055f, 0.00292969f, -0.391602f, -1.00293f, - 0.0361328f, -0.711914f, -1.0166f, 0.0332031f, -0.448242f, - -0.806641f, -0.21582f, -0.556641f, -0.759766f, -0.0214844f, - -0.626953f, -0.700195f, -0.263672f, -0.308594f, -0.608398f, - -0.236328f, -0.253906f, -0.616211f, -0.378906f, 0.224609f, - -0.498047f, -0.399414f, 0.206055f, -0.516602f, -0.228516f, - 0.743164f, -0.174805f, -0.125f, 0.760742f, -0.0214844f, - -0.135742f, 0.966797f, 0.240234f, 0.0332031f, 1.01855f, - 0.105469f, 0.15332f, 0.950195f, 0.240234f, 0.0732422f, - 1.16895f, 0.245117f, 0.206055f, 0.952148f, 0.273438f, - -0.0390625f, 1.2793f, 0.404297f, 0.303711f, 0.720703f, - 0.369141f, 0.0966797f, 0.918945f, 0.329102f, 0.0390625f, - 0.991211f, 0.397461f, -0.124023f, 0.866211f, 0.210938f, - 0.130859f, 1.08789f, 0.317383f, 0.0537109f, 0.858398f, - 0.245117f, 0.0732422f, 0.741211f, 0.419922f, 0.0302734f, - 0.681641f, 0.485352f, -0.0214844f, 0.641602f, 0.520508f, - -0.129883f, 0.839844f, 0.490234f, 0.00390625f, 0.676758f, - 0.581055f, -0.0146484f, 0.692383f, 0.432617f, -0.0371094f, - 0.807617f, 0.664062f, 0.255859f, 0.216797f, 1.22559f, - 0.0195312f, 1.22168f, 1.2793f, -0.405273f, 1.72559f, - 0.708984f, -0.209961f, 0.579102f, 0.821289f, 0.0380859f, - 0.605469f, 0.80957f, 0.147461f, 0.419922f, 0.869141f, - 0.0390625f, 0.5625f, 0.786133f, 0.0654297f, 0.594727f, - 0.879883f, 0.0166016f, 0.480469f, 0.835938f, 0.00195312f, - 0.414062f, 0.899414f, -0.03125f, 0.344727f, 0.889648f, - 0.0185547f, 0.236328f, 0.932617f, -0.00585938f, 0.255859f, - 0.910156f, 0.0898438f, 0.262695f, 0.945312f, 0.0126953f, - 0.279297f, 0.860352f, 0.0507812f, 0.322266f, 0.913086f, - 0.00195312f, 0.296875f, 0.875977f, 0.0078125f, 0.373047f, - 0.922852f, -0.0244141f, 0.267578f, 0.884766f, 0.0117188f, - 0.347656f, 0.926758f, -0.0371094f, 0.266602f, 0.894531f, - -0.00683594f, 0.345703f, 0.926758f, -0.0478516f, 0.269531f, - 0.887695f, 0.0146484f, 0.360352f, 0.927734f, -0.03125f, - 0.272461f}; + 0.892578f, -0.0810547f, 0.0146484f, 0.929688f, -0.0644531f, + -0.0234375f, 0.996094f, -0.0136719f, 0.0185547f, 1.02344f, + -0.0615234f, -0.0449219f, 0.978516f, 0.125977f, 0.0400391f, + 0.996094f, 0.0332031f, -0.0117188f, 0.963867f, 0.107422f, + 0.0214844f, 0.980469f, 0.0185547f, -0.00683594f, 0.952148f, + 0.0361328f, 0.0253906f, 0.976562f, -0.00390625f, -0.0126953f, + 0.97168f, 0.0205078f, 0.0517578f, 1.01074f, 0.015625f, + -0.0234375f, 0.953125f, -0.000976562f, 0.0390625f, 0.977539f, + -0.0224609f, -0.00976562f, 0.954102f, 0.0244141f, 0.0439453f, + 0.986328f, 0.00292969f, -0.000976562f, 0.967773f, 0.0537109f, + 0.046875f, 0.99707f, 0.0175781f, -0.000976562f, 0.951172f, + 0.0390625f, 0.0341797f, 0.974609f, -0.00878906f, -0.000976562f, + 0.948242f, 0.0185547f, 0.0478516f, 0.976562f, -0.000976562f, + -0.00683594f, 0.958984f, 0.0263672f, 0.078125f, 0.982422f, + -0.0205078f, 0.0283203f, 0.930664f, 0.00878906f, 0.0664062f, + 0.970703f, 0.00390625f, -0.0078125f, 0.945312f, 0.0380859f, + -0.00585938f, 0.972656f, 0.0419922f, -0.0478516f, 1.01953f, + 0.240234f, -0.182617f, 1.00977f, 0.18457f, -0.126953f, + 1.05566f, 0.0751953f, -0.0888672f, 1.09766f, 0.0732422f, + -0.0898438f, 1.21484f, 0.119141f, -0.000976562f, 1.23633f, + 0.194336f, -0.447266f, 1.31445f, 0.213867f, -0.118164f, + 1.30762f, 0.0908203f, -0.260742f, 0.860352f, 0.141602f, + -0.166016f, 0.868164f, 0.0429688f, -0.258789f, 0.727539f, + 0.0419922f, -0.21875f, 0.740234f, 0.0126953f, -0.162109f, + 0.652344f, -0.00292969f, -0.185547f, 0.666992f, 0.0800781f, + -0.272461f, 0.852539f, -0.0478516f, -0.228516f, 0.819336f, + -0.0996094f, -0.180664f, 0.959961f, -0.0537109f, -0.240234f, + 0.935547f, -0.0917969f, -0.269531f, 0.988281f, -0.0507812f, + -0.197266f, 0.981445f, -0.0712891f, -0.323242f, 0.964844f, + -0.0683594f, -0.203125f, 0.941406f, -0.0898438f, -0.236328f, + 0.942383f, -0.0429688f, -0.206055f, 0.921875f, -0.0527344f, + -0.239258f, 0.976562f, -0.0742188f, -0.261719f, 0.958008f, + -0.09375f, -0.311523f, 0.949219f, -0.0839844f, -0.242188f, + 0.949219f, -0.0742188f, -0.323242f, 0.973633f, -0.0263672f, + -0.238281f, 0.958984f, -0.0488281f, -0.293945f, 0.931641f, + -0.0214844f, -0.225586f, 0.931641f, 0.0195312f, -0.225586f, + 0.810547f, -0.0947266f, -0.15332f, 0.947266f, 0.241211f, + -0.100586f, 0.326172f, 0.286133f, -0.12207f, 0.855469f, + 0.677734f, -0.228516f, 0.229492f, 1.08398f, 0.0224609f, + 0.822266f, 0.759766f, -0.0722656f, 0.294922f, 1.42676f, + 0.147461f, 0.239258f, 0.755859f, 0.142578f, -0.120117f, + 1.00977f, -0.0722656f, -0.154297f, 0.832031f, -0.0576172f, + -0.15332f, 1.10156f, -0.0273438f, -0.119141f, 1.05078f, + 0.0166016f, -0.0927734f, 1.09961f, -0.0703125f, -0.0751953f, + 1.04688f, -0.00195312f, -0.078125f, 0.897461f, -0.0625f, + -0.078125f, 0.854492f, -0.0947266f, -0.123047f, 0.811523f, + -0.0488281f, -0.113281f, 0.796875f, 0.0f, -0.0488281f, + 0.961914f, -0.177734f, -0.0898438f, 0.859375f, -0.172852f, + 0.0126953f, 1.1084f, -0.158203f, 0.0292969f, 1.0791f, + -0.152344f, 0.154297f, 1.29492f, -0.126953f, 0.134766f, + 1.23145f, -0.0878906f, -0.200195f, 0.667969f, -0.216797f, + -0.0888672f, 0.935547f, -0.143555f, 0.000976562f, 1.13281f, + -0.0498047f, 0.00195312f, 1.05469f, -0.231445f, 0.0927734f, + 0.956055f, -0.292969f, 0.0625f, 0.927734f, -0.112305f, + 0.0585938f, 0.975586f, -0.163086f, 0.0957031f, 1.03418f, + -0.229492f, 0.000976562f, 0.985352f, -0.09375f, -0.00585938f, + 0.945312f, -0.140625f, -0.0302734f, 0.998047f, -0.208008f, + -0.0507812f, 0.916016f, -0.112305f, 0.123047f, 0.981445f, + -0.205078f, 0.129883f, 1.02832f, -0.211914f, 0.105469f, + 1.01367f, -0.142578f, 0.111328f, 1.00098f, -0.110352f, + 0.0986328f, 0.999023f, -0.15918f, 0.0839844f, 0.922852f, + -0.223633f, 0.261719f, 1.06641f, -0.138672f, 0.240234f, + 0.916016f, -0.296875f, 0.00488281f, 1.04199f, -0.128906f, + 0.0341797f, 1.0791f, -0.265625f, 0.015625f, 0.963867f, + -0.161133f, 0.015625f, 0.958008f, -0.0722656f, -0.125f, + 1.03125f, -0.19043f, -0.0722656f, 1.16602f, -0.126953f, + -0.143555f, 1.12793f, -0.197266f, -0.120117f, 1.26465f, + -0.232422f, -0.226562f, 1.125f, -0.0712891f, -0.0927734f, + 1.26465f, -0.145508f, -0.551758f, 0.90918f, -0.163086f, + -0.228516f, 1.2041f, -0.0371094f, -0.493164f, 0.827148f, + 0.0371094f, -0.162109f, 0.568359f, -0.195312f, -0.641602f, + 0.438477f, -0.212891f, -0.513672f, 0.208008f, -0.0488281f, + -0.776367f, 0.0488281f, -0.115234f, -0.84375f, -0.314453f, + 0.106445f, -0.966797f, -0.0078125f, 0.00976562f, -1.01953f, + -0.220703f, -0.0322266f, -0.994141f, 0.0117188f, -0.248047f, + -0.975586f, 0.121094f, -0.0205078f, -0.947266f, 0.00292969f, + -0.160156f, -0.9375f, 0.0175781f, -0.0986328f, -0.916992f, + -0.0195312f, -0.208008f, -0.9375f, -0.0654297f, -0.134766f, + -0.948242f, -0.0185547f, -0.231445f, -0.977539f, -0.0537109f, + -0.198242f, -1.0166f, 0.0439453f, -0.433594f, -0.994141f, + -0.0595703f, -0.389648f, -1.07129f, 0.0859375f, -0.109375f, + -1.01953f, 0.0966797f, -0.12207f, -1.01074f, 0.125977f, + -0.192383f, -1.0f, 0.0820312f, -0.166016f, -1.04688f, + 0.0751953f, -0.265625f, -1.00879f, 0.139648f, -0.135742f, + -1.00977f, 0.0644531f, -0.235352f, -0.989258f, 0.100586f, + -0.144531f, -0.858398f, 0.0273438f, -0.22168f, -0.878906f, + -0.0634766f, -0.1875f, -0.905273f, -0.0195312f, -0.232422f, + -0.926758f, -0.0732422f, -0.319336f, -1.05078f, -0.00878906f, + -0.5625f, -1.05176f, 0.111328f, -0.456055f, -0.942383f, + -0.0146484f, -0.171875f, -0.946289f, -0.0224609f, -0.174805f, + -0.901367f, -0.0283203f, -0.332031f, -0.948242f, -0.0732422f, + -0.262695f, -0.867188f, 0.0351562f, -0.271484f, -0.913086f, + -0.0878906f, -0.259766f, -1.2793f, -0.226562f, -0.382812f, + -1.2334f, 0.0400391f, -0.260742f, -1.22949f, -0.216797f, + -0.432617f, -1.21191f, -0.131836f, -0.368164f, -1.10938f, + -0.323242f, -0.505859f, -1.01953f, -0.197266f, -0.405273f, + -1.25488f, -0.347656f, -0.448242f, -0.803711f, 0.0595703f, + -0.253906f, -0.489258f, -0.00390625f, 0.101562f, 0.15332f, + -0.423828f, -0.0195312f, 0.527344f, -0.350586f, -0.24707f, + 0.363281f, -1.33789f, -0.214844f, 0.322266f, -0.768555f, + -0.279297f, 0.266602f, -0.918945f, -0.320312f, 0.0634766f, + -0.97168f, -0.102539f, 0.114258f, -0.891602f, -0.158203f, + 0.0283203f, -0.998047f, -0.198242f, 0.0634766f, -0.931641f, + -0.239258f, 0.147461f, -0.963867f, -0.219727f, 0.142578f, + -1.02051f, -0.279297f, 0.105469f, -0.955078f, -0.238281f, + 0.104492f, -1.02637f, -0.291992f, -0.0302734f, -1.02637f, + -0.225586f, 0.000976562f, -0.907227f, -0.12793f, 0.03125f, + -0.979492f, -0.100586f, 0.0625f, -0.921875f, -0.155273f, + 0.146484f, -0.929688f, -0.158203f, 0.155273f, -0.981445f, + -0.171875f, 0.212891f, -0.927734f, -0.166992f, 0.198242f, + -1.05371f, -0.197266f, 0.189453f, -0.954102f, -0.113281f, + 0.189453f, -1.00293f, -0.180664f, 0.111328f, -0.967773f, + -0.109375f, 0.125977f, -0.966797f, -0.146484f, 0.0712891f, + -0.982422f, -0.0908203f, 0.112305f, -0.928711f, -0.149414f, + 0.0146484f, -1.00781f, -0.0996094f, 0.102539f, -0.810547f, + -0.157227f, -0.0117188f, -0.820312f, -0.0371094f, 0.28418f, + -0.446289f, -0.166016f, 0.208008f, -0.03125f, -0.0761719f, + 0.755859f, -0.280273f, -0.316406f, 1.42188f, 0.198242f, + -0.49707f, 1.37207f, -0.556641f, -0.382812f, 1.36523f, + 0.110352f, -0.342773f, 1.25391f, -0.225586f, -0.570312f, + 0.958984f, 0.0722656f, -0.237305f, 0.984375f, 0.0957031f, + -0.416992f, 0.853516f, 0.0400391f, -0.416016f, 0.873047f, + 0.0644531f, -0.370117f, 1.04004f, 0.0273438f, -0.408203f, + 0.920898f, -0.0986328f, -0.514648f, 0.956055f, 0.0527344f, + -0.428711f, 0.960938f, 0.109375f, -0.522461f, 0.801758f, + -0.277344f, -0.634766f, 0.882812f, 0.0527344f, -0.34668f, + 0.981445f, -0.09375f, -0.298828f, 0.952148f, -0.213867f, + -0.25293f, 0.90918f, -0.132812f, -0.493164f, 0.885742f, + -0.177734f, -0.525391f, 0.915039f, -0.0605469f, -0.439453f, + 0.87207f, -0.0986328f, -0.506836f, 0.905273f, -0.0732422f, + -0.462891f, 0.870117f, -0.0966797f, -0.511719f, 0.897461f, + -0.0234375f, -0.464844f, 0.868164f, -0.0283203f, -0.474609f, + 0.919922f, 0.0205078f, -0.34375f, 0.889648f, -0.00390625f, + -0.445312f, 0.804688f, -0.0263672f, -0.417969f, 0.806641f, + 0.0410156f, -0.399414f, 0.914062f, -0.0722656f, -0.386719f, + 0.890625f, -0.0615234f, -0.40625f, 0.928711f, 0.0253906f, + -0.118164f, 0.943359f, -0.000976562f, -0.398438f, 0.811523f, + -0.0605469f, -0.234375f, 0.879883f, 0.198242f, -0.509766f, + 0.958008f, 0.0361328f, -0.328125f, 0.938477f, -0.00976562f, + -0.429688f, 0.916016f, -0.0185547f, -0.266602f, 0.898438f, + -0.0380859f, -0.450195f, 0.870117f, 0.162109f, -0.210938f, + 0.899414f, 0.117188f, -0.517578f, 0.756836f, -0.0820312f, + -0.361328f, 0.868164f, -0.0576172f, -1.29883f, 0.515625f, + -0.00195312f, -1.13281f, 0.628906f, 0.00390625f, -0.103516f, + 0.485352f, -0.046875f, -0.922852f, 0.412109f, -0.108398f, + -0.898438f, 0.446289f, -0.111328f, -0.925781f, 0.375977f, + -0.125977f, -0.825195f, 0.446289f, -0.0966797f, -0.958008f, + 0.389648f, -0.0810547f, -1.00781f, 0.532227f, -0.104492f, + -1.0791f, 0.459961f, -0.138672f, -0.941406f, 0.509766f, + -0.107422f, -1.14062f, 0.447266f, -0.195312f, -0.867188f, + 0.474609f, -0.233398f, -0.751953f, 0.612305f, -0.126953f, + -0.661133f, 0.702148f, -0.199219f, -0.260742f, 0.856445f, + -0.0292969f, -0.743164f, 0.921875f, -0.0371094f, -0.293945f, + 0.902344f, -0.103516f, -0.416016f, 0.955078f, -0.00488281f, + -0.232422f, 0.951172f, -0.0498047f, -0.331055f, 0.871094f, + 0.00390625f, -0.186523f, 0.905273f, 0.0566406f, -0.249023f, + 0.677734f, 0.0253906f, 0.145508f, 0.826172f, 0.251953f, + -0.428711f, 0.764648f, 0.488281f, -0.265625f, 0.886719f, + 0.256836f, -0.408203f, 0.744141f, 0.689453f, -0.611328f, + 0.755859f, 0.431641f, -0.525391f, 0.588867f, 0.637695f, + -0.750977f, 0.578125f, 0.568359f, -0.540039f, 0.512695f, + 0.530273f, -0.722656f, 0.498047f, 0.526367f, -0.788086f, + 0.647461f, 0.522461f, -0.862305f, 0.567383f, 0.422852f, + -0.765625f, 0.648438f, 0.405273f, -0.938477f, 0.583008f, + 0.272461f, -1.15137f, 0.481445f, 0.00585938f, -0.788086f, + 0.454102f, -0.0615234f, -0.885742f, 0.306641f, -0.333984f, + -0.678711f, 0.322266f, -0.288086f, -0.615234f, 0.220703f, + -0.476562f, -0.748047f, 0.223633f, -0.396484f, -0.729492f, + 0.235352f, -0.510742f, -0.806641f, 0.227539f, -0.476562f, + -0.665039f, 0.275391f, -0.47168f, -0.938477f, 0.345703f, + -0.369141f, -0.709961f, 0.482422f, -0.393555f, -0.380859f, + 0.759766f, -0.143555f, -0.529297f, 0.956055f, -0.0185547f, + -0.12207f, 1.15527f, 0.0380859f, -0.529297f, 1.04102f, + 0.203125f, -0.0283203f, 1.11719f, 0.0888672f, -0.258789f, + 1.02734f, 0.297852f, -0.0244141f, 1.03223f, 0.211914f, + -0.0859375f, 0.798828f, 0.216797f, 0.19043f, 0.891602f, + 0.256836f, -0.102539f, 0.662109f, 0.263672f, 0.208984f, + 0.810547f, 0.380859f, -0.235352f, 0.707031f, 0.507812f, + -0.0800781f, 0.902344f, 0.470703f, -0.301758f, 0.577148f, + 0.674805f, -0.500977f, 0.748047f, 0.472656f, -0.493164f, + 0.478516f, 0.611328f, -1.04395f, 0.491211f, 0.651367f, + -0.581055f, 0.25293f, 0.325195f, -0.950195f, 0.224609f, + 0.404297f, -1.04883f, 0.116211f, -0.00292969f, -0.980469f, + 0.0566406f, 0.0195312f, -0.821289f, 0.0166016f, -0.141602f, + -0.959961f, -0.0322266f, -0.158203f, -0.837891f, 0.119141f, + -0.224609f, -1.00781f, 0.09375f, -0.151367f, -1.00684f, + 0.248047f, -0.238281f, -0.973633f, 0.271484f, -0.324219f, + -0.942383f, 0.443359f, -0.298828f, -0.845703f, 0.581055f, + -0.291992f, -0.700195f, 0.65918f, -0.319336f, -0.262695f, + 0.818359f, -0.286133f, -0.579102f, 0.827148f, -0.272461f, + -0.0908203f, 0.935547f, -0.233398f, -0.374023f, 0.920898f, + -0.137695f, 0.000976562f, 0.964844f, -0.12793f, -0.285156f, + 0.880859f, -0.0244141f, -0.0830078f, 0.930664f, 0.00976562f, + -0.15332f, 0.731445f, 0.172852f, 0.0380859f, 0.876953f, + 0.264648f, -0.194336f, 0.601562f, 0.613281f, -0.132812f, + 0.803711f, 0.53418f, -0.268555f, 0.933594f, 0.899414f, + -0.332031f, 0.923828f, 0.521484f, -0.425781f, 0.972656f, + 0.959961f, -0.506836f, 0.797852f, 0.506836f, -0.125977f, + 0.740234f, 0.756836f, -0.262695f, 0.783203f, 0.691406f, + -0.422852f, 0.474609f, 0.459961f, 0.00390625f, 0.683594f, + 0.941406f, -0.0625f, 0.0810547f, 1.06934f, 0.0625f, + 0.546875f, 0.967773f, 0.0351562f, 0.202148f, 1.32422f, + -0.148438f, 0.269531f, 0.818359f, -0.3125f, 0.0742188f, + 1.23633f, -0.188477f, -0.0263672f, 0.713867f, -0.139648f, + -0.230469f, 0.8125f, -0.134766f, -0.246094f, 0.734375f, + -0.09375f, -0.22168f, 1.17188f, -0.158203f, -0.209961f, + 1.09766f, -0.141602f, 0.00976562f, 0.991211f, -0.238281f, + 0.0341797f, 0.979492f, -0.207031f, -0.0166016f, 1.00293f, + -0.228516f, 0.0527344f, 1.28711f, -0.167969f, 0.164062f, + 0.925781f, -0.255859f, 0.170898f, 0.956055f, -0.256836f, + 0.191406f, 0.936523f, -0.145508f, 0.205078f, 0.904297f, + -0.257812f, 0.117188f, 0.870117f, -0.188477f, 0.166992f, + 1.02441f, -0.288086f, 0.163086f, 0.938477f, -0.262695f, + 0.138672f, 0.947266f, -0.219727f, 0.0947266f, 0.992188f, + -0.0732422f, 0.116211f, 1.00293f, -0.203125f, 0.0205078f, + 0.933594f, -0.235352f, -0.0126953f, 0.844727f, -0.0693359f, + 0.119141f, 1.00195f, -0.110352f, 0.135742f, 1.00391f, + -0.101562f, 0.0546875f, 1.06543f, -0.18457f, 0.0507812f, + 0.933594f, -0.112305f, 0.00976562f, 0.973633f, -0.193359f, + -0.0185547f, 0.885742f, -0.279297f, -0.0107422f, 1.02344f, + -0.078125f, -0.0107422f, 1.0127f, 0.140625f, -0.142578f, + 0.994141f, -0.132812f, -0.145508f, 0.90918f, -0.000976562f, + -0.22168f, 1.0498f, -0.148438f, -0.185547f, 1.2207f, + -0.172852f, -0.196289f, 1.0957f, -0.183594f, -0.0390625f, + 1.34863f, -0.21875f, -0.745117f, 0.952148f, 0.0126953f, + -0.196289f, 1.29492f, -0.150391f, -0.768555f, 0.853516f, + -0.163086f, -0.25f, 0.358398f, -0.0507812f, -0.80957f, + 0.139648f, 0.125f, -0.790039f, -0.257812f, 0.175781f, + -0.795898f, -0.135742f, 0.00585938f, -0.841797f, -0.279297f, + 0.0419922f, -0.708984f, 0.0175781f, -0.0957031f, -0.75f, + -0.204102f, 0.0419922f, -0.78125f, 0.0322266f, -0.125f, + -0.787109f, -0.0380859f, -0.0683594f, -1.06641f, 0.0947266f, + -0.238281f, -1.02148f, 0.117188f, -0.176758f, -1.77539f, + 0.0117188f, -0.31543f, -1.80566f, -0.0625f, -0.273438f, + -0.764648f, 0.143555f, -0.21875f, -0.746094f, 0.162109f, + -0.0351562f, -0.858398f, 0.186523f, -0.250977f, -0.918945f, + 0.0458984f, 0.135742f, -0.988281f, 0.241211f, -0.192383f, + -0.963867f, 0.277344f, -0.129883f, -0.994141f, 0.22168f, + -0.169922f, -0.96582f, 0.290039f, -0.217773f, -0.990234f, + 0.185547f, -0.152344f, -0.978516f, 0.169922f, -0.0361328f, + -0.912109f, 0.119141f, -0.352539f, -0.838867f, 0.183594f, + -0.0380859f, -0.753906f, 0.274414f, -0.575195f, -0.770508f, + 0.192383f, -0.482422f, -0.904297f, -0.0234375f, -0.498047f, + -0.817383f, 0.0527344f, -0.277344f, -0.428711f, 0.114258f, + -0.634766f, -0.427734f, -0.0429688f, -0.405273f, -0.318359f, + 0.118164f, -0.870117f, -0.193359f, 0.171875f, -0.938477f, + -0.1875f, 0.208008f, -1.04688f, -0.246094f, 0.0849609f, + -1.72461f, -0.353516f, 0.234375f, -1.05859f, -0.304688f, + 0.151367f, -1.38672f, -0.663086f, 0.242188f, -0.939453f, + -0.481445f, 0.189453f, -0.87793f, -0.831055f, 0.358398f, + -0.555664f, -0.621094f, 0.444336f, -0.287109f, -0.802734f, + 0.367188f, -0.25293f, -0.753906f, 0.413086f, 0.0126953f, + -1.0127f, 0.335938f, -0.250977f, -0.942383f, 0.563477f, + 0.000976562f, -1.33691f, 0.138672f, -0.365234f, -0.996094f, + 0.542969f, -0.0400391f, -1.44434f, 0.239258f, -0.655273f, + -0.625977f, 0.313477f, -0.444336f, -0.589844f, -0.106445f, + -0.217773f, 0.00585938f, -0.760742f, -0.219727f, 0.0654297f, + -0.626953f, -0.0439453f, 0.0732422f, -1.22168f, 0.0126953f, + 0.210938f, -0.754883f, -0.0839844f, 0.161133f, -0.980469f, + -0.124023f, 0.141602f, -0.828125f, -0.199219f, 0.152344f, + -0.80957f, -0.230469f, 0.231445f, -0.865234f, -0.259766f, + 0.232422f, -0.892578f, -0.305664f, 0.323242f, -0.87793f, + -0.294922f, 0.274414f, -1.0791f, -0.435547f, 0.222656f, + -0.863281f, -0.375f, 0.219727f, -1.0166f, -0.525391f, + 0.0341797f, -0.834961f, -0.454102f, 0.0371094f, -0.984375f, + -0.486328f, -0.135742f, -0.700195f, -0.339844f, -0.0078125f, + -1.20508f, -0.665039f, -0.791016f, 0.00390625f, -0.277344f, + 0.0136719f, -0.492188f, -0.779297f, -1.49316f, 0.0957031f, + -0.179688f, -0.587891f, 0.665039f, 0.398438f, -0.980469f, + 0.428711f, 0.254883f, -0.828125f, 0.724609f, 0.663086f, + -0.90625f, 0.555664f, 0.0791016f, -0.837891f, 0.591797f, + 0.257812f, -0.806641f, 0.609375f, 0.0458984f, -0.779297f, + 0.529297f, 0.00292969f, -0.829102f, 0.640625f, 0.0371094f, + -0.797852f, 0.583008f, 0.208984f, -0.864258f, 0.583984f, + -0.0615234f, -0.758789f, 0.72168f, 0.0947266f, -0.921875f, + 0.605469f, -0.264648f, -0.75293f, 0.701172f, 0.107422f, + -0.735352f, 0.44043f, -0.527344f, -0.398438f, 0.46875f, + -0.421875f, -0.424805f, 0.0810547f, -0.754883f, -0.241211f, + -0.107422f, -1.13574f, -0.410156f, -0.0400391f, -0.942383f, + -0.454102f, -0.12207f, -1.24902f, -0.509766f, -0.393555f, + -0.959961f, -0.511719f, -0.381836f, -1.04883f, -0.924805f, + -0.756836f, -1.17969f, -0.521484f, -0.105469f, -1.16504f, + -0.767578f, -0.477539f, -0.401367f, -0.0341797f, -0.341797f, + 0.0507812f, 0.389648f, -0.507812f, 0.186523f, 0.438477f, + -1.33594f, 0.625977f, 0.518555f, -0.671875f, 0.182617f, + 0.432617f, -1.18359f, 0.132812f, 0.414062f, -0.782227f, + 0.0615234f, 0.401367f, -1.30176f, -0.0683594f, -0.100586f, + -0.586914f, 0.0302734f, 0.191406f, -0.983398f, -0.0273438f, + -0.735352f, -0.224609f, -0.342773f, -0.241211f, -0.566406f, + 0.015625f, -1.1084f, -0.00976562f, -0.652344f, -0.75293f, + 0.239258f, -0.449219f, -1.08789f, 0.107422f, -0.572266f, + -0.887695f, 0.407227f, -0.423828f, -0.919922f, 0.173828f, + -0.705078f, -0.825195f, 0.411133f, -0.484375f, -0.799805f, + 0.237305f, -0.776367f, -0.745117f, 0.459961f, -0.819336f, + -0.749023f, 0.208008f, -0.788086f, -0.716797f, 0.226562f, + -0.795898f, -0.72168f, 0.123047f, -0.790039f, -0.705078f, + 0.101562f, -0.720703f, -0.745117f, -0.0517578f, -0.771484f, + -0.701172f, -0.0175781f, -0.758789f, -0.765625f, -0.0917969f, + -0.745117f, -0.751953f, -0.149414f, -0.6875f, -0.660156f, + -0.0166016f, -0.782227f, -0.592773f, -0.0205078f, -0.726562f, + -0.376953f, 0.119141f, -0.599609f, -0.371094f, 0.0107422f, + -0.736328f, -0.325195f, 0.0771484f, -0.768555f, -0.388672f, + -0.0273438f, -0.750977f, -0.477539f, 0.107422f, -0.919922f, + -0.514648f, 0.125f, -0.961914f, -0.37793f, 0.0136719f, + -0.981445f, -0.447266f, -0.0107422f, -0.823242f, -0.303711f, + 0.0986328f, -1.00684f, -0.366211f, 0.0986328f, -1.14551f, + -0.239258f, 0.140625f, -0.894531f, -0.297852f, 0.0849609f, + -0.949219f, -0.341797f, 0.131836f, -0.966797f, -0.380859f, + 0.0947266f, -0.75293f, -0.391602f, 0.0839844f, -0.908203f, + -0.40625f, 0.161133f, -0.860352f, -0.452148f, 0.1875f, + -0.950195f, -0.496094f, 0.200195f, -0.828125f, -0.581055f, + 0.0771484f, -0.93457f, -0.607422f, 0.0996094f, -0.863281f, + -0.59375f, 0.0927734f, -0.802734f, -0.604492f, 0.0947266f, + -0.807617f, -0.722656f, 0.101562f, -0.844727f, -0.711914f, + 0.149414f, -1.03125f, -0.77832f, 0.125977f, -0.78418f, + -0.740234f, 0.121094f, -0.891602f, -0.808594f, 0.164062f, + -0.650391f, -0.80957f, 0.0888672f, -0.416992f, -0.866211f, + 0.155273f, -0.382812f, -0.880859f, 0.0849609f, -0.264648f, + -0.775391f, 0.229492f, -0.389648f, -0.814453f, 0.0664062f, + -0.226562f, -0.625f, 0.414062f, -0.274414f, -0.681641f, + 0.0292969f, -0.0478516f, -0.711914f, 0.794922f, -0.388672f, + -0.584961f, 0.368164f, -0.257812f, -0.545898f, 1.09277f, + -0.277344f, -0.125977f, 0.822266f, -0.365234f, -0.467773f, + 0.714844f, -0.413086f, -0.136719f, 1.57227f, -0.0947266f, + -0.223633f, 0.817383f, -0.0556641f, -0.0322266f, 1.18945f, + -0.191406f, -0.498047f, 0.991211f, -0.231445f, -0.246094f, + 0.8125f, -0.239258f, -0.755859f, 0.853516f, -0.228516f, + -0.821289f, 0.503906f, -0.121094f, -0.795898f, 0.523438f, + -0.220703f, -0.773438f, 0.517578f, -0.274414f, -0.757812f, + 0.539062f, -0.222656f, -0.770508f, 0.396484f, -0.115234f, + -1.2334f, 0.485352f, -0.217773f, -0.94043f, 1.01758f, + -0.202148f, -0.605469f, 0.0546875f, 0.0957031f, -0.639648f, + -0.661133f, 0.245117f, -0.750977f, 0.0615234f, -0.726562f, + -0.879883f, -0.432617f, -1.05859f, -1.29688f, 0.00488281f, + 0.193359f, -0.939453f, 0.209961f, -0.209961f, -0.793945f, + 0.251953f, 0.722656f, -0.447266f, 0.0615234f, 0.855469f, + -0.454102f, -0.0126953f, 0.0527344f, -0.342773f, 0.154297f, + 1.3877f, -0.65918f, 0.133789f, 0.0576172f, -0.233398f, + -0.12207f, 0.46582f, -1.09961f, 0.438477f, -0.641602f, + -0.861328f, 0.197266f, -1.99902f, -0.932617f, 0.234375f, + 0.389648f, -0.792969f, -0.0908203f, 1.66797f, -1.0459f, + 0.0107422f, -0.543945f, -0.80957f, 0.206055f, -0.27832f, + -0.915039f, 0.104492f, -0.301758f, -0.891602f, 0.0556641f, + -0.681641f, -0.901367f, 0.0498047f, -0.461914f, -0.927734f, + -0.0390625f, -0.229492f, -1.04004f, 0.0869141f, -0.435547f, + -1.02148f, 0.0947266f, -0.527344f, -0.979492f, 0.0751953f, + 0.266602f, -0.786133f, -0.0224609f, -0.0947266f, -0.702148f, + -0.00683594f, -0.316406f, -0.698242f, -0.317383f, 1.92578f, + -1.0498f, 0.0273438f, -1.14258f, -0.226562f, 0.233398f, + -0.995117f, -0.9375f, 0.0146484f, -0.223633f, -0.49707f, + -0.0078125f, -1.95703f, -0.847656f, 0.157227f, 0.129883f, + -0.459961f, -0.114258f, 2.0f, -1.13574f, -0.0839844f, + -0.0878906f, -0.783203f, 0.131836f, -0.803711f, -0.90332f, + 0.208984f, -0.365234f, -0.97168f, -0.0322266f, 0.186523f, + -0.924805f, 0.00292969f, -0.272461f, -0.890625f, 0.015625f, + -0.333008f, -0.932617f, 0.180664f, -0.459961f, -0.90918f, + 0.240234f, -0.625977f, -1.1582f, 0.0996094f, -0.170898f, + -1.08887f, -0.00976562f, -0.849609f, -0.430664f, 0.139648f, + -0.308594f, -0.572266f, -0.722656f, 1.83496f, -1.00977f, + 0.387695f, 0.487305f, -0.268555f, 0.0712891f, -0.0136719f, + -1.5332f, 0.290039f, -0.0351562f, -0.861328f, 1.98535f, + -1.16602f, -0.602539f, 0.441406f, 0.175781f, -0.605469f, + -0.831055f, 0.686523f, -0.984375f, 0.494141f, -0.489258f, + -0.895508f, 0.371094f, -0.665039f, -1.14258f, -0.214844f, + -0.140625f, -1.06348f, -0.0996094f, 0.255859f, -0.874023f, + 0.193359f, -0.0947266f, -0.959961f, -0.0966797f, 0.00195312f, + -0.996094f, -0.0117188f, -0.174805f, -0.962891f, 0.106445f, + -0.162109f, -1.04297f, -0.0283203f, -0.306641f, -1.06738f, + -0.0224609f, -0.129883f, -1.03223f, 0.129883f, 0.195312f, + -1.08789f, -0.130859f, 0.649414f, -0.572266f, -0.0136719f, + -0.793945f, -0.382812f, 0.0f, -1.08301f, -0.78125f, + -0.0224609f, -0.339844f, -0.629883f, -0.0947266f, -1.83789f, + -1.01562f, 0.046875f, 0.223633f, -0.808594f, 0.0957031f, + 1.09766f, -0.756836f, -0.0488281f, 0.157227f, -0.59082f, + -0.103516f, 0.929688f, -0.816406f, -0.0322266f, -0.426758f, + -0.868164f, -0.209961f, -1.99902f, -0.986328f, -0.00878906f, + -0.365234f, -0.980469f, 0.0439453f, 0.59375f, -0.994141f, + 0.0253906f, 0.0371094f, -0.970703f, -0.0273438f, -0.120117f, + -0.935547f, 0.00195312f, -0.235352f, -0.952148f, -0.0263672f, + -0.194336f, -0.917969f, -0.0195312f, -0.261719f, -0.928711f, + -0.0234375f, -0.219727f, -0.945312f, 0.0107422f, -0.228516f, + -0.938477f, 0.00683594f, -0.178711f, -0.791016f, 0.03125f, + -0.255859f, -0.789062f, 0.0f, -0.141602f, -0.789062f, + 0.232422f, -0.285156f, -0.788086f, 0.228516f, -0.28125f, + -1.0f, 0.258789f, -0.277344f, -0.999023f, 0.28125f, + -0.25293f, -1.06152f, 0.046875f, -0.421875f, -1.07715f, + 0.0390625f, -0.224609f, -0.923828f, -0.0205078f, -0.335938f, + -0.984375f, -0.0966797f, -0.34668f, -0.990234f, -0.191406f, + -0.301758f, -1.03613f, -0.241211f, -0.37207f, -0.975586f, + -0.267578f, -0.460938f, -1.00977f, -0.320312f, -0.382812f, + -0.913086f, -0.257812f, -0.457031f, -0.925781f, -0.256836f, + -0.34668f, -0.889648f, -0.237305f, -0.393555f, -0.897461f, + -0.239258f, -0.429688f, -0.844727f, -0.21875f, -0.428711f, + -0.87207f, -0.203125f, -0.368164f, -0.84668f, -0.101562f, + -0.423828f, -0.875977f, -0.165039f, -0.363281f, -0.884766f, + -0.0625f, -0.473633f, -0.90332f, -0.078125f, -0.138672f, + -0.918945f, -0.198242f, -0.25f, -0.928711f, -0.138672f, + -0.267578f, -1.08203f, 0.00488281f, -0.575195f, -1.125f, + -0.0332031f, -0.4375f, -0.924805f, 0.078125f, -0.305664f, + -0.93457f, -0.0166016f, -0.475586f, -0.94043f, -0.00488281f, + -0.533203f, -0.956055f, 0.00292969f, -0.391602f, -1.00293f, + 0.0361328f, -0.711914f, -1.0166f, 0.0332031f, -0.448242f, + -0.806641f, -0.21582f, -0.556641f, -0.759766f, -0.0214844f, + -0.626953f, -0.700195f, -0.263672f, -0.308594f, -0.608398f, + -0.236328f, -0.253906f, -0.616211f, -0.378906f, 0.224609f, + -0.498047f, -0.399414f, 0.206055f, -0.516602f, -0.228516f, + 0.743164f, -0.174805f, -0.125f, 0.760742f, -0.0214844f, + -0.135742f, 0.966797f, 0.240234f, 0.0332031f, 1.01855f, + 0.105469f, 0.15332f, 0.950195f, 0.240234f, 0.0732422f, + 1.16895f, 0.245117f, 0.206055f, 0.952148f, 0.273438f, + -0.0390625f, 1.2793f, 0.404297f, 0.303711f, 0.720703f, + 0.369141f, 0.0966797f, 0.918945f, 0.329102f, 0.0390625f, + 0.991211f, 0.397461f, -0.124023f, 0.866211f, 0.210938f, + 0.130859f, 1.08789f, 0.317383f, 0.0537109f, 0.858398f, + 0.245117f, 0.0732422f, 0.741211f, 0.419922f, 0.0302734f, + 0.681641f, 0.485352f, -0.0214844f, 0.641602f, 0.520508f, + -0.129883f, 0.839844f, 0.490234f, 0.00390625f, 0.676758f, + 0.581055f, -0.0146484f, 0.692383f, 0.432617f, -0.0371094f, + 0.807617f, 0.664062f, 0.255859f, 0.216797f, 1.22559f, + 0.0195312f, 1.22168f, 1.2793f, -0.405273f, 1.72559f, + 0.708984f, -0.209961f, 0.579102f, 0.821289f, 0.0380859f, + 0.605469f, 0.80957f, 0.147461f, 0.419922f, 0.869141f, + 0.0390625f, 0.5625f, 0.786133f, 0.0654297f, 0.594727f, + 0.879883f, 0.0166016f, 0.480469f, 0.835938f, 0.00195312f, + 0.414062f, 0.899414f, -0.03125f, 0.344727f, 0.889648f, + 0.0185547f, 0.236328f, 0.932617f, -0.00585938f, 0.255859f, + 0.910156f, 0.0898438f, 0.262695f, 0.945312f, 0.0126953f, + 0.279297f, 0.860352f, 0.0507812f, 0.322266f, 0.913086f, + 0.00195312f, 0.296875f, 0.875977f, 0.0078125f, 0.373047f, + 0.922852f, -0.0244141f, 0.267578f, 0.884766f, 0.0117188f, + 0.347656f, 0.926758f, -0.0371094f, 0.266602f, 0.894531f, + -0.00683594f, 0.345703f, 0.926758f, -0.0478516f, 0.269531f, + 0.887695f, 0.0146484f, 0.360352f, 0.927734f, -0.03125f, + 0.272461f +}; const size_t kAccelerometerFullyOpenTestDataLength = - ARRAY_SIZE(kAccelerometerFullyOpenTestData); + ARRAY_SIZE(kAccelerometerFullyOpenTestData); diff --git a/test/motion_angle_data_literals_tablet.c b/test/motion_angle_data_literals_tablet.c index 456779f457..f5b00f5fba 100644 --- a/test/motion_angle_data_literals_tablet.c +++ b/test/motion_angle_data_literals_tablet.c @@ -1,4 +1,4 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. +/* Copyright 2018 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -11,1030 +11,1030 @@ * The arrays contain actual accelerator readings. */ const float kAccelerometerVerticalHingeTestData[] = { - -0.0766145f, 6.02381f, 7.85298f, -0.268151f, -8.84897f, - -1.3216f, -0.402226f, 5.11401f, 8.77236f, -1.10133f, - -10.1706f, 1.24498f, -1.18752f, 6.40688f, 8.0924f, - -2.60489f, -8.99262f, 2.58574f, 0.632069f, 9.05008f, - 3.61046f, 1.50356f, -9.67257f, 1.93451f, 0.411803f, - 8.81066f, 0.268151f, -0.00957681f, -8.7532f, 2.15478f, - -0.0191536f, 9.49062f, -0.68953f, 0.0383072f, -8.94474f, - 2.99754f, -0.871489f, 9.80665f, 1.53229f, -0.92895f, - -9.88326f, 0.957681f, 0.507571f, 9.19373f, 1.71425f, - 0.287304f, -9.03093f, 0.651223f, 0.363919f, 9.71088f, - 1.18752f, 1.10133f, -10.0556f, 2.98796f, 0.23942f, - 9.39485f, 1.0343f, 0.842759f, -9.73961f, -1.12049f, - 0.172383f, 9.50977f, 1.18752f, 0.0383072f, -9.9503f, - 0.957681f, -0.373495f, 9.96946f, 1.01514f, 0.794875f, - -10.1897f, -1.38864f, -9.50977f, -1.04387f, 0.325611f, - -9.76834f, 1.05345f, -0.679953f, -9.76834f, -0.641646f, - 0.488417f, -9.2895f, 0.316035f, 0.258574f, -9.29908f, - -0.890643f, 0.469264f, -9.33739f, 0.823605f, -0.45011f, - -9.69173f, -1.02472f, 0.536301f, -9.52892f, 0.90022f, - -0.411803f, -9.34696f, -0.890643f, 0.430956f, -9.48104f, - 0.823605f, -0.603339f, -9.7875f, -0.565032f, 0.574608f, - -9.96946f, 0.536301f, -0.699107f, -9.57681f, -0.823605f, - 0.641646f, -9.43316f, 0.593762f, -0.775721f, -9.35654f, - -1.04387f, 0.440533f, -9.77792f, 1.01514f, -0.881066f, - -9.32781f, -1.10133f, 0.306458f, -9.414f, 0.995988f, - 0.0287304f, -9.26077f, -1.01514f, 0.268151f, -9.29908f, - 0.881066f, 0.00957681f, -9.42358f, -0.679953f, 0.201113f, - -9.49062f, 0.488417f, -0.00957681f, -9.47146f, -0.363919f, - 0.191536f, -9.32781f, 0.124498f, 0.124498f, -9.5385f, - -0.0766145f, 0.268151f, -9.32781f, -0.172383f, 0.0574608f, - -9.69173f, 0.21069f, 0.354342f, -9.50019f, -0.306458f, - 0.0383072f, -9.54808f, 0.507571f, 0.363919f, -9.20331f, - -0.775721f, 0.0574608f, -9.59596f, 0.651223f, 0.679953f, - -9.56723f, -0.794875f, -0.0287304f, -9.49062f, 0.794875f, - 0.612916f, -9.06924f, -1.10133f, -0.201113f, -9.20331f, - 1.90578f, 1.46525f, -9.29908f, -2.17394f, 0.603339f, - -0.995988f, 0.0766145f, 9.58638f, -0.344765f, -0.92895f, - -9.1267f, -2.03986f, -0.497994f, 10.477f, -2.49955f, - -0.0957681f, -10.4866f, -1.5706f, -0.23942f, 9.13627f, - -1.92494f, -0.325611f, -9.05008f, -1.5706f, -0.0383072f, - 10.1323f, -1.87705f, -0.632069f, -9.52892f, -1.20668f, - 0.105345f, 9.14585f, -1.13964f, -0.718261f, -9.02135f, - -1.58975f, 0.296881f, 9.50019f, -1.74298f, -1.00556f, - -9.27993f, -1.09176f, 0.23942f, 9.87369f, -1.04387f, - -0.995988f, -9.35654f, -2.08774f, -0.526724f, 9.89284f, - -1.40779f, -0.459687f, -9.50977f, -2.70066f, -1.47483f, - 8.95431f, -1.92494f, 0.526724f, -8.95431f, -1.05345f, - -0.938527f, 9.14585f, -3.02627f, 1.04387f, -8.78193f, - 1.00556f, -3.56257f, 9.0022f, 1.96325f, 2.36547f, - -9.83538f, 1.02472f, -2.59531f, 9.49062f, 1.0726f, - 1.77171f, -9.06924f, 0.0861913f, -2.17394f, 9.21289f, - -0.823605f, 1.52271f, -10.1323f, 0.316035f, -3.09331f, - 10.0844f, 0.555455f, 2.00155f, -9.75877f, 1.51314f, - -2.24097f, 9.61511f, 0.670376f, 1.35033f, -9.77792f, - 0.986411f, -3.36146f, 9.59596f, 1.77171f, 2.29843f, - -9.48104f, 1.4461f, -2.8922f, 8.88728f, 1.84832f, - 2.38462f, -9.19373f, 1.75256f, -2.6432f, 9.89284f, - 1.38864f, 2.19309f, -9.20331f, 9.98861f, -0.718261f, - -0.746991f, 10.6111f, 0.632069f, 0.948104f, 8.99262f, - -0.258574f, 0.517148f, 9.10754f, 0.21069f, -1.21625f, - 9.90242f, -0.162806f, 0.0287304f, 10.5249f, -0.0861913f, - 0.229843f, 9.83538f, 0.0f, 0.181959f, 10.4291f, - -0.172383f, -0.47884f, 9.43316f, 0.201113f, -0.268151f, - 9.76834f, -0.134075f, -0.354342f, 10.0556f, 1.0726f, - 0.277727f, 9.93115f, -1.05345f, 0.363919f, 9.79707f, - 0.651223f, 0.699107f, 10.0173f, -0.775721f, 0.0670376f, - 9.49062f, 0.296881f, 0.919373f, 10.1801f, -0.68953f, - -0.651223f, 9.70131f, 1.00556f, 0.248997f, 9.42358f, - -0.995988f, 1.45567f, 9.13627f, -1.35033f, 2.36547f, - 9.40442f, 0.976834f, -4.34787f, 8.79151f, -0.90022f, - 1.56102f, 8.92558f, 0.6608f, -2.3942f, 9.59596f, - -0.363919f, 1.40779f, 9.05966f, 0.181959f, -2.1452f, - 9.48104f, -0.612916f, 2.36547f, 9.03093f, 0.21069f, - -2.18351f, 9.74919f, -1.5706f, 2.07817f, 8.85855f, - 1.04387f, -2.30801f, 8.81066f, -1.66636f, 3.4285f, - 8.52336f, 0.440533f, -4.52983f, 9.27993f, -2.19309f, - 2.2697f, 8.83939f, 0.90022f, -2.48039f, 9.1267f, - -2.77727f, 1.4461f, 8.78193f, 0.814029f, -4.24253f, - 8.90643f, -3.39977f, 0.651223f, 8.86812f, 1.08218f, - -2.34632f, 9.42358f, -3.26569f, 0.402226f, 8.94474f, - 0.526724f, -2.65278f, 9.38527f, -3.21781f, 0.0f, - 9.20331f, 0.143652f, -2.71024f, 9.44273f, -2.8922f, - -0.497994f, 9.35654f, 0.105345f, -2.78685f, 9.09797f, - -3.4285f, -1.00556f, 8.81066f, 0.785298f, -3.84988f, - 9.31823f, -3.09331f, -1.4461f, 8.68616f, 0.555455f, - -3.27527f, 9.414f, -2.5187f, -1.79086f, 8.59997f, - 0.766145f, -3.47638f, 9.0022f, -2.67193f, -2.43251f, - 8.77236f, 1.39821f, -2.85389f, 8.25521f, -3.29442f, - -2.46124f, 8.15944f, 1.09176f, -3.51469f, 8.72447f, - -2.69108f, -2.48997f, 8.91601f, 0.881066f, -3.66792f, - 8.92558f, -2.33674f, -2.31759f, 8.84897f, 1.06303f, - -3.055f, 8.92558f, -2.49955f, -2.29843f, 8.81066f, - 0.919373f, -2.56658f, 9.31823f, -2.78685f, -1.81959f, - 9.06924f, 0.411803f, -2.86347f, 9.38527f, -2.78685f, - -1.70467f, 9.25119f, 0.335188f, -4.67348f, 9.165f, - -3.9648f, -0.622492f, 8.65743f, 0.248997f, -3.055f, - 9.414f, -3.67749f, 0.0287304f, 8.82982f, 0.852336f, - -2.50912f, 8.82024f, -3.47638f, 0.201113f, 8.98304f, - 1.06303f, -3.33273f, 8.89685f, -3.64876f, 0.718261f, - 8.91601f, 1.52271f, -2.70066f, 8.95431f, -3.56257f, - 1.35991f, 9.05008f, 1.67594f, -3.16992f, 9.08839f, - -3.16035f, 2.03028f, 9.07881f, 1.64721f, -3.04542f, - 8.91601f, -3.11246f, 2.52828f, 8.88728f, 2.07817f, - -1.99198f, 9.1267f, -2.806f, 0.162806f, 9.1267f, - 2.806f, -2.07817f, 9.14585f, -2.31759f, 2.16436f, - 8.8777f, 2.19309f, -1.88663f, 9.88326f, -2.5187f, - 1.94409f, 9.1267f, 2.46124f, -2.806f, 7.64229f, - -6.0717f, 2.9305f, 8.07325f, 5.64074f, -2.63362f, - 4.29999f, -7.9679f, 0.622492f, 4.71179f, 7.74764f, - -3.41892f, 4.42448f, -8.99262f, 1.13964f, 3.98395f, - 8.47547f, -1.9824f, -0.699107f, -9.46189f, -0.794875f, - -0.593762f, 9.24162f, -2.74854f, 1.88663f, -8.8777f, - -0.153229f, 0.861913f, 8.98304f, -2.48039f, -1.52271f, - -9.32781f, -3.39977f, 0.0574608f, 8.99262f, -5.88974f, - -0.746991f, -3.93607f, -8.01579f, -1.17795f, 8.41801f, - -4.17549f, -2.30801f, -2.61447f, -9.44273f, -2.3942f, - 7.46991f, -5.01825f, -1.0343f, 1.89621f, -8.8777f, - -0.890643f, 8.65743f, -4.31914f, -2.16436f, 1.49398f, - -9.69173f, -1.37906f, 9.05008f, -2.43251f, -1.87705f, - 0.402226f, -8.95431f, -2.01113f, 8.72447f, -3.54342f, - -0.344765f, -2.95923f, -8.42759f, -0.92895f, 8.99262f, - -2.34632f, -0.392649f, -6.70376f, -6.55054f, -0.919373f, - 8.80109f, -2.35589f, -0.0766145f, -8.8777f, -5.89931f, - 0.890643f, 9.7875f, 2.24097f, -0.536301f, -8.08282f, - -4.88417f, -0.191536f, 9.21289f, 1.16837f, -0.440533f, - -7.93917f, -4.81713f, -0.890643f, 9.08839f, 1.75256f, - -1.20668f, -9.414f, -2.57616f, -0.708684f, 9.50977f, - 1.40779f, -1.14922f, -9.8258f, -1.24498f, -0.584185f, - 9.63427f, 0.727837f, -0.181959f, -9.25119f, -2.31759f, - -0.0574608f, 9.64384f, -0.612916f, 1.21625f, -9.50977f, - -1.16837f, 0.756568f, 9.45231f, -0.316035f, 1.21625f, - -10.5441f, -0.45011f, 1.5706f, 9.7875f, -1.22583f, - 9.07881f, 0.0766145f, -2.34632f, 9.26077f, 0.316035f, - 4.28083f, 8.72447f, 0.584185f, -3.27527f, 8.39886f, - 0.47884f, 3.98395f, 9.26077f, 2.35589f, -2.98796f, - 9.52892f, -1.61848f, 3.73495f, 8.91601f, 2.98796f, - -3.36146f, 9.7875f, -2.31759f, 3.60088f, 8.86812f, - 3.32315f, -3.62961f, 9.76834f, -2.46124f, 2.72939f, - 2.31759f, 10.2089f, -2.3942f, 0.995988f, -8.68616f, - 5.5737f, 1.13006f, 9.04051f, -2.09732f, 1.26414f, - -8.51378f, 4.40533f, 0.852336f, 9.91199f, -2.07817f, - 0.622492f, -9.18416f, 4.29999f, 0.229843f, 10.0269f, - -1.08218f, 0.220267f, -9.40442f, 4.40533f, 0.0766145f, - 9.54808f, -1.89621f, 0.967257f, -9.05966f, 3.92649f, - 0.335188f, 9.62469f, -0.497994f, 0.430956f, -9.71088f, - 4.02226f, 0.718261f, 9.63427f, 1.59933f, 0.383072f, - -8.88728f, 3.24654f, 0.42138f, 8.71489f, 2.55701f, - 0.68953f, -9.64384f, 1.67594f, 1.0726f, -7.0198f, - 7.20176f, 0.641646f, -9.17458f, 4.18506f, -0.402226f, - -2.46124f, 8.78193f, -0.0383072f, -8.31267f, 4.03184f, - 0.23942f, 2.27928f, 10.4675f, -0.517148f, -9.47146f, - 4.14676f, -1.37906f, 9.59596f, -4.07972f, 3.45723f, - -9.663f, 1.71425f, -0.134075f, 6.95276f, -5.80354f, - 0.268151f, -5.38217f, 7.03895f, 0.00957681f, 5.20978f, - -7.75721f, -0.047884f, -2.83473f, 8.53294f, -0.306458f, - 1.64721f, -8.64786f, 0.766145f, 0.162806f, 8.84897f, - -0.191536f, -2.58574f, -9.19373f, 0.0f, 4.05099f, - 8.52336f, -0.0383072f, -3.10289f, -9.17458f, 0.45011f, - 4.11803f, 9.19373f, 0.0957681f, -2.47082f, -9.61511f, - 0.804452f, 3.98395f, 8.52336f, 0.114922f, 4.00311f, - -8.76278f, 0.699107f, 4.53941f, 8.28394f, -0.0383072f, - 7.95833f, -6.57927f, -0.124498f, 3.52426f, 10.1035f, - -0.229843f, 6.68461f, -6.2345f, -0.153229f, 3.04542f, - 9.59596f, -0.344765f, 7.47949f, -7.29753f, 0.114922f, - 3.90734f, 9.03093f, -0.383072f, 7.57525f, -7.20176f, - -0.172383f, 3.70622f, 9.8258f, -0.335188f, 7.21134f, - -6.7325f, -0.172383f, 2.71024f, 10.2855f, -0.114922f, - 6.608f, -7.41245f, -0.201113f, 1.87705f, 9.39485f, - 1.37906f, -0.0670376f, -9.47146f, 1.1971f, 1.8579f, - 9.49062f, 0.842759f, -1.63763f, -8.95431f, 0.679953f, - 2.8922f, 9.1267f, 1.43652f, -1.58017f, -9.01178f, - 0.890643f, 3.66792f, 9.22246f, 0.746991f, -1.18752f, - -9.04051f, 2.12605f, 2.72939f, 9.52892f, 3.79242f, - 1.48441f, -9.04051f, 4.57771f, -0.785298f, 9.61511f, - 4.61602f, 1.21625f, -8.4659f, 4.94163f, -0.574608f, - 8.4659f, 4.67348f, 1.48441f, -8.23605f, 4.86502f, - -0.852336f, 9.24162f, 5.12359f, 0.92895f, -9.03093f, - 5.84185f, -0.430956f, 8.92558f, 5.38217f, 0.440533f, - -8.37971f, 6.72292f, -0.220267f, 8.02536f, 6.608f, - 1.6089f, -6.30154f, 6.33985f, 0.277727f, 6.58884f, - 9.85453f, 1.39821f, 0.153229f, 10.0844f, -1.46525f, - 0.45011f, 9.68215f, 1.90578f, -0.0766145f, 9.98861f, - -1.96325f, 0.536301f, 9.90242f, 2.20267f, 0.143652f, - 9.94073f, -2.20267f, 0.191536f, 9.46189f, 1.95367f, - 0.0957681f, 9.74919f, -2.06859f, 0.296881f, 9.30866f, - 1.64721f, 0.153229f, 9.84496f, -1.92494f, 0.574608f, - 7.38372f, 0.488417f, 6.76123f, 8.83939f, -1.37906f, - -3.11246f, 9.2895f, 0.153229f, -0.976834f, 9.86411f, - -0.0574608f, -0.957681f, 9.26077f, 0.833182f, 2.07817f, - 9.26077f, -0.938527f, -0.957681f, 10.0269f, -0.354342f, - 2.43251f, 9.84496f, 0.153229f, -0.957681f, 0.986411f, - -8.74362f, 1.34075f, 2.09732f, 9.165f, -1.84832f, - -1.25456f, -10.228f, 2.19309f, 0.42138f, 9.73004f, - -1.23541f, -1.49398f, -10.1706f, 0.172383f, -1.22583f, - 10.2089f, -0.593762f, -2.2314f, -9.663f, -0.526724f, - -1.6089f, 9.65342f, 0.593762f, -2.38462f, -9.165f, - -1.4461f, -2.46124f, 9.42358f, 0.430956f, -2.38462f, - -9.73004f, 0.0383072f, -2.31759f, 9.57681f, -0.47884f, - -2.44209f, -9.5385f, -0.746991f, -2.32716f, 9.58638f, - 0.612916f, -2.34632f, -10.1418f, -1.0726f, -1.92494f, - 9.90242f, 0.890643f, -2.84431f, 9.38527f, -2.38462f, - -1.69509f, -9.50977f, 2.73897f, -3.88818f, 7.9296f, - -2.40378f, -1.5706f, -8.4659f, 2.62405f, -8.91601f, - -2.98796f, 0.497994f, -8.97347f, 2.79643f, 0.373495f, - -10.3717f, 1.02472f, -0.105345f, -10.0461f, -1.02472f, - 0.679953f, -4.89375f, 8.17859f, 0.0766145f, -6.12916f, - -7.61356f, 0.172383f, -6.4835f, 7.5561f, -0.363919f, - -6.09085f, -7.46991f, 0.699107f, -6.19619f, 7.62314f, - -0.248997f, -5.78439f, -7.52737f, 1.55144f, -6.33985f, - 7.50822f, -0.45011f, -5.6982f, -7.48906f, 1.48441f, - -6.36858f, 7.46991f, -0.373495f, -5.72693f, -7.44118f, - 1.63763f, -6.33027f, 7.8434f, -0.316035f, -6.54096f, - -7.57525f, 1.37906f, -6.69419f, 7.52737f, -0.258574f, - -6.41646f, -7.37414f, 1.21625f, -6.62715f, 7.61356f, - -0.392649f, -6.24408f, -7.48906f, 1.23541f, -6.18662f, - 7.60398f, -0.201113f, -5.9472f, -7.45076f, 1.39821f, - -6.14831f, 7.86256f, -0.584185f, -6.26323f, -7.50822f, - 1.6089f, -5.26724f, 8.74362f, -0.153229f, -4.57771f, - -8.41801f, 0.6608f, -3.56257f, 8.82024f, 0.114922f, - -2.86347f, -8.82982f, 0.948104f, -2.53785f, 9.27035f, - 0.23942f, -2.33674f, -9.29908f, 1.02472f, -2.12605f, - 9.67257f, 0.354342f, -2.1452f, -9.45231f, 0.335188f, - -1.71425f, 9.36612f, 0.287304f, -1.41737f, -9.27035f, - -0.229843f, -2.65278f, 8.94474f, -0.306458f, -0.737414f, - -9.414f, 0.172383f, -8.72447f, 5.46836f, 0.325611f, - -10.2663f, -1.80044f, -0.143652f, -9.35654f, -0.794875f, - -0.756568f, -10.1801f, 1.0343f, 1.20668f, -9.54808f, - -0.986411f, -0.766145f, -9.165f, 0.890643f, 1.13964f, - -8.92558f, -0.555455f, -1.22583f, -9.68215f, 0.976834f, - 0.344765f, -9.14585f, 4.05099f, -1.31202f, -9.57681f, - 0.68953f, 1.51314f, -9.54808f, 0.0957681f, 1.45567f, - -9.18416f, -0.229843f, -0.6608f, -9.71088f, 0.047884f, - 1.35033f, -9.87369f, 0.0383072f, -0.909797f, -8.57124f, - 1.1971f, 3.86903f, -9.76834f, -1.13964f, -2.2697f, - -9.38527f, 0.890643f, 2.74854f, -9.38527f, -1.20668f, - -2.3942f, -8.74362f, 1.4461f, 3.45723f, -8.99262f, - -1.72383f, -2.56658f, -9.48104f, 1.13006f, 2.98796f, - -8.80109f, -1.76213f, -2.52828f, -9.69173f, 1.15879f, - 2.3942f, -8.98304f, -1.68552f, -1.71425f, -8.93516f, - 1.25456f, 3.26569f, -9.61511f, -1.38864f, -2.46124f, - -9.37569f, 1.4461f, 3.40934f, -8.83939f, -2.1069f, - -2.42293f, -9.165f, 1.61848f, 2.9305f, -9.165f, - -2.04944f, -2.50912f, -9.31823f, 0.823605f, 0.0f, - -9.48104f, -0.909797f, 0.497994f, -9.30866f, 1.0343f, - -0.775721f, -9.01178f, -1.15879f, 0.814029f, -9.25119f, - 0.948104f, -0.00957681f, -8.80109f, -1.16837f, 0.737414f, - -9.62469f, 1.39821f, -0.248997f, -9.39485f, -1.45567f, - 0.957681f, -9.57681f, 1.79086f, -0.296881f, -9.50019f, - -1.81002f, 0.842759f, -10.0652f, 1.45567f, -0.248997f, - -9.05966f, -1.61848f, 0.871489f, -9.69173f, 1.56102f, - -0.459687f, -8.91601f, -1.77171f, 0.890643f, -9.48104f, - -0.47884f, -0.497994f, -9.48104f, 0.296881f, 0.632069f, - -10.094f, 0.191536f, -0.248997f, -10.4387f, -0.0670376f, - 0.6608f, -8.08282f, 4.95121f, -1.31202f, -8.17859f, - -4.70221f, 1.80044f, -7.9296f, 5.04698f, -0.536301f, - -8.38928f, -4.80756f, 0.68953f, -8.10198f, 5.23851f, - -0.507571f, -7.97748f, -5.17148f, 1.21625f, -8.37013f, - 5.22894f, -0.497994f, -8.01579f, -5.23851f, 0.976834f, - -8.20732f, 5.20978f, -0.335188f, -7.99663f, -5.19063f, - 0.995988f, -8.26478f, 5.02782f, -0.0957681f, -8.0924f, - -5.0374f, 0.948104f, -8.36055f, 5.02782f, -0.268151f, - -8.02536f, -5.09486f, 0.995988f, -8.28394f, 5.01825f, - -0.191536f, -8.20732f, -5.06613f, 0.861913f, -8.37971f, - 5.06613f, -0.325611f, -8.20732f, -5.00867f, 0.92895f, - -8.3414f, 5.04698f, -0.124498f, -8.13071f, -5.14275f, - 0.852336f, -8.29351f, 5.07571f, -0.0766145f, -8.07325f, - -5.10444f, 0.976834f, -8.47547f, 4.77883f, -0.392649f, - -8.13071f, -4.86502f, 1.05345f, -8.60955f, 2.71981f, - 2.79643f, -9.25119f, 1.31202f, -0.306458f, -9.14585f, - 1.02472f, 1.51314f, -8.64786f, -1.33118f, -1.13964f, - -9.35654f, 1.01514f, 2.31759f, -8.72447f, -1.49398f, - -1.72383f, -9.73004f, 1.58017f, 2.7677f, -9.73004f, - -1.84832f, -1.93451f, -9.15543f, 1.33118f, 2.20267f, - -8.93516f, -1.64721f, -0.995988f, -9.45231f, 0.727837f, - 1.81959f, -9.51935f, -0.909797f, -2.78685f, -9.93115f, - 0.191536f, 0.890643f, -9.84496f, -0.23942f, -0.976834f, - -9.61511f, -0.21069f, 0.517148f, -8.80109f, -0.153229f, - -0.430956f, -9.50019f, 0.373495f, 0.948104f, -9.27035f, - -0.555455f, -0.344765f, -9.57681f, 0.172383f, 0.881066f, - -9.43316f, -0.335188f, -0.756568f, -9.50977f, -0.0191536f, - 0.497994f, -9.42358f, -0.181959f, -0.737414f, -9.92157f, - 0.306458f, 0.545878f, -10.0173f, -0.248997f, -0.134075f, - -9.79707f, 0.0287304f, 0.536301f, -9.71088f, -0.162806f, - -0.181959f, -9.60554f, -0.047884f, 0.804452f, -9.39485f, - -0.181959f, -0.593762f, -9.64384f, -0.047884f, 0.612916f, - -9.58638f, -0.201113f, -0.363919f, -9.56723f, 0.248997f, - 0.411803f, -10.1706f, -0.316035f, -0.526724f, -9.63427f, - 0.459687f, 1.09176f, -9.71088f, -0.603339f, -0.23942f, - -9.62469f, -0.0383072f, 0.68953f, -9.50019f, -0.0861913f, - -1.13006f, -9.80665f, -0.134075f, 0.335188f, -9.40442f, - -0.114922f, -0.354342f, -9.34696f, 0.153229f, 1.54187f, - -9.10754f, -0.526724f, -1.00556f, -9.7875f, 0.0287304f, - 0.775721f, -9.58638f, -0.172383f, -0.641646f, -9.60554f, - 0.258574f, 0.919373f, -9.31823f, -0.402226f, -0.603339f, - -9.5385f, -0.0766145f, 0.92895f, -9.09797f, -0.220267f, - -0.354342f, -9.61511f, -0.335188f, 0.316035f, -9.27993f, - 0.0766145f, -0.47884f, -9.40442f, 0.23942f, 0.6608f, - -9.40442f, -0.335188f, -0.603339f, -9.85453f, -0.0766145f, - 0.459687f, -9.54808f, -0.0670376f, -0.287304f, -9.63427f, - -0.344765f, 0.296881f, -9.32781f, 0.0574608f, -0.220267f, - -9.71088f, 0.181959f, 0.354342f, -9.95988f, -0.248997f, - 0.201113f, -9.8258f, -0.0383072f, 0.833182f, -9.83538f, - -0.047884f, -0.670376f, -9.44273f, 0.0670376f, 0.6608f, - -8.90643f, -0.392649f, -0.354342f, -9.54808f, 0.0957681f, - 0.90022f, -9.05008f, -0.411803f, -0.335188f, -9.52892f, - 0.201113f, 1.12049f, -9.23204f, -0.459687f, -0.842759f, - -9.61511f, -0.162806f, 0.248997f, -9.87369f, 0.124498f, - -1.12049f, -9.70131f, -0.0383072f, 0.670376f, -9.50977f, - -0.162806f, -0.890643f, -9.15543f, 0.488417f, 1.51314f, - -8.94474f, -0.852336f, -0.90022f, -9.60554f, -0.23942f, - 0.622492f, -9.35654f, 0.0f, -0.948104f, -9.64384f, - -0.191536f, 1.21625f, -9.2895f, -0.0766145f, -0.785298f, - -9.55765f, -0.306458f, 0.555455f, -9.73004f, 0.172383f, - -0.603339f, -9.663f, -0.306458f, 0.383072f, -9.63427f, - 0.172383f, -0.354342f, -9.70131f, -0.373495f, 0.68953f, - -9.69173f, 0.181959f, -1.0343f, -9.47146f, -0.526724f, - 0.823605f, -9.23204f, 0.220267f, -1.36948f, -9.36612f, - -0.0670376f, 1.05345f, -8.91601f, -0.316035f, -0.814029f, - -9.93115f, -0.268151f, 1.58017f, -10.0748f, 0.143652f, - -1.26414f, -9.87369f, 0.047884f, 2.09732f, -9.39485f, - -0.344765f, -1.48441f, -9.48104f, 0.967257f, 0.699107f, - -9.34696f, -1.15879f, -0.105345f, -9.414f, 0.852336f, - 0.756568f, -9.62469f, -1.0343f, -0.114922f, -9.80665f, - 0.814029f, 0.737414f, -9.23204f, -1.0726f, -0.23942f, - -9.47146f, 0.890643f, 0.392649f, -9.24162f, -1.08218f, - -0.229843f, -9.42358f, 0.775721f, 0.325611f, -9.21289f, - -0.986411f, -0.201113f, -9.52892f, 1.79086f, 2.04944f, - -9.32781f, -2.15478f, -1.39821f, -8.86812f, 2.07817f, - 2.2697f, -8.91601f, -2.24097f, -1.7334f, -9.34696f, - 1.68552f, 2.29843f, -8.78193f, -2.19309f, -1.58017f, - -9.62469f, 1.7334f, 2.35589f, -9.165f, -2.18351f, - -1.63763f, -9.99819f, 2.28886f, 2.27928f, -10.0365f, - -2.36547f, -1.69509f, -10.726f, -0.488417f, -0.363919f, - -9.25119f, 0.976834f, -3.03585f, -9.31823f, 1.41737f, - 2.09732f, -8.8777f, -1.76213f, 0.651223f, -9.71088f, - 1.00556f, 2.28886f, -9.36612f, -1.13006f, -1.53229f, - -9.87369f, 0.814029f, 1.46525f, -9.92157f, -0.919373f, - -0.957681f, -9.35654f, 0.0191536f, 1.09176f, -9.9503f, - -0.0574608f, -1.0726f, -9.50977f, -0.181959f, 0.603339f, - -8.90643f, -0.172383f, -0.0766145f, -9.85453f, -0.287304f, - 0.833182f, -9.76834f, 0.181959f, -0.402226f, -9.50977f, - -0.0957681f, 0.287304f, -9.7875f, 0.0191536f, -0.47884f, - -9.58638f, 0.047884f, 0.344765f, -9.44273f, -0.181959f, - -0.0861913f, -9.57681f, 0.0287304f, 0.555455f, -9.42358f, - -0.220267f, 0.0f, -9.73004f, -0.229843f, 0.21069f, - -9.51935f, 0.0670376f, -0.21069f, -10.0173f, -0.00957681f, - 0.105345f, -9.68215f, -0.0670376f, -0.124498f, -9.50977f, - 0.114922f, 0.287304f, -9.42358f, -0.229843f, 0.0957681f, - -9.57681f, -0.181959f, 0.181959f, -9.32781f, -0.047884f, - 0.105345f, -10.0078f, -0.258574f, -2.19309f, -9.70131f, - 0.248997f, 1.64721f, -9.55765f, -0.612916f, 0.105345f, - -8.76278f, 0.191536f, 0.919373f, -9.414f, -0.0383072f, - -0.641646f, -9.74919f, 0.0670376f, 0.814029f, -9.80665f, - -0.134075f, -0.804452f, -9.44273f, 0.0957681f, 1.01514f, - -9.71088f, 0.220267f, -0.584185f, -9.32781f, -0.248997f, - 0.957681f, -9.76834f, 0.0766145f, -0.440533f, -9.414f, - -0.21069f, 0.708684f, -9.73004f, 0.0574608f, -0.593762f, - -9.27035f, -0.172383f, 0.756568f, -9.663f, 0.287304f, - 0.172383f, -9.10754f, -0.507571f, 0.718261f, -9.49062f, - 0.229843f, 0.0574608f, -9.50977f, -0.402226f, 0.162806f, - -10.1418f, -0.0670376f, -0.411803f, -9.32781f, -0.0383072f, - 0.804452f, -9.57681f, 0.229843f, -0.21069f, -9.57681f, - -0.296881f, 0.469264f, -9.54808f, 2.03986f, 0.641646f, - -10.0269f, -1.00556f, -0.45011f, -8.77236f, 0.402226f, - 0.718261f, -9.37569f, -0.047884f, -0.344765f, -9.98861f, - -1.48441f, 0.047884f, -9.33739f, 1.33118f, -0.23942f, - -9.30866f, -0.68953f, 0.220267f, -10.0556f, 0.708684f, - 0.201113f, -7.12514f, 6.70376f, 0.105345f, -6.81869f, - -6.33985f, 0.92895f, -8.70532f, 5.46836f, 0.220267f, - -8.41801f, -5.36301f, 0.0574608f, -9.84496f, 3.82115f, - 0.248997f, -9.9503f, -3.5913f, -0.229843f, -10.3238f, - 3.09331f, -0.0574608f, -9.71088f, -2.66235f, 0.6608f, - -8.68616f, 1.53229f, 0.641646f, -9.17458f, -1.22583f, - 0.507571f, -10.0078f, -1.09176f, -0.622492f, -10.0078f, - 1.3216f, -0.497994f, -9.46189f, -1.17795f, 0.0766145f, - -9.23204f, 1.01514f, 0.248997f, -9.38527f, -1.94409f, - 0.296881f, -9.21289f, 1.79086f, -0.21069f, -9.10754f, - -2.12605f, 0.440533f, -9.09797f, 1.82917f, 0.172383f, - -9.02135f, -1.54187f, 0.047884f, -9.35654f, 1.54187f, - 0.047884f, -8.99262f, -1.66636f, -0.0191536f, -9.29908f, - 1.49398f, 0.344765f, -9.663f, -1.65679f, -0.593762f, - -9.29908f, 1.58975f, 0.296881f, -9.69173f, -1.1971f, - -0.153229f, -9.5385f, 1.16837f, 0.114922f, -9.80665f, - -1.22583f, 0.268151f, -9.43316f, 1.08218f, -0.114922f, - -9.74919f, -1.27372f, 0.775721f, -9.38527f, 1.11091f, - -0.440533f, -9.49062f, -1.20668f, 0.574608f, -9.37569f, - 0.995988f, -0.536301f, -9.33739f, -1.06303f, 0.871489f, - -9.5385f, 0.948104f, -0.699107f, -9.44273f, -0.976834f, - 0.871489f, -9.72046f, 0.890643f, -0.746991f, -9.87369f, - -1.33118f, 0.488417f, -9.46189f, 1.13006f, 0.248997f, - -8.92558f, -1.0343f, -0.134075f, -9.07881f, 1.04387f, - 0.737414f, -8.82982f, -0.814029f, -1.46525f, -9.20331f, - 1.06303f, 0.105345f, -9.94073f, -0.957681f, -0.153229f, - -9.35654f, 0.948104f, -0.603339f, -9.31823f, 1.34075f, - 2.03028f, -8.82024f, -1.76213f, -0.861913f, -8.42759f, - -0.440533f, 4.67348f, -8.94474f, 0.201113f, -5.08528f, - -7.51779f, -0.948104f, 5.77481f, -8.15944f, 0.833182f, - -5.63116f, -9.69173f, -0.948104f, 2.36547f, -10.1801f, - 0.679953f, -2.2314f, -9.11712f, 1.72383f, 0.574608f, - -8.83939f, -2.03986f, -0.0287304f, -9.31823f, 1.92494f, - 0.804452f, -9.79707f, -2.03028f, -0.517148f, -8.3414f, - 2.68151f, 1.9824f, -8.24563f, -2.71024f, -2.1069f, - -9.15543f, 2.41336f, 2.28886f, -7.49864f, -3.03585f, - -3.66792f, -8.59997f, 2.00155f, 2.59531f, -9.07881f, - -2.11647f, -2.52828f, -9.64384f, 1.89621f, 2.11647f, - -9.36612f, -2.16436f, -1.83875f, -9.01178f, 1.69509f, - 2.19309f, -9.17458f, -1.94409f, -1.56102f, -9.27993f, - 1.49398f, 2.28886f, -9.51935f, -1.72383f, -2.2697f, - -9.10754f, 1.52271f, 2.43251f, -8.84897f, -2.02071f, - -2.02071f, -9.08839f, 1.51314f, 2.55701f, -9.11712f, - -1.8579f, -2.21224f, -9.09797f, 1.47483f, 2.52828f, - -9.13627f, -1.8579f, -2.09732f, -9.06924f, 1.46525f, - 2.43251f, -8.92558f, -1.90578f, -2.09732f, -9.19373f, - 1.50356f, 2.3942f, -9.21289f, -1.82917f, -2.26013f, - -8.5904f, 2.16436f, 2.33674f, -8.51378f, -2.36547f, - -1.83875f, -8.25521f, 3.62961f, 2.03028f, -7.91044f, - -3.74453f, -1.12049f, -8.61913f, 3.84988f, 1.62806f, - -8.83939f, -3.97437f, -1.26414f, -8.23605f, 4.52025f, - 2.13563f, -8.83939f, -4.35745f, -1.14922f, -7.4316f, - 6.02381f, 2.34632f, -7.33583f, -5.84185f, -1.79086f, - -6.63673f, 6.67503f, 2.37505f, -6.44519f, -6.359f, - -1.62806f, -6.06212f, 7.51779f, 2.38462f, -6.25365f, - -7.23049f, -1.80044f, -5.25767f, 8.64786f, 2.09732f, - -4.32872f, -8.68616f, -2.03986f, -4.39575f, 7.97748f, - 2.00155f, -3.77326f, -8.42759f, -0.775721f, -4.64475f, - 8.32224f, 1.61848f, -4.29999f, -8.60955f, -0.622492f, - -4.7501f, 8.5042f, 1.81959f, -4.79798f, -8.4659f, - -1.08218f, -4.64475f, 8.37013f, 1.92494f, -4.53941f, - -8.5904f, -1.13964f, -4.77883f, 8.73405f, 2.11647f, - -3.33273f, -9.414f, -1.37906f, -9.73004f, -0.92895f, - 0.603339f, -9.67257f, 0.852336f, -1.11091f, -9.87369f, - -0.047884f, 0.153229f, -9.98861f, 0.0670376f, -0.440533f, - -9.61511f, 0.651223f, 0.181959f, -9.5385f, -0.785298f, - 0.612916f, -9.50019f, 0.335188f, -0.23942f, -8.88728f, - -0.536301f, 0.00957681f, -9.95988f, 0.670376f, 0.134075f, - -9.29908f, -0.881066f, 0.0861913f, -9.67257f, 0.488417f, - 0.220267f, -9.62469f, -0.545878f, 0.306458f, -9.58638f, - 0.344765f, 0.306458f, -9.165f, -0.574608f, 0.0287304f, - -9.65342f, 0.143652f, 0.287304f, -10.0844f, -0.191536f, - 0.440533f, -9.40442f, 0.679953f, 0.21069f, -9.37569f, - -0.881066f, 0.402226f, -9.79707f, 1.34075f, 0.785298f, - -10.1801f, -1.13964f, -0.220267f, -9.14585f, 2.29843f, - 0.794875f, -9.36612f, -2.24097f, -0.316035f, -8.83939f, - 3.37104f, 0.727837f, -8.70532f, -3.25611f, 0.0766145f, - -8.24563f, 4.42448f, 0.814029f, -8.14029f, -4.27126f, - -0.392649f, -7.63272f, 5.38217f, 0.957681f, -7.05811f, - -5.5737f, -0.0383072f, -7.57525f, 5.93762f, 1.29287f, - -7.02938f, -6.02381f, -0.651223f, -7.46991f, 6.18662f, - 1.76213f, -7.35499f, -6.21535f, -1.37906f, -7.35499f, - 6.38773f, 1.47483f, -7.40287f, -6.27281f, -0.967257f, - -7.02938f, 6.79953f, 1.30245f, -6.95276f, -6.68461f, - -0.890643f, -6.42604f, 7.32626f, 1.09176f, -6.4835f, - -7.19218f, -0.354342f, -6.41646f, 7.57525f, 0.938527f, - -6.11958f, -7.50822f, -0.229843f, -5.88016f, 7.71891f, - 0.794875f, -5.17148f, -7.70933f, 0.105345f, -5.74608f, - 7.85298f, 0.727837f, -5.09486f, -7.72848f, 0.114922f, - -5.9472f, 7.83383f, 0.727837f, -5.91847f, -7.65187f, - -0.0287304f, -5.97593f, 7.77637f, 0.718261f, -6.01423f, - -7.63272f, 0.191536f, -5.95677f, 7.78594f, 0.526724f, - -5.73651f, -7.6806f, 0.507571f, -5.95677f, 7.89129f, - 0.459687f, -5.66947f, -7.74764f, 0.517148f, -5.93762f, - 7.85298f, 0.430956f, -5.81312f, -7.69018f, 0.459687f, - -5.9855f, 7.78594f, 0.469264f, -5.86101f, -7.65187f, - 0.517148f, -6.03339f, 7.82425f, 0.411803f, -5.75566f, - -7.67102f, 0.526724f, -6.00466f, 7.79552f, 0.402226f, - -5.68862f, -7.67102f, 0.42138f, -6.00466f, 7.79552f, - 0.497994f, -5.60243f, -7.69975f, 0.201113f, -6.13873f, - 7.65187f, 0.42138f, -5.3247f, -7.62314f, 0.172383f, - -6.608f, 7.40287f, 0.258574f, -5.77481f, -7.46991f, - 0.593762f, -7.18261f, 6.82826f, 0.134075f, -6.75165f, - -6.71334f, 0.526724f, -7.88171f, 5.79397f, -0.181959f, - -7.19218f, -5.70778f, 1.54187f, -8.4659f, 4.54898f, - -0.842759f, -7.90087f, -4.30956f, 1.95367f, -10.5728f, - 0.632069f, -1.96325f, -9.84496f, 0.153229f, 1.82917f, - -9.27993f, -0.0861913f, -0.92895f, -9.31823f, 0.047884f, - 1.46525f, -9.93115f, 0.325611f, -1.1971f, -10.2759f, - -0.114922f, 2.3942f, -9.59596f, -0.0766145f, -0.316035f, - -9.97903f, 0.363919f, -1.13964f, -9.04051f, 2.50912f, - 1.31202f, -8.67659f, -2.58574f, -0.603339f, -9.83538f, - 1.00556f, 1.40779f, -9.09797f, -0.92895f, -0.948104f, - -9.165f, 0.699107f, 1.24498f, -8.8777f, -0.517148f, - -0.699107f, -9.57681f, 0.507571f, 0.641646f, -9.65342f, - -0.229843f, -0.565032f, -9.55765f, 0.287304f, 0.47884f, - -8.91601f, -0.201113f, -0.833182f, -9.69173f, 0.134075f, - 0.411803f, -9.47146f, 0.162806f, 0.172383f, -9.5385f, - -0.21069f, 0.143652f, -9.30866f, 0.497994f, -0.105345f, - -9.8258f, 0.507571f, 0.507571f, -9.50977f, -0.248997f, - 0.383072f, -9.60554f, 0.641646f, 0.948104f, -9.27993f, - -0.220267f, -0.0766145f, -10.0844f, 0.430956f, 0.986411f, - -9.52892f, -0.00957681f, 0.517148f, -9.02135f, 0.411803f, - 1.43652f, -9.42358f, -0.00957681f, -0.258574f, -9.27035f, - 1.54187f, 0.45011f, -9.84496f, -0.995988f, 0.316035f, - -9.8258f, -0.402226f, 0.842759f, -8.93516f, 0.967257f, - -0.785298f, -8.94474f, 2.63362f, 0.545878f, -9.25119f, - -2.78685f, 0.0383072f, -7.71891f, 5.74608f, 0.909797f, - -9.34696f, -5.07571f, -0.651223f, -8.63828f, 4.58729f, - 0.430956f, -8.69574f, -4.29041f, -1.16837f, -7.39329f, - 7.83383f, 0.612916f, -7.62314f, -7.28795f, -0.229843f, - -6.17704f, 7.59441f, 1.89621f, -5.58328f, -7.56568f, - 0.153229f, -5.53539f, 8.00621f, 0.967257f, -4.83629f, - -7.9679f, 0.411803f, -4.95121f, 8.04452f, 0.248997f, - -4.46279f, -8.20732f, 0.201113f, -4.99909f, 8.42759f, - 0.105345f, -4.89375f, -8.30309f, -0.0287304f, -4.52983f, - 8.5042f, 0.306458f, -4.72137f, -8.5042f, 0.0f, - -4.36702f, 8.72447f, 0.0f, -4.43406f, -8.68616f, - 0.181959f, -4.15633f, 8.8777f, 0.430956f, -3.98395f, - -9.02135f, 0.584185f, -4.14676f, 8.68616f, 0.0670376f, - -3.9648f, -8.85855f, 1.09176f, -4.18506f, 8.84897f, - -0.114922f, -4.35745f, -8.77236f, 0.248997f, -4.22337f, - 8.07325f, 0.325611f, -3.67749f, -8.5042f, 1.37906f, - -9.15543f, 3.87861f, 2.11647f, -9.27993f, -2.25055f, - -1.5706f, -9.31823f, 0.0670376f, 1.47483f, -10.1897f, - -0.0766145f, -0.354342f, -9.24162f, -0.162806f, 0.0670376f, - -9.81623f, 0.325611f, -1.0343f, -5.88016f, 7.79552f, - 1.65679f, -8.16902f, -5.56412f, -2.83473f, -8.38928f, - 4.31914f, 1.39821f, -8.81066f, -4.41491f, -1.08218f, - -8.82982f, 4.46279f, 0.986411f, -8.61913f, -4.73094f, - -0.727837f, -8.06367f, 3.85945f, 1.38864f, -8.16902f, - -3.98395f, -0.766145f, -8.73405f, 3.92649f, 1.63763f, - -8.71489f, -4.10845f, -1.61848f, -8.91601f, 3.36146f, - 2.04944f, -9.08839f, -3.47638f, -1.97282f, -8.82024f, - 3.40934f, 2.29843f, -8.83939f, -3.66792f, -2.24097f, - -8.88728f, 3.553f, 2.17394f, -8.84897f, -3.78284f, - -2.21224f, -8.73405f, 4.01268f, 2.21224f, -8.74362f, - -4.22337f, -2.07817f, -8.63828f, 3.90734f, 2.20267f, - -8.97347f, -3.77326f, -1.87705f, -8.39886f, 4.48195f, - 2.08774f, -9.06924f, -4.30956f, -1.71425f, -7.44118f, - 6.41646f, 1.83875f, -7.72848f, -6.76123f, -1.05345f, - -6.08127f, 7.51779f, 1.35991f, -4.92248f, -7.63272f, - 0.0766145f, -6.33027f, 7.44118f, 1.49398f, -6.03339f, - -7.42203f, -0.430956f, -6.13873f, 7.53695f, 1.42694f, - -6.27281f, -7.45076f, -0.90022f, -6.17704f, 7.54652f, - 1.37906f, -6.14831f, -7.51779f, -0.42138f, -6.06212f, - 7.56568f, 1.47483f, -6.2345f, -7.46033f, -0.316035f, - -6.02381f, 7.67102f, 1.49398f, -6.22492f, -7.50822f, - -0.497994f, -5.67905f, 7.85298f, 1.71425f, -6.03339f, - -7.57525f, -1.05345f, -5.06613f, 8.05409f, 1.83875f, - -4.82671f, -7.97748f, -0.565032f, -4.54898f, 8.23605f, - 1.99198f, -4.42448f, -8.42759f, -1.06303f, -4.24253f, - 8.7532f, 2.17394f, -4.40533f, -8.81066f, -2.05901f, - -3.44765f, 9.10754f, 1.92494f, -3.01669f, -9.39485f, - -0.68953f, -3.055f, 8.68616f, 2.11647f, -3.4285f, - -8.73405f, -1.3216f, -2.72939f, 8.88728f, 2.11647f, - -2.61447f, -9.02135f, -1.21625f, -2.55701f, 9.38527f, - 2.30801f, -2.15478f, -9.663f, -2.33674f, -2.48039f, - 9.23204f, 2.2314f, -1.53229f, -9.71088f, -1.13964f, - -3.66792f, 8.72447f, 2.24097f, -2.29843f, -8.88728f, - -2.31759f, -8.54251f, 3.89776f, 1.75256f, -9.05966f, - -2.90177f, -2.06859f, -9.29908f, 2.04944f, 1.6089f, - -9.86411f, -1.71425f, -1.16837f, -10.2855f, 1.29287f, - 0.766145f, -10.1993f, -1.1971f, -0.373495f, -9.89284f, - 1.1971f, 0.995988f, -9.14585f, -1.48441f, -0.201113f, - -9.43316f, 0.306458f, 1.45567f, -9.19373f, -0.6608f, - -0.727837f, -9.15543f, -0.0287304f, 0.047884f, -9.40442f, - 0.0287304f, 0.392649f, -9.9503f, -0.948104f, 0.0287304f, - -10.1323f, 1.06303f, -0.47884f, -10.0078f, -0.45011f, - 0.23942f, -9.52892f, 0.287304f, -0.191536f, -9.45231f, - -0.545878f, 0.42138f, -9.52892f, 0.354342f, -0.584185f, - -9.86411f, -0.258574f, 0.699107f, -9.44273f, 0.0f, - -0.42138f, -8.4659f, 3.95522f, 0.354342f, -8.57124f, - -4.1276f, 0.430956f, -8.71489f, 4.04141f, 0.306458f, - -8.95431f, -3.9648f, -0.603339f, -8.89685f, 3.58173f, - 0.354342f, -8.52336f, -3.85945f, 0.258574f, -9.35654f, - 3.54342f, -0.785298f, -9.02135f, -3.69665f, 0.92895f, - -8.76278f, 2.84431f, -1.17795f, -8.56167f, -2.806f, - 2.07817f, -8.89685f, 3.13162f, -1.49398f, -8.5042f, - -3.16035f, 2.03028f, -9.09797f, 4.00311f, -0.995988f, - -9.71088f, -3.79242f, 2.70066f, -9.04051f, 3.58173f, - -1.01514f, -8.04452f, -3.64876f, 1.81002f, -7.86256f, - 4.94163f, -0.201113f, -7.46991f, -5.02782f, 1.81959f, - -7.41245f, 6.46434f, -0.47884f, -7.44118f, -6.31112f, - 0.976834f, -6.57927f, 6.68461f, -0.114922f, -6.36858f, - -6.40688f, 2.35589f, -6.02381f, 7.31668f, -0.469264f, - -5.43005f, -7.24007f, 2.43251f, -6.87615f, 7.48906f, - -0.536301f, -7.03895f, -7.15387f, 0.90022f, -5.9855f, - 7.72848f, -0.201113f, -5.78439f, -7.47949f, 1.13964f, - -6.06212f, 7.9296f, -0.268151f, -5.25767f, -7.76679f, - 1.63763f, -5.70778f, 8.29351f, -0.162806f, -4.72137f, - -8.14029f, 1.20668f, -5.29597f, 8.42759f, 0.143652f, - -4.75967f, -8.42759f, 0.603339f, -5.11401f, 8.44674f, - 0.565032f, -4.85544f, -8.43717f, -0.00957681f, -5.43963f, - 8.23605f, 0.919373f, -5.1619f, -8.05409f, -0.325611f, - -5.60243f, 8.0924f, 0.718261f, -5.48751f, -7.86256f, - -0.047884f, -5.84185f, 7.98706f, 1.11091f, -5.58328f, - -7.91044f, 0.162806f, -5.79397f, 7.8434f, 1.16837f, - -5.47793f, -7.69975f, -0.392649f, -5.78439f, 7.77637f, - 1.36948f, -5.63116f, -7.61356f, -0.651223f, -5.95677f, - 7.73806f, 1.55144f, -5.19063f, -7.69975f, -0.833182f, - -6.22492f, 7.5561f, 1.49398f, -5.46836f, -7.53695f, - -0.833182f, -6.87615f, 6.98149f, 1.25456f, -6.53138f, - -6.82826f, -0.871489f, -7.40287f, 6.03339f, 0.6608f, - -6.67503f, -5.9855f, 0.344765f, -8.00621f, 4.66391f, - 0.574608f, -7.71891f, -4.67348f, 0.641646f, -9.48104f, - 2.24097f, 1.0343f, -9.77792f, -2.03028f, -0.995988f, - -9.76834f, 1.30245f, 1.05345f, -9.72046f, -1.25456f, - -0.593762f, -9.47146f, 0.507571f, 1.1971f, -10.4675f, - -0.459687f, -0.804452f, -9.67257f, 0.201113f, 1.15879f, - -9.60554f, -0.383072f, -1.13006f, -9.42358f, -0.0191536f, - 1.08218f, -10.0844f, -0.0574608f, -0.823605f, -7.12514f, - 6.99107f, -0.488417f, -7.20176f, -6.6463f, 1.63763f, - -7.16345f, 6.86657f, -0.430956f, -7.46991f, -6.47392f, - 0.823605f, -7.09641f, 7.1443f, -0.804452f, -6.6463f, - -7.00065f, 1.76213f, -7.50822f, 6.62715f, -0.277727f, - -5.86101f, -7.06768f, 0.986411f, -7.2688f, 7.23049f, - -0.47884f, -7.28795f, -6.97192f, 1.51314f, -7.37414f, - 6.62715f, -0.287304f, -7.24964f, -6.39731f, 0.995988f, - -7.40287f, 6.56969f, -0.392649f, -7.11557f, -6.44519f, - 1.14922f, -7.3071f, 6.8953f, -0.584185f, -6.56011f, - -6.91445f, 1.78129f, -7.51779f, 6.78038f, -0.612916f, - -5.74608f, -7.02938f, 3.48596f, -7.24007f, 6.33985f, - -0.325611f, -6.8953f, -6.03339f, 0.536301f, -8.99262f, - 5.01825f, -0.258574f, -9.73961f, -4.56814f, 0.632069f, - -9.79707f, 1.66636f, 0.287304f, -9.21289f, -1.87705f, - -0.105345f, -9.77792f, 1.10133f, 0.995988f, -8.88728f, - -1.47483f, -0.335188f, -9.44273f, 1.24498f, 0.497994f, - -9.44273f, -1.34075f, -0.268151f, -9.7875f, 1.0726f, - 0.68953f, -9.39485f, -1.27372f, -0.162806f, -8.86812f, - 2.24097f, 0.545878f, -8.61913f, -2.47082f, 0.632069f, - -9.0022f, 2.02071f, 0.718261f, -9.36612f, -2.12605f, - -0.440533f, -9.22246f, 2.29843f, 1.05345f, -9.10754f, - -2.46124f, -0.402226f, -9.55765f, 2.32716f, 0.842759f, - -9.19373f, -2.50912f, -0.497994f, -8.95431f, 2.62405f, - 1.0726f, -9.15543f, -2.73897f, -0.737414f, -9.54808f, - 2.34632f, 1.11091f, -9.05966f, -2.55701f, -0.440533f, - -10.0556f, -0.746991f, 1.15879f, -8.90643f, 1.48441f, - -1.74298f, -8.53294f, -2.1452f, 2.67193f, -9.15543f, - 2.84431f, -1.62806f, -8.94474f, 1.81959f, 0.42138f, - -9.30866f, -1.75256f, -0.746991f, -9.92157f, 2.12605f, - 0.670376f, -9.35654f, -2.24097f, -0.699107f, -9.49062f, - 2.12605f, 1.25456f, -8.91601f, -2.36547f, -0.411803f, - -8.86812f, 2.40378f, 0.948104f, -8.95431f, -2.47082f, - -0.871489f, -8.90643f, 2.65278f, 1.49398f, -8.95431f, - -2.88262f, -1.18752f, -8.95431f, 3.15077f, 1.25456f, - -9.05966f, -3.34231f, -1.10133f, -9.02135f, 2.9305f, - 1.25456f, -9.03093f, -3.26569f, -1.0726f, -9.32781f, - 2.87304f, 1.0726f, -8.97347f, -3.26569f, -0.794875f, - -9.1267f, 2.94966f, 1.10133f, -9.06924f, -3.20823f, - -0.679953f, -9.06924f, 3.01669f, 1.01514f, -8.98304f, - -3.21781f, -0.507571f, -9.165f, 3.18908f, 0.555455f, - -9.03093f, -3.49553f, -0.354342f, -9.04051f, 3.32315f, - 0.344765f, -9.05966f, -3.48596f, -0.181959f, -8.76278f, - 3.02627f, 0.708684f, -8.90643f, -3.23696f, -0.248997f, - -8.85855f, 2.79643f, 0.641646f, -8.90643f, -2.96881f, - -0.306458f, -8.92558f, 2.7677f, 0.833182f, -8.91601f, - -3.02627f, -0.430956f, -8.94474f, 2.86347f, 1.00556f, - -8.86812f, -3.16035f, -0.565032f, -8.98304f, 2.94966f, - 1.1971f, -9.07881f, -3.20823f, -0.766145f, -8.89685f, - 2.92093f, 1.12049f, -8.89685f, -3.09331f, -0.842759f, - -8.83939f, 2.97839f, 0.967257f, -8.85855f, -3.1795f, - -0.919373f, -8.93516f, 3.15077f, 1.42694f, -8.90643f, - -3.43807f, -0.948104f, -8.99262f, 3.20823f, 1.33118f, - -8.92558f, -3.43807f, -1.0726f, -8.86812f, 3.01669f, - 1.52271f, -8.77236f, -3.33273f, -1.08218f, -8.81066f, - 3.23696f, 1.50356f, -8.82024f, -3.4668f, -1.13964f, - -8.86812f, 3.41892f, 1.40779f, -8.90643f, -3.62961f, - -1.06303f, -8.82982f, 3.38061f, 1.55144f, -8.79151f, - -3.62003f, -1.08218f, -8.82024f, 3.12204f, 1.67594f, - -8.82024f, -3.41892f, -1.15879f, -8.73405f, 3.25611f, - 1.75256f, -8.72447f, -3.4285f, -1.28329f, -8.79151f, - 3.32315f, 1.96325f, -8.78193f, -3.5913f, -1.55144f, - -8.71489f, 3.27527f, 2.02071f, -8.73405f, -3.48596f, - -1.67594f, -8.82024f, 3.16035f, 2.02071f, -8.7532f, - -3.41892f, -1.62806f, -8.73405f, 3.40934f, 1.90578f, - -8.74362f, -3.62003f, -1.38864f, -8.74362f, 3.41892f, - 1.93451f, -8.68616f, -3.66792f, -1.45567f, -8.70532f, - 3.40934f, 1.99198f, -8.68616f, -3.62961f, -1.78129f, - -8.69574f, 3.56257f, 1.93451f, -8.72447f, -3.77326f, - -1.45567f, -8.79151f, 3.45723f, 2.13563f, -8.74362f, - -3.68707f, -1.54187f, -8.79151f, 3.25611f, 2.03986f, - -8.65743f, -3.62003f, -1.6089f, -8.80109f, 3.32315f, - 1.92494f, -8.69574f, -3.5913f, -1.88663f, -8.99262f, - 3.13162f, 1.91536f, -8.63828f, -3.50511f, -1.42694f, - -8.69574f, 3.19865f, 2.22182f, -8.86812f, -3.43807f, - -1.80044f, -8.89685f, 2.61447f, 2.05901f, -8.7532f, - -2.85389f, -1.39821f, -9.32781f, 2.38462f, 2.08774f, - -8.85855f, -2.67193f, -1.5706f, -9.72046f, 1.13006f, - 1.86748f, -9.03093f, -0.756568f, -1.0343f, -10.3334f, - 0.42138f, -1.53229f, -9.57681f, -0.220267f, 1.26414f, - -8.95431f, -0.383072f, 0.201113f, -9.73961f, 0.651223f, - -0.565032f, -10.3334f, -0.651223f, -0.0574608f, -9.68215f, - 0.536301f, 1.02472f, -9.56723f, -0.823605f, -0.296881f, - -9.58638f, 0.890643f, 0.0287304f, -9.50977f, -0.957681f, - -0.0957681f, -9.54808f, 0.890643f, 0.0861913f, -9.72046f, - -1.04387f, -0.248997f, -9.35654f, 1.00556f, 0.335188f, - -9.47146f, -0.948104f, -0.325611f, -9.45231f, 0.90022f, - 0.0383072f, -9.70131f, -0.814029f, -0.191536f, -9.51935f, - 0.756568f, 0.335188f, -9.69173f, -0.861913f, -0.0383072f, - -9.58638f, 0.775721f, 0.306458f, -9.73004f, -0.986411f, - 0.00957681f, -9.47146f, 0.833182f, 0.258574f, -9.64384f, - -0.766145f, -0.287304f, -9.5385f, 0.699107f, 0.335188f, - -9.60554f, -0.842759f, -0.153229f, -9.5385f, 0.785298f, - 0.402226f, -9.73961f, -0.890643f, -0.191536f, -9.43316f, - 0.785298f, 0.411803f, -9.663f, -0.737414f, -0.392649f, - -9.56723f, 0.775721f, 0.335188f, -9.60554f, -0.766145f, - -0.287304f, -9.49062f, 0.679953f, 0.344765f, -9.67257f, - -0.785298f, -0.201113f, -9.44273f, 0.699107f, 0.316035f, - -9.62469f, -0.737414f, -0.220267f, -9.54808f, 0.679953f, - 0.440533f, -9.96946f, -0.497994f, -0.392649f, -9.61511f, - 0.440533f, 0.363919f, -9.46189f, -0.383072f, -0.383072f, - -9.48104f, 0.306458f, 0.565032f, -9.69173f, -1.0726f, - -0.766145f, -9.05008f, 0.909797f, 0.775721f, -9.63427f, - -0.430956f, -0.737414f, -9.54808f, 0.344765f, 0.718261f, - -9.58638f, -0.383072f, -0.229843f, -9.5385f, 0.172383f, - 0.632069f, -9.62469f, -0.335188f, -0.545878f, -9.52892f, - 0.306458f, 0.622492f, -9.48104f, -0.383072f, -0.392649f, - -9.44273f, 0.23942f, 0.68953f, -9.70131f, -0.344765f, - -0.354342f, -9.59596f, 0.229843f, 0.565032f, -9.40442f, - -0.392649f, -0.497994f, -9.43316f, 0.248997f, 0.555455f, - -9.34696f, -0.373495f, -0.220267f, -9.34696f, 0.181959f, - 0.392649f, -10.4579f, 0.0670376f, 0.181959f, -9.5385f, - -0.229843f, 0.296881f, -9.29908f, -0.0287304f, -0.42138f, - -9.45231f, 0.00957681f, 0.565032f, -9.84496f, -0.0766145f, - 0.105345f, -9.64384f, -0.0574608f, 0.277727f, -9.67257f, - -0.21069f, -0.306458f, -9.29908f, 0.047884f, 0.469264f, - -9.64384f, -0.248997f, 0.114922f, -9.52892f, 0.0191536f, - 0.201113f, -9.64384f, -0.411803f, -0.0861913f, -9.67257f, - 0.248997f, 0.0670376f, -9.73004f, -0.383072f, -0.00957681f, - -9.59596f, 0.268151f, -0.047884f, -9.77792f, -0.162806f, - 0.0766145f, -9.68215f, 0.00957681f, 0.153229f, -9.68215f, - -0.0957681f, 0.143652f, -9.50977f, -0.0957681f, 0.23942f, - -9.60554f, -0.316035f, 0.0f, -9.43316f, 0.124498f, - 0.134075f, -9.52892f, -0.47884f, -0.134075f, -9.50019f, - 0.316035f, -0.00957681f, -9.88326f, -0.23942f, -0.0670376f, - -9.5385f, 0.0861913f, 0.316035f, -9.60554f, -0.0766145f, - 0.220267f, -9.62469f, -0.00957681f, -0.172383f, -9.74919f, - -0.00957681f, 0.0766145f, -9.43316f, -0.105345f, 0.0957681f, - -9.69173f, -0.0670376f, 0.00957681f, -9.51935f, -0.0383072f, - -0.0383072f, -9.71088f, 0.0191536f, 0.0766145f, -9.50977f, - -0.0957681f, 0.0766145f, -9.56723f, -0.105345f, 0.0861913f, - -9.2895f, -0.114922f, 0.153229f, -9.71088f, -0.162806f, - 0.0861913f, -9.50019f, 0.0287304f, 0.0861913f, -9.64384f, - -0.0191536f, 0.287304f, -9.50977f, -0.134075f, -0.0383072f, - -9.50019f, 0.143652f, 0.21069f, -9.44273f, -0.23942f, - -0.344765f, -9.64384f, -0.0287304f, 0.172383f, -9.48104f, - -0.0574608f, -0.0957681f, -9.69173f, -0.181959f, 0.201113f, - -9.48104f, 0.114922f, -0.0574608f, -9.75877f, -0.0670376f, - 0.0191536f, -9.55765f, 0.0383072f, 0.172383f, -9.61511f, - -0.0574608f, 0.268151f, -9.24162f, -0.0957681f, -0.0574608f, - -9.56723f, 0.047884f, 0.325611f, -9.51935f, -0.134075f, - -0.459687f, -9.47146f, 0.0f, 0.622492f, -9.49062f, - -0.0670376f, -0.488417f, -9.59596f, 0.0f, 0.823605f, - -9.48104f, -0.0383072f, -0.574608f, -9.5385f, -0.335188f, - 0.641646f, -9.54808f, 0.296881f, -0.536301f, -9.48104f, - -0.363919f, 0.641646f, -9.50977f, 0.287304f, -0.45011f, - -9.46189f, -0.047884f, 1.13964f, -9.57681f, 0.0f, - -0.632069f, -9.57681f, -0.316035f, 0.909797f, -9.63427f, - 0.258574f, -0.517148f, -9.64384f, -0.344765f, 0.545878f, - -9.59596f, 0.296881f, -0.440533f, -9.54808f, -0.0574608f, - 0.746991f, -9.59596f, -0.0383072f, -0.296881f, -9.49062f, - 0.00957681f, 0.852336f, -9.46189f, -0.124498f, -0.21069f, - -9.57681f, 0.0766145f, 0.641646f, -9.37569f, -0.181959f, - -0.42138f, -9.70131f, 0.344765f, 0.737414f, -9.24162f, - -0.469264f, -0.794875f, -9.47146f, 0.0f, 0.699107f, - -9.76834f, 0.0287304f, -0.746991f, -9.48104f, -0.153229f, - 1.33118f, -9.36612f, 0.0957681f, -0.948104f, -9.74919f, - -0.201113f, 1.10133f, -9.35654f, 0.181959f, -0.909797f, - -9.54808f, 0.0957681f, 0.881066f, -9.73961f, 0.153229f, - -1.05345f, -9.49062f, -0.306458f, 1.04387f, -9.51935f, - 0.584185f, -0.766145f, -9.93115f, -0.814029f, 0.727837f, - -9.75877f, 1.0726f, -0.316035f, -9.72046f, -0.296881f, - 0.162806f, -9.47146f, 0.392649f, 0.0766145f, -9.40442f, - 0.21069f, 0.287304f, -9.37569f, -0.248997f, 0.536301f, - -9.5385f, 0.0861913f, 0.114922f, -9.40442f, -0.0287304f, - -0.0383072f, -10.0461f, 0.181959f, -0.00957681f, -9.32781f, - -0.181959f, 0.622492f, -9.46189f, 0.296881f, -0.201113f, - -9.35654f, -0.201113f, 0.201113f, -9.31823f, -0.402226f, - 0.21069f, -9.91199f, 0.517148f, 1.01514f, -9.87369f, - 0.047884f, -0.047884f, -9.56723f, 0.248997f, -0.114922f, - -9.76834f, -0.335188f, 0.0383072f, -9.02135f, 0.316035f, - 0.105345f, -9.5385f, -0.335188f, 0.0287304f, -9.59596f, - 0.344765f, 0.670376f, -9.70131f, 0.0287304f, -0.383072f, - -10.4579f, 0.402226f, 0.411803f, -10.4291f, -0.45011f, - 0.306458f, -9.44273f, 0.545878f, 0.430956f, -9.79707f, - 0.507571f, -0.679953f, -9.26077f, -0.469264f, 1.26414f, - -9.51935f, 0.775721f, -0.114922f, -9.19373f, -0.718261f, - 0.718261f, -9.68215f, 0.881066f, -0.316035f, -9.01178f, - -0.890643f, 0.938527f, -9.25119f, 1.04387f, -0.861913f, - -8.76278f, -0.881066f, -0.823605f, -9.71088f, 0.354342f, - -0.181959f, -9.32781f, -0.248997f, -0.0957681f, -10.4387f, - 0.995988f, -0.268151f, -10.2376f, -0.699107f, 0.536301f, - -9.98861f, 0.555455f, -0.0574608f, -9.49062f, -0.459687f, - 0.823605f, -9.79707f, 0.316035f, 0.268151f, -8.85855f, - -0.488417f, -0.574608f, -9.663f, 0.373495f, -0.287304f, - -9.42358f, 0.0191536f, -1.65679f, -9.42358f, 1.0726f, - 1.80044f, -9.63427f, -0.21069f, -1.66636f, -9.31823f, - 0.306458f, 2.83473f, -9.17458f, 0.814029f, -2.98796f, - -8.67659f, 0.143652f, 1.7334f, -9.31823f, 1.23541f, - -1.15879f, -9.13627f, -1.75256f, 0.785298f, -8.80109f, - 2.54743f, -0.0766145f, -9.91199f, -0.134075f, 1.21625f, - -9.72046f, 0.488417f, 0.363919f, -9.14585f, -0.277727f, - 1.0343f, -9.21289f, 0.718261f, -0.143652f, -9.48104f, - -0.296881f, -0.114922f, -9.2895f, 0.565032f, 0.565032f, - -10.2663f, 0.459687f, -0.143652f, -9.56723f, -0.105345f, - 0.459687f, -10.094f, 0.68953f, -0.306458f, -9.59596f, - -0.172383f, 0.957681f, -10.094f, 0.0861913f, -0.220267f, - -9.34696f, 0.191536f, 0.392649f, -9.79707f, -0.181959f, - -0.488417f, -9.55765f, 0.555455f, 1.0343f, -10.1227f, - 0.0191536f, -0.976834f, -9.40442f, 0.354342f, 0.871489f, - -9.69173f, 0.593762f, -0.296881f, -9.14585f, -0.517148f, - 1.31202f, -9.69173f, 0.861913f, -0.775721f, -9.07881f, - -0.68953f, 0.497994f, -9.90242f, 0.919373f, 0.00957681f, - -9.43316f, -0.68953f, 0.325611f, -9.79707f, 0.507571f, - 0.114922f, -9.40442f, -0.316035f, 0.430956f, -9.8258f, - 0.536301f, -0.0191536f, -9.32781f, -0.258574f, 0.258574f, - -9.93115f, 0.383072f, 0.143652f, -9.48104f, -0.181959f, - 0.6608f, -9.55765f, 0.0861913f, -0.0383072f, -9.37569f, - 0.0287304f, 0.430956f, -9.39485f, 0.325611f, 0.0287304f, - -9.32781f, -0.0861913f, 0.392649f, -9.50019f, 0.651223f, - 0.23942f, -9.40442f, -0.469264f, 0.545878f, -9.75877f, - 0.536301f, 0.0574608f, -9.38527f, -0.411803f, 0.47884f, - -9.87369f, 0.574608f, 0.0383072f, -9.54808f, -0.402226f, - 0.258574f, -9.65342f, 0.325611f, 0.23942f, -9.56723f, - -0.220267f, 0.6608f, -9.50977f, 0.134075f, 0.0766145f, - -9.38527f, -0.047884f, 0.536301f, -9.70131f, 0.0f, - -0.42138f, -9.35654f, 0.181959f, 0.881066f, -9.71088f, - 0.181959f, -0.402226f, -9.50019f, -0.00957681f, 0.727837f, - -9.49062f, 0.306458f, -0.0766145f, -9.27993f, -0.268151f, - 0.766145f, -9.73961f, 0.181959f, -0.517148f, -9.49062f, - -0.0287304f, 0.986411f, -9.86411f, 0.0383072f, -0.383072f, - -9.47146f, 0.0383072f, 0.986411f, -9.50977f, 0.402226f, - -0.383072f, -9.10754f, -0.363919f, 0.823605f, -10.0365f, - 0.90022f, -0.497994f, -9.59596f, -0.651223f, 0.833182f, - -9.73961f, 0.517148f, -0.0957681f, -9.31823f, -0.440533f, - 0.641646f, -9.56723f, 0.0191536f, -0.114922f, -9.33739f, - -0.047884f, 0.593762f, -9.67257f, -0.23942f, -0.459687f, - -9.51935f, 0.258574f, 0.794875f, -9.39485f, 0.0574608f, - -0.172383f, -9.29908f, -0.0574608f, 0.440533f, -10.0078f, - 0.134075f, -0.536301f, -9.45231f, -0.0670376f, 0.766145f, - -10.0748f, -0.0287304f, -0.584185f, -9.55765f, -0.0766145f, - 1.06303f, -9.73961f, 0.392649f, -0.402226f, -9.50019f, - -0.316035f, 1.35991f, -9.75877f, 0.229843f, -0.373495f, - -9.51935f, -0.248997f, 1.39821f, -10.2855f, 0.191536f, - -0.181959f, -10.1514f, -0.124498f, 1.23541f, -10.0461f, - 0.105345f, -0.440533f, -9.88326f, 0.0574608f, -0.0191536f, - -9.60554f, -0.201113f, 0.0957681f, -9.33739f, 0.047884f, - -0.248997f, -9.29908f, -0.23942f, 0.373495f, -9.04051f, - -0.0861913f, -0.00957681f, -9.24162f, -0.114922f, 1.78129f, - -9.414f, -0.124498f, -1.16837f, -9.68215f, -0.181959f, - 1.35033f, -9.60554f, 0.0191536f, -1.4461f, -9.19373f, - -0.220267f, 1.84832f, -9.23204f, -0.00957681f, -1.70467f, - -9.11712f, -0.181959f, 1.50356f, -8.74362f, -0.143652f, - -1.97282f, -8.89685f, 0.143652f, 1.88663f, -8.90643f, - -0.373495f, -1.25456f, -8.81066f, -0.124498f, 1.31202f, - -8.79151f, -0.134075f, -0.92895f, -8.99262f, -0.536301f, - 0.430956f, -9.31823f, 0.373495f, -0.181959f, -10.2855f, - -0.153229f, 0.708684f, -10.5536f, 0.229843f, -0.105345f, - -10.2855f, -0.220267f, -0.105345f, -9.95988f, 0.296881f, - -0.162806f, -9.79707f, -0.0861913f, 0.536301f, -9.39485f, - -0.124498f, -0.392649f, -10.2759f, 0.047884f, 1.09176f, - -9.61511f, -0.191536f, -0.517148f, -10.0461f, 0.229843f, - 1.5706f, -9.56723f, -0.430956f, -0.584185f, -9.5385f, - 0.287304f, 0.938527f, -9.49062f, -0.47884f, -0.287304f, - -9.56723f, -0.248997f, 0.497994f, -9.50977f, 0.0766145f, - -0.957681f, -9.79707f, -0.191536f, 0.296881f, -9.40442f, - 0.00957681f, -0.0383072f, -9.61511f, 0.0191536f, 0.268151f, - -9.31823f, -0.201113f, -0.344765f, -9.48104f, 0.45011f, - 0.555455f, -9.29908f, -0.746991f, 0.0191536f, -9.03093f, - 0.248997f, 0.612916f, -8.97347f, -0.459687f, 0.459687f, - -9.11712f, -0.277727f, -0.402226f, -9.0022f, 0.191536f, - 0.191536f, -10.6207f, -0.0766145f, 0.641646f, -10.1897f, - -0.00957681f, 0.344765f, -10.0844f, 0.0574608f, 0.201113f, - -10.1131f, -0.124498f, 0.191536f, -9.38527f, -0.153229f, - -0.0191536f, -9.43316f, -0.0574608f, -0.134075f, -9.42358f, - -0.47884f, 0.172383f, -9.27035f, 0.143652f, 0.21069f, - -10.343f, -0.0383072f, -0.373495f, -9.8258f, 0.0861913f, - 0.316035f, -10.1706f, -0.181959f, -0.143652f, -9.74919f, - 0.114922f, 0.258574f, -9.50977f, -0.430956f, 0.0670376f, - -9.29908f, 0.172383f, 0.344765f, -9.86411f, -0.68953f, - 0.0191536f, -10.0748f, 0.737414f, 0.440533f, -9.91199f, - -0.622492f, -0.430956f, -9.86411f, 0.708684f, 0.335188f, - -9.88326f, -0.392649f, 0.153229f, -9.77792f, 0.354342f, - -0.191536f, -9.60554f, 0.0670376f, 0.0670376f, -9.31823f, - -0.277727f, -0.0957681f, -9.55765f, 0.593762f, 0.153229f, - -9.23204f, -0.852336f, -0.201113f, -9.63427f, 0.42138f, - 0.507571f, -9.42358f, -0.603339f, -0.641646f, -9.64384f, - 0.42138f, 0.718261f, -9.47146f, -0.507571f, -0.995988f, - -9.83538f, 0.134075f, 0.603339f, -9.32781f, -0.172383f, - -0.861913f, -9.60554f, 0.181959f, 1.05345f, -9.72046f, - -0.0574608f, -1.21625f, -9.57681f, -0.00957681f, 1.1971f, - -9.69173f, 0.363919f, -1.31202f, -9.29908f, -0.306458f, - 1.37906f, -9.33739f, 0.766145f, -1.41737f, -9.05008f, - -0.0574608f, 1.09176f, -9.07881f, 0.727837f, -0.861913f, - -9.42358f, -0.785298f, 0.632069f, -9.48104f, 1.01514f, - 0.047884f, -9.69173f, -1.04387f, -0.124498f, -8.99262f, - 1.11091f, 0.325611f, -9.70131f, -0.363919f, -0.325611f, - -9.50019f, 0.737414f, 1.31202f, -9.76834f, -0.162806f, - -1.10133f, -9.68215f, 0.296881f, 1.04387f, -9.77792f, - 0.603339f, -0.0957681f, -9.83538f, -0.47884f, 0.909797f, - -10.4387f, 0.0766145f, -0.459687f, -9.9503f, 0.047884f, - 1.38864f, -9.60554f, -0.584185f, 0.459687f, -9.75877f, - 0.536301f, -0.124498f, -9.74919f, -0.172383f, 0.651223f, - -10.4483f, 0.229843f, -0.268151f, -9.50019f, -1.58975f, - 0.622492f, -9.64384f, 1.58975f, -0.114922f, -8.96389f, - -1.69509f, 1.16837f, -8.72447f, 1.71425f, -1.04387f, - -8.91601f, -0.90022f, 1.92494f, -8.84897f, 1.04387f, - -0.833182f, -8.86812f, -0.0574608f, 1.17795f, -8.91601f, - 0.47884f, -1.47483f, -9.22246f, 1.25456f, 1.76213f, - -8.88728f, -1.42694f, -2.36547f, -10.1227f, 2.24097f, - 2.09732f, -9.09797f, -2.35589f, -3.11246f, -9.84496f, - 2.75812f, 2.1069f, -9.26077f, -2.98796f, -2.33674f, - -9.01178f, 0.0766145f, 4.2138f, -8.45632f, 1.02472f, - -3.69665f, -8.51378f, -0.344765f, 3.95522f, -8.90643f, - 2.00155f, -3.78284f, -9.05966f, -0.497994f, 3.50511f, - -9.42358f, 1.86748f, -3.62003f, -9.68215f, -0.488417f, - 3.74453f, -9.48104f, 1.69509f, -3.18908f, -9.93115f, - -0.871489f, 3.54342f, -9.68215f, 2.03986f, -2.8922f, - -9.85453f, -0.861913f, 3.16035f, -9.81623f, 2.08774f, - -2.66235f, -9.95988f, -0.852336f, 2.74854f, -9.59596f, - 1.83875f, -2.15478f, -10.0652f, -0.622492f, 2.28886f, - -9.5385f, 1.46525f, -2.18351f, -9.67257f, -0.632069f, - 2.01113f, -9.43316f, 1.3216f, -1.67594f, -9.42358f, - -0.679953f, 1.05345f, -9.45231f, 1.5706f, -1.23541f, - -9.2895f, -0.459687f, 1.39821f, -9.5385f, 1.46525f, - -1.16837f, -9.58638f, -0.316035f, 1.47483f, -9.54808f, - 1.20668f, -1.26414f, -9.60554f, -0.411803f, 1.39821f, - -9.31823f, 1.14922f, -1.14922f, -9.76834f, -0.354342f, - 1.35991f, -9.52892f, 1.11091f, -1.35991f, -9.81623f, - 0.0574608f, 1.46525f, -9.663f, 0.833182f, -1.1971f, - -9.80665f, 0.21069f, 1.62806f, -9.70131f, 0.641646f, - -1.24498f, -9.9503f, 0.497994f, 1.53229f, -9.88326f, - 0.325611f, -1.05345f, -9.86411f, 0.565032f, 1.58017f, - -9.87369f, 0.220267f, -1.24498f, -9.94073f, 0.268151f, - 1.97282f, -9.91199f, 0.584185f, -1.35033f, -9.25119f, - 0.306458f, 1.13006f, -9.46189f, 0.383072f, -1.11091f, - -8.97347f, -0.0670376f, 1.22583f, -8.98304f, 0.459687f, - -0.488417f, -9.30866f, -0.737414f, 1.23541f, -9.13627f, - 1.00556f, -0.526724f, -10.6781f, -0.775721f, 0.373495f, - -10.5919f, 1.13964f, 0.42138f, -9.54808f, -2.07817f, - 0.68953f, -9.26077f, 1.82917f, -0.105345f, -9.03093f, - -0.976834f, 0.430956f, -9.47146f, 0.995988f, -0.181959f, - -9.86411f, -0.23942f, 0.124498f, -9.73004f, 0.153229f, - 0.871489f, -9.97903f, -0.220267f, 0.162806f, -9.59596f, - 0.153229f, 0.430956f, -9.8258f, -0.114922f, 0.0957681f, - -9.76834f, 0.00957681f, -0.0287304f, -10.1801f, -0.268151f, - 0.258574f, -10.0844f, 0.23942f, 0.0766145f, -10.1131f, - 0.794875f, 0.0f, -9.86411f, -0.593762f, 0.909797f, - -9.29908f, -2.09732f, 1.72383f, -9.17458f, 1.89621f, - -1.58975f, -8.91601f, -2.16436f, 1.94409f, -9.1267f, - 2.03986f, -1.96325f, -9.30866f, -2.42293f, 2.02071f, - -9.43316f, 2.26013f, -1.38864f, -9.8258f, -2.2697f, - 1.16837f, -9.44273f, 2.16436f, -1.09176f, -9.14585f, - -2.03986f, 1.26414f, -9.01178f, 1.82917f, -1.28329f, - -8.89685f, -2.09732f, 1.64721f, -8.95431f, 1.93451f, - -1.69509f, -8.8777f, -2.19309f, 1.28329f, -9.03093f, - 2.11647f, -1.40779f, -9.31823f, -2.2697f, 1.09176f, - -9.11712f, 2.06859f, -1.3216f, -9.2895f, -2.21224f, - 1.4461f, -9.165f, 2.00155f, -1.48441f, -8.98304f, - -2.20267f, 1.46525f, -8.83939f, 2.00155f, -1.24498f, - -9.14585f, -2.26013f, 1.43652f, -9.01178f, 2.1069f, - -1.45567f, -9.1267f, -2.29843f, 1.63763f, -9.04051f, - 2.12605f, -1.76213f, -9.18416f, -2.27928f, 1.9824f, - -9.09797f, 2.07817f, -1.79086f, -9.08839f, -2.00155f, - 1.79086f, -9.44273f, 1.87705f, -1.62806f, -9.14585f, - -2.31759f, 1.84832f, -8.86812f, 2.06859f, 1.61848f, - -9.165f, -2.24097f, 2.05901f, -9.0022f, 2.02071f, - -1.7334f, -9.04051f, -2.1452f, 2.04944f, -9.2895f, - 2.06859f, -1.70467f, -9.20331f, -2.22182f, 2.06859f, - -9.33739f, 2.09732f, -1.76213f, -9.34696f, -2.13563f, - 1.99198f, -9.1267f, 1.9824f, -1.84832f, -8.88728f, - -1.79086f, 1.55144f, -9.03093f, 1.62806f, -1.61848f, - -9.1267f, -1.58975f, 1.47483f, -9.19373f, 1.49398f, - -1.47483f, -8.92558f, -1.48441f, 1.76213f, -8.69574f, - 1.18752f, -1.76213f, -9.24162f, -1.35991f, 1.49398f, - -9.48104f, 1.23541f, -1.61848f, -9.51935f, 1.86748f, - 2.00155f, -8.71489f, -1.24498f, -2.11647f, -5.6982f, - 8.15944f, 1.27372f, -4.52983f, -7.99663f, -0.775721f, - -4.00311f, 8.31267f, 0.632069f, -3.68707f, -8.03494f, - 0.344765f, -2.16436f, 7.79552f, 3.7158f, -1.7334f, - -7.74764f, -4.22337f, -1.56102f, 8.78193f, 4.39575f, - -1.58017f, -8.76278f, -4.5011f, -1.72383f, 9.05008f, - 5.25767f, -1.93451f, -9.11712f, -3.9648f, -0.995988f, - 7.97748f, 5.34386f, -1.33118f, -7.92002f, -4.03184f, - -0.670376f, 9.17458f, 4.3766f, 0.220267f, -9.60554f, - -4.13718f, -0.746991f, 7.33583f, 5.34386f, -1.1971f, - -7.28795f, -5.14275f, 0.871489f, 7.90087f, 5.80354f, - 0.584185f, -8.33182f, -3.04542f, 0.986411f, 7.59441f, - 6.49307f, -0.0670376f, -7.85298f, -5.92804f, 2.07817f, - 8.83939f, 5.4109f, 0.325611f, -9.59596f, -3.83072f, - 0.718261f, 7.38372f, 5.99508f, 0.248997f, -8.29351f, - -5.10444f, 1.72383f, 7.83383f, 5.85143f, 2.12605f, - -9.15543f, -4.03184f, 2.05901f, 7.37414f, 5.79397f, - 2.19309f, -8.49463f, -4.95121f, 2.13563f, 7.91044f, - 4.29999f, 2.1452f, -8.76278f, -2.24097f, 1.31202f, - 8.59997f, 5.72693f, 0.746991f, -9.55765f, -3.54342f, - 1.36948f, 8.5042f, 5.09486f, 1.17795f, -9.62469f, - -4.1276f, 1.77171f, 8.69574f, 5.46836f, 1.63763f, - -9.40442f, -2.32716f, 1.91536f, 7.75721f, 5.25767f, - 2.04944f, -8.81066f, -2.40378f, 0.392649f, 7.73806f, - 5.63116f, 1.45567f, -9.24162f, -1.49398f, -0.258574f, - 6.82826f, 7.34541f, -0.42138f, -9.07881f, -1.30245f, - -0.517148f, 6.97192f, 7.6806f, -0.890643f, -9.58638f, - -4.81713f, -0.21069f, 3.13162f, 9.20331f, -0.967257f, - -10.0748f, 0.181959f, -0.948104f, -5.9855f, 7.4316f, - -1.00556f, -9.5385f, 0.497994f, 0.162806f, -8.47547f, - 4.32872f, 0.248997f, -9.165f, -2.27928f, 0.143652f, - -8.6287f, 4.47237f, 0.354342f, -9.51935f, 0.986411f, + -0.0766145f, 6.02381f, 7.85298f, -0.268151f, -8.84897f, + -1.3216f, -0.402226f, 5.11401f, 8.77236f, -1.10133f, + -10.1706f, 1.24498f, -1.18752f, 6.40688f, 8.0924f, + -2.60489f, -8.99262f, 2.58574f, 0.632069f, 9.05008f, + 3.61046f, 1.50356f, -9.67257f, 1.93451f, 0.411803f, + 8.81066f, 0.268151f, -0.00957681f, -8.7532f, 2.15478f, + -0.0191536f, 9.49062f, -0.68953f, 0.0383072f, -8.94474f, + 2.99754f, -0.871489f, 9.80665f, 1.53229f, -0.92895f, + -9.88326f, 0.957681f, 0.507571f, 9.19373f, 1.71425f, + 0.287304f, -9.03093f, 0.651223f, 0.363919f, 9.71088f, + 1.18752f, 1.10133f, -10.0556f, 2.98796f, 0.23942f, + 9.39485f, 1.0343f, 0.842759f, -9.73961f, -1.12049f, + 0.172383f, 9.50977f, 1.18752f, 0.0383072f, -9.9503f, + 0.957681f, -0.373495f, 9.96946f, 1.01514f, 0.794875f, + -10.1897f, -1.38864f, -9.50977f, -1.04387f, 0.325611f, + -9.76834f, 1.05345f, -0.679953f, -9.76834f, -0.641646f, + 0.488417f, -9.2895f, 0.316035f, 0.258574f, -9.29908f, + -0.890643f, 0.469264f, -9.33739f, 0.823605f, -0.45011f, + -9.69173f, -1.02472f, 0.536301f, -9.52892f, 0.90022f, + -0.411803f, -9.34696f, -0.890643f, 0.430956f, -9.48104f, + 0.823605f, -0.603339f, -9.7875f, -0.565032f, 0.574608f, + -9.96946f, 0.536301f, -0.699107f, -9.57681f, -0.823605f, + 0.641646f, -9.43316f, 0.593762f, -0.775721f, -9.35654f, + -1.04387f, 0.440533f, -9.77792f, 1.01514f, -0.881066f, + -9.32781f, -1.10133f, 0.306458f, -9.414f, 0.995988f, + 0.0287304f, -9.26077f, -1.01514f, 0.268151f, -9.29908f, + 0.881066f, 0.00957681f, -9.42358f, -0.679953f, 0.201113f, + -9.49062f, 0.488417f, -0.00957681f, -9.47146f, -0.363919f, + 0.191536f, -9.32781f, 0.124498f, 0.124498f, -9.5385f, + -0.0766145f, 0.268151f, -9.32781f, -0.172383f, 0.0574608f, + -9.69173f, 0.21069f, 0.354342f, -9.50019f, -0.306458f, + 0.0383072f, -9.54808f, 0.507571f, 0.363919f, -9.20331f, + -0.775721f, 0.0574608f, -9.59596f, 0.651223f, 0.679953f, + -9.56723f, -0.794875f, -0.0287304f, -9.49062f, 0.794875f, + 0.612916f, -9.06924f, -1.10133f, -0.201113f, -9.20331f, + 1.90578f, 1.46525f, -9.29908f, -2.17394f, 0.603339f, + -0.995988f, 0.0766145f, 9.58638f, -0.344765f, -0.92895f, + -9.1267f, -2.03986f, -0.497994f, 10.477f, -2.49955f, + -0.0957681f, -10.4866f, -1.5706f, -0.23942f, 9.13627f, + -1.92494f, -0.325611f, -9.05008f, -1.5706f, -0.0383072f, + 10.1323f, -1.87705f, -0.632069f, -9.52892f, -1.20668f, + 0.105345f, 9.14585f, -1.13964f, -0.718261f, -9.02135f, + -1.58975f, 0.296881f, 9.50019f, -1.74298f, -1.00556f, + -9.27993f, -1.09176f, 0.23942f, 9.87369f, -1.04387f, + -0.995988f, -9.35654f, -2.08774f, -0.526724f, 9.89284f, + -1.40779f, -0.459687f, -9.50977f, -2.70066f, -1.47483f, + 8.95431f, -1.92494f, 0.526724f, -8.95431f, -1.05345f, + -0.938527f, 9.14585f, -3.02627f, 1.04387f, -8.78193f, + 1.00556f, -3.56257f, 9.0022f, 1.96325f, 2.36547f, + -9.83538f, 1.02472f, -2.59531f, 9.49062f, 1.0726f, + 1.77171f, -9.06924f, 0.0861913f, -2.17394f, 9.21289f, + -0.823605f, 1.52271f, -10.1323f, 0.316035f, -3.09331f, + 10.0844f, 0.555455f, 2.00155f, -9.75877f, 1.51314f, + -2.24097f, 9.61511f, 0.670376f, 1.35033f, -9.77792f, + 0.986411f, -3.36146f, 9.59596f, 1.77171f, 2.29843f, + -9.48104f, 1.4461f, -2.8922f, 8.88728f, 1.84832f, + 2.38462f, -9.19373f, 1.75256f, -2.6432f, 9.89284f, + 1.38864f, 2.19309f, -9.20331f, 9.98861f, -0.718261f, + -0.746991f, 10.6111f, 0.632069f, 0.948104f, 8.99262f, + -0.258574f, 0.517148f, 9.10754f, 0.21069f, -1.21625f, + 9.90242f, -0.162806f, 0.0287304f, 10.5249f, -0.0861913f, + 0.229843f, 9.83538f, 0.0f, 0.181959f, 10.4291f, + -0.172383f, -0.47884f, 9.43316f, 0.201113f, -0.268151f, + 9.76834f, -0.134075f, -0.354342f, 10.0556f, 1.0726f, + 0.277727f, 9.93115f, -1.05345f, 0.363919f, 9.79707f, + 0.651223f, 0.699107f, 10.0173f, -0.775721f, 0.0670376f, + 9.49062f, 0.296881f, 0.919373f, 10.1801f, -0.68953f, + -0.651223f, 9.70131f, 1.00556f, 0.248997f, 9.42358f, + -0.995988f, 1.45567f, 9.13627f, -1.35033f, 2.36547f, + 9.40442f, 0.976834f, -4.34787f, 8.79151f, -0.90022f, + 1.56102f, 8.92558f, 0.6608f, -2.3942f, 9.59596f, + -0.363919f, 1.40779f, 9.05966f, 0.181959f, -2.1452f, + 9.48104f, -0.612916f, 2.36547f, 9.03093f, 0.21069f, + -2.18351f, 9.74919f, -1.5706f, 2.07817f, 8.85855f, + 1.04387f, -2.30801f, 8.81066f, -1.66636f, 3.4285f, + 8.52336f, 0.440533f, -4.52983f, 9.27993f, -2.19309f, + 2.2697f, 8.83939f, 0.90022f, -2.48039f, 9.1267f, + -2.77727f, 1.4461f, 8.78193f, 0.814029f, -4.24253f, + 8.90643f, -3.39977f, 0.651223f, 8.86812f, 1.08218f, + -2.34632f, 9.42358f, -3.26569f, 0.402226f, 8.94474f, + 0.526724f, -2.65278f, 9.38527f, -3.21781f, 0.0f, + 9.20331f, 0.143652f, -2.71024f, 9.44273f, -2.8922f, + -0.497994f, 9.35654f, 0.105345f, -2.78685f, 9.09797f, + -3.4285f, -1.00556f, 8.81066f, 0.785298f, -3.84988f, + 9.31823f, -3.09331f, -1.4461f, 8.68616f, 0.555455f, + -3.27527f, 9.414f, -2.5187f, -1.79086f, 8.59997f, + 0.766145f, -3.47638f, 9.0022f, -2.67193f, -2.43251f, + 8.77236f, 1.39821f, -2.85389f, 8.25521f, -3.29442f, + -2.46124f, 8.15944f, 1.09176f, -3.51469f, 8.72447f, + -2.69108f, -2.48997f, 8.91601f, 0.881066f, -3.66792f, + 8.92558f, -2.33674f, -2.31759f, 8.84897f, 1.06303f, + -3.055f, 8.92558f, -2.49955f, -2.29843f, 8.81066f, + 0.919373f, -2.56658f, 9.31823f, -2.78685f, -1.81959f, + 9.06924f, 0.411803f, -2.86347f, 9.38527f, -2.78685f, + -1.70467f, 9.25119f, 0.335188f, -4.67348f, 9.165f, + -3.9648f, -0.622492f, 8.65743f, 0.248997f, -3.055f, + 9.414f, -3.67749f, 0.0287304f, 8.82982f, 0.852336f, + -2.50912f, 8.82024f, -3.47638f, 0.201113f, 8.98304f, + 1.06303f, -3.33273f, 8.89685f, -3.64876f, 0.718261f, + 8.91601f, 1.52271f, -2.70066f, 8.95431f, -3.56257f, + 1.35991f, 9.05008f, 1.67594f, -3.16992f, 9.08839f, + -3.16035f, 2.03028f, 9.07881f, 1.64721f, -3.04542f, + 8.91601f, -3.11246f, 2.52828f, 8.88728f, 2.07817f, + -1.99198f, 9.1267f, -2.806f, 0.162806f, 9.1267f, + 2.806f, -2.07817f, 9.14585f, -2.31759f, 2.16436f, + 8.8777f, 2.19309f, -1.88663f, 9.88326f, -2.5187f, + 1.94409f, 9.1267f, 2.46124f, -2.806f, 7.64229f, + -6.0717f, 2.9305f, 8.07325f, 5.64074f, -2.63362f, + 4.29999f, -7.9679f, 0.622492f, 4.71179f, 7.74764f, + -3.41892f, 4.42448f, -8.99262f, 1.13964f, 3.98395f, + 8.47547f, -1.9824f, -0.699107f, -9.46189f, -0.794875f, + -0.593762f, 9.24162f, -2.74854f, 1.88663f, -8.8777f, + -0.153229f, 0.861913f, 8.98304f, -2.48039f, -1.52271f, + -9.32781f, -3.39977f, 0.0574608f, 8.99262f, -5.88974f, + -0.746991f, -3.93607f, -8.01579f, -1.17795f, 8.41801f, + -4.17549f, -2.30801f, -2.61447f, -9.44273f, -2.3942f, + 7.46991f, -5.01825f, -1.0343f, 1.89621f, -8.8777f, + -0.890643f, 8.65743f, -4.31914f, -2.16436f, 1.49398f, + -9.69173f, -1.37906f, 9.05008f, -2.43251f, -1.87705f, + 0.402226f, -8.95431f, -2.01113f, 8.72447f, -3.54342f, + -0.344765f, -2.95923f, -8.42759f, -0.92895f, 8.99262f, + -2.34632f, -0.392649f, -6.70376f, -6.55054f, -0.919373f, + 8.80109f, -2.35589f, -0.0766145f, -8.8777f, -5.89931f, + 0.890643f, 9.7875f, 2.24097f, -0.536301f, -8.08282f, + -4.88417f, -0.191536f, 9.21289f, 1.16837f, -0.440533f, + -7.93917f, -4.81713f, -0.890643f, 9.08839f, 1.75256f, + -1.20668f, -9.414f, -2.57616f, -0.708684f, 9.50977f, + 1.40779f, -1.14922f, -9.8258f, -1.24498f, -0.584185f, + 9.63427f, 0.727837f, -0.181959f, -9.25119f, -2.31759f, + -0.0574608f, 9.64384f, -0.612916f, 1.21625f, -9.50977f, + -1.16837f, 0.756568f, 9.45231f, -0.316035f, 1.21625f, + -10.5441f, -0.45011f, 1.5706f, 9.7875f, -1.22583f, + 9.07881f, 0.0766145f, -2.34632f, 9.26077f, 0.316035f, + 4.28083f, 8.72447f, 0.584185f, -3.27527f, 8.39886f, + 0.47884f, 3.98395f, 9.26077f, 2.35589f, -2.98796f, + 9.52892f, -1.61848f, 3.73495f, 8.91601f, 2.98796f, + -3.36146f, 9.7875f, -2.31759f, 3.60088f, 8.86812f, + 3.32315f, -3.62961f, 9.76834f, -2.46124f, 2.72939f, + 2.31759f, 10.2089f, -2.3942f, 0.995988f, -8.68616f, + 5.5737f, 1.13006f, 9.04051f, -2.09732f, 1.26414f, + -8.51378f, 4.40533f, 0.852336f, 9.91199f, -2.07817f, + 0.622492f, -9.18416f, 4.29999f, 0.229843f, 10.0269f, + -1.08218f, 0.220267f, -9.40442f, 4.40533f, 0.0766145f, + 9.54808f, -1.89621f, 0.967257f, -9.05966f, 3.92649f, + 0.335188f, 9.62469f, -0.497994f, 0.430956f, -9.71088f, + 4.02226f, 0.718261f, 9.63427f, 1.59933f, 0.383072f, + -8.88728f, 3.24654f, 0.42138f, 8.71489f, 2.55701f, + 0.68953f, -9.64384f, 1.67594f, 1.0726f, -7.0198f, + 7.20176f, 0.641646f, -9.17458f, 4.18506f, -0.402226f, + -2.46124f, 8.78193f, -0.0383072f, -8.31267f, 4.03184f, + 0.23942f, 2.27928f, 10.4675f, -0.517148f, -9.47146f, + 4.14676f, -1.37906f, 9.59596f, -4.07972f, 3.45723f, + -9.663f, 1.71425f, -0.134075f, 6.95276f, -5.80354f, + 0.268151f, -5.38217f, 7.03895f, 0.00957681f, 5.20978f, + -7.75721f, -0.047884f, -2.83473f, 8.53294f, -0.306458f, + 1.64721f, -8.64786f, 0.766145f, 0.162806f, 8.84897f, + -0.191536f, -2.58574f, -9.19373f, 0.0f, 4.05099f, + 8.52336f, -0.0383072f, -3.10289f, -9.17458f, 0.45011f, + 4.11803f, 9.19373f, 0.0957681f, -2.47082f, -9.61511f, + 0.804452f, 3.98395f, 8.52336f, 0.114922f, 4.00311f, + -8.76278f, 0.699107f, 4.53941f, 8.28394f, -0.0383072f, + 7.95833f, -6.57927f, -0.124498f, 3.52426f, 10.1035f, + -0.229843f, 6.68461f, -6.2345f, -0.153229f, 3.04542f, + 9.59596f, -0.344765f, 7.47949f, -7.29753f, 0.114922f, + 3.90734f, 9.03093f, -0.383072f, 7.57525f, -7.20176f, + -0.172383f, 3.70622f, 9.8258f, -0.335188f, 7.21134f, + -6.7325f, -0.172383f, 2.71024f, 10.2855f, -0.114922f, + 6.608f, -7.41245f, -0.201113f, 1.87705f, 9.39485f, + 1.37906f, -0.0670376f, -9.47146f, 1.1971f, 1.8579f, + 9.49062f, 0.842759f, -1.63763f, -8.95431f, 0.679953f, + 2.8922f, 9.1267f, 1.43652f, -1.58017f, -9.01178f, + 0.890643f, 3.66792f, 9.22246f, 0.746991f, -1.18752f, + -9.04051f, 2.12605f, 2.72939f, 9.52892f, 3.79242f, + 1.48441f, -9.04051f, 4.57771f, -0.785298f, 9.61511f, + 4.61602f, 1.21625f, -8.4659f, 4.94163f, -0.574608f, + 8.4659f, 4.67348f, 1.48441f, -8.23605f, 4.86502f, + -0.852336f, 9.24162f, 5.12359f, 0.92895f, -9.03093f, + 5.84185f, -0.430956f, 8.92558f, 5.38217f, 0.440533f, + -8.37971f, 6.72292f, -0.220267f, 8.02536f, 6.608f, + 1.6089f, -6.30154f, 6.33985f, 0.277727f, 6.58884f, + 9.85453f, 1.39821f, 0.153229f, 10.0844f, -1.46525f, + 0.45011f, 9.68215f, 1.90578f, -0.0766145f, 9.98861f, + -1.96325f, 0.536301f, 9.90242f, 2.20267f, 0.143652f, + 9.94073f, -2.20267f, 0.191536f, 9.46189f, 1.95367f, + 0.0957681f, 9.74919f, -2.06859f, 0.296881f, 9.30866f, + 1.64721f, 0.153229f, 9.84496f, -1.92494f, 0.574608f, + 7.38372f, 0.488417f, 6.76123f, 8.83939f, -1.37906f, + -3.11246f, 9.2895f, 0.153229f, -0.976834f, 9.86411f, + -0.0574608f, -0.957681f, 9.26077f, 0.833182f, 2.07817f, + 9.26077f, -0.938527f, -0.957681f, 10.0269f, -0.354342f, + 2.43251f, 9.84496f, 0.153229f, -0.957681f, 0.986411f, + -8.74362f, 1.34075f, 2.09732f, 9.165f, -1.84832f, + -1.25456f, -10.228f, 2.19309f, 0.42138f, 9.73004f, + -1.23541f, -1.49398f, -10.1706f, 0.172383f, -1.22583f, + 10.2089f, -0.593762f, -2.2314f, -9.663f, -0.526724f, + -1.6089f, 9.65342f, 0.593762f, -2.38462f, -9.165f, + -1.4461f, -2.46124f, 9.42358f, 0.430956f, -2.38462f, + -9.73004f, 0.0383072f, -2.31759f, 9.57681f, -0.47884f, + -2.44209f, -9.5385f, -0.746991f, -2.32716f, 9.58638f, + 0.612916f, -2.34632f, -10.1418f, -1.0726f, -1.92494f, + 9.90242f, 0.890643f, -2.84431f, 9.38527f, -2.38462f, + -1.69509f, -9.50977f, 2.73897f, -3.88818f, 7.9296f, + -2.40378f, -1.5706f, -8.4659f, 2.62405f, -8.91601f, + -2.98796f, 0.497994f, -8.97347f, 2.79643f, 0.373495f, + -10.3717f, 1.02472f, -0.105345f, -10.0461f, -1.02472f, + 0.679953f, -4.89375f, 8.17859f, 0.0766145f, -6.12916f, + -7.61356f, 0.172383f, -6.4835f, 7.5561f, -0.363919f, + -6.09085f, -7.46991f, 0.699107f, -6.19619f, 7.62314f, + -0.248997f, -5.78439f, -7.52737f, 1.55144f, -6.33985f, + 7.50822f, -0.45011f, -5.6982f, -7.48906f, 1.48441f, + -6.36858f, 7.46991f, -0.373495f, -5.72693f, -7.44118f, + 1.63763f, -6.33027f, 7.8434f, -0.316035f, -6.54096f, + -7.57525f, 1.37906f, -6.69419f, 7.52737f, -0.258574f, + -6.41646f, -7.37414f, 1.21625f, -6.62715f, 7.61356f, + -0.392649f, -6.24408f, -7.48906f, 1.23541f, -6.18662f, + 7.60398f, -0.201113f, -5.9472f, -7.45076f, 1.39821f, + -6.14831f, 7.86256f, -0.584185f, -6.26323f, -7.50822f, + 1.6089f, -5.26724f, 8.74362f, -0.153229f, -4.57771f, + -8.41801f, 0.6608f, -3.56257f, 8.82024f, 0.114922f, + -2.86347f, -8.82982f, 0.948104f, -2.53785f, 9.27035f, + 0.23942f, -2.33674f, -9.29908f, 1.02472f, -2.12605f, + 9.67257f, 0.354342f, -2.1452f, -9.45231f, 0.335188f, + -1.71425f, 9.36612f, 0.287304f, -1.41737f, -9.27035f, + -0.229843f, -2.65278f, 8.94474f, -0.306458f, -0.737414f, + -9.414f, 0.172383f, -8.72447f, 5.46836f, 0.325611f, + -10.2663f, -1.80044f, -0.143652f, -9.35654f, -0.794875f, + -0.756568f, -10.1801f, 1.0343f, 1.20668f, -9.54808f, + -0.986411f, -0.766145f, -9.165f, 0.890643f, 1.13964f, + -8.92558f, -0.555455f, -1.22583f, -9.68215f, 0.976834f, + 0.344765f, -9.14585f, 4.05099f, -1.31202f, -9.57681f, + 0.68953f, 1.51314f, -9.54808f, 0.0957681f, 1.45567f, + -9.18416f, -0.229843f, -0.6608f, -9.71088f, 0.047884f, + 1.35033f, -9.87369f, 0.0383072f, -0.909797f, -8.57124f, + 1.1971f, 3.86903f, -9.76834f, -1.13964f, -2.2697f, + -9.38527f, 0.890643f, 2.74854f, -9.38527f, -1.20668f, + -2.3942f, -8.74362f, 1.4461f, 3.45723f, -8.99262f, + -1.72383f, -2.56658f, -9.48104f, 1.13006f, 2.98796f, + -8.80109f, -1.76213f, -2.52828f, -9.69173f, 1.15879f, + 2.3942f, -8.98304f, -1.68552f, -1.71425f, -8.93516f, + 1.25456f, 3.26569f, -9.61511f, -1.38864f, -2.46124f, + -9.37569f, 1.4461f, 3.40934f, -8.83939f, -2.1069f, + -2.42293f, -9.165f, 1.61848f, 2.9305f, -9.165f, + -2.04944f, -2.50912f, -9.31823f, 0.823605f, 0.0f, + -9.48104f, -0.909797f, 0.497994f, -9.30866f, 1.0343f, + -0.775721f, -9.01178f, -1.15879f, 0.814029f, -9.25119f, + 0.948104f, -0.00957681f, -8.80109f, -1.16837f, 0.737414f, + -9.62469f, 1.39821f, -0.248997f, -9.39485f, -1.45567f, + 0.957681f, -9.57681f, 1.79086f, -0.296881f, -9.50019f, + -1.81002f, 0.842759f, -10.0652f, 1.45567f, -0.248997f, + -9.05966f, -1.61848f, 0.871489f, -9.69173f, 1.56102f, + -0.459687f, -8.91601f, -1.77171f, 0.890643f, -9.48104f, + -0.47884f, -0.497994f, -9.48104f, 0.296881f, 0.632069f, + -10.094f, 0.191536f, -0.248997f, -10.4387f, -0.0670376f, + 0.6608f, -8.08282f, 4.95121f, -1.31202f, -8.17859f, + -4.70221f, 1.80044f, -7.9296f, 5.04698f, -0.536301f, + -8.38928f, -4.80756f, 0.68953f, -8.10198f, 5.23851f, + -0.507571f, -7.97748f, -5.17148f, 1.21625f, -8.37013f, + 5.22894f, -0.497994f, -8.01579f, -5.23851f, 0.976834f, + -8.20732f, 5.20978f, -0.335188f, -7.99663f, -5.19063f, + 0.995988f, -8.26478f, 5.02782f, -0.0957681f, -8.0924f, + -5.0374f, 0.948104f, -8.36055f, 5.02782f, -0.268151f, + -8.02536f, -5.09486f, 0.995988f, -8.28394f, 5.01825f, + -0.191536f, -8.20732f, -5.06613f, 0.861913f, -8.37971f, + 5.06613f, -0.325611f, -8.20732f, -5.00867f, 0.92895f, + -8.3414f, 5.04698f, -0.124498f, -8.13071f, -5.14275f, + 0.852336f, -8.29351f, 5.07571f, -0.0766145f, -8.07325f, + -5.10444f, 0.976834f, -8.47547f, 4.77883f, -0.392649f, + -8.13071f, -4.86502f, 1.05345f, -8.60955f, 2.71981f, + 2.79643f, -9.25119f, 1.31202f, -0.306458f, -9.14585f, + 1.02472f, 1.51314f, -8.64786f, -1.33118f, -1.13964f, + -9.35654f, 1.01514f, 2.31759f, -8.72447f, -1.49398f, + -1.72383f, -9.73004f, 1.58017f, 2.7677f, -9.73004f, + -1.84832f, -1.93451f, -9.15543f, 1.33118f, 2.20267f, + -8.93516f, -1.64721f, -0.995988f, -9.45231f, 0.727837f, + 1.81959f, -9.51935f, -0.909797f, -2.78685f, -9.93115f, + 0.191536f, 0.890643f, -9.84496f, -0.23942f, -0.976834f, + -9.61511f, -0.21069f, 0.517148f, -8.80109f, -0.153229f, + -0.430956f, -9.50019f, 0.373495f, 0.948104f, -9.27035f, + -0.555455f, -0.344765f, -9.57681f, 0.172383f, 0.881066f, + -9.43316f, -0.335188f, -0.756568f, -9.50977f, -0.0191536f, + 0.497994f, -9.42358f, -0.181959f, -0.737414f, -9.92157f, + 0.306458f, 0.545878f, -10.0173f, -0.248997f, -0.134075f, + -9.79707f, 0.0287304f, 0.536301f, -9.71088f, -0.162806f, + -0.181959f, -9.60554f, -0.047884f, 0.804452f, -9.39485f, + -0.181959f, -0.593762f, -9.64384f, -0.047884f, 0.612916f, + -9.58638f, -0.201113f, -0.363919f, -9.56723f, 0.248997f, + 0.411803f, -10.1706f, -0.316035f, -0.526724f, -9.63427f, + 0.459687f, 1.09176f, -9.71088f, -0.603339f, -0.23942f, + -9.62469f, -0.0383072f, 0.68953f, -9.50019f, -0.0861913f, + -1.13006f, -9.80665f, -0.134075f, 0.335188f, -9.40442f, + -0.114922f, -0.354342f, -9.34696f, 0.153229f, 1.54187f, + -9.10754f, -0.526724f, -1.00556f, -9.7875f, 0.0287304f, + 0.775721f, -9.58638f, -0.172383f, -0.641646f, -9.60554f, + 0.258574f, 0.919373f, -9.31823f, -0.402226f, -0.603339f, + -9.5385f, -0.0766145f, 0.92895f, -9.09797f, -0.220267f, + -0.354342f, -9.61511f, -0.335188f, 0.316035f, -9.27993f, + 0.0766145f, -0.47884f, -9.40442f, 0.23942f, 0.6608f, + -9.40442f, -0.335188f, -0.603339f, -9.85453f, -0.0766145f, + 0.459687f, -9.54808f, -0.0670376f, -0.287304f, -9.63427f, + -0.344765f, 0.296881f, -9.32781f, 0.0574608f, -0.220267f, + -9.71088f, 0.181959f, 0.354342f, -9.95988f, -0.248997f, + 0.201113f, -9.8258f, -0.0383072f, 0.833182f, -9.83538f, + -0.047884f, -0.670376f, -9.44273f, 0.0670376f, 0.6608f, + -8.90643f, -0.392649f, -0.354342f, -9.54808f, 0.0957681f, + 0.90022f, -9.05008f, -0.411803f, -0.335188f, -9.52892f, + 0.201113f, 1.12049f, -9.23204f, -0.459687f, -0.842759f, + -9.61511f, -0.162806f, 0.248997f, -9.87369f, 0.124498f, + -1.12049f, -9.70131f, -0.0383072f, 0.670376f, -9.50977f, + -0.162806f, -0.890643f, -9.15543f, 0.488417f, 1.51314f, + -8.94474f, -0.852336f, -0.90022f, -9.60554f, -0.23942f, + 0.622492f, -9.35654f, 0.0f, -0.948104f, -9.64384f, + -0.191536f, 1.21625f, -9.2895f, -0.0766145f, -0.785298f, + -9.55765f, -0.306458f, 0.555455f, -9.73004f, 0.172383f, + -0.603339f, -9.663f, -0.306458f, 0.383072f, -9.63427f, + 0.172383f, -0.354342f, -9.70131f, -0.373495f, 0.68953f, + -9.69173f, 0.181959f, -1.0343f, -9.47146f, -0.526724f, + 0.823605f, -9.23204f, 0.220267f, -1.36948f, -9.36612f, + -0.0670376f, 1.05345f, -8.91601f, -0.316035f, -0.814029f, + -9.93115f, -0.268151f, 1.58017f, -10.0748f, 0.143652f, + -1.26414f, -9.87369f, 0.047884f, 2.09732f, -9.39485f, + -0.344765f, -1.48441f, -9.48104f, 0.967257f, 0.699107f, + -9.34696f, -1.15879f, -0.105345f, -9.414f, 0.852336f, + 0.756568f, -9.62469f, -1.0343f, -0.114922f, -9.80665f, + 0.814029f, 0.737414f, -9.23204f, -1.0726f, -0.23942f, + -9.47146f, 0.890643f, 0.392649f, -9.24162f, -1.08218f, + -0.229843f, -9.42358f, 0.775721f, 0.325611f, -9.21289f, + -0.986411f, -0.201113f, -9.52892f, 1.79086f, 2.04944f, + -9.32781f, -2.15478f, -1.39821f, -8.86812f, 2.07817f, + 2.2697f, -8.91601f, -2.24097f, -1.7334f, -9.34696f, + 1.68552f, 2.29843f, -8.78193f, -2.19309f, -1.58017f, + -9.62469f, 1.7334f, 2.35589f, -9.165f, -2.18351f, + -1.63763f, -9.99819f, 2.28886f, 2.27928f, -10.0365f, + -2.36547f, -1.69509f, -10.726f, -0.488417f, -0.363919f, + -9.25119f, 0.976834f, -3.03585f, -9.31823f, 1.41737f, + 2.09732f, -8.8777f, -1.76213f, 0.651223f, -9.71088f, + 1.00556f, 2.28886f, -9.36612f, -1.13006f, -1.53229f, + -9.87369f, 0.814029f, 1.46525f, -9.92157f, -0.919373f, + -0.957681f, -9.35654f, 0.0191536f, 1.09176f, -9.9503f, + -0.0574608f, -1.0726f, -9.50977f, -0.181959f, 0.603339f, + -8.90643f, -0.172383f, -0.0766145f, -9.85453f, -0.287304f, + 0.833182f, -9.76834f, 0.181959f, -0.402226f, -9.50977f, + -0.0957681f, 0.287304f, -9.7875f, 0.0191536f, -0.47884f, + -9.58638f, 0.047884f, 0.344765f, -9.44273f, -0.181959f, + -0.0861913f, -9.57681f, 0.0287304f, 0.555455f, -9.42358f, + -0.220267f, 0.0f, -9.73004f, -0.229843f, 0.21069f, + -9.51935f, 0.0670376f, -0.21069f, -10.0173f, -0.00957681f, + 0.105345f, -9.68215f, -0.0670376f, -0.124498f, -9.50977f, + 0.114922f, 0.287304f, -9.42358f, -0.229843f, 0.0957681f, + -9.57681f, -0.181959f, 0.181959f, -9.32781f, -0.047884f, + 0.105345f, -10.0078f, -0.258574f, -2.19309f, -9.70131f, + 0.248997f, 1.64721f, -9.55765f, -0.612916f, 0.105345f, + -8.76278f, 0.191536f, 0.919373f, -9.414f, -0.0383072f, + -0.641646f, -9.74919f, 0.0670376f, 0.814029f, -9.80665f, + -0.134075f, -0.804452f, -9.44273f, 0.0957681f, 1.01514f, + -9.71088f, 0.220267f, -0.584185f, -9.32781f, -0.248997f, + 0.957681f, -9.76834f, 0.0766145f, -0.440533f, -9.414f, + -0.21069f, 0.708684f, -9.73004f, 0.0574608f, -0.593762f, + -9.27035f, -0.172383f, 0.756568f, -9.663f, 0.287304f, + 0.172383f, -9.10754f, -0.507571f, 0.718261f, -9.49062f, + 0.229843f, 0.0574608f, -9.50977f, -0.402226f, 0.162806f, + -10.1418f, -0.0670376f, -0.411803f, -9.32781f, -0.0383072f, + 0.804452f, -9.57681f, 0.229843f, -0.21069f, -9.57681f, + -0.296881f, 0.469264f, -9.54808f, 2.03986f, 0.641646f, + -10.0269f, -1.00556f, -0.45011f, -8.77236f, 0.402226f, + 0.718261f, -9.37569f, -0.047884f, -0.344765f, -9.98861f, + -1.48441f, 0.047884f, -9.33739f, 1.33118f, -0.23942f, + -9.30866f, -0.68953f, 0.220267f, -10.0556f, 0.708684f, + 0.201113f, -7.12514f, 6.70376f, 0.105345f, -6.81869f, + -6.33985f, 0.92895f, -8.70532f, 5.46836f, 0.220267f, + -8.41801f, -5.36301f, 0.0574608f, -9.84496f, 3.82115f, + 0.248997f, -9.9503f, -3.5913f, -0.229843f, -10.3238f, + 3.09331f, -0.0574608f, -9.71088f, -2.66235f, 0.6608f, + -8.68616f, 1.53229f, 0.641646f, -9.17458f, -1.22583f, + 0.507571f, -10.0078f, -1.09176f, -0.622492f, -10.0078f, + 1.3216f, -0.497994f, -9.46189f, -1.17795f, 0.0766145f, + -9.23204f, 1.01514f, 0.248997f, -9.38527f, -1.94409f, + 0.296881f, -9.21289f, 1.79086f, -0.21069f, -9.10754f, + -2.12605f, 0.440533f, -9.09797f, 1.82917f, 0.172383f, + -9.02135f, -1.54187f, 0.047884f, -9.35654f, 1.54187f, + 0.047884f, -8.99262f, -1.66636f, -0.0191536f, -9.29908f, + 1.49398f, 0.344765f, -9.663f, -1.65679f, -0.593762f, + -9.29908f, 1.58975f, 0.296881f, -9.69173f, -1.1971f, + -0.153229f, -9.5385f, 1.16837f, 0.114922f, -9.80665f, + -1.22583f, 0.268151f, -9.43316f, 1.08218f, -0.114922f, + -9.74919f, -1.27372f, 0.775721f, -9.38527f, 1.11091f, + -0.440533f, -9.49062f, -1.20668f, 0.574608f, -9.37569f, + 0.995988f, -0.536301f, -9.33739f, -1.06303f, 0.871489f, + -9.5385f, 0.948104f, -0.699107f, -9.44273f, -0.976834f, + 0.871489f, -9.72046f, 0.890643f, -0.746991f, -9.87369f, + -1.33118f, 0.488417f, -9.46189f, 1.13006f, 0.248997f, + -8.92558f, -1.0343f, -0.134075f, -9.07881f, 1.04387f, + 0.737414f, -8.82982f, -0.814029f, -1.46525f, -9.20331f, + 1.06303f, 0.105345f, -9.94073f, -0.957681f, -0.153229f, + -9.35654f, 0.948104f, -0.603339f, -9.31823f, 1.34075f, + 2.03028f, -8.82024f, -1.76213f, -0.861913f, -8.42759f, + -0.440533f, 4.67348f, -8.94474f, 0.201113f, -5.08528f, + -7.51779f, -0.948104f, 5.77481f, -8.15944f, 0.833182f, + -5.63116f, -9.69173f, -0.948104f, 2.36547f, -10.1801f, + 0.679953f, -2.2314f, -9.11712f, 1.72383f, 0.574608f, + -8.83939f, -2.03986f, -0.0287304f, -9.31823f, 1.92494f, + 0.804452f, -9.79707f, -2.03028f, -0.517148f, -8.3414f, + 2.68151f, 1.9824f, -8.24563f, -2.71024f, -2.1069f, + -9.15543f, 2.41336f, 2.28886f, -7.49864f, -3.03585f, + -3.66792f, -8.59997f, 2.00155f, 2.59531f, -9.07881f, + -2.11647f, -2.52828f, -9.64384f, 1.89621f, 2.11647f, + -9.36612f, -2.16436f, -1.83875f, -9.01178f, 1.69509f, + 2.19309f, -9.17458f, -1.94409f, -1.56102f, -9.27993f, + 1.49398f, 2.28886f, -9.51935f, -1.72383f, -2.2697f, + -9.10754f, 1.52271f, 2.43251f, -8.84897f, -2.02071f, + -2.02071f, -9.08839f, 1.51314f, 2.55701f, -9.11712f, + -1.8579f, -2.21224f, -9.09797f, 1.47483f, 2.52828f, + -9.13627f, -1.8579f, -2.09732f, -9.06924f, 1.46525f, + 2.43251f, -8.92558f, -1.90578f, -2.09732f, -9.19373f, + 1.50356f, 2.3942f, -9.21289f, -1.82917f, -2.26013f, + -8.5904f, 2.16436f, 2.33674f, -8.51378f, -2.36547f, + -1.83875f, -8.25521f, 3.62961f, 2.03028f, -7.91044f, + -3.74453f, -1.12049f, -8.61913f, 3.84988f, 1.62806f, + -8.83939f, -3.97437f, -1.26414f, -8.23605f, 4.52025f, + 2.13563f, -8.83939f, -4.35745f, -1.14922f, -7.4316f, + 6.02381f, 2.34632f, -7.33583f, -5.84185f, -1.79086f, + -6.63673f, 6.67503f, 2.37505f, -6.44519f, -6.359f, + -1.62806f, -6.06212f, 7.51779f, 2.38462f, -6.25365f, + -7.23049f, -1.80044f, -5.25767f, 8.64786f, 2.09732f, + -4.32872f, -8.68616f, -2.03986f, -4.39575f, 7.97748f, + 2.00155f, -3.77326f, -8.42759f, -0.775721f, -4.64475f, + 8.32224f, 1.61848f, -4.29999f, -8.60955f, -0.622492f, + -4.7501f, 8.5042f, 1.81959f, -4.79798f, -8.4659f, + -1.08218f, -4.64475f, 8.37013f, 1.92494f, -4.53941f, + -8.5904f, -1.13964f, -4.77883f, 8.73405f, 2.11647f, + -3.33273f, -9.414f, -1.37906f, -9.73004f, -0.92895f, + 0.603339f, -9.67257f, 0.852336f, -1.11091f, -9.87369f, + -0.047884f, 0.153229f, -9.98861f, 0.0670376f, -0.440533f, + -9.61511f, 0.651223f, 0.181959f, -9.5385f, -0.785298f, + 0.612916f, -9.50019f, 0.335188f, -0.23942f, -8.88728f, + -0.536301f, 0.00957681f, -9.95988f, 0.670376f, 0.134075f, + -9.29908f, -0.881066f, 0.0861913f, -9.67257f, 0.488417f, + 0.220267f, -9.62469f, -0.545878f, 0.306458f, -9.58638f, + 0.344765f, 0.306458f, -9.165f, -0.574608f, 0.0287304f, + -9.65342f, 0.143652f, 0.287304f, -10.0844f, -0.191536f, + 0.440533f, -9.40442f, 0.679953f, 0.21069f, -9.37569f, + -0.881066f, 0.402226f, -9.79707f, 1.34075f, 0.785298f, + -10.1801f, -1.13964f, -0.220267f, -9.14585f, 2.29843f, + 0.794875f, -9.36612f, -2.24097f, -0.316035f, -8.83939f, + 3.37104f, 0.727837f, -8.70532f, -3.25611f, 0.0766145f, + -8.24563f, 4.42448f, 0.814029f, -8.14029f, -4.27126f, + -0.392649f, -7.63272f, 5.38217f, 0.957681f, -7.05811f, + -5.5737f, -0.0383072f, -7.57525f, 5.93762f, 1.29287f, + -7.02938f, -6.02381f, -0.651223f, -7.46991f, 6.18662f, + 1.76213f, -7.35499f, -6.21535f, -1.37906f, -7.35499f, + 6.38773f, 1.47483f, -7.40287f, -6.27281f, -0.967257f, + -7.02938f, 6.79953f, 1.30245f, -6.95276f, -6.68461f, + -0.890643f, -6.42604f, 7.32626f, 1.09176f, -6.4835f, + -7.19218f, -0.354342f, -6.41646f, 7.57525f, 0.938527f, + -6.11958f, -7.50822f, -0.229843f, -5.88016f, 7.71891f, + 0.794875f, -5.17148f, -7.70933f, 0.105345f, -5.74608f, + 7.85298f, 0.727837f, -5.09486f, -7.72848f, 0.114922f, + -5.9472f, 7.83383f, 0.727837f, -5.91847f, -7.65187f, + -0.0287304f, -5.97593f, 7.77637f, 0.718261f, -6.01423f, + -7.63272f, 0.191536f, -5.95677f, 7.78594f, 0.526724f, + -5.73651f, -7.6806f, 0.507571f, -5.95677f, 7.89129f, + 0.459687f, -5.66947f, -7.74764f, 0.517148f, -5.93762f, + 7.85298f, 0.430956f, -5.81312f, -7.69018f, 0.459687f, + -5.9855f, 7.78594f, 0.469264f, -5.86101f, -7.65187f, + 0.517148f, -6.03339f, 7.82425f, 0.411803f, -5.75566f, + -7.67102f, 0.526724f, -6.00466f, 7.79552f, 0.402226f, + -5.68862f, -7.67102f, 0.42138f, -6.00466f, 7.79552f, + 0.497994f, -5.60243f, -7.69975f, 0.201113f, -6.13873f, + 7.65187f, 0.42138f, -5.3247f, -7.62314f, 0.172383f, + -6.608f, 7.40287f, 0.258574f, -5.77481f, -7.46991f, + 0.593762f, -7.18261f, 6.82826f, 0.134075f, -6.75165f, + -6.71334f, 0.526724f, -7.88171f, 5.79397f, -0.181959f, + -7.19218f, -5.70778f, 1.54187f, -8.4659f, 4.54898f, + -0.842759f, -7.90087f, -4.30956f, 1.95367f, -10.5728f, + 0.632069f, -1.96325f, -9.84496f, 0.153229f, 1.82917f, + -9.27993f, -0.0861913f, -0.92895f, -9.31823f, 0.047884f, + 1.46525f, -9.93115f, 0.325611f, -1.1971f, -10.2759f, + -0.114922f, 2.3942f, -9.59596f, -0.0766145f, -0.316035f, + -9.97903f, 0.363919f, -1.13964f, -9.04051f, 2.50912f, + 1.31202f, -8.67659f, -2.58574f, -0.603339f, -9.83538f, + 1.00556f, 1.40779f, -9.09797f, -0.92895f, -0.948104f, + -9.165f, 0.699107f, 1.24498f, -8.8777f, -0.517148f, + -0.699107f, -9.57681f, 0.507571f, 0.641646f, -9.65342f, + -0.229843f, -0.565032f, -9.55765f, 0.287304f, 0.47884f, + -8.91601f, -0.201113f, -0.833182f, -9.69173f, 0.134075f, + 0.411803f, -9.47146f, 0.162806f, 0.172383f, -9.5385f, + -0.21069f, 0.143652f, -9.30866f, 0.497994f, -0.105345f, + -9.8258f, 0.507571f, 0.507571f, -9.50977f, -0.248997f, + 0.383072f, -9.60554f, 0.641646f, 0.948104f, -9.27993f, + -0.220267f, -0.0766145f, -10.0844f, 0.430956f, 0.986411f, + -9.52892f, -0.00957681f, 0.517148f, -9.02135f, 0.411803f, + 1.43652f, -9.42358f, -0.00957681f, -0.258574f, -9.27035f, + 1.54187f, 0.45011f, -9.84496f, -0.995988f, 0.316035f, + -9.8258f, -0.402226f, 0.842759f, -8.93516f, 0.967257f, + -0.785298f, -8.94474f, 2.63362f, 0.545878f, -9.25119f, + -2.78685f, 0.0383072f, -7.71891f, 5.74608f, 0.909797f, + -9.34696f, -5.07571f, -0.651223f, -8.63828f, 4.58729f, + 0.430956f, -8.69574f, -4.29041f, -1.16837f, -7.39329f, + 7.83383f, 0.612916f, -7.62314f, -7.28795f, -0.229843f, + -6.17704f, 7.59441f, 1.89621f, -5.58328f, -7.56568f, + 0.153229f, -5.53539f, 8.00621f, 0.967257f, -4.83629f, + -7.9679f, 0.411803f, -4.95121f, 8.04452f, 0.248997f, + -4.46279f, -8.20732f, 0.201113f, -4.99909f, 8.42759f, + 0.105345f, -4.89375f, -8.30309f, -0.0287304f, -4.52983f, + 8.5042f, 0.306458f, -4.72137f, -8.5042f, 0.0f, + -4.36702f, 8.72447f, 0.0f, -4.43406f, -8.68616f, + 0.181959f, -4.15633f, 8.8777f, 0.430956f, -3.98395f, + -9.02135f, 0.584185f, -4.14676f, 8.68616f, 0.0670376f, + -3.9648f, -8.85855f, 1.09176f, -4.18506f, 8.84897f, + -0.114922f, -4.35745f, -8.77236f, 0.248997f, -4.22337f, + 8.07325f, 0.325611f, -3.67749f, -8.5042f, 1.37906f, + -9.15543f, 3.87861f, 2.11647f, -9.27993f, -2.25055f, + -1.5706f, -9.31823f, 0.0670376f, 1.47483f, -10.1897f, + -0.0766145f, -0.354342f, -9.24162f, -0.162806f, 0.0670376f, + -9.81623f, 0.325611f, -1.0343f, -5.88016f, 7.79552f, + 1.65679f, -8.16902f, -5.56412f, -2.83473f, -8.38928f, + 4.31914f, 1.39821f, -8.81066f, -4.41491f, -1.08218f, + -8.82982f, 4.46279f, 0.986411f, -8.61913f, -4.73094f, + -0.727837f, -8.06367f, 3.85945f, 1.38864f, -8.16902f, + -3.98395f, -0.766145f, -8.73405f, 3.92649f, 1.63763f, + -8.71489f, -4.10845f, -1.61848f, -8.91601f, 3.36146f, + 2.04944f, -9.08839f, -3.47638f, -1.97282f, -8.82024f, + 3.40934f, 2.29843f, -8.83939f, -3.66792f, -2.24097f, + -8.88728f, 3.553f, 2.17394f, -8.84897f, -3.78284f, + -2.21224f, -8.73405f, 4.01268f, 2.21224f, -8.74362f, + -4.22337f, -2.07817f, -8.63828f, 3.90734f, 2.20267f, + -8.97347f, -3.77326f, -1.87705f, -8.39886f, 4.48195f, + 2.08774f, -9.06924f, -4.30956f, -1.71425f, -7.44118f, + 6.41646f, 1.83875f, -7.72848f, -6.76123f, -1.05345f, + -6.08127f, 7.51779f, 1.35991f, -4.92248f, -7.63272f, + 0.0766145f, -6.33027f, 7.44118f, 1.49398f, -6.03339f, + -7.42203f, -0.430956f, -6.13873f, 7.53695f, 1.42694f, + -6.27281f, -7.45076f, -0.90022f, -6.17704f, 7.54652f, + 1.37906f, -6.14831f, -7.51779f, -0.42138f, -6.06212f, + 7.56568f, 1.47483f, -6.2345f, -7.46033f, -0.316035f, + -6.02381f, 7.67102f, 1.49398f, -6.22492f, -7.50822f, + -0.497994f, -5.67905f, 7.85298f, 1.71425f, -6.03339f, + -7.57525f, -1.05345f, -5.06613f, 8.05409f, 1.83875f, + -4.82671f, -7.97748f, -0.565032f, -4.54898f, 8.23605f, + 1.99198f, -4.42448f, -8.42759f, -1.06303f, -4.24253f, + 8.7532f, 2.17394f, -4.40533f, -8.81066f, -2.05901f, + -3.44765f, 9.10754f, 1.92494f, -3.01669f, -9.39485f, + -0.68953f, -3.055f, 8.68616f, 2.11647f, -3.4285f, + -8.73405f, -1.3216f, -2.72939f, 8.88728f, 2.11647f, + -2.61447f, -9.02135f, -1.21625f, -2.55701f, 9.38527f, + 2.30801f, -2.15478f, -9.663f, -2.33674f, -2.48039f, + 9.23204f, 2.2314f, -1.53229f, -9.71088f, -1.13964f, + -3.66792f, 8.72447f, 2.24097f, -2.29843f, -8.88728f, + -2.31759f, -8.54251f, 3.89776f, 1.75256f, -9.05966f, + -2.90177f, -2.06859f, -9.29908f, 2.04944f, 1.6089f, + -9.86411f, -1.71425f, -1.16837f, -10.2855f, 1.29287f, + 0.766145f, -10.1993f, -1.1971f, -0.373495f, -9.89284f, + 1.1971f, 0.995988f, -9.14585f, -1.48441f, -0.201113f, + -9.43316f, 0.306458f, 1.45567f, -9.19373f, -0.6608f, + -0.727837f, -9.15543f, -0.0287304f, 0.047884f, -9.40442f, + 0.0287304f, 0.392649f, -9.9503f, -0.948104f, 0.0287304f, + -10.1323f, 1.06303f, -0.47884f, -10.0078f, -0.45011f, + 0.23942f, -9.52892f, 0.287304f, -0.191536f, -9.45231f, + -0.545878f, 0.42138f, -9.52892f, 0.354342f, -0.584185f, + -9.86411f, -0.258574f, 0.699107f, -9.44273f, 0.0f, + -0.42138f, -8.4659f, 3.95522f, 0.354342f, -8.57124f, + -4.1276f, 0.430956f, -8.71489f, 4.04141f, 0.306458f, + -8.95431f, -3.9648f, -0.603339f, -8.89685f, 3.58173f, + 0.354342f, -8.52336f, -3.85945f, 0.258574f, -9.35654f, + 3.54342f, -0.785298f, -9.02135f, -3.69665f, 0.92895f, + -8.76278f, 2.84431f, -1.17795f, -8.56167f, -2.806f, + 2.07817f, -8.89685f, 3.13162f, -1.49398f, -8.5042f, + -3.16035f, 2.03028f, -9.09797f, 4.00311f, -0.995988f, + -9.71088f, -3.79242f, 2.70066f, -9.04051f, 3.58173f, + -1.01514f, -8.04452f, -3.64876f, 1.81002f, -7.86256f, + 4.94163f, -0.201113f, -7.46991f, -5.02782f, 1.81959f, + -7.41245f, 6.46434f, -0.47884f, -7.44118f, -6.31112f, + 0.976834f, -6.57927f, 6.68461f, -0.114922f, -6.36858f, + -6.40688f, 2.35589f, -6.02381f, 7.31668f, -0.469264f, + -5.43005f, -7.24007f, 2.43251f, -6.87615f, 7.48906f, + -0.536301f, -7.03895f, -7.15387f, 0.90022f, -5.9855f, + 7.72848f, -0.201113f, -5.78439f, -7.47949f, 1.13964f, + -6.06212f, 7.9296f, -0.268151f, -5.25767f, -7.76679f, + 1.63763f, -5.70778f, 8.29351f, -0.162806f, -4.72137f, + -8.14029f, 1.20668f, -5.29597f, 8.42759f, 0.143652f, + -4.75967f, -8.42759f, 0.603339f, -5.11401f, 8.44674f, + 0.565032f, -4.85544f, -8.43717f, -0.00957681f, -5.43963f, + 8.23605f, 0.919373f, -5.1619f, -8.05409f, -0.325611f, + -5.60243f, 8.0924f, 0.718261f, -5.48751f, -7.86256f, + -0.047884f, -5.84185f, 7.98706f, 1.11091f, -5.58328f, + -7.91044f, 0.162806f, -5.79397f, 7.8434f, 1.16837f, + -5.47793f, -7.69975f, -0.392649f, -5.78439f, 7.77637f, + 1.36948f, -5.63116f, -7.61356f, -0.651223f, -5.95677f, + 7.73806f, 1.55144f, -5.19063f, -7.69975f, -0.833182f, + -6.22492f, 7.5561f, 1.49398f, -5.46836f, -7.53695f, + -0.833182f, -6.87615f, 6.98149f, 1.25456f, -6.53138f, + -6.82826f, -0.871489f, -7.40287f, 6.03339f, 0.6608f, + -6.67503f, -5.9855f, 0.344765f, -8.00621f, 4.66391f, + 0.574608f, -7.71891f, -4.67348f, 0.641646f, -9.48104f, + 2.24097f, 1.0343f, -9.77792f, -2.03028f, -0.995988f, + -9.76834f, 1.30245f, 1.05345f, -9.72046f, -1.25456f, + -0.593762f, -9.47146f, 0.507571f, 1.1971f, -10.4675f, + -0.459687f, -0.804452f, -9.67257f, 0.201113f, 1.15879f, + -9.60554f, -0.383072f, -1.13006f, -9.42358f, -0.0191536f, + 1.08218f, -10.0844f, -0.0574608f, -0.823605f, -7.12514f, + 6.99107f, -0.488417f, -7.20176f, -6.6463f, 1.63763f, + -7.16345f, 6.86657f, -0.430956f, -7.46991f, -6.47392f, + 0.823605f, -7.09641f, 7.1443f, -0.804452f, -6.6463f, + -7.00065f, 1.76213f, -7.50822f, 6.62715f, -0.277727f, + -5.86101f, -7.06768f, 0.986411f, -7.2688f, 7.23049f, + -0.47884f, -7.28795f, -6.97192f, 1.51314f, -7.37414f, + 6.62715f, -0.287304f, -7.24964f, -6.39731f, 0.995988f, + -7.40287f, 6.56969f, -0.392649f, -7.11557f, -6.44519f, + 1.14922f, -7.3071f, 6.8953f, -0.584185f, -6.56011f, + -6.91445f, 1.78129f, -7.51779f, 6.78038f, -0.612916f, + -5.74608f, -7.02938f, 3.48596f, -7.24007f, 6.33985f, + -0.325611f, -6.8953f, -6.03339f, 0.536301f, -8.99262f, + 5.01825f, -0.258574f, -9.73961f, -4.56814f, 0.632069f, + -9.79707f, 1.66636f, 0.287304f, -9.21289f, -1.87705f, + -0.105345f, -9.77792f, 1.10133f, 0.995988f, -8.88728f, + -1.47483f, -0.335188f, -9.44273f, 1.24498f, 0.497994f, + -9.44273f, -1.34075f, -0.268151f, -9.7875f, 1.0726f, + 0.68953f, -9.39485f, -1.27372f, -0.162806f, -8.86812f, + 2.24097f, 0.545878f, -8.61913f, -2.47082f, 0.632069f, + -9.0022f, 2.02071f, 0.718261f, -9.36612f, -2.12605f, + -0.440533f, -9.22246f, 2.29843f, 1.05345f, -9.10754f, + -2.46124f, -0.402226f, -9.55765f, 2.32716f, 0.842759f, + -9.19373f, -2.50912f, -0.497994f, -8.95431f, 2.62405f, + 1.0726f, -9.15543f, -2.73897f, -0.737414f, -9.54808f, + 2.34632f, 1.11091f, -9.05966f, -2.55701f, -0.440533f, + -10.0556f, -0.746991f, 1.15879f, -8.90643f, 1.48441f, + -1.74298f, -8.53294f, -2.1452f, 2.67193f, -9.15543f, + 2.84431f, -1.62806f, -8.94474f, 1.81959f, 0.42138f, + -9.30866f, -1.75256f, -0.746991f, -9.92157f, 2.12605f, + 0.670376f, -9.35654f, -2.24097f, -0.699107f, -9.49062f, + 2.12605f, 1.25456f, -8.91601f, -2.36547f, -0.411803f, + -8.86812f, 2.40378f, 0.948104f, -8.95431f, -2.47082f, + -0.871489f, -8.90643f, 2.65278f, 1.49398f, -8.95431f, + -2.88262f, -1.18752f, -8.95431f, 3.15077f, 1.25456f, + -9.05966f, -3.34231f, -1.10133f, -9.02135f, 2.9305f, + 1.25456f, -9.03093f, -3.26569f, -1.0726f, -9.32781f, + 2.87304f, 1.0726f, -8.97347f, -3.26569f, -0.794875f, + -9.1267f, 2.94966f, 1.10133f, -9.06924f, -3.20823f, + -0.679953f, -9.06924f, 3.01669f, 1.01514f, -8.98304f, + -3.21781f, -0.507571f, -9.165f, 3.18908f, 0.555455f, + -9.03093f, -3.49553f, -0.354342f, -9.04051f, 3.32315f, + 0.344765f, -9.05966f, -3.48596f, -0.181959f, -8.76278f, + 3.02627f, 0.708684f, -8.90643f, -3.23696f, -0.248997f, + -8.85855f, 2.79643f, 0.641646f, -8.90643f, -2.96881f, + -0.306458f, -8.92558f, 2.7677f, 0.833182f, -8.91601f, + -3.02627f, -0.430956f, -8.94474f, 2.86347f, 1.00556f, + -8.86812f, -3.16035f, -0.565032f, -8.98304f, 2.94966f, + 1.1971f, -9.07881f, -3.20823f, -0.766145f, -8.89685f, + 2.92093f, 1.12049f, -8.89685f, -3.09331f, -0.842759f, + -8.83939f, 2.97839f, 0.967257f, -8.85855f, -3.1795f, + -0.919373f, -8.93516f, 3.15077f, 1.42694f, -8.90643f, + -3.43807f, -0.948104f, -8.99262f, 3.20823f, 1.33118f, + -8.92558f, -3.43807f, -1.0726f, -8.86812f, 3.01669f, + 1.52271f, -8.77236f, -3.33273f, -1.08218f, -8.81066f, + 3.23696f, 1.50356f, -8.82024f, -3.4668f, -1.13964f, + -8.86812f, 3.41892f, 1.40779f, -8.90643f, -3.62961f, + -1.06303f, -8.82982f, 3.38061f, 1.55144f, -8.79151f, + -3.62003f, -1.08218f, -8.82024f, 3.12204f, 1.67594f, + -8.82024f, -3.41892f, -1.15879f, -8.73405f, 3.25611f, + 1.75256f, -8.72447f, -3.4285f, -1.28329f, -8.79151f, + 3.32315f, 1.96325f, -8.78193f, -3.5913f, -1.55144f, + -8.71489f, 3.27527f, 2.02071f, -8.73405f, -3.48596f, + -1.67594f, -8.82024f, 3.16035f, 2.02071f, -8.7532f, + -3.41892f, -1.62806f, -8.73405f, 3.40934f, 1.90578f, + -8.74362f, -3.62003f, -1.38864f, -8.74362f, 3.41892f, + 1.93451f, -8.68616f, -3.66792f, -1.45567f, -8.70532f, + 3.40934f, 1.99198f, -8.68616f, -3.62961f, -1.78129f, + -8.69574f, 3.56257f, 1.93451f, -8.72447f, -3.77326f, + -1.45567f, -8.79151f, 3.45723f, 2.13563f, -8.74362f, + -3.68707f, -1.54187f, -8.79151f, 3.25611f, 2.03986f, + -8.65743f, -3.62003f, -1.6089f, -8.80109f, 3.32315f, + 1.92494f, -8.69574f, -3.5913f, -1.88663f, -8.99262f, + 3.13162f, 1.91536f, -8.63828f, -3.50511f, -1.42694f, + -8.69574f, 3.19865f, 2.22182f, -8.86812f, -3.43807f, + -1.80044f, -8.89685f, 2.61447f, 2.05901f, -8.7532f, + -2.85389f, -1.39821f, -9.32781f, 2.38462f, 2.08774f, + -8.85855f, -2.67193f, -1.5706f, -9.72046f, 1.13006f, + 1.86748f, -9.03093f, -0.756568f, -1.0343f, -10.3334f, + 0.42138f, -1.53229f, -9.57681f, -0.220267f, 1.26414f, + -8.95431f, -0.383072f, 0.201113f, -9.73961f, 0.651223f, + -0.565032f, -10.3334f, -0.651223f, -0.0574608f, -9.68215f, + 0.536301f, 1.02472f, -9.56723f, -0.823605f, -0.296881f, + -9.58638f, 0.890643f, 0.0287304f, -9.50977f, -0.957681f, + -0.0957681f, -9.54808f, 0.890643f, 0.0861913f, -9.72046f, + -1.04387f, -0.248997f, -9.35654f, 1.00556f, 0.335188f, + -9.47146f, -0.948104f, -0.325611f, -9.45231f, 0.90022f, + 0.0383072f, -9.70131f, -0.814029f, -0.191536f, -9.51935f, + 0.756568f, 0.335188f, -9.69173f, -0.861913f, -0.0383072f, + -9.58638f, 0.775721f, 0.306458f, -9.73004f, -0.986411f, + 0.00957681f, -9.47146f, 0.833182f, 0.258574f, -9.64384f, + -0.766145f, -0.287304f, -9.5385f, 0.699107f, 0.335188f, + -9.60554f, -0.842759f, -0.153229f, -9.5385f, 0.785298f, + 0.402226f, -9.73961f, -0.890643f, -0.191536f, -9.43316f, + 0.785298f, 0.411803f, -9.663f, -0.737414f, -0.392649f, + -9.56723f, 0.775721f, 0.335188f, -9.60554f, -0.766145f, + -0.287304f, -9.49062f, 0.679953f, 0.344765f, -9.67257f, + -0.785298f, -0.201113f, -9.44273f, 0.699107f, 0.316035f, + -9.62469f, -0.737414f, -0.220267f, -9.54808f, 0.679953f, + 0.440533f, -9.96946f, -0.497994f, -0.392649f, -9.61511f, + 0.440533f, 0.363919f, -9.46189f, -0.383072f, -0.383072f, + -9.48104f, 0.306458f, 0.565032f, -9.69173f, -1.0726f, + -0.766145f, -9.05008f, 0.909797f, 0.775721f, -9.63427f, + -0.430956f, -0.737414f, -9.54808f, 0.344765f, 0.718261f, + -9.58638f, -0.383072f, -0.229843f, -9.5385f, 0.172383f, + 0.632069f, -9.62469f, -0.335188f, -0.545878f, -9.52892f, + 0.306458f, 0.622492f, -9.48104f, -0.383072f, -0.392649f, + -9.44273f, 0.23942f, 0.68953f, -9.70131f, -0.344765f, + -0.354342f, -9.59596f, 0.229843f, 0.565032f, -9.40442f, + -0.392649f, -0.497994f, -9.43316f, 0.248997f, 0.555455f, + -9.34696f, -0.373495f, -0.220267f, -9.34696f, 0.181959f, + 0.392649f, -10.4579f, 0.0670376f, 0.181959f, -9.5385f, + -0.229843f, 0.296881f, -9.29908f, -0.0287304f, -0.42138f, + -9.45231f, 0.00957681f, 0.565032f, -9.84496f, -0.0766145f, + 0.105345f, -9.64384f, -0.0574608f, 0.277727f, -9.67257f, + -0.21069f, -0.306458f, -9.29908f, 0.047884f, 0.469264f, + -9.64384f, -0.248997f, 0.114922f, -9.52892f, 0.0191536f, + 0.201113f, -9.64384f, -0.411803f, -0.0861913f, -9.67257f, + 0.248997f, 0.0670376f, -9.73004f, -0.383072f, -0.00957681f, + -9.59596f, 0.268151f, -0.047884f, -9.77792f, -0.162806f, + 0.0766145f, -9.68215f, 0.00957681f, 0.153229f, -9.68215f, + -0.0957681f, 0.143652f, -9.50977f, -0.0957681f, 0.23942f, + -9.60554f, -0.316035f, 0.0f, -9.43316f, 0.124498f, + 0.134075f, -9.52892f, -0.47884f, -0.134075f, -9.50019f, + 0.316035f, -0.00957681f, -9.88326f, -0.23942f, -0.0670376f, + -9.5385f, 0.0861913f, 0.316035f, -9.60554f, -0.0766145f, + 0.220267f, -9.62469f, -0.00957681f, -0.172383f, -9.74919f, + -0.00957681f, 0.0766145f, -9.43316f, -0.105345f, 0.0957681f, + -9.69173f, -0.0670376f, 0.00957681f, -9.51935f, -0.0383072f, + -0.0383072f, -9.71088f, 0.0191536f, 0.0766145f, -9.50977f, + -0.0957681f, 0.0766145f, -9.56723f, -0.105345f, 0.0861913f, + -9.2895f, -0.114922f, 0.153229f, -9.71088f, -0.162806f, + 0.0861913f, -9.50019f, 0.0287304f, 0.0861913f, -9.64384f, + -0.0191536f, 0.287304f, -9.50977f, -0.134075f, -0.0383072f, + -9.50019f, 0.143652f, 0.21069f, -9.44273f, -0.23942f, + -0.344765f, -9.64384f, -0.0287304f, 0.172383f, -9.48104f, + -0.0574608f, -0.0957681f, -9.69173f, -0.181959f, 0.201113f, + -9.48104f, 0.114922f, -0.0574608f, -9.75877f, -0.0670376f, + 0.0191536f, -9.55765f, 0.0383072f, 0.172383f, -9.61511f, + -0.0574608f, 0.268151f, -9.24162f, -0.0957681f, -0.0574608f, + -9.56723f, 0.047884f, 0.325611f, -9.51935f, -0.134075f, + -0.459687f, -9.47146f, 0.0f, 0.622492f, -9.49062f, + -0.0670376f, -0.488417f, -9.59596f, 0.0f, 0.823605f, + -9.48104f, -0.0383072f, -0.574608f, -9.5385f, -0.335188f, + 0.641646f, -9.54808f, 0.296881f, -0.536301f, -9.48104f, + -0.363919f, 0.641646f, -9.50977f, 0.287304f, -0.45011f, + -9.46189f, -0.047884f, 1.13964f, -9.57681f, 0.0f, + -0.632069f, -9.57681f, -0.316035f, 0.909797f, -9.63427f, + 0.258574f, -0.517148f, -9.64384f, -0.344765f, 0.545878f, + -9.59596f, 0.296881f, -0.440533f, -9.54808f, -0.0574608f, + 0.746991f, -9.59596f, -0.0383072f, -0.296881f, -9.49062f, + 0.00957681f, 0.852336f, -9.46189f, -0.124498f, -0.21069f, + -9.57681f, 0.0766145f, 0.641646f, -9.37569f, -0.181959f, + -0.42138f, -9.70131f, 0.344765f, 0.737414f, -9.24162f, + -0.469264f, -0.794875f, -9.47146f, 0.0f, 0.699107f, + -9.76834f, 0.0287304f, -0.746991f, -9.48104f, -0.153229f, + 1.33118f, -9.36612f, 0.0957681f, -0.948104f, -9.74919f, + -0.201113f, 1.10133f, -9.35654f, 0.181959f, -0.909797f, + -9.54808f, 0.0957681f, 0.881066f, -9.73961f, 0.153229f, + -1.05345f, -9.49062f, -0.306458f, 1.04387f, -9.51935f, + 0.584185f, -0.766145f, -9.93115f, -0.814029f, 0.727837f, + -9.75877f, 1.0726f, -0.316035f, -9.72046f, -0.296881f, + 0.162806f, -9.47146f, 0.392649f, 0.0766145f, -9.40442f, + 0.21069f, 0.287304f, -9.37569f, -0.248997f, 0.536301f, + -9.5385f, 0.0861913f, 0.114922f, -9.40442f, -0.0287304f, + -0.0383072f, -10.0461f, 0.181959f, -0.00957681f, -9.32781f, + -0.181959f, 0.622492f, -9.46189f, 0.296881f, -0.201113f, + -9.35654f, -0.201113f, 0.201113f, -9.31823f, -0.402226f, + 0.21069f, -9.91199f, 0.517148f, 1.01514f, -9.87369f, + 0.047884f, -0.047884f, -9.56723f, 0.248997f, -0.114922f, + -9.76834f, -0.335188f, 0.0383072f, -9.02135f, 0.316035f, + 0.105345f, -9.5385f, -0.335188f, 0.0287304f, -9.59596f, + 0.344765f, 0.670376f, -9.70131f, 0.0287304f, -0.383072f, + -10.4579f, 0.402226f, 0.411803f, -10.4291f, -0.45011f, + 0.306458f, -9.44273f, 0.545878f, 0.430956f, -9.79707f, + 0.507571f, -0.679953f, -9.26077f, -0.469264f, 1.26414f, + -9.51935f, 0.775721f, -0.114922f, -9.19373f, -0.718261f, + 0.718261f, -9.68215f, 0.881066f, -0.316035f, -9.01178f, + -0.890643f, 0.938527f, -9.25119f, 1.04387f, -0.861913f, + -8.76278f, -0.881066f, -0.823605f, -9.71088f, 0.354342f, + -0.181959f, -9.32781f, -0.248997f, -0.0957681f, -10.4387f, + 0.995988f, -0.268151f, -10.2376f, -0.699107f, 0.536301f, + -9.98861f, 0.555455f, -0.0574608f, -9.49062f, -0.459687f, + 0.823605f, -9.79707f, 0.316035f, 0.268151f, -8.85855f, + -0.488417f, -0.574608f, -9.663f, 0.373495f, -0.287304f, + -9.42358f, 0.0191536f, -1.65679f, -9.42358f, 1.0726f, + 1.80044f, -9.63427f, -0.21069f, -1.66636f, -9.31823f, + 0.306458f, 2.83473f, -9.17458f, 0.814029f, -2.98796f, + -8.67659f, 0.143652f, 1.7334f, -9.31823f, 1.23541f, + -1.15879f, -9.13627f, -1.75256f, 0.785298f, -8.80109f, + 2.54743f, -0.0766145f, -9.91199f, -0.134075f, 1.21625f, + -9.72046f, 0.488417f, 0.363919f, -9.14585f, -0.277727f, + 1.0343f, -9.21289f, 0.718261f, -0.143652f, -9.48104f, + -0.296881f, -0.114922f, -9.2895f, 0.565032f, 0.565032f, + -10.2663f, 0.459687f, -0.143652f, -9.56723f, -0.105345f, + 0.459687f, -10.094f, 0.68953f, -0.306458f, -9.59596f, + -0.172383f, 0.957681f, -10.094f, 0.0861913f, -0.220267f, + -9.34696f, 0.191536f, 0.392649f, -9.79707f, -0.181959f, + -0.488417f, -9.55765f, 0.555455f, 1.0343f, -10.1227f, + 0.0191536f, -0.976834f, -9.40442f, 0.354342f, 0.871489f, + -9.69173f, 0.593762f, -0.296881f, -9.14585f, -0.517148f, + 1.31202f, -9.69173f, 0.861913f, -0.775721f, -9.07881f, + -0.68953f, 0.497994f, -9.90242f, 0.919373f, 0.00957681f, + -9.43316f, -0.68953f, 0.325611f, -9.79707f, 0.507571f, + 0.114922f, -9.40442f, -0.316035f, 0.430956f, -9.8258f, + 0.536301f, -0.0191536f, -9.32781f, -0.258574f, 0.258574f, + -9.93115f, 0.383072f, 0.143652f, -9.48104f, -0.181959f, + 0.6608f, -9.55765f, 0.0861913f, -0.0383072f, -9.37569f, + 0.0287304f, 0.430956f, -9.39485f, 0.325611f, 0.0287304f, + -9.32781f, -0.0861913f, 0.392649f, -9.50019f, 0.651223f, + 0.23942f, -9.40442f, -0.469264f, 0.545878f, -9.75877f, + 0.536301f, 0.0574608f, -9.38527f, -0.411803f, 0.47884f, + -9.87369f, 0.574608f, 0.0383072f, -9.54808f, -0.402226f, + 0.258574f, -9.65342f, 0.325611f, 0.23942f, -9.56723f, + -0.220267f, 0.6608f, -9.50977f, 0.134075f, 0.0766145f, + -9.38527f, -0.047884f, 0.536301f, -9.70131f, 0.0f, + -0.42138f, -9.35654f, 0.181959f, 0.881066f, -9.71088f, + 0.181959f, -0.402226f, -9.50019f, -0.00957681f, 0.727837f, + -9.49062f, 0.306458f, -0.0766145f, -9.27993f, -0.268151f, + 0.766145f, -9.73961f, 0.181959f, -0.517148f, -9.49062f, + -0.0287304f, 0.986411f, -9.86411f, 0.0383072f, -0.383072f, + -9.47146f, 0.0383072f, 0.986411f, -9.50977f, 0.402226f, + -0.383072f, -9.10754f, -0.363919f, 0.823605f, -10.0365f, + 0.90022f, -0.497994f, -9.59596f, -0.651223f, 0.833182f, + -9.73961f, 0.517148f, -0.0957681f, -9.31823f, -0.440533f, + 0.641646f, -9.56723f, 0.0191536f, -0.114922f, -9.33739f, + -0.047884f, 0.593762f, -9.67257f, -0.23942f, -0.459687f, + -9.51935f, 0.258574f, 0.794875f, -9.39485f, 0.0574608f, + -0.172383f, -9.29908f, -0.0574608f, 0.440533f, -10.0078f, + 0.134075f, -0.536301f, -9.45231f, -0.0670376f, 0.766145f, + -10.0748f, -0.0287304f, -0.584185f, -9.55765f, -0.0766145f, + 1.06303f, -9.73961f, 0.392649f, -0.402226f, -9.50019f, + -0.316035f, 1.35991f, -9.75877f, 0.229843f, -0.373495f, + -9.51935f, -0.248997f, 1.39821f, -10.2855f, 0.191536f, + -0.181959f, -10.1514f, -0.124498f, 1.23541f, -10.0461f, + 0.105345f, -0.440533f, -9.88326f, 0.0574608f, -0.0191536f, + -9.60554f, -0.201113f, 0.0957681f, -9.33739f, 0.047884f, + -0.248997f, -9.29908f, -0.23942f, 0.373495f, -9.04051f, + -0.0861913f, -0.00957681f, -9.24162f, -0.114922f, 1.78129f, + -9.414f, -0.124498f, -1.16837f, -9.68215f, -0.181959f, + 1.35033f, -9.60554f, 0.0191536f, -1.4461f, -9.19373f, + -0.220267f, 1.84832f, -9.23204f, -0.00957681f, -1.70467f, + -9.11712f, -0.181959f, 1.50356f, -8.74362f, -0.143652f, + -1.97282f, -8.89685f, 0.143652f, 1.88663f, -8.90643f, + -0.373495f, -1.25456f, -8.81066f, -0.124498f, 1.31202f, + -8.79151f, -0.134075f, -0.92895f, -8.99262f, -0.536301f, + 0.430956f, -9.31823f, 0.373495f, -0.181959f, -10.2855f, + -0.153229f, 0.708684f, -10.5536f, 0.229843f, -0.105345f, + -10.2855f, -0.220267f, -0.105345f, -9.95988f, 0.296881f, + -0.162806f, -9.79707f, -0.0861913f, 0.536301f, -9.39485f, + -0.124498f, -0.392649f, -10.2759f, 0.047884f, 1.09176f, + -9.61511f, -0.191536f, -0.517148f, -10.0461f, 0.229843f, + 1.5706f, -9.56723f, -0.430956f, -0.584185f, -9.5385f, + 0.287304f, 0.938527f, -9.49062f, -0.47884f, -0.287304f, + -9.56723f, -0.248997f, 0.497994f, -9.50977f, 0.0766145f, + -0.957681f, -9.79707f, -0.191536f, 0.296881f, -9.40442f, + 0.00957681f, -0.0383072f, -9.61511f, 0.0191536f, 0.268151f, + -9.31823f, -0.201113f, -0.344765f, -9.48104f, 0.45011f, + 0.555455f, -9.29908f, -0.746991f, 0.0191536f, -9.03093f, + 0.248997f, 0.612916f, -8.97347f, -0.459687f, 0.459687f, + -9.11712f, -0.277727f, -0.402226f, -9.0022f, 0.191536f, + 0.191536f, -10.6207f, -0.0766145f, 0.641646f, -10.1897f, + -0.00957681f, 0.344765f, -10.0844f, 0.0574608f, 0.201113f, + -10.1131f, -0.124498f, 0.191536f, -9.38527f, -0.153229f, + -0.0191536f, -9.43316f, -0.0574608f, -0.134075f, -9.42358f, + -0.47884f, 0.172383f, -9.27035f, 0.143652f, 0.21069f, + -10.343f, -0.0383072f, -0.373495f, -9.8258f, 0.0861913f, + 0.316035f, -10.1706f, -0.181959f, -0.143652f, -9.74919f, + 0.114922f, 0.258574f, -9.50977f, -0.430956f, 0.0670376f, + -9.29908f, 0.172383f, 0.344765f, -9.86411f, -0.68953f, + 0.0191536f, -10.0748f, 0.737414f, 0.440533f, -9.91199f, + -0.622492f, -0.430956f, -9.86411f, 0.708684f, 0.335188f, + -9.88326f, -0.392649f, 0.153229f, -9.77792f, 0.354342f, + -0.191536f, -9.60554f, 0.0670376f, 0.0670376f, -9.31823f, + -0.277727f, -0.0957681f, -9.55765f, 0.593762f, 0.153229f, + -9.23204f, -0.852336f, -0.201113f, -9.63427f, 0.42138f, + 0.507571f, -9.42358f, -0.603339f, -0.641646f, -9.64384f, + 0.42138f, 0.718261f, -9.47146f, -0.507571f, -0.995988f, + -9.83538f, 0.134075f, 0.603339f, -9.32781f, -0.172383f, + -0.861913f, -9.60554f, 0.181959f, 1.05345f, -9.72046f, + -0.0574608f, -1.21625f, -9.57681f, -0.00957681f, 1.1971f, + -9.69173f, 0.363919f, -1.31202f, -9.29908f, -0.306458f, + 1.37906f, -9.33739f, 0.766145f, -1.41737f, -9.05008f, + -0.0574608f, 1.09176f, -9.07881f, 0.727837f, -0.861913f, + -9.42358f, -0.785298f, 0.632069f, -9.48104f, 1.01514f, + 0.047884f, -9.69173f, -1.04387f, -0.124498f, -8.99262f, + 1.11091f, 0.325611f, -9.70131f, -0.363919f, -0.325611f, + -9.50019f, 0.737414f, 1.31202f, -9.76834f, -0.162806f, + -1.10133f, -9.68215f, 0.296881f, 1.04387f, -9.77792f, + 0.603339f, -0.0957681f, -9.83538f, -0.47884f, 0.909797f, + -10.4387f, 0.0766145f, -0.459687f, -9.9503f, 0.047884f, + 1.38864f, -9.60554f, -0.584185f, 0.459687f, -9.75877f, + 0.536301f, -0.124498f, -9.74919f, -0.172383f, 0.651223f, + -10.4483f, 0.229843f, -0.268151f, -9.50019f, -1.58975f, + 0.622492f, -9.64384f, 1.58975f, -0.114922f, -8.96389f, + -1.69509f, 1.16837f, -8.72447f, 1.71425f, -1.04387f, + -8.91601f, -0.90022f, 1.92494f, -8.84897f, 1.04387f, + -0.833182f, -8.86812f, -0.0574608f, 1.17795f, -8.91601f, + 0.47884f, -1.47483f, -9.22246f, 1.25456f, 1.76213f, + -8.88728f, -1.42694f, -2.36547f, -10.1227f, 2.24097f, + 2.09732f, -9.09797f, -2.35589f, -3.11246f, -9.84496f, + 2.75812f, 2.1069f, -9.26077f, -2.98796f, -2.33674f, + -9.01178f, 0.0766145f, 4.2138f, -8.45632f, 1.02472f, + -3.69665f, -8.51378f, -0.344765f, 3.95522f, -8.90643f, + 2.00155f, -3.78284f, -9.05966f, -0.497994f, 3.50511f, + -9.42358f, 1.86748f, -3.62003f, -9.68215f, -0.488417f, + 3.74453f, -9.48104f, 1.69509f, -3.18908f, -9.93115f, + -0.871489f, 3.54342f, -9.68215f, 2.03986f, -2.8922f, + -9.85453f, -0.861913f, 3.16035f, -9.81623f, 2.08774f, + -2.66235f, -9.95988f, -0.852336f, 2.74854f, -9.59596f, + 1.83875f, -2.15478f, -10.0652f, -0.622492f, 2.28886f, + -9.5385f, 1.46525f, -2.18351f, -9.67257f, -0.632069f, + 2.01113f, -9.43316f, 1.3216f, -1.67594f, -9.42358f, + -0.679953f, 1.05345f, -9.45231f, 1.5706f, -1.23541f, + -9.2895f, -0.459687f, 1.39821f, -9.5385f, 1.46525f, + -1.16837f, -9.58638f, -0.316035f, 1.47483f, -9.54808f, + 1.20668f, -1.26414f, -9.60554f, -0.411803f, 1.39821f, + -9.31823f, 1.14922f, -1.14922f, -9.76834f, -0.354342f, + 1.35991f, -9.52892f, 1.11091f, -1.35991f, -9.81623f, + 0.0574608f, 1.46525f, -9.663f, 0.833182f, -1.1971f, + -9.80665f, 0.21069f, 1.62806f, -9.70131f, 0.641646f, + -1.24498f, -9.9503f, 0.497994f, 1.53229f, -9.88326f, + 0.325611f, -1.05345f, -9.86411f, 0.565032f, 1.58017f, + -9.87369f, 0.220267f, -1.24498f, -9.94073f, 0.268151f, + 1.97282f, -9.91199f, 0.584185f, -1.35033f, -9.25119f, + 0.306458f, 1.13006f, -9.46189f, 0.383072f, -1.11091f, + -8.97347f, -0.0670376f, 1.22583f, -8.98304f, 0.459687f, + -0.488417f, -9.30866f, -0.737414f, 1.23541f, -9.13627f, + 1.00556f, -0.526724f, -10.6781f, -0.775721f, 0.373495f, + -10.5919f, 1.13964f, 0.42138f, -9.54808f, -2.07817f, + 0.68953f, -9.26077f, 1.82917f, -0.105345f, -9.03093f, + -0.976834f, 0.430956f, -9.47146f, 0.995988f, -0.181959f, + -9.86411f, -0.23942f, 0.124498f, -9.73004f, 0.153229f, + 0.871489f, -9.97903f, -0.220267f, 0.162806f, -9.59596f, + 0.153229f, 0.430956f, -9.8258f, -0.114922f, 0.0957681f, + -9.76834f, 0.00957681f, -0.0287304f, -10.1801f, -0.268151f, + 0.258574f, -10.0844f, 0.23942f, 0.0766145f, -10.1131f, + 0.794875f, 0.0f, -9.86411f, -0.593762f, 0.909797f, + -9.29908f, -2.09732f, 1.72383f, -9.17458f, 1.89621f, + -1.58975f, -8.91601f, -2.16436f, 1.94409f, -9.1267f, + 2.03986f, -1.96325f, -9.30866f, -2.42293f, 2.02071f, + -9.43316f, 2.26013f, -1.38864f, -9.8258f, -2.2697f, + 1.16837f, -9.44273f, 2.16436f, -1.09176f, -9.14585f, + -2.03986f, 1.26414f, -9.01178f, 1.82917f, -1.28329f, + -8.89685f, -2.09732f, 1.64721f, -8.95431f, 1.93451f, + -1.69509f, -8.8777f, -2.19309f, 1.28329f, -9.03093f, + 2.11647f, -1.40779f, -9.31823f, -2.2697f, 1.09176f, + -9.11712f, 2.06859f, -1.3216f, -9.2895f, -2.21224f, + 1.4461f, -9.165f, 2.00155f, -1.48441f, -8.98304f, + -2.20267f, 1.46525f, -8.83939f, 2.00155f, -1.24498f, + -9.14585f, -2.26013f, 1.43652f, -9.01178f, 2.1069f, + -1.45567f, -9.1267f, -2.29843f, 1.63763f, -9.04051f, + 2.12605f, -1.76213f, -9.18416f, -2.27928f, 1.9824f, + -9.09797f, 2.07817f, -1.79086f, -9.08839f, -2.00155f, + 1.79086f, -9.44273f, 1.87705f, -1.62806f, -9.14585f, + -2.31759f, 1.84832f, -8.86812f, 2.06859f, 1.61848f, + -9.165f, -2.24097f, 2.05901f, -9.0022f, 2.02071f, + -1.7334f, -9.04051f, -2.1452f, 2.04944f, -9.2895f, + 2.06859f, -1.70467f, -9.20331f, -2.22182f, 2.06859f, + -9.33739f, 2.09732f, -1.76213f, -9.34696f, -2.13563f, + 1.99198f, -9.1267f, 1.9824f, -1.84832f, -8.88728f, + -1.79086f, 1.55144f, -9.03093f, 1.62806f, -1.61848f, + -9.1267f, -1.58975f, 1.47483f, -9.19373f, 1.49398f, + -1.47483f, -8.92558f, -1.48441f, 1.76213f, -8.69574f, + 1.18752f, -1.76213f, -9.24162f, -1.35991f, 1.49398f, + -9.48104f, 1.23541f, -1.61848f, -9.51935f, 1.86748f, + 2.00155f, -8.71489f, -1.24498f, -2.11647f, -5.6982f, + 8.15944f, 1.27372f, -4.52983f, -7.99663f, -0.775721f, + -4.00311f, 8.31267f, 0.632069f, -3.68707f, -8.03494f, + 0.344765f, -2.16436f, 7.79552f, 3.7158f, -1.7334f, + -7.74764f, -4.22337f, -1.56102f, 8.78193f, 4.39575f, + -1.58017f, -8.76278f, -4.5011f, -1.72383f, 9.05008f, + 5.25767f, -1.93451f, -9.11712f, -3.9648f, -0.995988f, + 7.97748f, 5.34386f, -1.33118f, -7.92002f, -4.03184f, + -0.670376f, 9.17458f, 4.3766f, 0.220267f, -9.60554f, + -4.13718f, -0.746991f, 7.33583f, 5.34386f, -1.1971f, + -7.28795f, -5.14275f, 0.871489f, 7.90087f, 5.80354f, + 0.584185f, -8.33182f, -3.04542f, 0.986411f, 7.59441f, + 6.49307f, -0.0670376f, -7.85298f, -5.92804f, 2.07817f, + 8.83939f, 5.4109f, 0.325611f, -9.59596f, -3.83072f, + 0.718261f, 7.38372f, 5.99508f, 0.248997f, -8.29351f, + -5.10444f, 1.72383f, 7.83383f, 5.85143f, 2.12605f, + -9.15543f, -4.03184f, 2.05901f, 7.37414f, 5.79397f, + 2.19309f, -8.49463f, -4.95121f, 2.13563f, 7.91044f, + 4.29999f, 2.1452f, -8.76278f, -2.24097f, 1.31202f, + 8.59997f, 5.72693f, 0.746991f, -9.55765f, -3.54342f, + 1.36948f, 8.5042f, 5.09486f, 1.17795f, -9.62469f, + -4.1276f, 1.77171f, 8.69574f, 5.46836f, 1.63763f, + -9.40442f, -2.32716f, 1.91536f, 7.75721f, 5.25767f, + 2.04944f, -8.81066f, -2.40378f, 0.392649f, 7.73806f, + 5.63116f, 1.45567f, -9.24162f, -1.49398f, -0.258574f, + 6.82826f, 7.34541f, -0.42138f, -9.07881f, -1.30245f, + -0.517148f, 6.97192f, 7.6806f, -0.890643f, -9.58638f, + -4.81713f, -0.21069f, 3.13162f, 9.20331f, -0.967257f, + -10.0748f, 0.181959f, -0.948104f, -5.9855f, 7.4316f, + -1.00556f, -9.5385f, 0.497994f, 0.162806f, -8.47547f, + 4.32872f, 0.248997f, -9.165f, -2.27928f, 0.143652f, + -8.6287f, 4.47237f, 0.354342f, -9.51935f, 0.986411f, }; const size_t kAccelerometerVerticalHingeTestDataLength = - ARRAY_SIZE(kAccelerometerVerticalHingeTestData); + ARRAY_SIZE(kAccelerometerVerticalHingeTestData); const float kAccelerometerVerticalHingeUnstableTestData[] = { - 8.5904f, -1.36948f, -3.74453f, 8.72447f, 1.1971f, 4.00311f, - 8.80109f, -3.08373f, 2.27928f, 8.95431f, -1.90578f, -1.10133f, - 8.93516f, -2.03986f, 0.248997f, 9.05008f, 1.53229f, -0.708684f, - -8.78193f, 1.43652f, -2.63362f, -8.66701f, 0.220267f, 2.79643f, - -8.66701f, -2.06859f, 2.42293f, -8.79151f, -2.88262f, -1.16837f, - 8.74362f, -1.9824f, 3.53384f, 9.04051f, 0.0574608f, -1.36948f, - 8.78193f, -4.1276f, 2.58574f, 8.8777f, 0.201113f, -1.80044f, - 8.70532f, -0.296881f, 1.52271f, 9.02135f, -0.871489f, -2.43251f, - -9.09797f, -1.3216f, -3.60088f, -8.97347f, 2.52828f, 2.6432f, - -8.82024f, 1.87705f, 0.354342f, -7.93917f, -4.38618f, 0.258574f, - -8.81066f, 1.91536f, -2.92093f, -8.04452f, -5.4492f, 3.28484f, - -8.86812f, 2.05901f, 0.890643f, -8.01579f, -5.65989f, -2.20267f, - -9.0022f, 2.18351f, -2.9305f, -8.80109f, -4.01268f, 3.055f, - -9.37569f, -1.04387f, 0.277727f, -6.80911f, 2.806f, -6.0717f, - -8.79151f, -8.79151f, -2.11647f, -8.6287f, -1.53229f, 3.58173f, - -8.97347f, -0.335188f, 1.26414f, 8.5042f, 1.51314f, -2.20267f, - -9.19373f, -1.37906f, 1.41737f, -7.67102f, 2.8922f, -5.09486f, - -8.81066f, 0.986411f, 2.30801f, -8.53294f, 3.26569f, -3.11246f, - -9.03093f, 1.06303f, 1.39821f, -8.8777f, -4.47237f, -0.632069f, - -8.74362f, -1.83875f, -0.0957681f, -7.92002f, 1.0343f, -3.84988f, - -8.92558f, 0.440533f, 1.26414f, -8.71489f, -0.153229f, -3.64876f, + 8.5904f, -1.36948f, -3.74453f, 8.72447f, 1.1971f, 4.00311f, + 8.80109f, -3.08373f, 2.27928f, 8.95431f, -1.90578f, -1.10133f, + 8.93516f, -2.03986f, 0.248997f, 9.05008f, 1.53229f, -0.708684f, + -8.78193f, 1.43652f, -2.63362f, -8.66701f, 0.220267f, 2.79643f, + -8.66701f, -2.06859f, 2.42293f, -8.79151f, -2.88262f, -1.16837f, + 8.74362f, -1.9824f, 3.53384f, 9.04051f, 0.0574608f, -1.36948f, + 8.78193f, -4.1276f, 2.58574f, 8.8777f, 0.201113f, -1.80044f, + 8.70532f, -0.296881f, 1.52271f, 9.02135f, -0.871489f, -2.43251f, + -9.09797f, -1.3216f, -3.60088f, -8.97347f, 2.52828f, 2.6432f, + -8.82024f, 1.87705f, 0.354342f, -7.93917f, -4.38618f, 0.258574f, + -8.81066f, 1.91536f, -2.92093f, -8.04452f, -5.4492f, 3.28484f, + -8.86812f, 2.05901f, 0.890643f, -8.01579f, -5.65989f, -2.20267f, + -9.0022f, 2.18351f, -2.9305f, -8.80109f, -4.01268f, 3.055f, + -9.37569f, -1.04387f, 0.277727f, -6.80911f, 2.806f, -6.0717f, + -8.79151f, -8.79151f, -2.11647f, -8.6287f, -1.53229f, 3.58173f, + -8.97347f, -0.335188f, 1.26414f, 8.5042f, 1.51314f, -2.20267f, + -9.19373f, -1.37906f, 1.41737f, -7.67102f, 2.8922f, -5.09486f, + -8.81066f, 0.986411f, 2.30801f, -8.53294f, 3.26569f, -3.11246f, + -9.03093f, 1.06303f, 1.39821f, -8.8777f, -4.47237f, -0.632069f, + -8.74362f, -1.83875f, -0.0957681f, -7.92002f, 1.0343f, -3.84988f, + -8.92558f, 0.440533f, 1.26414f, -8.71489f, -0.153229f, -3.64876f, }; const size_t kAccelerometerVerticalHingeUnstableTestDataLength = - ARRAY_SIZE(kAccelerometerVerticalHingeUnstableTestData); + ARRAY_SIZE(kAccelerometerVerticalHingeUnstableTestData); diff --git a/test/motion_angle_tablet.c b/test/motion_angle_tablet.c index 8eea053405..2c0c15c828 100644 --- a/test/motion_angle_tablet.c +++ b/test/motion_angle_tablet.c @@ -1,4 +1,4 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. +/* Copyright 2018 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -19,25 +19,24 @@ #include "test_util.h" #include "util.h" - /*****************************************************************************/ /* Test utilities */ /* convert array value from g to m.s^2. */ int filler(const struct motion_sensor_t *s, const float v) { - return FP_TO_INT( fp_div( - FLOAT_TO_FP(v) * MOTION_SCALING_FACTOR, - fp_mul(INT_TO_FP(s->current_range), MOTION_ONE_G))); + return FP_TO_INT( + fp_div(FLOAT_TO_FP(v) * MOTION_SCALING_FACTOR, + fp_mul(INT_TO_FP(s->current_range), MOTION_ONE_G))); } static int test_lid_angle_less180(void) { int index = 0, lid_angle; - struct motion_sensor_t *lid = &motion_sensors[ - CONFIG_LID_ANGLE_SENSOR_LID]; - struct motion_sensor_t *base = &motion_sensors[ - CONFIG_LID_ANGLE_SENSOR_BASE]; + struct motion_sensor_t *lid = + &motion_sensors[CONFIG_LID_ANGLE_SENSOR_LID]; + struct motion_sensor_t *base = + &motion_sensors[CONFIG_LID_ANGLE_SENSOR_BASE]; /* We don't have TASK_CHIP so simulate init ourselves */ hook_notify(HOOK_CHIPSET_SHUTDOWN); @@ -61,18 +60,17 @@ static int test_lid_angle_less180(void) /* Check we stay in tablet mode, even when hinge is vertical. */ while (index < kAccelerometerVerticalHingeTestDataLength) { - feed_accel_data(kAccelerometerVerticalHingeTestData, - &index, filler); + feed_accel_data(kAccelerometerVerticalHingeTestData, &index, + filler); wait_for_valid_sample(); lid_angle = motion_lid_get_angle(); cprints(CC_ACCEL, "%d : LID(%d, %d, %d)/BASE(%d, %d, %d): %d", - index / TEST_LID_SAMPLE_SIZE, - lid->xyz[X], lid->xyz[Y], lid->xyz[Z], - base->xyz[X], base->xyz[Y], base->xyz[Z], - lid_angle); + index / TEST_LID_SAMPLE_SIZE, lid->xyz[X], lid->xyz[Y], + lid->xyz[Z], base->xyz[X], base->xyz[Y], base->xyz[Z], + lid_angle); /* We need few sample to debounce and enter laptop mode. */ - TEST_ASSERT(index < 2 * TEST_LID_SAMPLE_SIZE * \ - (TABLET_MODE_DEBOUNCE_COUNT + 2) || + TEST_ASSERT(index < 2 * TEST_LID_SAMPLE_SIZE * + (TABLET_MODE_DEBOUNCE_COUNT + 2) || tablet_get_mode()); } /* @@ -86,20 +84,18 @@ static int test_lid_angle_less180(void) wait_for_valid_sample(); lid_angle = motion_lid_get_angle(); cprints(CC_ACCEL, "%d : LID(%d, %d, %d)/BASE(%d, %d, %d): %d", - index / TEST_LID_SAMPLE_SIZE, - lid->xyz[X], lid->xyz[Y], lid->xyz[Z], - base->xyz[X], base->xyz[Y], base->xyz[Z], - lid_angle); + index / TEST_LID_SAMPLE_SIZE, lid->xyz[X], lid->xyz[Y], + lid->xyz[Z], base->xyz[X], base->xyz[Y], base->xyz[Z], + lid_angle); /* We need few sample to debounce and enter laptop mode. */ TEST_ASSERT(index < TEST_LID_SAMPLE_SIZE * - (TABLET_MODE_DEBOUNCE_COUNT + 2) || + (TABLET_MODE_DEBOUNCE_COUNT + 2) || tablet_get_mode()); } return EC_SUCCESS; } - -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/motion_angle_tablet.tasklist b/test/motion_angle_tablet.tasklist index 0b774ebb4a..6c99c23eea 100644 --- a/test/motion_angle_tablet.tasklist +++ b/test/motion_angle_tablet.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/motion_common.c b/test/motion_common.c index c7c3395fc4..e274b206a9 100644 --- a/test/motion_common.c +++ b/test/motion_common.c @@ -1,4 +1,4 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. +/* Copyright 2018 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -43,9 +43,8 @@ static int accel_get_resolution(const struct motion_sensor_t *s) int test_data_rate[2] = { 0 }; -static int accel_set_data_rate(const struct motion_sensor_t *s, - const int rate, - const int rnd) +static int accel_set_data_rate(const struct motion_sensor_t *s, const int rate, + const int rnd) { test_data_rate[s - motion_sensors] = rate | (rnd ? ROUND_UP_FLAG : 0); return EC_SUCCESS; @@ -62,8 +61,8 @@ static int accel_get_rms_noise(const struct motion_sensor_t *s) /* Assume we are using BMI160 */ fp_t rate = INT_TO_FP(accel_get_data_rate(s) / 1000); fp_t noise_100hz = INT_TO_FP(BMI160_ACCEL_RMS_NOISE_100HZ); - fp_t sqrt_rate_ratio = fp_sqrtf(fp_div(rate, - INT_TO_FP(BMI_ACCEL_100HZ))); + fp_t sqrt_rate_ratio = + fp_sqrtf(fp_div(rate, INT_TO_FP(BMI_ACCEL_100HZ))); return FP_TO_INT(fp_mul(noise_100hz, sqrt_rate_ratio)); } #endif @@ -118,7 +117,7 @@ const unsigned int motion_sensor_count = ARRAY_SIZE(motion_sensors); /* Read 6 samples from array to sensor vectors, convert units if necessary. */ void feed_accel_data(const float *array, int *idx, - int (filler)(const struct motion_sensor_t*, const float)) + int(filler)(const struct motion_sensor_t *, const float)) { int i, j; diff --git a/test/motion_common.h b/test/motion_common.h index 45d856d9ef..71e23cd9da 100644 --- a/test/motion_common.h +++ b/test/motion_common.h @@ -1,4 +1,4 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. +/* Copyright 2018 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -13,7 +13,7 @@ * The task will read the vectors at that interval */ #define TEST_LID_EC_RATE (1 * MSEC) -#define TEST_LID_FREQUENCY (1e9 / TEST_LID_EC_RATE) /* mHz */ +#define TEST_LID_FREQUENCY (1e9 / TEST_LID_EC_RATE) /* mHz */ /* * Time in ms to wait for the task to read the vectors. @@ -30,7 +30,8 @@ extern const unsigned int motion_sensor_count; void wait_for_valid_sample(void); void feed_accel_data(const float *array, int *idx, - int (filler)(const struct motion_sensor_t *s, const float f)); + int(filler)(const struct motion_sensor_t *s, + const float f)); /* * External data - from @@ -65,4 +66,4 @@ extern const float kAccelerometerVerticalHingeTestData[]; extern const size_t kAccelerometerVerticalHingeTestDataLength; extern const float kAccelerometerVerticalHingeUnstableTestData[]; extern const size_t kAccelerometerVerticalHingeUnstableTestDataLength; -#endif /* __CROS_EC_MOTION_COMMON_H */ +#endif /* __CROS_EC_MOTION_COMMON_H */ diff --git a/test/motion_lid.c b/test/motion_lid.c index 9935767a68..39b83ce6fc 100644 --- a/test/motion_lid.c +++ b/test/motion_lid.c @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -48,8 +48,7 @@ static int accel_read(const struct motion_sensor_t *s, intv3_t v) return EC_SUCCESS; } -static int accel_set_range(struct motion_sensor_t *s, - const int range, +static int accel_set_range(struct motion_sensor_t *s, const int range, const int rnd) { s->current_range = range; @@ -63,9 +62,8 @@ static int accel_get_resolution(const struct motion_sensor_t *s) int test_data_rate[2] = { 0 }; -static int accel_set_data_rate(const struct motion_sensor_t *s, - const int rate, - const int rnd) +static int accel_set_data_rate(const struct motion_sensor_t *s, const int rate, + const int rnd) { test_data_rate[s - motion_sensors] = rate; return EC_SUCCESS; @@ -148,11 +146,10 @@ static void wait_for_valid_sample(void) static int test_lid_angle(void) { - - struct motion_sensor_t *base = &motion_sensors[ - CONFIG_LID_ANGLE_SENSOR_BASE]; - struct motion_sensor_t *lid = &motion_sensors[ - CONFIG_LID_ANGLE_SENSOR_LID]; + struct motion_sensor_t *base = + &motion_sensors[CONFIG_LID_ANGLE_SENSOR_BASE]; + struct motion_sensor_t *lid = + &motion_sensors[CONFIG_LID_ANGLE_SENSOR_LID]; int lid_angle; /* We don't have TASK_CHIP so simulate init ourselves */ @@ -189,10 +186,9 @@ static int test_lid_angle(void) wait_for_valid_sample(); lid_angle = motion_lid_get_angle(); - cprints(CC_ACCEL, "LID(%d, %d, %d)/BASE(%d, %d, %d): %d", - lid->xyz[X], lid->xyz[Y], lid->xyz[Z], - base->xyz[X], base->xyz[Y], base->xyz[Z], - lid_angle); + cprints(CC_ACCEL, "LID(%d, %d, %d)/BASE(%d, %d, %d): %d", lid->xyz[X], + lid->xyz[Y], lid->xyz[Z], base->xyz[X], base->xyz[Y], + base->xyz[Z], lid_angle); TEST_ASSERT(lid_angle == 0); /* Set lid open to 90 degrees. */ @@ -319,8 +315,7 @@ static int test_lid_angle(void) return EC_SUCCESS; } - -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/motion_lid.tasklist b/test/motion_lid.tasklist index 0b774ebb4a..6c99c23eea 100644 --- a/test/motion_lid.tasklist +++ b/test/motion_lid.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/motion_sense_fifo.c b/test/motion_sense_fifo.c index afa9a4f5cf..c93e67951b 100644 --- a/test/motion_sense_fifo.c +++ b/test/motion_sense_fifo.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -153,7 +153,11 @@ static int test_stage_data_removed_oversample(void) static int test_stage_data_remove_all_oversampling(void) { - struct ec_response_motion_sense_fifo_info fifo_info; + uint8_t fifo_info_buffer + [sizeof(struct ec_response_motion_sense_fifo_info) + + sizeof(uint16_t) * MAX_MOTION_SENSORS]; + struct ec_response_motion_sense_fifo_info *fifo_info = + (void *)fifo_info_buffer; int read_count; motion_sensors->oversampling_ratio = 0; @@ -172,9 +176,9 @@ static int test_stage_data_remove_all_oversampling(void) * Check that count is 0 and total_lost is 0, oversampling should be * removing the data before it touches the FIFO. */ - motion_sense_fifo_get_info(&fifo_info, /*reset=*/false); - TEST_EQ(fifo_info.count, 0, "%d"); - TEST_EQ(fifo_info.total_lost, 0, "%d"); + motion_sense_fifo_get_info(fifo_info, /*reset=*/false); + TEST_EQ(fifo_info->count, 0, "%d"); + TEST_EQ(fifo_info->total_lost, 0, "%d"); motion_sense_fifo_commit_data(); @@ -191,7 +195,11 @@ static int test_stage_data_remove_all_oversampling(void) static int test_stage_data_evicts_data_with_timestamp(void) { - struct ec_response_motion_sense_fifo_info fifo_info; + uint8_t fifo_info_buffer + [sizeof(struct ec_response_motion_sense_fifo_info) + + sizeof(uint16_t) * MAX_MOTION_SENSORS]; + struct ec_response_motion_sense_fifo_info *fifo_info = + (void *)fifo_info_buffer; int i, read_count; /* Fill the fifo */ @@ -206,9 +214,9 @@ static int test_stage_data_evicts_data_with_timestamp(void) * Check that count is 1 smaller than the total size and total_lost is 2 * because 2 entries were evicted together. */ - motion_sense_fifo_get_info(&fifo_info, /*reset=*/false); - TEST_EQ(fifo_info.count, CONFIG_ACCEL_FIFO_SIZE - 1, "%d"); - TEST_EQ(fifo_info.total_lost, 2, "%d"); + motion_sense_fifo_get_info(fifo_info, /*reset=*/false); + TEST_EQ(fifo_info->count, CONFIG_ACCEL_FIFO_SIZE - 1, "%d"); + TEST_EQ(fifo_info->total_lost, 2, "%d"); read_count = motion_sense_fifo_read( sizeof(data), CONFIG_ACCEL_FIFO_SIZE, data, &data_bytes_read); @@ -273,7 +281,7 @@ static int test_spread_data_in_window(void) int read_count; motion_sensors[0].oversampling_ratio = 1; - motion_sensors[0].collection_rate = 20; /* us */ + motion_sense_set_data_period(0, 20 /* us */); now = __hw_clock_source_read(); motion_sense_fifo_stage_data(data, motion_sensors, 3, now - 18); @@ -300,9 +308,9 @@ static int test_spread_data_on_overflow(void) int i, read_count; /* Set up the sensors */ - motion_sensors[0].collection_rate = 20; /* us */ motion_sensors[0].oversampling_ratio = 1; motion_sensors[1].oversampling_ratio = 1; + motion_sense_set_data_period(0, 20 /* us */); /* Add 1 sample for sensor [1]. This will be evicted. */ data->sensor_num = 1; @@ -351,7 +359,7 @@ static int test_spread_data_by_collection_rate(void) int read_count; motion_sensors[0].oversampling_ratio = 1; - motion_sensors[0].collection_rate = 20; /* us */ + motion_sense_set_data_period(0, 20 /* us */); motion_sense_fifo_stage_data(data, motion_sensors, 3, now - 25); motion_sense_fifo_stage_data(data, motion_sensors, 3, now - 25); motion_sense_fifo_commit_data(); @@ -366,42 +374,13 @@ static int test_spread_data_by_collection_rate(void) return EC_SUCCESS; } -static int test_spread_double_commit_same_timestamp(void) -{ - const uint32_t now = __hw_clock_source_read(); - int read_count; - - /* - * Stage and commit the same sample. This is not expected to happen - * since batches of sensor samples should be staged together and only - * commit once. We assume that the driver did this on purpose and will - * allow the same timestamp to be sent. - */ - motion_sensors[0].oversampling_ratio = 1; - motion_sensors[0].collection_rate = 20; /* us */ - motion_sense_fifo_stage_data(data, motion_sensors, 3, now - 25); - motion_sense_fifo_commit_data(); - motion_sense_fifo_stage_data(data, motion_sensors, 3, now - 25); - motion_sense_fifo_commit_data(); - - read_count = motion_sense_fifo_read( - sizeof(data), CONFIG_ACCEL_FIFO_SIZE, data, &data_bytes_read); - TEST_EQ(read_count, 4, "%d"); - TEST_BITS_SET(data[0].flags, MOTIONSENSE_SENSOR_FLAG_TIMESTAMP); - TEST_EQ(data[0].timestamp, now - 25, "%u"); - TEST_BITS_SET(data[2].flags, MOTIONSENSE_SENSOR_FLAG_TIMESTAMP); - TEST_EQ(data[2].timestamp, now - 25, "%u"); - - return EC_SUCCESS; -} - static int test_commit_non_data_or_timestamp_entries(void) { const uint32_t now = __hw_clock_source_read(); int read_count; motion_sensors[0].oversampling_ratio = 1; - motion_sensors[0].collection_rate = 20; /* us */ + motion_sense_set_data_period(0, 20 /* us */); /* Insert non-data entry */ data[0].flags = MOTIONSENSE_SENSOR_FLAG_ODR; @@ -426,28 +405,29 @@ static int test_commit_non_data_or_timestamp_entries(void) static int test_get_info_size(void) { - struct ec_response_motion_sense_fifo_info fifo_info; + uint8_t fifo_info_buffer + [sizeof(struct ec_response_motion_sense_fifo_info) + + sizeof(uint16_t) * MAX_MOTION_SENSORS]; + struct ec_response_motion_sense_fifo_info *fifo_info = + (void *)fifo_info_buffer; - motion_sense_fifo_get_info(&fifo_info, /*reset=*/false); - TEST_EQ(fifo_info.size, CONFIG_ACCEL_FIFO_SIZE, "%d"); + motion_sense_fifo_get_info(fifo_info, /*reset=*/false); + TEST_EQ(fifo_info->size, CONFIG_ACCEL_FIFO_SIZE, "%d"); return EC_SUCCESS; } void before_test(void) { - static struct ec_response_motion_sense_fifo_info fifo_info; - motion_sense_fifo_commit_data(); motion_sense_fifo_read(sizeof(data), CONFIG_ACCEL_FIFO_SIZE, &data, &data_bytes_read); motion_sense_fifo_reset_needed_flags(); memset(data, 0, sizeof(data)); motion_sense_fifo_reset(); - motion_sense_fifo_get_info(&fifo_info, /*reset=*/true); } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); motion_sense_fifo_init(); @@ -465,7 +445,6 @@ void run_test(int argc, char **argv) RUN_TEST(test_spread_data_in_window); RUN_TEST(test_spread_data_on_overflow); RUN_TEST(test_spread_data_by_collection_rate); - RUN_TEST(test_spread_double_commit_same_timestamp); RUN_TEST(test_commit_non_data_or_timestamp_entries); RUN_TEST(test_get_info_size); diff --git a/test/motion_sense_fifo.tasklist b/test/motion_sense_fifo.tasklist index 9fc1a80f4d..844ddb6c10 100644 --- a/test/motion_sense_fifo.tasklist +++ b/test/motion_sense_fifo.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/mpu.c b/test/mpu.c index 25b2c58903..2193c0c617 100644 --- a/test/mpu.c +++ b/test/mpu.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -17,22 +17,18 @@ struct mpu_info { }; #if defined(CHIP_VARIANT_STM32F412) -struct mpu_info mpu_info = { - .has_mpu = true, - .num_mpu_regions = 8, - .mpu_is_unified = true -}; +struct mpu_info mpu_info = { .has_mpu = true, + .num_mpu_regions = 8, + .mpu_is_unified = true }; struct mpu_rw_regions expected_rw_regions = { .num_regions = 2, .addr = { 0x08060000, 0x08080000 }, .size = { 0x20000, 0x80000 } }; #elif defined(CHIP_VARIANT_STM32H7X3) -struct mpu_info mpu_info = { - .has_mpu = true, - .num_mpu_regions = 16, - .mpu_is_unified = true -}; +struct mpu_info mpu_info = { .has_mpu = true, + .num_mpu_regions = 16, + .mpu_is_unified = true }; struct mpu_rw_regions expected_rw_regions = { .num_regions = 1, .addr = { 0x08100000, @@ -75,7 +71,7 @@ test_static int test_mpu_update_region_valid_region(void) { volatile char data __maybe_unused; - char * const ram_base = (char * const)CONFIG_RAM_BASE; + char *const ram_base = (char *const)CONFIG_RAM_BASE; const uint8_t size_bit = 5; uint16_t mpu_attr = MPU_ATTR_NO_NO; @@ -176,7 +172,7 @@ test_static int test_mpu_get_rw_regions(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { enum ec_image cur_image = system_get_image_copy(); diff --git a/test/mpu.tasklist b/test/mpu.tasklist index 51734f058d..a1f1a94e2d 100644 --- a/test/mpu.tasklist +++ b/test/mpu.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/mutex.c b/test/mutex.c index 4fbf7d5cae..a03e504a0a 100644 --- a/test/mutex.c +++ b/test/mutex.c @@ -1,7 +1,7 @@ -/* Copyright 2011 The Chromium OS Authors. All rights reserved. +/* Copyright 2011 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. - * Copyright 2011 Google Inc. + * Copyright 2011 Google LLC * * Tasks for mutexes basic tests. */ @@ -22,7 +22,7 @@ static struct mutex mtx; int mutex_random_task(void *unused) { - char letter = 'A'+(TASK_ID_MTX3A - task_get_current()); + char letter = 'A' + (TASK_ID_MTX3A - task_get_current()); /* wait to be activated */ while (1) { @@ -110,7 +110,7 @@ int mutex_main_task(void *unused) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { wait_for_task_started(); task_wake(TASK_ID_MTX1); diff --git a/test/mutex.tasklist b/test/mutex.tasklist index 8e3d08ddc2..46cdad7fa1 100644 --- a/test/mutex.tasklist +++ b/test/mutex.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/newton_fit.c b/test/newton_fit.c index 9648fbfd9a..07c35aad2a 100644 --- a/test/newton_fit.c +++ b/test/newton_fit.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -126,7 +126,7 @@ static int test_newton_fit_calculate(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/newton_fit.tasklist b/test/newton_fit.tasklist index 5ffe662d01..2d4595f76a 100644 --- a/test/newton_fit.tasklist +++ b/test/newton_fit.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/nvidia_gpu.c b/test/nvidia_gpu.c new file mode 100644 index 0000000000..d6086cc8c4 --- /dev/null +++ b/test/nvidia_gpu.c @@ -0,0 +1,215 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Tests for Nvidia GPU. + */ +#include <stdio.h> + +#include "charge_manager.h" +#include "charge_state.h" +#include "common.h" +#include "console.h" +#include "hooks.h" +#include "host_command.h" +#include "task.h" +#include "test_util.h" +#include "throttle_ap.h" +#include "timer.h" +#include "util.h" + +#include "driver/nvidia_gpu.h" + +struct d_notify_policy d_notify_policies[] = { + AC_ATLEAST_W(100), AC_ATLEAST_W(65), AC_DC, + DC_ATLEAST_SOC(20), DC_ATLEAST_SOC(5), +}; + +extern enum d_notify_level d_notify_level; +extern bool policy_initialized; +extern const struct d_notify_policy *d_notify_policy; +static int extpower_presence = 1; +static int nvidia_gpu_acoff_odl = 1; +static int charge_percent = 100; +static int charge_power = 100; +static uint8_t *memmap_gpu; + +__override int charge_get_percent(void) +{ + return charge_percent; +} + +__override int charge_manager_get_power_limit_uw(void) +{ + return charge_power * 1000000; +} + +__override int extpower_is_present(void) +{ + return extpower_presence; +} + +__override int gpio_get_level(enum gpio_signal signal) +{ + if (signal == GPIO_NVIDIA_GPU_ACOFF_ODL) + return nvidia_gpu_acoff_odl; + return 0; +} + +__override void gpio_set_level(enum gpio_signal signal, int value) +{ + if (signal == GPIO_NVIDIA_GPU_ACOFF_ODL) + nvidia_gpu_acoff_odl = value; +} + +static void setup(int extpower, int gpio_acoff, int percent, int power, + enum d_notify_level level) +{ + extpower_presence = extpower; + nvidia_gpu_acoff_odl = gpio_acoff; + charge_percent = percent; + charge_power = power; + d_notify_level = level; + *memmap_gpu = level; +} + +static void plug_ac(int plug) +{ + extpower_presence = plug; + hook_notify(HOOK_AC_CHANGE); +} + +static int check_d_notify_level(enum d_notify_level expected_level) +{ + TEST_EQ(d_notify_level, expected_level, "%d"); + TEST_EQ(*memmap_gpu, expected_level, "%d"); + + return EC_SUCCESS; +} + +static int test_startup(void) +{ + /* Test initial values after HOOK_INIT. Don't call setup(). */ + + TEST_ASSERT(IS_ENABLED(HAS_GPU_DRIVER)); + TEST_ASSERT(policy_initialized); + TEST_NE(d_notify_policy, NULL, "%p"); + TEST_EQ(check_d_notify_level(D_NOTIFY_1), EC_SUCCESS, "%d"); + + return EC_SUCCESS; +} + +static int test_ac_unplug(void) +{ + setup(1, 1, 100, 100, D_NOTIFY_1); + + /* Unplug AC. D1 -> D5 */ + plug_ac(0); + throttle_gpu(THROTTLE_ON, THROTTLE_HARD, THROTTLE_SRC_AC); + TEST_EQ(nvidia_gpu_acoff_odl, 0, "%d"); + TEST_EQ(check_d_notify_level(D_NOTIFY_5), EC_SUCCESS, "%d"); + TEST_ASSERT(host_is_event_set(EC_HOST_EVENT_GPU)); + host_clear_events(EC_HOST_EVENT_MASK(EC_HOST_EVENT_GPU)); + + /* Wait half of NVIDIA_GPU_ACOFF_DURATION. D5 -> D5. */ + usleep(NVIDIA_GPU_ACOFF_DURATION / 2); + TEST_EQ(nvidia_gpu_acoff_odl, 0, "%d"); + TEST_EQ(check_d_notify_level(D_NOTIFY_5), EC_SUCCESS, "%d"); + TEST_ASSERT(!host_is_event_set(EC_HOST_EVENT_GPU)); + + /* Wait another half of NVIDIA_GPU_ACOFF_DURATION. D5 -> D3. */ + usleep(NVIDIA_GPU_ACOFF_DURATION / 2); + TEST_EQ(nvidia_gpu_acoff_odl, 1, "%d"); + TEST_EQ(check_d_notify_level(D_NOTIFY_3), EC_SUCCESS, "%d"); + TEST_ASSERT(host_is_event_set(EC_HOST_EVENT_GPU)); + host_clear_events(EC_HOST_EVENT_MASK(EC_HOST_EVENT_GPU)); + + /* Discharge to 60%. D3 -> D3. */ + charge_percent = 60; + hook_notify(HOOK_BATTERY_SOC_CHANGE); + TEST_EQ(nvidia_gpu_acoff_odl, 1, "%d"); + TEST_EQ(check_d_notify_level(D_NOTIFY_3), EC_SUCCESS, "%d"); + TEST_ASSERT(!host_is_event_set(EC_HOST_EVENT_GPU)); + + /* Discharge to 20%. D3 -> D4 */ + charge_percent = 20; + hook_notify(HOOK_BATTERY_SOC_CHANGE); + TEST_EQ(nvidia_gpu_acoff_odl, 1, "%d"); + TEST_EQ(check_d_notify_level(D_NOTIFY_4), EC_SUCCESS, "%d"); + TEST_ASSERT(host_is_event_set(EC_HOST_EVENT_GPU)); + host_clear_events(EC_HOST_EVENT_MASK(EC_HOST_EVENT_GPU)); + + /* Discharge to 5%. D4 -> D5 */ + charge_percent = 5; + hook_notify(HOOK_BATTERY_SOC_CHANGE); + TEST_EQ(nvidia_gpu_acoff_odl, 1, "%d"); + TEST_EQ(check_d_notify_level(D_NOTIFY_5), EC_SUCCESS, "%d"); + TEST_ASSERT(host_is_event_set(EC_HOST_EVENT_GPU)); + host_clear_events(EC_HOST_EVENT_MASK(EC_HOST_EVENT_GPU)); + + return EC_SUCCESS; +} + +static int test_ac_plug(void) +{ + /* Plug 100W AC. D5 -> D1. */ + setup(0, 1, 5, 100, D_NOTIFY_5); + plug_ac(1); + throttle_gpu(THROTTLE_OFF, THROTTLE_HARD, THROTTLE_SRC_AC); + TEST_EQ(nvidia_gpu_acoff_odl, 1, "%d"); + TEST_EQ(check_d_notify_level(D_NOTIFY_1), EC_SUCCESS, "%d"); + TEST_ASSERT(host_is_event_set(EC_HOST_EVENT_GPU)); + host_clear_events(EC_HOST_EVENT_MASK(EC_HOST_EVENT_GPU)); + + /* Plug 65W AC. D5 -> D2. */ + setup(0, 1, 5, 65, D_NOTIFY_5); + plug_ac(1); + throttle_gpu(THROTTLE_OFF, THROTTLE_HARD, THROTTLE_SRC_AC); + TEST_EQ(nvidia_gpu_acoff_odl, 1, "%d"); + TEST_EQ(check_d_notify_level(D_NOTIFY_2), EC_SUCCESS, "%d"); + TEST_ASSERT(host_is_event_set(EC_HOST_EVENT_GPU)); + host_clear_events(EC_HOST_EVENT_MASK(EC_HOST_EVENT_GPU)); + + /* Plug 35W AC. D5 -> D3. */ + setup(0, 1, 5, 35, D_NOTIFY_5); + plug_ac(1); + throttle_gpu(THROTTLE_OFF, THROTTLE_HARD, THROTTLE_SRC_AC); + TEST_EQ(nvidia_gpu_acoff_odl, 1, "%d"); + TEST_EQ(check_d_notify_level(D_NOTIFY_3), EC_SUCCESS, "%d"); + TEST_ASSERT(host_is_event_set(EC_HOST_EVENT_GPU)); + host_clear_events(EC_HOST_EVENT_MASK(EC_HOST_EVENT_GPU)); + + return EC_SUCCESS; +} + +static int test_overt(void) +{ + nvidia_gpu_over_temp(1); + TEST_ASSERT(*memmap_gpu & EC_MEMMAP_GPU_OVERT_BIT); + TEST_ASSERT(host_is_event_set(EC_HOST_EVENT_GPU)); + + nvidia_gpu_over_temp(0); + TEST_ASSERT(!(*memmap_gpu & EC_MEMMAP_GPU_OVERT_BIT)); + TEST_ASSERT(host_is_event_set(EC_HOST_EVENT_GPU)); + + return EC_SUCCESS; +} + +static void board_gpu_init(void) +{ + nvidia_gpu_init_policy(d_notify_policies); +} +DECLARE_HOOK(HOOK_INIT, board_gpu_init, HOOK_PRIO_DEFAULT); + +void run_test(int argc, const char **argv) +{ + memmap_gpu = (uint8_t *)host_get_memmap(EC_MEMMAP_GPU); + + test_chipset_on(); + + RUN_TEST(test_startup); + RUN_TEST(test_ac_unplug); + RUN_TEST(test_ac_plug); + RUN_TEST(test_overt); + test_print_result(); +} diff --git a/test/nvidia_gpu.tasklist b/test/nvidia_gpu.tasklist new file mode 100644 index 0000000000..8918b4ee2f --- /dev/null +++ b/test/nvidia_gpu.tasklist @@ -0,0 +1,10 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/** + * See CONFIG_TASK_LIST in config.h for details. + */ +#define CONFIG_TEST_TASK_LIST \ + TASK_TEST(CHIPSET, chipset_task, NULL, TASK_STACK_SIZE) diff --git a/test/online_calibration.c b/test/online_calibration.c index 1b3abf51bc..cecb543eef 100644 --- a/test/online_calibration.c +++ b/test/online_calibration.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -48,17 +48,14 @@ static struct accelgyro_drv mock_sensor_driver = { .read_temp = mock_read_temp, }; -static struct accel_cal_algo base_accel_cal_algos[] = { - { - .newton_fit = NEWTON_FIT(4, 15, FLOAT_TO_FP(0.01f), - FLOAT_TO_FP(0.25f), - FLOAT_TO_FP(1.0e-8f), 100), - } -}; +static struct accel_cal_algo base_accel_cal_algos[] = { { + .newton_fit = NEWTON_FIT(4, 15, FLOAT_TO_FP(0.01f), FLOAT_TO_FP(0.25f), + FLOAT_TO_FP(1.0e-8f), 100), +} }; static struct accel_cal base_accel_cal_data = { - .still_det = STILL_DET(FLOAT_TO_FP(0.00025f), 800 * MSEC, 1200 * MSEC, - 5), + .still_det = + STILL_DET(FLOAT_TO_FP(0.00025f), 800 * MSEC, 1200 * MSEC, 5), .algos = base_accel_cal_algos, .num_temp_windows = ARRAY_SIZE(base_accel_cal_algos), }; @@ -68,9 +65,8 @@ static struct mag_cal_t lid_mag_cal_data; static bool next_accel_cal_accumulate_result; static fpv3_t next_accel_cal_bias; -bool accel_cal_accumulate( - struct accel_cal *cal, uint32_t sample_time, fp_t x, fp_t y, fp_t z, - fp_t temp) +bool accel_cal_accumulate(struct accel_cal *cal, uint32_t sample_time, fp_t x, + fp_t y, fp_t z, fp_t temp) { if (next_accel_cal_accumulate_result) { cal->bias[X] = next_accel_cal_bias[X]; @@ -110,8 +106,8 @@ static int test_read_temp_on_stage(void) mock_read_temp_results = &expected; data.sensor_num = BASE; - rc = online_calibration_process_data( - &data, &motion_sensors[0], __hw_clock_source_read()); + rc = online_calibration_process_data(&data, &motion_sensors[0], + __hw_clock_source_read()); TEST_EQ(rc, EC_SUCCESS, "%d"); TEST_EQ(expected.used_count, 1, "%d"); @@ -128,12 +124,12 @@ static int test_read_temp_from_cache_on_stage(void) mock_read_temp_results = &expected; data.sensor_num = BASE; - rc = online_calibration_process_data( - &data, &motion_sensors[0], __hw_clock_source_read()); + rc = online_calibration_process_data(&data, &motion_sensors[0], + __hw_clock_source_read()); TEST_EQ(rc, EC_SUCCESS, "%d"); - rc = online_calibration_process_data( - &data, &motion_sensors[0], __hw_clock_source_read()); + rc = online_calibration_process_data(&data, &motion_sensors[0], + __hw_clock_source_read()); TEST_EQ(rc, EC_SUCCESS, "%d"); TEST_EQ(expected.used_count, 1, "%d"); @@ -150,13 +146,13 @@ static int test_read_temp_twice_after_cache_stale(void) mock_read_temp_results = &expected; data.sensor_num = BASE; - rc = online_calibration_process_data( - &data, &motion_sensors[0], __hw_clock_source_read()); + rc = online_calibration_process_data(&data, &motion_sensors[0], + __hw_clock_source_read()); TEST_EQ(rc, EC_SUCCESS, "%d"); sleep(2); - rc = online_calibration_process_data( - &data, &motion_sensors[0], __hw_clock_source_read()); + rc = online_calibration_process_data(&data, &motion_sensors[0], + __hw_clock_source_read()); TEST_EQ(rc, EC_SUCCESS, "%d"); TEST_EQ(expected.used_count, 2, "%d"); @@ -176,17 +172,17 @@ static int test_new_calibration_value(void) next_accel_cal_accumulate_result = false; data.sensor_num = BASE; - rc = online_calibration_process_data( - &data, &motion_sensors[BASE], __hw_clock_source_read()); + rc = online_calibration_process_data(&data, &motion_sensors[BASE], + __hw_clock_source_read()); TEST_EQ(rc, EC_SUCCESS, "%d"); TEST_EQ(online_calibration_has_new_values(), false, "%d"); next_accel_cal_accumulate_result = true; - next_accel_cal_bias[X] = 0.01f; /* expect: 81 */ - next_accel_cal_bias[Y] = -0.02f; /* expect: -163 */ - next_accel_cal_bias[Z] = 0; /* expect: 0 */ - rc = online_calibration_process_data( - &data, &motion_sensors[BASE], __hw_clock_source_read()); + next_accel_cal_bias[X] = 0.01f; /* expect: 81 */ + next_accel_cal_bias[Y] = -0.02f; /* expect: -163 */ + next_accel_cal_bias[Z] = 0; /* expect: 0 */ + rc = online_calibration_process_data(&data, &motion_sensors[BASE], + __hw_clock_source_read()); TEST_EQ(rc, EC_SUCCESS, "%d"); TEST_EQ(online_calibration_has_new_values(), true, "%d"); @@ -216,8 +212,8 @@ int test_mag_reading_updated_cal(void) init_mag_cal(&expected_results); mag_cal_update(&expected_results, test_values); - rc = online_calibration_process_data( - &data, &motion_sensors[LID], __hw_clock_source_read()); + rc = online_calibration_process_data(&data, &motion_sensors[LID], + __hw_clock_source_read()); TEST_EQ(rc, EC_SUCCESS, "%d"); TEST_EQ(expected_results.kasa_fit.nsamples, lid_mag_cal_data.kasa_fit.nsamples, "%d"); @@ -231,7 +227,7 @@ void before_test(void) online_calibration_init(); } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/online_calibration.tasklist b/test/online_calibration.tasklist index 5b67239ff8..a9ba96907d 100644 --- a/test/online_calibration.tasklist +++ b/test/online_calibration.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/online_calibration_spoof.c b/test/online_calibration_spoof.c index 66ef5d01de..44a3b812d9 100644 --- a/test/online_calibration_spoof.c +++ b/test/online_calibration_spoof.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -184,7 +184,7 @@ void before_test(void) gyro_cal_initialization_for_test(&gyro_cal_data); } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/online_calibration_spoof.tasklist b/test/online_calibration_spoof.tasklist index 7d28eb5b64..7209a7441e 100644 --- a/test/online_calibration_spoof.tasklist +++ b/test/online_calibration_spoof.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/panic_data.c b/test/panic_data.c index 9abbcb7745..334b766dfc 100644 --- a/test/panic_data.c +++ b/test/panic_data.c @@ -1,11 +1,11 @@ -/* Copyright 2022 The Chromium OS Authors. All rights reserved. +/* Copyright 2022 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "test_util.h" -#include "assert.h" +#include "builtin/assert.h" #include "panic.h" #include "system.h" #include "task.h" @@ -132,7 +132,7 @@ int task_test(void *unused) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); msleep(30); /* Wait for TASK_ID_TEST to initialize */ diff --git a/test/panic_data.tasklist b/test/panic_data.tasklist index 6a2f1834ca..273a9664c0 100644 --- a/test/panic_data.tasklist +++ b/test/panic_data.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2022 The Chromium OS Authors. All rights reserved. +/* Copyright 2022 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/pingpong.c b/test/pingpong.c index 9d3a7ed7af..cb8c5af8c9 100644 --- a/test/pingpong.c +++ b/test/pingpong.c @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -60,7 +60,7 @@ int task_tick(void *data) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { wait_for_task_started(); task_wake(TASK_ID_TICK); diff --git a/test/pingpong.tasklist b/test/pingpong.tasklist index 760d204b67..7db2ce33a6 100644 --- a/test/pingpong.tasklist +++ b/test/pingpong.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/power_button.c b/test/power_button.c index 5fe9136105..dc64e607fa 100644 --- a/test/power_button.c +++ b/test/power_button.c @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -89,7 +89,7 @@ static int test_debounce(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/power_button.tasklist b/test/power_button.tasklist index da0ab6211a..100cb6b5bd 100644 --- a/test/power_button.tasklist +++ b/test/power_button.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/powerdemo.c b/test/powerdemo.c index e695bb8e5e..7a4f0c5ccb 100644 --- a/test/powerdemo.c +++ b/test/powerdemo.c @@ -1,4 +1,4 @@ -/* Copyright 2012 The Chromium OS Authors. All rights reserved. +/* Copyright 2012 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -13,17 +13,16 @@ #include "registers.h" static volatile enum { - POWER_STATE_IDLE = 0, /* Idle */ - POWER_STATE_DOWN1, /* Assert output for 1ms */ - POWER_STATE_UP1, /* Deassert output for 1ms */ - POWER_STATE_DOWN10, /* Assert output for 10ms */ - POWER_STATE_UP5, /* Deassert output for 5ms */ - POWER_STATE_DOWN15, /* Assert output for 15ms */ - POWER_STATE_WAIT, /* Wait for button to be released */ - POWER_STATE_DOWN2 /* Assert output for 2ms */ + POWER_STATE_IDLE = 0, /* Idle */ + POWER_STATE_DOWN1, /* Assert output for 1ms */ + POWER_STATE_UP1, /* Deassert output for 1ms */ + POWER_STATE_DOWN10, /* Assert output for 10ms */ + POWER_STATE_UP5, /* Deassert output for 5ms */ + POWER_STATE_DOWN15, /* Assert output for 15ms */ + POWER_STATE_WAIT, /* Wait for button to be released */ + POWER_STATE_DOWN2 /* Assert output for 2ms */ } state = POWER_STATE_IDLE; - /* Stops the timer. */ static void __stop_timer(void) { @@ -33,7 +32,6 @@ static void __stop_timer(void) LM4_TIMER_ICR(7) = LM4_TIMER_RIS(7); } - /* Starts the timer with the specified delay. If the timer is already * started, resets it. */ static void __start_timer(int usec) @@ -46,7 +44,6 @@ static void __start_timer(int usec) LM4_TIMER_CTL(7) |= 0x01; } - static void __set_state(int new_state, int pin_value, int timeout) { LM4_GPIO_DATA(LM4_GPIO_D, 0x08) = (pin_value ? 0x08 : 0); @@ -57,7 +54,6 @@ static void __set_state(int new_state, int pin_value, int timeout) state = new_state; } - int power_demo_init(void) { volatile uint32_t scratch __attribute__((unused)); @@ -102,7 +98,6 @@ int power_demo_init(void) return EC_SUCCESS; } - /* GPIO interrupt handler */ static void __gpio_d_interrupt(void) { @@ -125,7 +120,6 @@ static void __gpio_d_interrupt(void) DECLARE_IRQ(LM4_IRQ_GPIOD, __gpio_d_interrupt, 1); - /* Timer interrupt handler */ static void __timer_w1_interrupt(void) { diff --git a/test/powerdemo.h b/test/powerdemo.h index 17ed482042..a8ee854acb 100644 --- a/test/powerdemo.h +++ b/test/powerdemo.h @@ -1,4 +1,4 @@ -/* Copyright 2011 The Chromium OS Authors. All rights reserved. +/* Copyright 2011 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -13,4 +13,4 @@ /* Initializes the module. */ int power_demo_init(void); -#endif /* __TEST_POWERDEMO_H */ +#endif /* __TEST_POWERDEMO_H */ diff --git a/test/powerdemo.tasklist b/test/powerdemo.tasklist index a4fff562e3..3824306072 100644 --- a/test/powerdemo.tasklist +++ b/test/powerdemo.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/printf.c b/test/printf.c index f7e9b9dd2d..728aa9b4a8 100644 --- a/test/printf.c +++ b/test/printf.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -12,14 +12,31 @@ #include "test_util.h" #include "util.h" +#ifdef USE_BUILTIN_STDLIB +/* + * When USE_BUILTIN_STDLIB is defined, we want to test the EC printf + * implementation. We need to include the builtin header file directly so + * that we can call the EC version (crec_vsnprintf) when linking with the + * standard library on the host. + */ +#include "builtin/stdio.h" +#define VSNPRINTF crec_vsnprintf +#define SNPRINTF crec_snprintf +static const bool use_builtin_stdlib = true; +#else +#include <stdio.h> +#define VSNPRINTF vsnprintf +#define SNPRINTF snprintf +static const bool use_builtin_stdlib = false; +#endif + #define INIT_VALUE 0x5E #define NO_BYTES_TOUCHED NULL static const char err_str[] = "ERROR"; static char output[1024]; -int run(int expect_ret, const char *expect, - bool output_null, size_t size_limit, +int run(int expect_ret, const char *expect, bool output_null, size_t size_limit, const char *format, va_list args) { size_t expect_size = expect ? strlen(expect) + 1 : 0; @@ -34,10 +51,8 @@ int run(int expect_ret, const char *expect, TEST_ASSERT(expect_size <= size_limit); memset(output, INIT_VALUE, sizeof(output)); - rv = vsnprintf(output_null ? NULL : output, size_limit, - format, args); - ccprintf("received='%.*s' | ret =%d\n", - 30, output, rv); + rv = VSNPRINTF(output_null ? NULL : output, size_limit, format, args); + ccprintf("received='%.*s' | ret =%d\n", 30, output, rv); TEST_ASSERT_ARRAY_EQ(output, expect, expect_size); TEST_ASSERT_MEMSET(&output[expect_size], INIT_VALUE, @@ -59,252 +74,621 @@ int expect_success(const char *expect, const char *format, ...) int rv; va_start(args, format); - rv = run(EC_SUCCESS, expect, - false, sizeof(output), - format, args); + rv = run(EC_SUCCESS, expect, false, sizeof(output), format, args); va_end(args); return rv; } -int expect(int expect_ret, const char *expect, - bool output_null, size_t size_limit, - const char *format, ...) +int expect(int expect_ret, const char *expect, bool output_null, + size_t size_limit, const char *format, ...) { va_list args; int rv; va_start(args, format); - rv = run(expect_ret, expect, - output_null, size_limit, - format, args); + rv = run(expect_ret, expect, output_null, size_limit, format, args); va_end(args); return rv; } -#define T(n) \ - do { \ - int rv = (n); \ - if (rv != EC_SUCCESS) \ - return rv; \ +#define T(n) \ + do { \ + int rv = (n); \ + if (rv != EC_SUCCESS) \ + return rv; \ } while (0) test_static int test_vsnprintf_args(void) { - T(expect_success("", "")); - T(expect_success("a", "a")); - - T(expect(/* expect an invalid args error */ - EC_ERROR_INVAL, NO_BYTES_TOUCHED, - /* given 0 as output size limit */ - false, 0, "")); + T(expect_success("", "")); + T(expect_success("a", "a")); + + if (use_builtin_stdlib) { + /* + * TODO(b/239233116): This differs from the C standard library + * behavior and should probably be changed. + */ + T(expect(/* expect an invalid args error */ + EC_ERROR_INVAL, NO_BYTES_TOUCHED, + /* given 0 as output size limit */ + false, 0, "")); + T(expect(/* expect an overflow error */ + EC_ERROR_OVERFLOW, "", + /* given 1 as output size limit with a non-blank format + */ + false, 1, "a")); + T(expect(/* expect an invalid args error */ + EC_ERROR_INVAL, NO_BYTES_TOUCHED, + /* given NULL as the output buffer */ + true, sizeof(output), "")); + T(expect(/* expect an invalid args error */ + EC_ERROR_INVAL, NO_BYTES_TOUCHED, + /* given a NULL format string */ + false, sizeof(output), NULL)); + } T(expect(/* expect SUCCESS */ EC_SUCCESS, "", /* given 1 as output size limit and a blank format */ false, 1, "")); - T(expect(/* expect an overflow error */ - EC_ERROR_OVERFLOW, "", - /* given 1 as output size limit with a non-blank format */ - false, 1, "a")); - - T(expect(/* expect an invalid args error */ - EC_ERROR_INVAL, NO_BYTES_TOUCHED, - /* given NULL as the output buffer */ - true, sizeof(output), "")); - T(expect(/* expect an invalid args error */ - EC_ERROR_INVAL, NO_BYTES_TOUCHED, - /* given a NULL format string */ - false, sizeof(output), NULL)); return EC_SUCCESS; } test_static int test_vsnprintf_int(void) { - T(expect_success("123", "%d", 123)); - T(expect_success("-123", "%d", -123)); - T(expect_success("+123", "%+d", 123)); - T(expect_success("-123", "%+d", -123)); - T(expect_success("123", "%-d", 123)); - T(expect_success("-123", "%-d", -123)); - - T(expect_success(" 123", "%5d", 123)); - T(expect_success(" +123", "%+5d", 123)); - T(expect_success("00123", "%05d", 123)); - T(expect_success("00123", "%005d", 123)); - /* - * TODO(crbug.com/974084): This odd behavior should be fixed. - * T(expect_success("+0123", "%+05d", 123)); - * Actual: "0+123" - * T(expect_success("+0123", "%+005d", 123)); - * Actual: "0+123" - */ + T(expect_success("123", "%d", 123)); + T(expect_success("-123", "%d", -123)); + T(expect_success("+123", "%+d", 123)); + T(expect_success("-123", "%+d", -123)); + T(expect_success("123", "%-d", 123)); + T(expect_success("-123", "%-d", -123)); + + T(expect_success(" 123", "%5d", 123)); + T(expect_success(" +123", "%+5d", 123)); + T(expect_success("00123", "%05d", 123)); + T(expect_success("00123", "%005d", 123)); + + if (use_builtin_stdlib) { + /* + * TODO(b/239233116): These are incorrect and should be fixed. + */ + /* Fixed point. */ + T(expect_success("0.00123", "%.5d", 123)); + T(expect_success("12.3", "%2.1d", 123)); + /* Precision or width larger than buffer should fail. */ + T(expect(EC_ERROR_OVERFLOW, " 1", false, 4, "%5d", 123)); + T(expect(EC_ERROR_OVERFLOW, " ", false, 4, "%10d", 123)); + T(expect(EC_ERROR_OVERFLOW, "123", false, 4, "%-10d", 123)); + T(expect(EC_ERROR_OVERFLOW, "0.0", false, 4, "%.10d", 123)); + } else { + int ret; + + T(expect_success("00123", "%.5d", 123)); + T(expect_success("123", "%2.1d", 123)); + + /* + * From the man page: The functions snprintf() and vsnprintf() + * do not write more than size bytes (including the + * terminating null byte ('\0')). If the output was truncated + * due to this limit, then the return value is the number of + * characters (excluding the terminating null byte) which + * would have been written to the final string if enough + * space had been available. Thus, a return value of size or + * more means that the output was truncated. + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-truncation" + ret = SNPRINTF(output, 4, "%5d", 123); + TEST_ASSERT_ARRAY_EQ(output, " 1", 4); + TEST_EQ(ret, 5, "%d"); + + ret = SNPRINTF(output, 4, "%10d", 123); + TEST_ASSERT_ARRAY_EQ(output, " ", 4); + TEST_EQ(ret, 10, "%d"); + + ret = SNPRINTF(output, 4, "%-10d", 123); + TEST_ASSERT_ARRAY_EQ(output, "123", 4); + TEST_EQ(ret, 10, "%d"); + + ret = SNPRINTF(output, 4, "%.10d", 123); + TEST_ASSERT_ARRAY_EQ(output, "000", 4); + TEST_EQ(ret, 10, "%d"); +#pragma GCC diagnostic pop + } - T(expect_success(" 123", "%*d", 5, 123)); - T(expect_success(" +123", "%+*d", 5, 123)); - T(expect_success("00123", "%0*d", 5, 123)); - /* - * TODO(crbug.com/974084): This odd behavior should be fixed. - * T(expect_success("00123", "%00*d", 5, 123)); - * Actual: "ERROR" - */ - T(expect_success("0+123", "%+0*d", 5, 123)); - /* - * TODO(crbug.com/974084): This odd behavior should be fixed. - * T(expect_success("0+123", "%+00*d", 5, 123)); - * Actual: "ERROR" - */ + if (use_builtin_stdlib) { + /* + * TODO(b/239233116): These are incorrect and should be fixed. + */ + T(expect_success("0+123", "%+05d", 123)); + T(expect_success("0+123", "%+005d", 123)); + } else { + T(expect_success("+0123", "%+05d", 123)); + T(expect_success("+0123", "%+005d", 123)); + } + + T(expect_success(" 123", "%*d", 5, 123)); + T(expect_success(" +123", "%+*d", 5, 123)); + T(expect_success("00123", "%0*d", 5, 123)); - T(expect_success("123 ", "%-5d", 123)); - T(expect_success("+123 ", "%-+5d", 123)); - T(expect_success(err_str, "%+-5d", 123)); - T(expect_success("123 ", "%-05d", 123)); - T(expect_success("123 ", "%-005d", 123)); - T(expect_success("+123 ", "%-+05d", 123)); - T(expect_success("+123 ", "%-+005d", 123)); - - T(expect_success("0.00123", "%.5d", 123)); - T(expect_success("+0.00123", "%+.5d", 123)); - T(expect_success("0.00123", "%7.5d", 123)); - T(expect_success(" 0.00123", "%9.5d", 123)); - T(expect_success(" +0.00123", "%+9.5d", 123)); - - T(expect_success("123", "%u", 123)); - T(expect_success("4294967295", "%u", -1)); + if (use_builtin_stdlib) { + /* + * TODO(b/239233116): This incorrect and should be fixed. + */ + T(expect_success(err_str, "%00*d", 5, 123)); + } else { + T(expect_success("00123", "%00*d", 5, 123)); + } + + if (use_builtin_stdlib) { + /* + * TODO(b/239233116): This is incorrect and should be fixed. + */ + T(expect_success("0+123", "%+0*d", 5, 123)); + } else { + T(expect_success("+0123", "%+0*d", 5, 123)); + } + + if (use_builtin_stdlib) { + /* + * TODO(b/239233116): This is incorrect and should be fixed. + */ + T(expect_success(err_str, "%+00*d", 5, 123)); + } else { + T(expect_success("+0123", "%+00*d", 5, 123)); + } + + T(expect_success("123 ", "%-5d", 123)); + T(expect_success("+123 ", "%-+5d", 123)); + if (use_builtin_stdlib) { + /* + * TODO(b/239233116): This incorrect and should be fixed. + */ + T(expect_success(err_str, "%+-5d", 123)); + } else { + T(expect_success("+123 ", "%+-5d", 123)); + } + T(expect_success("123 ", "%-05d", 123)); + T(expect_success("123 ", "%-005d", 123)); + T(expect_success("+123 ", "%-+05d", 123)); + T(expect_success("+123 ", "%-+005d", 123)); + + if (use_builtin_stdlib) { + /* + * TODO(b/239233116): These are incorrect and should be fixed. + */ + T(expect_success("0.00123", "%.5d", 123)); + T(expect_success("+0.00123", "%+.5d", 123)); + T(expect_success("0.00123", "%7.5d", 123)); + T(expect_success(" 0.00123", "%9.5d", 123)); + T(expect_success(" +0.00123", "%+9.5d", 123)); + } else { + T(expect_success("00123", "%.5d", 123)); + T(expect_success("+00123", "%+.5d", 123)); + T(expect_success(" 00123", "%7.5d", 123)); + T(expect_success(" 00123", "%9.5d", 123)); + T(expect_success(" +00123", "%+9.5d", 123)); + } + + T(expect_success("123", "%u", 123)); + T(expect_success("4294967295", "%u", -1)); T(expect_success("18446744073709551615", "%llu", (uint64_t)-1)); - T(expect_success("0", "%x", 0)); - T(expect_success("0", "%X", 0)); - T(expect_success("5e", "%x", 0X5E)); - T(expect_success("5E", "%X", 0X5E)); + T(expect_success("0", "%x", 0)); + T(expect_success("0", "%X", 0)); + T(expect_success("5e", "%x", 0X5E)); + T(expect_success("5E", "%X", 0X5E)); + + return EC_SUCCESS; +} + +test_static int test_printf_long32_enabled(void) +{ + bool use_l32 = IS_ENABLED(CONFIG_PRINTF_LONG_IS_32BITS); + + if (IS_ENABLED(BOARD_BLOONCHIPPER) || IS_ENABLED(BOARD_DARTMONKEY)) + TEST_ASSERT(use_l32); + else + TEST_ASSERT(!use_l32); + return EC_SUCCESS; +} + +test_static int test_vsnprintf_32bit_long_supported(void) +{ + long long_min = INT32_MIN; + long long_max = INT32_MAX; + unsigned long ulong_max = UINT32_MAX; + char const *long_min_str = "-2147483648"; + char const *long_max_str = "2147483647"; + char const *ulong_max_str = "4294967295"; + char const *long_min_hexstr = "80000000"; + char const *long_max_hexstr = "7fffffff"; + char const *ulong_max_hexstr = "ffffffff"; + + T(expect_success(long_min_str, "%ld", long_min)); + T(expect_success(long_min_hexstr, "%lx", long_min)); + T(expect_success(long_max_str, "%ld", long_max)); + T(expect_success(long_max_hexstr, "%lx", long_max)); + T(expect_success(ulong_max_str, "%lu", ulong_max)); + T(expect_success(ulong_max_hexstr, "%lx", ulong_max)); + T(expect_success(long_max_str, "%ld", long_max)); + + T(expect_success(" +123", "%+*ld", 5, 123)); + T(expect_success("00000123", "%08lu", 123)); + T(expect_success("131415", "%d%lu%d", 13, 14L, 15)); /* - * %l is deprecated on 32-bit systems (see crbug.com/984041), but is - * is still functional on 64-bit systems. + * %i and %li are only supported via the CONFIG_PRINTF_LONG_IS_32BITS + * configuration (see https://issuetracker.google.com/issues/172210614). */ - if (sizeof(long) == sizeof(uint32_t)) { - T(expect_success(err_str, "%lx", 0x7b)); - T(expect_success(err_str, "%08lu", 0x7b)); - T(expect_success("13ERROR", "%d%lu", 13, 14)); + T(expect_success("123", "%i", 123)); + T(expect_success("123", "%li", 123)); + + return EC_SUCCESS; +} + +test_static int test_vsnprintf_64bit_long_supported(void) +{ + /* These lines are only executed when sizeof(long) is 64-bits but are + * still compiled by systems with 32-bit longs, so the casts are needed + * to avoid compilation errors. + */ + long long_min = (long)INT64_MIN; + long long_max = (long)INT64_MAX; + unsigned long ulong_max = (unsigned long)UINT64_MAX; + char const *long_min_str = "-9223372036854775808"; + char const *long_max_str = "9223372036854775807"; + char const *ulong_max_str = "18446744073709551615"; + char const *long_min_hexstr = "8000000000000000"; + char const *long_max_hexstr = "7fffffffffffffff"; + char const *ulong_max_hexstr = "ffffffffffffffff"; + + T(expect_success(long_min_str, "%ld", long_min)); + T(expect_success(long_min_hexstr, "%lx", long_min)); + T(expect_success(long_max_str, "%ld", long_max)); + T(expect_success(long_max_hexstr, "%lx", long_max)); + T(expect_success(ulong_max_str, "%lu", ulong_max)); + T(expect_success(ulong_max_hexstr, "%lx", ulong_max)); + T(expect_success(long_max_str, "%ld", long_max)); + + T(expect_success(" +123", "%+*ld", 5, 123)); + T(expect_success("00000123", "%08lu", 123)); + T(expect_success("131415", "%d%lu%d", 13, 14L, 15)); + + if (use_builtin_stdlib) { + /* + * TODO(b/239233116): These are incorrect and should be fixed. + */ + T(expect_success(err_str, "%i", 123)); + T(expect_success(err_str, "%li", 123)); } else { - T(expect_success("7b", "%lx", 0x7b)); - T(expect_success("00000123", "%08lu", 123)); - T(expect_success("131415", "%d%lu%d", 13, 14L, 15)); + T(expect_success("123", "%i", 123)); + T(expect_success("123", "%li", 123)); } return EC_SUCCESS; } +test_static int test_vsnprintf_long_not_supported(void) +{ + T(expect_success(err_str, "%ld", 0x7b)); + T(expect_success(err_str, "%li", 0x7b)); + T(expect_success(err_str, "%lu", 0x7b)); + T(expect_success(err_str, "%lx", 0x7b)); + T(expect_success(err_str, "%08lu", 123)); + T(expect_success("13ERROR", "%d%lu%d", 13, 14L, 15)); + + T(expect_success(err_str, "%i", 123)); + T(expect_success(err_str, "%li", 123)); + + return EC_SUCCESS; +} + +test_static int test_vsnprintf_long(void) +{ + /* + * %l is functional on 64-bit systems but is not supported on 32-bit + * systems (see https://issuetracker.google.com/issues/172210614) unless + * explicitly enabled via configuration. + */ + if (IS_ENABLED(CONFIG_PRINTF_LONG_IS_32BITS)) + return test_vsnprintf_32bit_long_supported(); + else if (sizeof(long) == sizeof(uint64_t)) + return test_vsnprintf_64bit_long_supported(); + else + return test_vsnprintf_long_not_supported(); +} + test_static int test_vsnprintf_pointers(void) { void *ptr = (void *)0x55005E00; - unsigned int val = 0; - - T(expect_success("55005e00", "%pP", ptr)); - T(expect_success(err_str, "%P", ptr)); - /* %p by itself is invalid */ - T(expect(EC_ERROR_INVAL, NO_BYTES_TOUCHED, - false, 0, "%p")); - /* %p with an unknown suffix is invalid */ - T(expect(EC_ERROR_INVAL, NO_BYTES_TOUCHED, - false, 0, "%p ")); - /* %p with an unknown suffix is invalid */ - T(expect(EC_ERROR_INVAL, NO_BYTES_TOUCHED, - false, 0, "%pQ")); - - /* Test %pb, binary format */ - T(expect_success("0", "%pb", BINARY_VALUE(val, 0))); - val = 0x5E; - T(expect_success("1011110", "%pb", BINARY_VALUE(val, 0))); - T(expect_success("0000000001011110", "%pb", BINARY_VALUE(val, 16))); - val = 0x12345678; - T(expect_success("10010001101000101011001111000", "%pb", - BINARY_VALUE(val, 0))); - val = 0xFEDCBA90; - /* Test a number that makes the longest string possible */ - T(expect_success("11111110110111001011101010010000", "%pb", - BINARY_VALUE(val, 0))); + + if (use_builtin_stdlib) { + /* + * TODO(b/239233116): This incorrect and should be fixed. + */ + T(expect_success("55005e00", "%p", ptr)); + } else { + T(expect_success("0x55005e00", "%p", ptr)); + } + return EC_SUCCESS; } test_static int test_vsnprintf_chars(void) { - T(expect_success("a", "%c", 'a')); - T(expect_success("*", "%c", '*')); + T(expect_success("a", "%c", 'a')); + T(expect_success("*", "%c", '*')); return EC_SUCCESS; } test_static int test_vsnprintf_strings(void) { - T(expect_success("abc", "%s", "abc")); - T(expect_success(" abc", "%5s", "abc")); - T(expect_success("abc", "%0s", "abc")); - T(expect_success("abc ", "%-5s", "abc")); - T(expect_success("abc", "%*s", 0, "abc")); - T(expect_success("a", "%.1s", "abc")); - T(expect_success("a", "%.*s", 1, "abc")); - T(expect_success("", "%.0s", "abc")); - T(expect_success("", "%.*s", 0, "abc")); - /* - * TODO(crbug.com/974084): - * Ignoring the padding parameter is slightly - * odd behavior and could use a review. - */ - T(expect_success("ab", "%5.2s", "abc")); - T(expect_success("abc", "%.4s", "abc")); + T(expect_success("abc", "%s", "abc")); + T(expect_success(" abc", "%5s", "abc")); + T(expect_success("abc", "%0s", "abc")); + T(expect_success("abc ", "%-5s", "abc")); + T(expect_success("abc", "%*s", 0, "abc")); + T(expect_success("a", "%.1s", "abc")); + T(expect_success("a", "%.*s", 1, "abc")); + T(expect_success("", "%.0s", "abc")); + T(expect_success("", "%.*s", 0, "abc")); + if (use_builtin_stdlib) { + /* + * TODO(b/239233116): This incorrect and should be fixed. + */ + T(expect_success("ab", "%5.2s", "abc")); + } else { + T(expect_success(" ab", "%5.2s", "abc")); + } + T(expect_success("abc", "%.4s", "abc")); /* * Given a malformed string (address 0x1 is a good example), * if we ask for zero precision, expect no bytes to be read * from the malformed address and a blank output string. */ - T(expect_success("", "%.0s", (char *)1)); + T(expect_success("", "%.0s", (char *)1)); return EC_SUCCESS; } -test_static int test_vsnprintf_timestamps(void) +test_static int test_snprintf_timestamp(void) { + char str[PRINTF_TIMESTAMP_BUF_SIZE]; + int size; + int ret; uint64_t ts = 0; - T(expect_success("0.000000", "%pT", &ts)); + /* Success cases. */ + + ret = snprintf_timestamp(str, sizeof(str), ts); + TEST_EQ(ret, 8, "%d"); + TEST_ASSERT_ARRAY_EQ(str, "0.000000", sizeof("0.000000")); + ts = 123456; - T(expect_success("0.123456", "%pT", &ts)); + ret = snprintf_timestamp(str, sizeof(str), ts); + TEST_EQ(ret, 8, "%d"); + TEST_ASSERT_ARRAY_EQ(str, "0.123456", sizeof("0.123456")); + ts = 9999999000000; - T(expect_success("9999999.000000", "%pT", &ts)); + ret = snprintf_timestamp(str, sizeof(str), ts); + TEST_EQ(ret, 14, "%d"); + TEST_ASSERT_ARRAY_EQ(str, "9999999.000000", sizeof("9999999.000000")); + + ts = UINT64_MAX; + ret = snprintf_timestamp(str, sizeof(str), ts); + TEST_EQ(ret, 21, "%d"); + TEST_ASSERT_ARRAY_EQ(str, "18446744073709.551615", + sizeof("18446744073709.551615")); + + /* Error cases. */ + + /* Buffer is too small by one. */ + size = 21; + ts = UINT64_MAX; + str[0] = 'f'; + ret = snprintf_timestamp(str, size, ts); + TEST_EQ(ret, -EC_ERROR_OVERFLOW, "%d"); + TEST_EQ(str[0], '\0', "%d"); + + /* Size is zero. */ + size = 0; + ts = UINT64_MAX; + str[0] = 'f'; + ret = snprintf_timestamp(str, size, ts); + TEST_EQ(ret, -EC_ERROR_INVAL, "%d"); + TEST_EQ(str[0], 'f', "%d"); + + /* Size is one. */ + size = 1; + ts = UINT64_MAX; + str[0] = 'f'; + ret = snprintf_timestamp(str, size, ts); + TEST_EQ(ret, -EC_ERROR_OVERFLOW, "%d"); + TEST_EQ(str[0], '\0', "%d"); + return EC_SUCCESS; } -test_static int test_vsnprintf_hexdump(void) +test_static int test_snprintf_hex_buffer(void) { - const char bytes[] = {0x00, 0x5E}; + const uint8_t bytes[] = { 0xAB, 0x5E }; + char str_buf[5]; + int rv; + + /* Success cases. */ + + memset(str_buf, 0xff, sizeof(str_buf)); + rv = snprintf_hex_buffer(str_buf, sizeof(str_buf), HEX_BUF(bytes, 2)); + TEST_ASSERT_ARRAY_EQ(str_buf, "ab5e", sizeof("ab5e")); + TEST_EQ(rv, 4, "%d"); + + memset(str_buf, 0xff, sizeof(str_buf)); + rv = snprintf_hex_buffer(str_buf, sizeof(str_buf), HEX_BUF(bytes, 0)); + TEST_ASSERT_ARRAY_EQ(str_buf, "", sizeof("")); + TEST_EQ(rv, 0, "%d"); + + memset(str_buf, 0xff, sizeof(str_buf)); + rv = snprintf_hex_buffer(str_buf, sizeof(str_buf), HEX_BUF(bytes, 1)); + TEST_ASSERT_ARRAY_EQ(str_buf, "ab", sizeof("ab")); + TEST_EQ(rv, 2, "%d"); + + /* Error cases. */ + + /* Zero for buffer size argument is an error. */ + memset(str_buf, 0xff, sizeof(str_buf)); + TEST_ASSERT_MEMSET(str_buf, (char)0xff, sizeof(str_buf)); + rv = snprintf_hex_buffer(str_buf, 0, HEX_BUF(bytes, 2)); + TEST_EQ(rv, -EC_ERROR_INVAL, "%d"); + TEST_ASSERT_MEMSET(str_buf, (char)0xff, sizeof(str_buf)); + + /* Buffer only has space for terminating '\0'. */ + memset(str_buf, 0xff, sizeof(str_buf)); + TEST_ASSERT_MEMSET(str_buf, (char)0xff, sizeof(str_buf)); + rv = snprintf_hex_buffer(str_buf, 1, HEX_BUF(bytes, 1)); + TEST_ASSERT_ARRAY_EQ(str_buf, "", sizeof("")); + TEST_EQ(rv, -EC_ERROR_OVERFLOW, "%d"); + + /* Buffer only has space for one character and '\0'. */ + memset(str_buf, 0xff, sizeof(str_buf)); + TEST_ASSERT_MEMSET(str_buf, (char)0xff, sizeof(str_buf)); + rv = snprintf_hex_buffer(str_buf, 2, HEX_BUF(bytes, 1)); + TEST_ASSERT_ARRAY_EQ(str_buf, "a", sizeof("a")); + TEST_EQ(rv, -EC_ERROR_OVERFLOW, "%d"); - T(expect_success("005e", "%ph", HEX_BUF(bytes, 2))); - T(expect_success("", "%ph", HEX_BUF(bytes, 0))); - T(expect_success("00", "%ph", HEX_BUF(bytes, 1))); return EC_SUCCESS; } test_static int test_vsnprintf_combined(void) { - T(expect_success("abc", "%c%s", 'a', "bc")); - T(expect_success("12\tbc", "%d\t%s", 12, "bc")); + T(expect_success("abc", "%c%s", 'a', "bc")); + T(expect_success("12\tbc", "%d\t%s", 12, "bc")); + return EC_SUCCESS; +} + +test_static int test_uint64_to_str(void) +{ + /* Longest uin64 in decimal = 20, plus terminating NUL. */ + char buf[21]; + char *str; + + str = uint64_to_str(buf, sizeof(buf), /*val=*/0, /*precision=*/-1, + /*base=*/10, /*uppercase=*/false); + TEST_ASSERT_ARRAY_EQ(str, "0", sizeof("0")); + + str = uint64_to_str(buf, sizeof(buf), /*val=*/UINT64_MAX, + /*precision=*/-1, /*base=*/10, + /*uppercase=*/false); + TEST_ASSERT_ARRAY_EQ(str, "18446744073709551615", + sizeof("18446744073709551615")); + + /* Buffer too small by 1. */ + str = uint64_to_str(buf, /*buf_len=*/20, /*val=*/UINT64_MAX, + /*precision=*/-1, /*base=*/10, /*uppercase=*/false); + TEST_ASSERT(str == NULL); + + /* lower case hex */ + str = uint64_to_str(buf, sizeof(buf), /*val=*/0, /*precision=*/-1, + /*base=*/16, /*uppercase=*/false); + TEST_ASSERT_ARRAY_EQ(str, "0", sizeof("0")); + + /* lower case hex */ + str = uint64_to_str(buf, sizeof(buf), /*val=*/UINT64_MAX, + /*precision=*/-1, /*base=*/16, + /*uppercase=*/false); + TEST_ASSERT_ARRAY_EQ(str, "ffffffffffffffff", + sizeof("fffffffffffffff")); + + /* upper case hex */ + str = uint64_to_str(buf, sizeof(buf), /*val=*/0, /*precision=*/-1, + /*base=*/16, /*uppercase=*/true); + TEST_ASSERT_ARRAY_EQ(str, "0", sizeof("0")); + + str = uint64_to_str(buf, sizeof(buf), /*val=*/UINT64_MAX, + /*precision=*/-1, /*base=*/16, + /*uppercase=*/true); + TEST_ASSERT_ARRAY_EQ(str, "FFFFFFFFFFFFFFFF", + sizeof("FFFFFFFFFFFFFFF")); + + /* precision 0 */ + str = uint64_to_str(buf, sizeof(buf), /*val=*/1, /*precision=*/0, + /*base=*/10, /*uppercase=*/false); + TEST_ASSERT_ARRAY_EQ(str, "1.", sizeof("1.")); + + /* precision 6 */ + str = uint64_to_str(buf, sizeof(buf), /*val=*/1, /*precision=*/6, + /*base=*/10, /*uppercase=*/false); + TEST_ASSERT_ARRAY_EQ(str, "0.000001", sizeof("0.000001")); + + /* Reduced precision due to buffer that is too small. */ + str = uint64_to_str(buf, /*buf_len=*/8, /*val=*/1, /*precision=*/6, + /*base=*/10, /*uppercase=*/false); + TEST_ASSERT_ARRAY_EQ(str, "0.00001", sizeof("0.00001")); + + /* + * Reduced precision due to buffer that is too small, so precision + * gets changed to 0. + */ + str = uint64_to_str(buf, /*buf_len=*/3, /*val=*/1, /*precision=*/6, + /*base=*/10, /*uppercase=*/false); + TEST_ASSERT_ARRAY_EQ(str, "1.", sizeof("1.")); + + /* Precision is unable to fit in provided buffer. */ + str = uint64_to_str(buf, /*buf_len=*/2, /*val=*/1, /*precision=*/6, + /*base=*/10, /*uppercase=*/false); + TEST_ASSERT(str == NULL); + + /* Negative base. */ + str = uint64_to_str(buf, sizeof(buf), /*val=*/0, /*precision=*/-1, + /*base=*/-1, /*uppercase=*/false); + TEST_ASSERT(str == NULL); + + /* Base zero. */ + str = uint64_to_str(buf, sizeof(buf), /*val=*/1, /*precision=*/-1, + /*base=*/0, /*uppercase=*/false); + TEST_ASSERT(str == NULL); + + /* Base one. */ + str = uint64_to_str(buf, sizeof(buf), /*val=*/1, /*precision=*/-1, + /*base=*/1, /*uppercase=*/false); + TEST_ASSERT(str == NULL); + + /* Buffer size 1. */ + str = uint64_to_str(buf, /*buf_len=*/1, /*val=*/0, /*precision=*/-1, + /*base=*/10, /*uppercase=*/false); + TEST_ASSERT(str == NULL); + + /* Buffer size 0. */ + str = uint64_to_str(buf, /*buf_len=*/0, /*val=*/0, /*precision=*/-1, + /*base=*/10, /*uppercase=*/false); + TEST_ASSERT(str == NULL); + + /* Buffer size -1. */ + str = uint64_to_str(buf, /*buf_len=*/-1, /*val=*/0, /*precision=*/-1, + /*base=*/10, /*uppercase=*/false); + TEST_ASSERT(str == NULL); + return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); RUN_TEST(test_vsnprintf_args); RUN_TEST(test_vsnprintf_int); + RUN_TEST(test_printf_long32_enabled); + RUN_TEST(test_vsnprintf_long); RUN_TEST(test_vsnprintf_pointers); RUN_TEST(test_vsnprintf_chars); RUN_TEST(test_vsnprintf_strings); - RUN_TEST(test_vsnprintf_timestamps); - RUN_TEST(test_vsnprintf_hexdump); RUN_TEST(test_vsnprintf_combined); + RUN_TEST(test_uint64_to_str); + RUN_TEST(test_snprintf_timestamp); + RUN_TEST(test_snprintf_hex_buffer); test_print_result(); } diff --git a/test/printf.tasklist b/test/printf.tasklist index 9fc1a80f4d..844ddb6c10 100644 --- a/test/printf.tasklist +++ b/test/printf.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/queue.c b/test/queue.c index e0be1b5d9a..c21e00a050 100644 --- a/test/queue.c +++ b/test/queue.c @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -40,7 +40,7 @@ static int test_queue8_init(void) static int test_queue8_fifo(void) { - char buf1[3] = {1, 2, 3}; + char buf1[3] = { 1, 2, 3 }; char buf2[3]; TEST_ASSERT(queue_add_units(&test_queue8, buf1 + 0, 1) == 1); @@ -55,7 +55,7 @@ static int test_queue8_fifo(void) static int test_queue8_multiple_units_add(void) { - char buf1[5] = {1, 2, 3, 4, 5}; + char buf1[5] = { 1, 2, 3, 4, 5 }; char buf2[5]; TEST_ASSERT(queue_space(&test_queue8) >= 5); @@ -68,7 +68,7 @@ static int test_queue8_multiple_units_add(void) static int test_queue8_removal(void) { - char buf1[5] = {1, 2, 3, 4, 5}; + char buf1[5] = { 1, 2, 3, 4, 5 }; char buf2[5]; TEST_ASSERT(queue_add_units(&test_queue8, buf1, 5) == 5); @@ -105,7 +105,7 @@ static int test_queue8_removal(void) static int test_queue8_peek(void) { - char buf1[5] = {1, 2, 3, 4, 5}; + char buf1[5] = { 1, 2, 3, 4, 5 }; char buf2[5]; TEST_ASSERT(queue_add_units(&test_queue8, buf1, 5) == 5); @@ -122,7 +122,7 @@ static int test_queue8_peek(void) static int test_queue2_odd_even(void) { - uint16_t buf1[3] = {1, 2, 3}; + uint16_t buf1[3] = { 1, 2, 3 }; uint16_t buf2[3]; TEST_ASSERT(queue_add_units(&test_queue2, buf1, 1) == 1); @@ -147,7 +147,7 @@ static int test_queue2_odd_even(void) static int test_queue8_chunks(void) { - static uint8_t const data[3] = {1, 2, 3}; + static uint8_t const data[3] = { 1, 2, 3 }; struct queue_chunk chunk; chunk = queue_get_write_chunk(&test_queue8, 0); @@ -161,7 +161,7 @@ static int test_queue8_chunks(void) chunk = queue_get_read_chunk(&test_queue8); TEST_ASSERT(chunk.count == 3); - TEST_ASSERT_ARRAY_EQ((uint8_t *) chunk.buffer, data, 3); + TEST_ASSERT_ARRAY_EQ((uint8_t *)chunk.buffer, data, 3); TEST_ASSERT(queue_advance_head(&test_queue8, 3) == 3); TEST_ASSERT(queue_is_empty(&test_queue8)); @@ -171,7 +171,7 @@ static int test_queue8_chunks(void) static int test_queue8_chunks_wrapped(void) { - static uint8_t const data[3] = {1, 2, 3}; + static uint8_t const data[3] = { 1, 2, 3 }; /* Move near the end of the queue */ TEST_ASSERT(queue_advance_tail(&test_queue8, 6) == 6); @@ -213,7 +213,7 @@ static int test_queue8_chunks_wrapped(void) static int test_queue8_chunks_full(void) { - static uint8_t const data[8] = {1, 2, 3, 4, 5, 6, 7, 8}; + static uint8_t const data[8] = { 1, 2, 3, 4, 5, 6, 7, 8 }; struct queue_chunk chunk; /* Move near the end of the queue */ @@ -230,7 +230,7 @@ static int test_queue8_chunks_full(void) chunk = queue_get_read_chunk(&test_queue8); TEST_ASSERT(chunk.count == 2); - TEST_ASSERT_ARRAY_EQ((uint8_t *) chunk.buffer, data, 2); + TEST_ASSERT_ARRAY_EQ((uint8_t *)chunk.buffer, data, 2); /* Signal that we have read both units */ TEST_ASSERT(queue_advance_head(&test_queue8, 2) == 2); @@ -239,8 +239,7 @@ static int test_queue8_chunks_full(void) chunk = queue_get_read_chunk(&test_queue8); TEST_ASSERT(chunk.count == 6); - TEST_ASSERT_ARRAY_EQ((uint8_t *) chunk.buffer, data + 2, 6); - + TEST_ASSERT_ARRAY_EQ((uint8_t *)chunk.buffer, data + 2, 6); return EC_SUCCESS; } @@ -287,12 +286,12 @@ static int test_queue8_chunks_offset(void) /* Check offsetting by 1 */ TEST_ASSERT(queue_get_write_chunk(&test_queue8, 1).count == 7); TEST_ASSERT(queue_get_write_chunk(&test_queue8, 1).buffer == - test_queue8.buffer + 1); + test_queue8.buffer + 1); /* Check offsetting by 4 */ TEST_ASSERT(queue_get_write_chunk(&test_queue8, 4).count == 4); TEST_ASSERT(queue_get_write_chunk(&test_queue8, 4).buffer == - test_queue8.buffer + 4); + test_queue8.buffer + 4); /* Check offset wrapping around */ TEST_ASSERT(queue_get_write_chunk(&test_queue8, 10).count == 0); @@ -309,12 +308,12 @@ static int test_queue8_chunks_offset(void) /* Get writable chunk to right of tail. */ TEST_ASSERT(queue_get_write_chunk(&test_queue8, 2).count == 2); TEST_ASSERT(queue_get_write_chunk(&test_queue8, 2).buffer == - test_queue8.buffer + 6); + test_queue8.buffer + 6); /* Get writable chunk wrapped and before head. */ TEST_ASSERT(queue_get_write_chunk(&test_queue8, 4).count == 2); TEST_ASSERT(queue_get_write_chunk(&test_queue8, 4).buffer == - test_queue8.buffer); + test_queue8.buffer); /* Check offsetting into non-writable memory. */ TEST_ASSERT(queue_get_write_chunk(&test_queue8, 6).count == 0); @@ -415,7 +414,7 @@ void before_test(void) queue_init(&test_queue8); } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/queue.tasklist b/test/queue.tasklist index da0ab6211a..100cb6b5bd 100644 --- a/test/queue.tasklist +++ b/test/queue.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/rgb_keyboard.c b/test/rgb_keyboard.c index a8da437f7c..d32215e649 100644 --- a/test/rgb_keyboard.c +++ b/test/rgb_keyboard.c @@ -1,4 +1,4 @@ -/* Copyright 2022 The Chromium OS Authors. All rights reserved. +/* Copyright 2022 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -51,12 +51,11 @@ const uint8_t rgbkbd_count = ARRAY_SIZE(rgbkbds); const uint8_t rgbkbd_hsize = RGB_GRID0_COL + RGB_GRID1_COL; const uint8_t rgbkbd_vsize = RGB_GRID0_ROW; +enum ec_rgbkbd_type rgbkbd_type = EC_RGBKBD_TYPE_UNKNOWN; + const uint8_t rgbkbd_map[] = { - RGBKBD_DELM, - RGBKBD_COORD(1, 2), RGBKBD_DELM, - RGBKBD_COORD(3, 4), RGBKBD_COORD(5, 6), RGBKBD_DELM, - RGBKBD_DELM, - RGBKBD_DELM, + RGBKBD_DELM, RGBKBD_COORD(1, 2), RGBKBD_DELM, RGBKBD_COORD(3, 4), + RGBKBD_COORD(5, 6), RGBKBD_DELM, RGBKBD_DELM, RGBKBD_DELM, }; const size_t rgbkbd_map_size = ARRAY_SIZE(rgbkbd_map); @@ -72,9 +71,13 @@ static struct rgbkbd_mock { uint32_t gcc_level; } mock_state; -__override void board_kblight_init(void) {} +__override void board_kblight_init(void) +{ +} -__override void board_kblight_shutdown(void) {} +__override void board_kblight_shutdown(void) +{ +} void before_test(void) { @@ -106,7 +109,6 @@ static int test_drv_set_color(struct rgbkbd *ctx, uint8_t offset, return EC_SUCCESS; } - static int test_drv_set_scale(struct rgbkbd *ctx, uint8_t offset, struct rgb_s scale, uint8_t len) { @@ -130,8 +132,8 @@ static int test_rgbkbd_map(void) rgbkbd_init_lookup_table(); led.u8 = rgbkbd_map[rgbkbd_table[0]]; - zassert_equal(RGBKBD_COORD(led.coord.x, led.coord.y), - RGBKBD_DELM, "key[0] -> None"); + zassert_equal(RGBKBD_COORD(led.coord.x, led.coord.y), RGBKBD_DELM, + "key[0] -> None"); led.u8 = rgbkbd_map[rgbkbd_table[1]]; zassert_equal(RGBKBD_COORD(led.coord.x, led.coord.y), @@ -145,12 +147,12 @@ static int test_rgbkbd_map(void) RGBKBD_COORD(5, 6), "key[2] -> LED(5,6)"); led.u8 = rgbkbd_map[rgbkbd_table[3]]; - zassert_equal(RGBKBD_COORD(led.coord.x, led.coord.y), - RGBKBD_DELM, "key[3] -> None"); + zassert_equal(RGBKBD_COORD(led.coord.x, led.coord.y), RGBKBD_DELM, + "key[3] -> None"); led.u8 = rgbkbd_map[rgbkbd_table[4]]; - zassert_equal(RGBKBD_COORD(led.coord.x, led.coord.y), - RGBKBD_DELM, "key[4] -> None"); + zassert_equal(RGBKBD_COORD(led.coord.x, led.coord.y), RGBKBD_DELM, + "key[4] -> None"); return EC_SUCCESS; } @@ -210,7 +212,7 @@ static int test_rgbkbd_startup(void) return EC_SUCCESS; } -int cc_rgb(int argc, char **argv); +int cc_rgb(int argc, const char **argv); extern enum ec_rgbkbd_demo demo; static int test_rgbkbd_console_command(void) @@ -220,10 +222,10 @@ static int test_rgbkbd_console_command(void) char buf[8]; int i, x, y, r, c; uint8_t offset; - char *argv_demo[] = {"rgbk", "demo", "0"}; - char *argv_gcc[] = {"rgbk", "100"}; - char *argv_color[] = {"rgbk", buf, "0x010203"}; - char *argv_all[] = {"rgbk", "all", "0x010203"}; + const char *argv_demo[] = { "rgbk", "demo", "0" }; + const char *argv_gcc[] = { "rgbk", "100" }; + const char *argv_color[] = { "rgbk", buf, "0x010203" }; + const char *argv_all[] = { "rgbk", "all", "0x010203" }; /* Test 'rgbk demo 0'. */ before_test(); @@ -248,8 +250,8 @@ static int test_rgbkbd_console_command(void) offset = rgbkbd_vsize * x + y; sprintf(buf, "%d,%d", x, y); argc = ARRAY_SIZE(argv_color); - zassert_equal(cc_rgb(argc, argv_color), EC_SUCCESS, - "rgbk %s 0x010203", buf); + zassert_equal(cc_rgb(argc, argv_color), EC_SUCCESS, "rgbk %s 0x010203", + buf); zassert_equal(ctx->buf[offset].r, 1, "R = 1"); zassert_equal(ctx->buf[offset].g, 2, "G = 2"); zassert_equal(ctx->buf[offset].b, 3, "B = 3"); @@ -261,8 +263,8 @@ static int test_rgbkbd_console_command(void) y = -1; sprintf(buf, "%d,%d", x, y); argc = ARRAY_SIZE(argv_color); - zassert_equal(cc_rgb(argc, argv_color), EC_SUCCESS, - "rgbk %s 1 2 3", buf); + zassert_equal(cc_rgb(argc, argv_color), EC_SUCCESS, "rgbk %s 1 2 3", + buf); for (r = 0; r < rgbkbd_vsize; r++) { offset = rgbkbd_vsize * x + r; zassert_equal(ctx->buf[offset].r, 1, "R = 1"); @@ -276,8 +278,8 @@ static int test_rgbkbd_console_command(void) y = 1; sprintf(buf, "%d,%d", x, y); argc = ARRAY_SIZE(argv_color); - zassert_equal(cc_rgb(argc, argv_color), EC_SUCCESS, - "rgbk %s 1 2 3", buf); + zassert_equal(cc_rgb(argc, argv_color), EC_SUCCESS, "rgbk %s 1 2 3", + buf); for (c = 0; c < rgbkbd_hsize; c++) { ctx = &rgbkbds[c / rgbkbds[0].cfg->col_len]; offset = rgbkbd_vsize * (c % ctx->cfg->col_len) + y; @@ -340,7 +342,7 @@ static int test_rgbkbd_rotate_color(void) static int test_rgbkbd_demo_flow(void) { struct rgb_s copy[ARRAY_SIZE(rgbkbds)][RGB_GRID0_COL * RGB_GRID0_ROW]; - char *argv_demo[] = {"rgbk", "demo", "1"}; + const char *argv_demo[] = { "rgbk", "demo", "1" }; struct rgb_s *p; int argc; struct rgbkbd *ctx; @@ -385,7 +387,7 @@ static int test_rgbkbd_demo_flow(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { RUN_TEST(test_rgbkbd_startup); RUN_TEST(test_rgbkbd_console_command); diff --git a/test/rgb_keyboard.tasklist b/test/rgb_keyboard.tasklist index fb85751609..9b25deacfb 100644 --- a/test/rgb_keyboard.tasklist +++ b/test/rgb_keyboard.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2022 The Chromium OS Authors. All rights reserved. +/* Copyright 2022 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/rollback.c b/test/rollback.c index 2038333311..e2c1070ef4 100644 --- a/test/rollback.c +++ b/test/rollback.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -47,7 +47,7 @@ test_static int read_rollback_region(const struct rollback_info *info, for (i = 0; i < info->region_size_bytes; i++) { if (crec_flash_read(offset + i, sizeof(data), &data) == - EC_SUCCESS) + EC_SUCCESS) bytes_read++; } @@ -105,7 +105,7 @@ test_static int test_lock_rollback_region_1(void) return _test_lock_rollback(&rollback_info, 1); } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { if (argc < 2) { ccprintf("usage: runtest [region0|region1]\n"); diff --git a/test/rollback.tasklist b/test/rollback.tasklist index 51734f058d..a1f1a94e2d 100644 --- a/test/rollback.tasklist +++ b/test/rollback.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/rollback_entropy.c b/test/rollback_entropy.c index 788fab2572..50a8cb4701 100644 --- a/test/rollback_entropy.c +++ b/test/rollback_entropy.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -12,9 +12,7 @@ static const uint32_t VALID_ROLLBACK_COOKIE = 0x0b112233; static const uint32_t UNINITIALIZED_ROLLBACK_COOKIE = 0xffffffff; -static const uint8_t FAKE_ENTROPY[] = { - 0xff, 0xff, 0xff, 0xff -}; +static const uint8_t FAKE_ENTROPY[] = { 0xff, 0xff, 0xff, 0xff }; /* * Generated by concatenating 32-bytes (256-bits) of zeros with the 4 bytes @@ -26,13 +24,12 @@ static const uint8_t FAKE_ENTROPY[] = { * * 890ed82cf09f22243bdc4252e4d79c8a9810c1391f455dce37a7b732eb0a0e4f */ -#define EXPECTED_SECRET \ - 0x89, 0x0e, 0xd8, 0x2c, 0xf0, 0x9f, 0x22, 0x24, 0x3b, 0xdc, 0x42, \ - 0x52, 0xe4, 0xd7, 0x9c, 0x8a, 0x98, 0x10, 0xc1, 0x39, 0x1f, 0x45, \ - 0x5d, 0xce, 0x37, 0xa7, 0xb7, 0x32, 0xeb, 0x0a, 0x0e, 0x4f -__maybe_unused static const uint8_t _EXPECTED_SECRET[] = { - EXPECTED_SECRET -}; +#define EXPECTED_SECRET \ + 0x89, 0x0e, 0xd8, 0x2c, 0xf0, 0x9f, 0x22, 0x24, 0x3b, 0xdc, 0x42, \ + 0x52, 0xe4, 0xd7, 0x9c, 0x8a, 0x98, 0x10, 0xc1, 0x39, 0x1f, \ + 0x45, 0x5d, 0xce, 0x37, 0xa7, 0xb7, 0x32, 0xeb, 0x0a, 0x0e, \ + 0x4f +__maybe_unused static const uint8_t _EXPECTED_SECRET[] = { EXPECTED_SECRET }; BUILD_ASSERT(sizeof(_EXPECTED_SECRET) == CONFIG_ROLLBACK_SECRET_SIZE); /* @@ -45,22 +42,20 @@ BUILD_ASSERT(sizeof(_EXPECTED_SECRET) == CONFIG_ROLLBACK_SECRET_SIZE); * * b5d2c08b1f9109ac5c67de15486f0ac267ef9501bd9f646f4ea80085cb08284c */ -#define EXPECTED_SECRET2 \ - 0xb5, 0xd2, 0xc0, 0x8b, 0x1f, 0x91, 0x09, 0xac, 0x5c, 0x67, 0xde, \ - 0x15, 0x48, 0x6f, 0x0a, 0xc2, 0x67, 0xef, 0x95, 0x01, 0xbd, 0x9f, \ - 0x64, 0x6f, 0x4e, 0xa8, 0x00, 0x85, 0xcb, 0x08, 0x28, 0x4c -__maybe_unused static const uint8_t _EXPECTED_SECRET2[] = { - EXPECTED_SECRET2 -}; +#define EXPECTED_SECRET2 \ + 0xb5, 0xd2, 0xc0, 0x8b, 0x1f, 0x91, 0x09, 0xac, 0x5c, 0x67, 0xde, \ + 0x15, 0x48, 0x6f, 0x0a, 0xc2, 0x67, 0xef, 0x95, 0x01, 0xbd, \ + 0x9f, 0x64, 0x6f, 0x4e, 0xa8, 0x00, 0x85, 0xcb, 0x08, 0x28, \ + 0x4c +__maybe_unused static const uint8_t _EXPECTED_SECRET2[] = { EXPECTED_SECRET2 }; BUILD_ASSERT(sizeof(_EXPECTED_SECRET2) == CONFIG_ROLLBACK_SECRET_SIZE); -#define EXPECTED_UNINITIALIZED_ROLLBACK_SECRET \ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \ - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, -__maybe_unused static const uint8_t -_EXPECTED_UNINITIALIZED_ROLLBACK_SECRET[] = { +#define EXPECTED_UNINITIALIZED_ROLLBACK_SECRET \ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, \ + 0xff, +__maybe_unused static const uint8_t _EXPECTED_UNINITIALIZED_ROLLBACK_SECRET[] = { EXPECTED_UNINITIALIZED_ROLLBACK_SECRET }; BUILD_ASSERT(sizeof(_EXPECTED_UNINITIALIZED_ROLLBACK_SECRET) == @@ -143,7 +138,8 @@ test_static int test_add_entropy(void) /* Immediately after boot region 1 should not yet be initialized. */ rv = read_rollback(1, &rb_data); TEST_EQ(rv, EC_SUCCESS, "%d"); - TEST_EQ(check_equal(&rb_data, &expected_uninitialized), EC_SUCCESS, "%d"); + TEST_EQ(check_equal(&rb_data, &expected_uninitialized), EC_SUCCESS, + "%d"); /* * Add entropy. The result should end up being written to the unused @@ -186,7 +182,7 @@ test_static int test_add_entropy(void) return rv; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { ccprintf("Running rollback_entropy test\n"); RUN_TEST(test_add_entropy); diff --git a/test/rollback_entropy.tasklist b/test/rollback_entropy.tasklist index 51734f058d..a1f1a94e2d 100644 --- a/test/rollback_entropy.tasklist +++ b/test/rollback_entropy.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/rsa.c b/test/rsa.c index 8e4eeef54c..2774e9edb4 100644 --- a/test/rsa.c +++ b/test/rsa.c @@ -1,4 +1,4 @@ -/* Copyright 2016 The Chromium OS Authors. All rights reserved. +/* Copyright 2016 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -21,9 +21,9 @@ #include "rsa2048-F4.h" #endif -static uint32_t rsa_workbuf[3 * RSANUMBYTES/4]; +static uint32_t rsa_workbuf[3 * RSANUMBYTES / 4]; -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { int good; @@ -45,7 +45,7 @@ void run_test(int argc, char **argv) ccprintf("RSA verify FAILED (as expected)\n"); /* Test with a wrong signature */ - good = rsa_verify(rsa_key, sig+1, hash, rsa_workbuf); + good = rsa_verify(rsa_key, sig + 1, hash, rsa_workbuf); if (good) { ccprintf("RSA verify OK (expected fail)\n"); test_fail(); diff --git a/test/rsa.tasklist b/test/rsa.tasklist index f46a2eaa1d..bf2309064a 100644 --- a/test/rsa.tasklist +++ b/test/rsa.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2016 The Chromium OS Authors. All rights reserved. +/* Copyright 2016 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/rsa2048-3.h b/test/rsa2048-3.h index d1b15c15a4..17b3c8989a 100644 --- a/test/rsa2048-3.h +++ b/test/rsa2048-3.h @@ -1,4 +1,4 @@ -/* Copyright 2016 The Chromium OS Authors. All rights reserved. +/* Copyright 2016 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -13,7 +13,7 @@ * # dumpRSAPublicKey -pub key.pub | xxd -i */ const uint8_t rsa_data[] = { - 0x40, 0x00, 0x00, 0x00, 0x0f, 0x46, 0xe8, 0x2c, 0x11, 0x17, 0x38, 0xfd, + 0x40, 0x00, 0x00, 0x00, 0x0f, 0x46, 0xe8, 0x2c, 0x11, 0x17, 0x38, 0xfd, 0xef, 0xa2, 0xb5, 0x2d, 0x6d, 0x76, 0xe1, 0x70, 0x7d, 0x67, 0xb1, 0x9a, 0x18, 0x78, 0x90, 0xe2, 0xce, 0xa6, 0x81, 0xa0, 0x13, 0x37, 0xf2, 0x71, 0xf0, 0x44, 0x96, 0xaf, 0x52, 0x53, 0xd4, 0x23, 0x51, 0x19, 0xe5, 0xb0, @@ -65,18 +65,16 @@ BUILD_ASSERT(sizeof(*rsa_key) == sizeof(rsa_data)); /* SHA-256 sum to verify: * # sha256sum README | sed -e 's/\(..\)/0x\1, /mg' */ -const uint8_t hash[] = { - 0x6c, 0x5f, 0xef, 0x7f, 0x63, 0x1d, 0xb4, 0x35, 0x6c, 0xae, 0x8b, 0x2a, - 0x4e, 0xde, 0xc5, 0xeb, 0x11, 0xba, 0x1f, 0x44, 0x40, 0xb6, 0x3a, 0x52, - 0xf2, 0x70, 0xef, 0xee, 0x44, 0x4b, 0x57, 0x62 -}; +const uint8_t hash[] = { 0x6c, 0x5f, 0xef, 0x7f, 0x63, 0x1d, 0xb4, 0x35, + 0x6c, 0xae, 0x8b, 0x2a, 0x4e, 0xde, 0xc5, 0xeb, + 0x11, 0xba, 0x1f, 0x44, 0x40, 0xb6, 0x3a, 0x52, + 0xf2, 0x70, 0xef, 0xee, 0x44, 0x4b, 0x57, 0x62 }; /* Incorrect hash to test the negative case */ -const uint8_t hash_wrong[] = { - 0x61, 0x1b, 0xd2, 0x44, 0xc7, 0x18, 0xa7, 0x2d, 0x0f, 0x2d, 0x3d, 0x0f, - 0xe3, 0xb3, 0xc5, 0xe4, 0x12, 0xc2, 0x7b, 0x1e, 0x05, 0x2c, 0x6f, 0xad, - 0xc4, 0xac, 0x71, 0x55, 0xe8, 0x80, 0x5c, 0x38 -}; +const uint8_t hash_wrong[] = { 0x61, 0x1b, 0xd2, 0x44, 0xc7, 0x18, 0xa7, 0x2d, + 0x0f, 0x2d, 0x3d, 0x0f, 0xe3, 0xb3, 0xc5, 0xe4, + 0x12, 0xc2, 0x7b, 0x1e, 0x05, 0x2c, 0x6f, 0xad, + 0xc4, 0xac, 0x71, 0x55, 0xe8, 0x80, 0x5c, 0x38 }; /* Generate signature using futility: * # futility create key.pem diff --git a/test/rsa2048-F4.h b/test/rsa2048-F4.h index afe66a198f..08b8f70155 100644 --- a/test/rsa2048-F4.h +++ b/test/rsa2048-F4.h @@ -1,4 +1,4 @@ -/* Copyright 2016 The Chromium OS Authors. All rights reserved. +/* Copyright 2016 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -65,18 +65,16 @@ BUILD_ASSERT(sizeof(*rsa_key) == sizeof(rsa_data)); /* SHA-256 sum to verify: * # sha256sum README | sed -e 's/\(..\)/0x\1, /mg' */ -const uint8_t hash[] = { - 0x6c, 0x5f, 0xef, 0x7f, 0x63, 0x1d, 0xb4, 0x35, 0x6c, 0xae, 0x8b, 0x2a, - 0x4e, 0xde, 0xc5, 0xeb, 0x11, 0xba, 0x1f, 0x44, 0x40, 0xb6, 0x3a, 0x52, - 0xf2, 0x70, 0xef, 0xee, 0x44, 0x4b, 0x57, 0x62 -}; +const uint8_t hash[] = { 0x6c, 0x5f, 0xef, 0x7f, 0x63, 0x1d, 0xb4, 0x35, + 0x6c, 0xae, 0x8b, 0x2a, 0x4e, 0xde, 0xc5, 0xeb, + 0x11, 0xba, 0x1f, 0x44, 0x40, 0xb6, 0x3a, 0x52, + 0xf2, 0x70, 0xef, 0xee, 0x44, 0x4b, 0x57, 0x62 }; /* Incorrect hash to test the negative case */ -const uint8_t hash_wrong[] = { - 0x61, 0x1b, 0xd2, 0x44, 0xc7, 0x18, 0xa7, 0x2d, 0x0f, 0x2d, 0x3d, 0x0f, - 0xe3, 0xb3, 0xc5, 0xe4, 0x12, 0xc2, 0x7b, 0x1e, 0x05, 0x2c, 0x6f, 0xad, - 0xc4, 0xac, 0x71, 0x55, 0xe8, 0x80, 0x5c, 0x38 -}; +const uint8_t hash_wrong[] = { 0x61, 0x1b, 0xd2, 0x44, 0xc7, 0x18, 0xa7, 0x2d, + 0x0f, 0x2d, 0x3d, 0x0f, 0xe3, 0xb3, 0xc5, 0xe4, + 0x12, 0xc2, 0x7b, 0x1e, 0x05, 0x2c, 0x6f, 0xad, + 0xc4, 0xac, 0x71, 0x55, 0xe8, 0x80, 0x5c, 0x38 }; /* Generate signature using futility: * # futility create key.pem diff --git a/test/rsa3072-3.h b/test/rsa3072-3.h index c407a4ed2b..3ad93fafe8 100644 --- a/test/rsa3072-3.h +++ b/test/rsa3072-3.h @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * diff --git a/test/rtc.c b/test/rtc.c index 3e53f85611..7c38c4fa6d 100644 --- a/test/rtc.c +++ b/test/rtc.c @@ -1,4 +1,4 @@ -/* Copyright 2017 The Chromium OS Authors. All rights reserved. +/* Copyright 2017 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -16,15 +16,14 @@ static struct { struct calendar_date time; uint32_t sec; } test_case[] = { - {{8, 3, 1}, 1204329600}, - {{17, 10, 1}, 1506816000}, + { { 8, 3, 1 }, 1204329600 }, + { { 17, 10, 1 }, 1506816000 }, }; static int calendar_time_comp(struct calendar_date time_1, - struct calendar_date time_2) + struct calendar_date time_2) { - return (time_1.year == time_2.year && - time_1.month == time_2.month && + return (time_1.year == time_2.year && time_1.month == time_2.month && time_1.day == time_2.day); } @@ -96,7 +95,7 @@ static int test_time_conversion(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { RUN_TEST(test_time_conversion); diff --git a/test/rtc.tasklist b/test/rtc.tasklist index 80072bb620..329f9a3d28 100644 --- a/test/rtc.tasklist +++ b/test/rtc.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2017 The Chromium OS Authors. All rights reserved. +/* Copyright 2017 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/run_device_tests.py b/test/run_device_tests.py index 337e4e6693..9b762fc1d6 100755 --- a/test/run_device_tests.py +++ b/test/run_device_tests.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -# Copyright 2020 The Chromium OS Authors. All rights reserved. +# Copyright 2020 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. @@ -49,118 +49,132 @@ import subprocess import sys import time from concurrent.futures.thread import ThreadPoolExecutor +from dataclasses import dataclass, field from enum import Enum from pathlib import Path -from typing import Optional, BinaryIO, List +from typing import BinaryIO, Dict, List, Optional # pylint: disable=import-error import colorama # type: ignore[import] -from contextlib2 import ExitStack import fmap +from contextlib2 import ExitStack + # pylint: enable=import-error EC_DIR = Path(os.path.dirname(os.path.realpath(__file__))).parent -JTRACE_FLASH_SCRIPT = os.path.join(EC_DIR, 'util/flash_jlink.py') -SERVO_MICRO_FLASH_SCRIPT = os.path.join(EC_DIR, 'util/flash_ec') +JTRACE_FLASH_SCRIPT = os.path.join(EC_DIR, "util/flash_jlink.py") +SERVO_MICRO_FLASH_SCRIPT = os.path.join(EC_DIR, "util/flash_ec") -ALL_TESTS_PASSED_REGEX = re.compile(r'Pass!\r\n') -ALL_TESTS_FAILED_REGEX = re.compile(r'Fail! \(\d+ tests\)\r\n') +ALL_TESTS_PASSED_REGEX = re.compile(r"Pass!\r\n") +ALL_TESTS_FAILED_REGEX = re.compile(r"Fail! \(\d+ tests\)\r\n") -SINGLE_CHECK_PASSED_REGEX = re.compile(r'Pass: .*') -SINGLE_CHECK_FAILED_REGEX = re.compile(r'.*failed:.*') +SINGLE_CHECK_PASSED_REGEX = re.compile(r"Pass: .*") +SINGLE_CHECK_FAILED_REGEX = re.compile(r".*failed:.*") -ASSERTION_FAILURE_REGEX = re.compile(r'ASSERTION FAILURE.*') +ASSERTION_FAILURE_REGEX = re.compile(r"ASSERTION FAILURE.*") DATA_ACCESS_VIOLATION_8020000_REGEX = re.compile( - r'Data access violation, mfar = 8020000\r\n') + r"Data access violation, mfar = 8020000\r\n" +) DATA_ACCESS_VIOLATION_8040000_REGEX = re.compile( - r'Data access violation, mfar = 8040000\r\n') + r"Data access violation, mfar = 8040000\r\n" +) DATA_ACCESS_VIOLATION_80C0000_REGEX = re.compile( - r'Data access violation, mfar = 80c0000\r\n') + r"Data access violation, mfar = 80c0000\r\n" +) DATA_ACCESS_VIOLATION_80E0000_REGEX = re.compile( - r'Data access violation, mfar = 80e0000\r\n') + r"Data access violation, mfar = 80e0000\r\n" +) DATA_ACCESS_VIOLATION_20000000_REGEX = re.compile( - r'Data access violation, mfar = 20000000\r\n') + r"Data access violation, mfar = 20000000\r\n" +) DATA_ACCESS_VIOLATION_24000000_REGEX = re.compile( - r'Data access violation, mfar = 24000000\r\n') + r"Data access violation, mfar = 24000000\r\n" +) -BLOONCHIPPER = 'bloonchipper' -DARTMONKEY = 'dartmonkey' +BLOONCHIPPER = "bloonchipper" +DARTMONKEY = "dartmonkey" -JTRACE = 'jtrace' -SERVO_MICRO = 'servo_micro' +JTRACE = "jtrace" +SERVO_MICRO = "servo_micro" -GCC = 'gcc' -CLANG = 'clang' +GCC = "gcc" +CLANG = "clang" -TEST_ASSETS_BUCKET = 'gs://chromiumos-test-assets-public/fpmcu/RO' +TEST_ASSETS_BUCKET = "gs://chromiumos-test-assets-public/fpmcu/RO" DARTMONKEY_IMAGE_PATH = os.path.join( - TEST_ASSETS_BUCKET, 'dartmonkey_v2.0.2887-311310808.bin') + TEST_ASSETS_BUCKET, "dartmonkey_v2.0.2887-311310808.bin" +) NOCTURNE_FP_IMAGE_PATH = os.path.join( - TEST_ASSETS_BUCKET, 'nocturne_fp_v2.2.64-58cf5974e.bin') + TEST_ASSETS_BUCKET, "nocturne_fp_v2.2.64-58cf5974e.bin" +) NAMI_FP_IMAGE_PATH = os.path.join( - TEST_ASSETS_BUCKET, 'nami_fp_v2.2.144-7a08e07eb.bin') + TEST_ASSETS_BUCKET, "nami_fp_v2.2.144-7a08e07eb.bin" +) BLOONCHIPPER_V4277_IMAGE_PATH = os.path.join( - TEST_ASSETS_BUCKET, 'bloonchipper_v2.0.4277-9f652bb3.bin') + TEST_ASSETS_BUCKET, "bloonchipper_v2.0.4277-9f652bb3.bin" +) BLOONCHIPPER_V5938_IMAGE_PATH = os.path.join( - TEST_ASSETS_BUCKET, 'bloonchipper_v2.0.5938-197506c1.bin') + TEST_ASSETS_BUCKET, "bloonchipper_v2.0.5938-197506c1.bin" +) class ImageType(Enum): """EC Image type to use for the test.""" + RO = 1 RW = 2 +@dataclass class BoardConfig: """Board-specific configuration.""" - def __init__(self, name, servo_uart_name, servo_power_enable, - rollback_region0_regex, rollback_region1_regex, mpu_regex, - variants): - self.name = name - self.servo_uart_name = servo_uart_name - self.servo_power_enable = servo_power_enable - self.rollback_region0_regex = rollback_region0_regex - self.rollback_region1_regex = rollback_region1_regex - self.mpu_regex = mpu_regex - self.variants = variants + name: str + servo_uart_name: str + servo_power_enable: str + rollback_region0_regex: object + rollback_region1_regex: object + mpu_regex: object + variants: Dict +@dataclass class TestConfig: """Configuration for a given test.""" - def __init__(self, test_name, image_to_use=ImageType.RW, - finish_regexes=None, fail_regexes=None, toggle_power=False, - test_args=None, num_flash_attempts=2, timeout_secs=10, - enable_hw_write_protect=False, ro_image=None, build_board=None, - config_name=None): - if test_args is None: - test_args = [] - if finish_regexes is None: - finish_regexes = [ALL_TESTS_PASSED_REGEX, ALL_TESTS_FAILED_REGEX] - if fail_regexes is None: - fail_regexes = [SINGLE_CHECK_FAILED_REGEX, ALL_TESTS_FAILED_REGEX, - ASSERTION_FAILURE_REGEX] - if config_name is None: - config_name = test_name - - self.test_name = test_name - self.config_name = config_name - self.image_to_use = image_to_use - self.finish_regexes = finish_regexes - self.fail_regexes = fail_regexes - self.test_args = test_args - self.toggle_power = toggle_power - self.num_flash_attempts = num_flash_attempts - self.timeout_secs = timeout_secs - self.enable_hw_write_protect = enable_hw_write_protect - self.logs = [] - self.passed = False - self.num_fails = 0 - self.num_passes = 0 - self.ro_image = ro_image - self.build_board = build_board + # pylint: disable=too-many-instance-attributes + test_name: str + image_to_use: ImageType = ImageType.RW + finish_regexes: List = None + fail_regexes: List = None + toggle_power: bool = False + test_args: List[str] = field(default_factory=list) + num_flash_attempts: int = 2 + timeout_secs: int = 10 + enable_hw_write_protect: bool = False + ro_image: str = None + build_board: str = None + config_name: str = None + logs: List = field(init=False, default_factory=list) + passed: bool = field(init=False, default=False) + num_passes: int = field(init=False, default=0) + num_fails: int = field(init=False, default=0) + + def __post_init__(self): + if self.finish_regexes is None: + self.finish_regexes = [ + ALL_TESTS_PASSED_REGEX, + ALL_TESTS_FAILED_REGEX, + ] + if self.fail_regexes is None: + self.fail_regexes = [ + SINGLE_CHECK_FAILED_REGEX, + ALL_TESTS_FAILED_REGEX, + ASSERTION_FAILURE_REGEX, + ] + if self.config_name is None: + self.config_name = self.test_name # All possible tests. @@ -169,6 +183,7 @@ class AllTests: @staticmethod def get(board_config: BoardConfig) -> List[TestConfig]: + """Return public and private test configs for the specified board.""" public_tests = AllTests.get_public_tests(board_config) private_tests = AllTests.get_private_tests() @@ -176,146 +191,192 @@ class AllTests: @staticmethod def get_public_tests(board_config: BoardConfig) -> List[TestConfig]: + """Return public test configs for the specified board.""" tests = [ - TestConfig(test_name='aes'), - TestConfig(test_name='cec'), - TestConfig(test_name='cortexm_fpu'), - TestConfig(test_name='crc'), - TestConfig(test_name='flash_physical', image_to_use=ImageType.RO, - toggle_power=True), - TestConfig(test_name='flash_write_protect', - image_to_use=ImageType.RO, - toggle_power=True, enable_hw_write_protect=True), - TestConfig(test_name='fpsensor_hw'), - TestConfig(config_name='fpsensor_spi_ro', test_name='fpsensor', - image_to_use=ImageType.RO, test_args=['spi']), - TestConfig(config_name='fpsensor_spi_rw', test_name='fpsensor', - test_args=['spi']), - TestConfig(config_name='fpsensor_uart_ro', test_name='fpsensor', - image_to_use=ImageType.RO, test_args=['uart']), - TestConfig(config_name='fpsensor_uart_rw', test_name='fpsensor', - test_args=['uart']), - TestConfig(config_name='mpu_ro', test_name='mpu', - image_to_use=ImageType.RO, - finish_regexes=[board_config.mpu_regex]), - TestConfig(config_name='mpu_rw', test_name='mpu', - finish_regexes=[board_config.mpu_regex]), - TestConfig(test_name='mutex'), - TestConfig(test_name='pingpong'), - TestConfig(test_name='printf'), - TestConfig(test_name='queue'), - TestConfig(config_name='rollback_region0', test_name='rollback', - finish_regexes=[board_config.rollback_region0_regex], - test_args=['region0']), - TestConfig(config_name='rollback_region1', test_name='rollback', - finish_regexes=[board_config.rollback_region1_regex], - test_args=['region1']), - TestConfig(test_name='rollback_entropy', image_to_use=ImageType.RO), - TestConfig(test_name='rtc'), - TestConfig(test_name='sha256'), - TestConfig(test_name='sha256_unrolled'), - TestConfig(test_name='static_if'), - TestConfig(config_name='system_is_locked_wp_on', - test_name='system_is_locked', test_args=['wp_on'], - toggle_power=True, enable_hw_write_protect=True), - TestConfig(config_name='system_is_locked_wp_off', - test_name='system_is_locked', test_args=['wp_off'], - toggle_power=True, enable_hw_write_protect=False), - TestConfig(test_name='timer_dos'), - TestConfig(test_name='utils', timeout_secs=20), - TestConfig(test_name='utils_str'), + TestConfig(test_name="aes"), + TestConfig(test_name="cec"), + TestConfig(test_name="cortexm_fpu"), + TestConfig(test_name="crc"), + TestConfig( + test_name="flash_physical", + image_to_use=ImageType.RO, + toggle_power=True, + ), + TestConfig( + test_name="flash_write_protect", + image_to_use=ImageType.RO, + toggle_power=True, + enable_hw_write_protect=True, + ), + TestConfig(test_name="fpsensor_hw"), + TestConfig( + config_name="fpsensor_spi_ro", + test_name="fpsensor", + image_to_use=ImageType.RO, + test_args=["spi"], + ), + TestConfig( + config_name="fpsensor_spi_rw", + test_name="fpsensor", + test_args=["spi"], + ), + TestConfig( + config_name="fpsensor_uart_ro", + test_name="fpsensor", + image_to_use=ImageType.RO, + test_args=["uart"], + ), + TestConfig( + config_name="fpsensor_uart_rw", + test_name="fpsensor", + test_args=["uart"], + ), + TestConfig( + config_name="mpu_ro", + test_name="mpu", + image_to_use=ImageType.RO, + finish_regexes=[board_config.mpu_regex], + ), + TestConfig( + config_name="mpu_rw", + test_name="mpu", + finish_regexes=[board_config.mpu_regex], + ), + TestConfig(test_name="mutex"), + TestConfig(test_name="pingpong"), + TestConfig(test_name="printf"), + TestConfig(test_name="queue"), + TestConfig( + config_name="rollback_region0", + test_name="rollback", + finish_regexes=[board_config.rollback_region0_regex], + test_args=["region0"], + ), + TestConfig( + config_name="rollback_region1", + test_name="rollback", + finish_regexes=[board_config.rollback_region1_regex], + test_args=["region1"], + ), + TestConfig(test_name="rollback_entropy", image_to_use=ImageType.RO), + TestConfig(test_name="rtc"), + TestConfig(test_name="sha256"), + TestConfig(test_name="sha256_unrolled"), + TestConfig(test_name="static_if"), + TestConfig(test_name="stdlib"), + TestConfig( + config_name="system_is_locked_wp_on", + test_name="system_is_locked", + test_args=["wp_on"], + toggle_power=True, + enable_hw_write_protect=True, + ), + TestConfig( + config_name="system_is_locked_wp_off", + test_name="system_is_locked", + test_args=["wp_off"], + toggle_power=True, + enable_hw_write_protect=False, + ), + TestConfig(test_name="timer_dos"), + TestConfig(test_name="utils", timeout_secs=20), + TestConfig(test_name="utils_str"), ] if board_config.name == BLOONCHIPPER: - tests.append(TestConfig(test_name='stm32f_rtc')) + tests.append(TestConfig(test_name="stm32f_rtc")) # Run panic data tests for all boards and RO versions. for variant_name, variant_info in board_config.variants.items(): tests.append( - TestConfig(config_name='panic_data_' + variant_name, - test_name='panic_data', - fail_regexes=[SINGLE_CHECK_FAILED_REGEX, - ALL_TESTS_FAILED_REGEX], - ro_image=variant_info.get('ro_image_path'), - build_board=variant_info.get('build_board'))) + TestConfig( + config_name="panic_data_" + variant_name, + test_name="panic_data", + fail_regexes=[ + SINGLE_CHECK_FAILED_REGEX, + ALL_TESTS_FAILED_REGEX, + ], + ro_image=variant_info.get("ro_image_path"), + build_board=variant_info.get("build_board"), + ) + ) return tests @staticmethod def get_private_tests() -> List[TestConfig]: - # Return all private tests, if the folder exists + """Return private test configs for the specified board, if available.""" tests = [] try: current_dir = os.path.dirname(__file__) - private_dir = os.path.join(current_dir, os.pardir, 'private/test') + private_dir = os.path.join(current_dir, os.pardir, "private/test") have_private = os.path.isdir(private_dir) if not have_private: return [] sys.path.append(private_dir) - import private_tests # pylint: disable=import-error + import private_tests # pylint: disable=import-error,import-outside-toplevel + for test_args in private_tests.tests: tests.append(TestConfig(**test_args)) # Catch all exceptions to avoid disruptions in public repo - except BaseException as e: - logging.debug('Failed to get list of private tests: %s', str(e)) - logging.debug('Ignore error and continue.') + except BaseException as e: # pylint: disable=broad-except + logging.debug("Failed to get list of private tests: %s", str(e)) + logging.debug("Ignore error and continue.") return [] return tests BLOONCHIPPER_CONFIG = BoardConfig( name=BLOONCHIPPER, - servo_uart_name='raw_fpmcu_console_uart_pty', - servo_power_enable='fpmcu_pp3300', + servo_uart_name="raw_fpmcu_console_uart_pty", + servo_power_enable="fpmcu_pp3300", rollback_region0_regex=DATA_ACCESS_VIOLATION_8020000_REGEX, rollback_region1_regex=DATA_ACCESS_VIOLATION_8040000_REGEX, mpu_regex=DATA_ACCESS_VIOLATION_20000000_REGEX, variants={ - 'bloonchipper_v2.0.4277': { - 'ro_image_path': BLOONCHIPPER_V4277_IMAGE_PATH + "bloonchipper_v2.0.4277": { + "ro_image_path": BLOONCHIPPER_V4277_IMAGE_PATH + }, + "bloonchipper_v2.0.5938": { + "ro_image_path": BLOONCHIPPER_V5938_IMAGE_PATH }, - 'bloonchipper_v2.0.5938': { - 'ro_image_path': BLOONCHIPPER_V5938_IMAGE_PATH - } - } + }, ) DARTMONKEY_CONFIG = BoardConfig( name=DARTMONKEY, - servo_uart_name='raw_fpmcu_console_uart_pty', - servo_power_enable='fpmcu_pp3300', + servo_uart_name="raw_fpmcu_console_uart_pty", + servo_power_enable="fpmcu_pp3300", rollback_region0_regex=DATA_ACCESS_VIOLATION_80C0000_REGEX, rollback_region1_regex=DATA_ACCESS_VIOLATION_80E0000_REGEX, mpu_regex=DATA_ACCESS_VIOLATION_24000000_REGEX, # For dartmonkey board, run panic data test also on nocturne_fp and # nami_fp boards with appropriate RO image. variants={ - 'dartmonkey_v2.0.2887': { - 'ro_image_path': DARTMONKEY_IMAGE_PATH + "dartmonkey_v2.0.2887": {"ro_image_path": DARTMONKEY_IMAGE_PATH}, + "nocturne_fp_v2.2.64": { + "ro_image_path": NOCTURNE_FP_IMAGE_PATH, + "build_board": "nocturne_fp", }, - 'nocturne_fp_v2.2.64': { - 'ro_image_path': NOCTURNE_FP_IMAGE_PATH, - 'build_board': 'nocturne_fp' + "nami_fp_v2.2.144": { + "ro_image_path": NAMI_FP_IMAGE_PATH, + "build_board": "nami_fp", }, - 'nami_fp_v2.2.144': { - 'ro_image_path': NAMI_FP_IMAGE_PATH, - 'build_board': 'nami_fp' - } - } + }, ) BOARD_CONFIGS = { - 'bloonchipper': BLOONCHIPPER_CONFIG, - 'dartmonkey': DARTMONKEY_CONFIG, + "bloonchipper": BLOONCHIPPER_CONFIG, + "dartmonkey": DARTMONKEY_CONFIG, } def read_file_gsutil(path: str) -> bytes: """Get data from bucket, using gsutil tool""" - cmd = ['gsutil', 'cat', path] + cmd = ["gsutil", "cat", path] - logging.debug('Running command: "%s"', ' '.join(cmd)) - gsutil = subprocess.run(cmd, stdout=subprocess.PIPE) # pylint: disable=subprocess-run-check + logging.debug('Running command: "%s"', " ".join(cmd)) + gsutil = subprocess.run(cmd, stdout=subprocess.PIPE, check=False) gsutil.check_returncode() return gsutil.stdout @@ -323,9 +384,9 @@ def read_file_gsutil(path: str) -> bytes: def find_section_offset_size(section: str, image: bytes) -> (int, int): """Get offset and size of the section in image""" - areas = fmap.fmap_decode(image)['areas'] - area = next(area for area in areas if area['name'] == section) - return area['offset'], area['size'] + areas = fmap.fmap_decode(image)["areas"] + area = next(area for area in areas if area["name"] == section) + return area["offset"], area["size"] def read_section(src: bytes, section: str) -> bytes: @@ -340,10 +401,10 @@ def write_section(data: bytes, image: bytearray, section: str): (section_start, section_size) = find_section_offset_size(section, image) if section_size < len(data): - raise ValueError(section + ' section size is not enough to store data') + raise ValueError(section + " section size is not enough to store data") section_end = section_start + section_size - filling = bytes([0xff for _ in range(section_size - len(data))]) + filling = bytes([0xFF for _ in range(section_size - len(data))]) image[section_start:section_end] = data + filling @@ -354,12 +415,14 @@ def copy_section(src: bytes, dst: bytearray, section: str): (dst_start, dst_size) = find_section_offset_size(section, dst) if dst_size < src_size: - raise ValueError('Section ' + section + ' from source image has ' - 'greater size than the section in destination image') + raise ValueError( + "Section " + section + " from source image has " + "greater size than the section in destination image" + ) src_end = src_start + src_size dst_end = dst_start + dst_size - filling = bytes([0xff for _ in range(dst_size - src_size)]) + filling = bytes([0xFF for _ in range(dst_size - src_size)]) dst[dst_start:dst_end] = src[src_start:src_end] + filling @@ -367,28 +430,28 @@ def copy_section(src: bytes, dst: bytearray, section: str): def replace_ro(image: bytearray, ro: bytes): """Replace RO in image with provided one""" # Backup RO public key since its private part was used to sign RW. - ro_pubkey = read_section(image, 'KEY_RO') + ro_pubkey = read_section(image, "KEY_RO") # Copy RO part of the firmware to the image. Please note that RO public key # is copied too since EC_RO area includes KEY_RO area. - copy_section(ro, image, 'EC_RO') + copy_section(ro, image, "EC_RO") # Restore RO public key. - write_section(ro_pubkey, image, 'KEY_RO') + write_section(ro_pubkey, image, "KEY_RO") def get_console(board_config: BoardConfig) -> Optional[str]: """Get the name of the console for a given board.""" cmd = [ - 'dut-control', + "dut-control", board_config.servo_uart_name, ] - logging.debug('Running command: "%s"', ' '.join(cmd)) + logging.debug('Running command: "%s"', " ".join(cmd)) with subprocess.Popen(cmd, stdout=subprocess.PIPE) as proc: for line in io.TextIOWrapper(proc.stdout): # type: ignore[arg-type] logging.debug(line) - pty = line.split(':') + pty = line.split(":") if len(pty) == 2 and pty[0] == board_config.servo_uart_name: return pty[1].strip() @@ -398,77 +461,90 @@ def get_console(board_config: BoardConfig) -> Optional[str]: def power(board_config: BoardConfig, on: bool) -> None: """Turn power to board on/off.""" if on: - state = 'pp3300' + state = "pp3300" else: - state = 'off' + state = "off" cmd = [ - 'dut-control', - board_config.servo_power_enable + ':' + state, + "dut-control", + board_config.servo_power_enable + ":" + state, ] - logging.debug('Running command: "%s"', ' '.join(cmd)) - subprocess.run(cmd).check_returncode() # pylint: disable=subprocess-run-check + logging.debug('Running command: "%s"', " ".join(cmd)) + subprocess.run( + cmd + ).check_returncode() # pylint: disable=subprocess-run-check def hw_write_protect(enable: bool) -> None: """Enable/disable hardware write protect.""" if enable: - state = 'force_on' + state = "force_on" else: - state = 'force_off' + state = "force_off" cmd = [ - 'dut-control', - 'fw_wp_state:' + state, - ] - logging.debug('Running command: "%s"', ' '.join(cmd)) - subprocess.run(cmd).check_returncode() # pylint: disable=subprocess-run-check + "dut-control", + "fw_wp_state:" + state, + ] + logging.debug('Running command: "%s"', " ".join(cmd)) + subprocess.run( + cmd + ).check_returncode() # pylint: disable=subprocess-run-check def build(test_name: str, board_name: str, compiler: str) -> None: """Build specified test for specified board.""" - cmd = ['make'] + cmd = ["make"] if compiler == CLANG: - cmd = cmd + ['CC=arm-none-eabi-clang'] + cmd = cmd + ["CC=arm-none-eabi-clang"] cmd = cmd + [ - 'BOARD=' + board_name, - 'test-' + test_name, - '-j', + "BOARD=" + board_name, + "test-" + test_name, + "-j", ] - logging.debug('Running command: "%s"', ' '.join(cmd)) - subprocess.run(cmd).check_returncode() # pylint: disable=subprocess-run-check + logging.debug('Running command: "%s"', " ".join(cmd)) + subprocess.run( + cmd + ).check_returncode() # pylint: disable=subprocess-run-check -def flash(image_path: str, board: str, flasher: str, remote_ip: str, - remote_port: int) -> bool: +def flash( + image_path: str, board: str, flasher: str, remote_ip: str, remote_port: int +) -> bool: """Flash specified test to specified board.""" - logging.info('Flashing test') + logging.info("Flashing test") cmd = [] if flasher == JTRACE: cmd.append(JTRACE_FLASH_SCRIPT) if remote_ip: - cmd.extend(['--remote', remote_ip + ':' + str(remote_port)]) + cmd.extend(["--remote", remote_ip + ":" + str(remote_port)]) elif flasher == SERVO_MICRO: cmd.append(SERVO_MICRO_FLASH_SCRIPT) else: logging.error('Unknown flasher: "%s"', flasher) return False - cmd.extend([ - '--board', board, - '--image', image_path, - ]) - logging.debug('Running command: "%s"', ' '.join(cmd)) - completed_process = subprocess.run(cmd) # pylint: disable=subprocess-run-check + cmd.extend( + [ + "--board", + board, + "--image", + image_path, + ] + ) + logging.debug('Running command: "%s"', " ".join(cmd)) + completed_process = subprocess.run( + cmd + ) # pylint: disable=subprocess-run-check return completed_process.returncode == 0 def patch_image(test: TestConfig, image_path: str): """Replace RO part of the firmware with provided one.""" - with open(image_path, 'rb+') as f: + with open(image_path, "rb+") as f: image = bytearray(f.read()) ro = read_file_gsutil(test.ro_image) replace_ro(image, ro) @@ -477,8 +553,9 @@ def patch_image(test: TestConfig, image_path: str): f.truncate() -def readline(executor: ThreadPoolExecutor, f: BinaryIO, timeout_secs: int) -> \ - Optional[bytes]: +def readline( + executor: ThreadPoolExecutor, f: BinaryIO, timeout_secs: int +) -> Optional[bytes]: """Read a line with timeout.""" a = executor.submit(f.readline) try: @@ -487,8 +564,9 @@ def readline(executor: ThreadPoolExecutor, f: BinaryIO, timeout_secs: int) -> \ return None -def readlines_until_timeout(executor, f: BinaryIO, timeout_secs: int) -> \ - List[bytes]: +def readlines_until_timeout( + executor, f: BinaryIO, timeout_secs: int +) -> List[bytes]: """Continuously read lines for timeout_secs.""" lines: List[bytes] = [] while True: @@ -499,6 +577,7 @@ def readlines_until_timeout(executor, f: BinaryIO, timeout_secs: int) -> \ def process_console_output_line(line: bytes, test: TestConfig): + """Parse console output line and update test pass/fail counters.""" try: line_str = line.decode() @@ -518,19 +597,20 @@ def process_console_output_line(line: bytes, test: TestConfig): return None -def run_test(test: TestConfig, console: io.FileIO, - executor: ThreadPoolExecutor) -> bool: +def run_test( + test: TestConfig, console: io.FileIO, executor: ThreadPoolExecutor +) -> bool: """Run specified test.""" start = time.time() # Wait for boot to finish time.sleep(1) - console.write('\n'.encode()) + console.write("\n".encode()) if test.image_to_use == ImageType.RO: - console.write('reboot ro\n'.encode()) + console.write("reboot ro\n".encode()) time.sleep(1) - test_cmd = 'runtest ' + ' '.join(test.test_args) + '\n' + test_cmd = "runtest " + " ".join(test.test_args) + "\n" console.write(test_cmd.encode()) while True: @@ -539,7 +619,7 @@ def run_test(test: TestConfig, console: io.FileIO, if not line: now = time.time() if now - start > test.timeout_secs: - logging.debug('Test timed out') + logging.debug("Test timed out") return False continue @@ -568,15 +648,18 @@ def run_test(test: TestConfig, console: io.FileIO, def get_test_list(config: BoardConfig, test_args) -> List[TestConfig]: """Get a list of tests to run.""" - if test_args == 'all': + if test_args == "all": return AllTests.get(config) test_list = [] for t in test_args: - logging.debug('test: %s', t) + logging.debug("test: %s", t) test_regex = re.compile(t) - tests = [test for test in AllTests.get(config) - if test_regex.fullmatch(test.config_name)] + tests = [ + test + for test in AllTests.get(config) + if test_regex.fullmatch(test.config_name) + ] if not tests: logging.error('Unable to find test config for "%s"', t) sys.exit(1) @@ -585,9 +668,81 @@ def get_test_list(config: BoardConfig, test_args) -> List[TestConfig]: return test_list +def flash_and_run_test( + test: TestConfig, + board_config: BoardConfig, + args: argparse.Namespace, + executor, +) -> bool: + """Run a single test using the test and board configuration specified""" + build_board = args.board + # If test provides this information, build image for board specified + # by test. + if test.build_board is not None: + build_board = test.build_board + + # build test binary + build(test.test_name, build_board, args.compiler) + + image_path = os.path.join( + EC_DIR, "build", build_board, test.test_name, test.test_name + ".bin" + ) + + if test.ro_image is not None: + try: + patch_image(test, image_path) + except Exception as exception: # pylint: disable=broad-except + logging.warning( + "An exception occurred while patching " "image: %s", exception + ) + return False + + # flash test binary + # TODO(b/158327221): First attempt to flash fails after + # flash_write_protect test is run; works after second attempt. + flash_succeeded = False + for i in range(0, test.num_flash_attempts): + logging.debug("Flash attempt %d", i + 1) + if flash( + image_path, args.board, args.flasher, args.remote, args.jlink_port + ): + flash_succeeded = True + break + time.sleep(1) + + if not flash_succeeded: + logging.debug( + "Flashing failed after max attempts: %d", test.num_flash_attempts + ) + return False + + if test.toggle_power: + power(board_config, on=False) + time.sleep(1) + power(board_config, on=True) + + hw_write_protect(test.enable_hw_write_protect) + + # run the test + logging.info('Running test: "%s"', test.config_name) + + with ExitStack() as stack: + if args.remote and args.console_port: + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.connect((args.remote, args.console_port)) + console = stack.enter_context(s.makefile(mode="rwb", buffering=0)) + else: + console = stack.enter_context( + open(get_console(board_config), "wb+", buffering=0) + ) + + return run_test(test, console, executor=executor) + + def parse_remote_arg(remote: str) -> str: + """Convert the 'remote' input argument to IP address, if available.""" if not remote: - return '' + return "" try: ip = socket.gethostbyname(remote) @@ -597,165 +752,127 @@ def parse_remote_arg(remote: str) -> str: sys.exit(1) +def validate_args_combination(args: argparse.Namespace): + """Check that the current combination of arguments is supported. + + Not all combinations of command line arguments are valid or currently + supported. If tests can't be executed, print and error message and exit. + """ + if args.jlink_port and not args.flasher == JTRACE: + logging.error("jlink_port specified, but flasher is not set to J-Link.") + sys.exit(1) + + if args.remote and not (args.jlink_port or args.console_port): + logging.error( + "jlink_port or console_port must be specified when using " + "the remote option." + ) + sys.exit(1) + + if (args.jlink_port or args.console_port) and not args.remote: + logging.error( + "The remote option must be specified when using the " + "jlink_port or console_port options." + ) + sys.exit(1) + + if args.remote and args.flasher == SERVO_MICRO: + logging.error( + "The remote option is not supported when flashing with servo " + "micro. Use J-Link instead or flash with a local servo micro." + ) + sys.exit(1) + + if args.board not in BOARD_CONFIGS: + logging.error('Unable to find a config for board: "%s"', args.board) + sys.exit(1) + + def main(): + """Run unit tests on device and displays the results.""" parser = argparse.ArgumentParser() - default_board = 'bloonchipper' + default_board = "bloonchipper" parser.add_argument( - '--board', '-b', - help='Board (default: ' + default_board + ')', - default=default_board) + "--board", + "-b", + help="Board (default: " + default_board + ")", + default=default_board, + ) - default_tests = 'all' + default_tests = "all" parser.add_argument( - '--tests', '-t', - nargs='+', - help='Tests (default: ' + default_tests + ')', - default=default_tests) + "--tests", + "-t", + nargs="+", + help="Tests (default: " + default_tests + ")", + default=default_tests, + ) - log_level_choices = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'] + log_level_choices = ["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"] parser.add_argument( - '--log_level', '-l', - choices=log_level_choices, - default='DEBUG' + "--log_level", "-l", choices=log_level_choices, default="DEBUG" ) flasher_choices = [SERVO_MICRO, JTRACE] parser.add_argument( - '--flasher', '-f', - choices=flasher_choices, - default=JTRACE + "--flasher", "-f", choices=flasher_choices, default=JTRACE ) compiler_options = [GCC, CLANG] - parser.add_argument('--compiler', '-c', - choices=compiler_options, - default=GCC) + parser.add_argument( + "--compiler", "-c", choices=compiler_options, default=GCC + ) # This might be expanded to serve as a "remote" for flash_ec also, so # we will leave it generic. parser.add_argument( - '--remote', '-n', - help='The remote host connected to one or both of: J-Link and Servo.', + "--remote", + "-n", + help="The remote host connected to one or both of: J-Link and Servo.", + type=parse_remote_arg, ) - parser.add_argument('--jlink_port', '-j', - type=int, - help='The port to use when connecting to JLink.') - parser.add_argument('--console_port', '-p', - type=int, - help='The port connected to the FPMCU console.') + parser.add_argument( + "--jlink_port", + "-j", + type=int, + help="The port to use when connecting to JLink.", + ) + parser.add_argument( + "--console_port", + "-p", + type=int, + help="The port connected to the FPMCU console.", + ) args = parser.parse_args() logging.basicConfig(level=args.log_level) - - if args.jlink_port and not args.flasher == JTRACE: - logging.error('jlink_port specified, but flasher is not set to J-Link.') - sys.exit(1) - - if args.remote and not (args.jlink_port or args.console_port): - logging.error('jlink_port or console_port must be specified when using ' - 'the remote option.') - sys.exit(1) - - if (args.jlink_port or args.console_port) and not args.remote: - logging.error('The remote option must be specified when using the ' - 'jlink_port or console_port options.') - sys.exit(1) - - if args.board not in BOARD_CONFIGS: - logging.error('Unable to find a config for board: "%s"', args.board) - sys.exit(1) + validate_args_combination(args) board_config = BOARD_CONFIGS[args.board] - - remote_ip = parse_remote_arg(args.remote) - - e = ThreadPoolExecutor(max_workers=1) - test_list = get_test_list(board_config, args.tests) - logging.debug( - 'Running tests: %s', [ - test.config_name for test in test_list]) - - for test in test_list: - build_board = args.board - # If test provides this information, build image for board specified - # by test. - if test.build_board is not None: - build_board = test.build_board - - # build test binary - build(test.test_name, build_board, args.compiler) - - image_path = os.path.join(EC_DIR, 'build', build_board, test.test_name, - test.test_name + '.bin') - - if test.ro_image is not None: - try: - patch_image(test, image_path) - except Exception as exception: - logging.warning('An exception occurred while patching ' - 'image: %s', exception) - test.passed = False - continue - - # flash test binary - # TODO(b/158327221): First attempt to flash fails after - # flash_write_protect test is run; works after second attempt. - flash_succeeded = False - for i in range(0, test.num_flash_attempts): - logging.debug('Flash attempt %d', i + 1) - if flash(image_path, args.board, args.flasher, remote_ip, - args.jlink_port): - flash_succeeded = True - break - time.sleep(1) - - if not flash_succeeded: - logging.debug('Flashing failed after max attempts: %d', - test.num_flash_attempts) - test.passed = False - continue - - if test.toggle_power: - power(board_config, on=False) - time.sleep(1) - power(board_config, on=True) - - hw_write_protect(test.enable_hw_write_protect) - - # run the test - logging.info('Running test: "%s"', test.config_name) - - with ExitStack() as stack: - if remote_ip and args.console_port: - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.connect((remote_ip, args.console_port)) - console = stack.enter_context( - s.makefile(mode='rwb', buffering=0)) + logging.debug("Running tests: %s", [test.config_name for test in test_list]) + + with ThreadPoolExecutor(max_workers=1) as e: + for test in test_list: + test.passed = flash_and_run_test(test, board_config, args, e) + + colorama.init() + exit_code = 0 + for test in test_list: + # print results + print('Test "' + test.config_name + '": ', end="") + if test.passed: + print(colorama.Fore.GREEN + "PASSED") else: - console = stack.enter_context( - open(get_console(board_config), 'wb+', buffering=0)) - - test.passed = run_test(test, console, executor=e) - - colorama.init() - exit_code = 0 - for test in test_list: - # print results - print('Test "' + test.config_name + '": ', end='') - if test.passed: - print(colorama.Fore.GREEN + 'PASSED') - else: - print(colorama.Fore.RED + 'FAILED') - exit_code = 1 + print(colorama.Fore.RED + "FAILED") + exit_code = 1 - print(colorama.Style.RESET_ALL) + print(colorama.Style.RESET_ALL) - e.shutdown(wait=False) sys.exit(exit_code) -if __name__ == '__main__': +if __name__ == "__main__": sys.exit(main()) diff --git a/test/sbs_charging_v2.c b/test/sbs_charging_v2.c index 2f9ddee57c..b30f377c67 100644 --- a/test/sbs_charging_v2.c +++ b/test/sbs_charging_v2.c @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -279,7 +279,7 @@ static int test_charge_state(void) TEST_ASSERT(!(flags & CHARGE_FLAG_FORCE_IDLE)); charge_control(CHARGE_CONTROL_IDLE); state = wait_charging_state(); - TEST_ASSERT(state == PWR_STATE_IDLE); + TEST_ASSERT(state == PWR_STATE_FORCED_IDLE); flags = charge_get_flags(); TEST_ASSERT(flags & CHARGE_FLAG_EXTERNAL_POWER); TEST_ASSERT(flags & CHARGE_FLAG_FORCE_IDLE); @@ -293,7 +293,7 @@ static int test_charge_state(void) sb_write(SB_CURRENT, 1000); charge_control(CHARGE_CONTROL_DISCHARGE); state = wait_charging_state(); - TEST_ASSERT(state == PWR_STATE_IDLE); + TEST_ASSERT(state == PWR_STATE_FORCED_IDLE); TEST_ASSERT(is_force_discharge); charge_control(CHARGE_CONTROL_NORMAL); state = wait_charging_state(); @@ -386,7 +386,7 @@ static int test_deep_charge_battery(void) state_v2 = charge_get_state_v2(); TEST_ASSERT(state_v2 == ST_IDLE); - /* recovery from a low voltage. */ + /* recovery from a low voltage. */ sb_write(SB_VOLTAGE, (bat_info->voltage_normal)); wait_charging_state(); state_v2 = charge_get_state_v2(); @@ -490,7 +490,7 @@ static int test_external_funcs(void) /* Now let's force idle on and off */ UART_INJECT("chg idle on\n"); state = wait_charging_state(); - TEST_ASSERT(state == PWR_STATE_IDLE); + TEST_ASSERT(state == PWR_STATE_FORCED_IDLE); flags = charge_get_flags(); TEST_ASSERT(flags & CHARGE_FLAG_EXTERNAL_POWER); TEST_ASSERT(flags & CHARGE_FLAG_FORCE_IDLE); @@ -533,9 +533,8 @@ static int test_hc_charge_state(void) /* Get the state */ memset(&resp, 0, sizeof(resp)); params.cmd = CHARGE_STATE_CMD_GET_STATE; - rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, - ¶ms, sizeof(params), - &resp, sizeof(resp)); + rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, ¶ms, + sizeof(params), &resp, sizeof(resp)); TEST_ASSERT(rv == EC_RES_SUCCESS); TEST_ASSERT(resp.get_state.ac); TEST_ASSERT(resp.get_state.chg_voltage); @@ -545,14 +544,13 @@ static int test_hc_charge_state(void) /* Check all the params */ for (i = 0; i < CS_NUM_BASE_PARAMS; i++) { - /* Read it */ memset(&resp, 0, sizeof(resp)); params.cmd = CHARGE_STATE_CMD_GET_PARAM; params.get_param.param = i; - rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, - ¶ms, sizeof(params), - &resp, sizeof(resp)); + rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, ¶ms, + sizeof(params), &resp, + sizeof(resp)); TEST_ASSERT(rv == EC_RES_SUCCESS); if (i != CS_PARAM_LIMIT_POWER) TEST_ASSERT(resp.get_param.value); @@ -565,7 +563,7 @@ static int test_hc_charge_state(void) case CS_PARAM_CHG_VOLTAGE: case CS_PARAM_CHG_CURRENT: case CS_PARAM_CHG_INPUT_CURRENT: - tmp -= 128; /* Should be valid delta */ + tmp -= 128; /* Should be valid delta */ break; case CS_PARAM_CHG_STATUS: case CS_PARAM_LIMIT_POWER: @@ -578,9 +576,9 @@ static int test_hc_charge_state(void) params.cmd = CHARGE_STATE_CMD_SET_PARAM; params.set_param.param = i; params.set_param.value = tmp; - rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, - ¶ms, sizeof(params), - &resp, sizeof(resp)); + rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, ¶ms, + sizeof(params), &resp, + sizeof(resp)); if (i == CS_PARAM_CHG_STATUS || i == CS_PARAM_LIMIT_POWER) TEST_ASSERT(rv == EC_RES_ACCESS_DENIED); else @@ -593,9 +591,9 @@ static int test_hc_charge_state(void) memset(&resp, 0, sizeof(resp)); params.cmd = CHARGE_STATE_CMD_GET_PARAM; params.get_param.param = i; - rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, - ¶ms, sizeof(params), - &resp, sizeof(resp)); + rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, ¶ms, + sizeof(params), &resp, + sizeof(resp)); TEST_ASSERT(rv == EC_RES_SUCCESS); TEST_ASSERT(resp.get_param.value == tmp); } @@ -605,17 +603,15 @@ static int test_hc_charge_state(void) memset(&resp, 0, sizeof(resp)); params.cmd = CHARGE_STATE_CMD_GET_PARAM; params.get_param.param = CS_PARAM_CUSTOM_PROFILE_MIN; - rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, - ¶ms, sizeof(params), - &resp, sizeof(resp)); + rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, ¶ms, + sizeof(params), &resp, sizeof(resp)); TEST_ASSERT(rv == EC_RES_SUCCESS); TEST_ASSERT(resp.get_param.value == meh); params.cmd = CHARGE_STATE_CMD_SET_PARAM; params.set_param.param = CS_PARAM_CUSTOM_PROFILE_MIN; params.set_param.value = 0xc0def00d; - rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, - ¶ms, sizeof(params), - &resp, sizeof(resp)); + rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, ¶ms, + sizeof(params), &resp, sizeof(resp)); TEST_ASSERT(rv == EC_RES_SUCCESS); /* Allow the change to take effect */ state = wait_charging_state(); @@ -624,23 +620,20 @@ static int test_hc_charge_state(void) /* param out of range */ params.cmd = CHARGE_STATE_CMD_GET_PARAM; params.get_param.param = CS_NUM_BASE_PARAMS; - rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, - ¶ms, sizeof(params), - &resp, sizeof(resp)); + rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, ¶ms, + sizeof(params), &resp, sizeof(resp)); TEST_ASSERT(rv == EC_RES_INVALID_PARAM); params.cmd = CHARGE_STATE_CMD_SET_PARAM; params.set_param.param = CS_NUM_BASE_PARAMS; - params.set_param.value = 0x1000; /* random value */ - rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, - ¶ms, sizeof(params), - &resp, sizeof(resp)); + params.set_param.value = 0x1000; /* random value */ + rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, ¶ms, + sizeof(params), &resp, sizeof(resp)); TEST_ASSERT(rv == EC_RES_INVALID_PARAM); /* command out of range */ params.cmd = CHARGE_STATE_NUM_CMDS; - rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, - ¶ms, sizeof(params), - &resp, sizeof(resp)); + rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, ¶ms, + sizeof(params), &resp, sizeof(resp)); TEST_ASSERT(rv == EC_RES_INVALID_PARAM); /* @@ -665,40 +658,38 @@ static int test_hc_current_limit(void) /* See what current the charger is delivering */ cs_params.cmd = CHARGE_STATE_CMD_GET_STATE; - rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, - &cs_params, sizeof(cs_params), - &cs_resp, sizeof(cs_resp)); + rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, &cs_params, + sizeof(cs_params), &cs_resp, + sizeof(cs_resp)); TEST_ASSERT(rv == EC_RES_SUCCESS); norm_current = cs_resp.get_state.chg_current; /* Lower it a bit */ lower_current = norm_current - 256; cl_params.limit = lower_current; - rv = test_send_host_command(EC_CMD_CHARGE_CURRENT_LIMIT, 0, - &cl_params, sizeof(cl_params), - 0, 0); + rv = test_send_host_command(EC_CMD_CHARGE_CURRENT_LIMIT, 0, &cl_params, + sizeof(cl_params), 0, 0); TEST_ASSERT(rv == EC_RES_SUCCESS); wait_charging_state(); /* See that it's changed */ - rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, - &cs_params, sizeof(cs_params), - &cs_resp, sizeof(cs_resp)); + rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, &cs_params, + sizeof(cs_params), &cs_resp, + sizeof(cs_resp)); TEST_ASSERT(rv == EC_RES_SUCCESS); TEST_ASSERT(lower_current == cs_resp.get_state.chg_current); /* Remove the limit */ cl_params.limit = -1U; - rv = test_send_host_command(EC_CMD_CHARGE_CURRENT_LIMIT, 0, - &cl_params, sizeof(cl_params), - 0, 0); + rv = test_send_host_command(EC_CMD_CHARGE_CURRENT_LIMIT, 0, &cl_params, + sizeof(cl_params), 0, 0); TEST_ASSERT(rv == EC_RES_SUCCESS); wait_charging_state(); /* See that it's back */ - rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, - &cs_params, sizeof(cs_params), - &cs_resp, sizeof(cs_resp)); + rv = test_send_host_command(EC_CMD_CHARGE_STATE, 0, &cs_params, + sizeof(cs_params), &cs_resp, + sizeof(cs_resp)); TEST_ASSERT(rv == EC_RES_SUCCESS); TEST_ASSERT(norm_current == cs_resp.get_state.chg_current); @@ -734,7 +725,8 @@ static int test_low_battery_hostevents(void) TEST_ASSERT(!is_shutdown); /* (Shout) a little bit louder now */ - sb_write(SB_RELATIVE_STATE_OF_CHARGE, BATTERY_LEVEL_CRITICAL + 1); + sb_write(SB_RELATIVE_STATE_OF_CHARGE, + CONFIG_BATT_HOST_SHUTDOWN_PERCENTAGE + 1); state = wait_charging_state(); TEST_ASSERT(state == PWR_STATE_DISCHARGE); TEST_ASSERT(ev_is_set(EC_HOST_EVENT_BATTERY_LOW)); @@ -743,7 +735,8 @@ static int test_low_battery_hostevents(void) TEST_ASSERT(!is_shutdown); /* (Shout) a little bit louder now */ - sb_write(SB_RELATIVE_STATE_OF_CHARGE, BATTERY_LEVEL_CRITICAL - 1); + sb_write(SB_RELATIVE_STATE_OF_CHARGE, + CONFIG_BATT_HOST_SHUTDOWN_PERCENTAGE - 1); state = wait_charging_state(); TEST_ASSERT(state == PWR_STATE_DISCHARGE); TEST_ASSERT(ev_is_set(EC_HOST_EVENT_BATTERY_LOW)); @@ -789,13 +782,13 @@ static int test_battery_sustainer(void) p.mode = CHARGE_CONTROL_NORMAL; p.sustain_soc.lower = 79; p.sustain_soc.upper = 80; - rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, - &p, sizeof(p), NULL, 0); + rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, &p, sizeof(p), + NULL, 0); TEST_ASSERT(rv == EC_RES_SUCCESS); p.cmd = EC_CHARGE_CONTROL_CMD_GET; - rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, - &p, sizeof(p), &r, sizeof(r)); + rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, &p, sizeof(p), &r, + sizeof(r)); TEST_ASSERT(rv == EC_RES_SUCCESS); TEST_ASSERT(r.sustain_soc.lower == 79); TEST_ASSERT(r.sustain_soc.upper == 80); @@ -854,8 +847,8 @@ static int test_battery_sustainer(void) p.mode = CHARGE_CONTROL_NORMAL; p.sustain_soc.lower = 79; p.sustain_soc.upper = 80; - rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, - &p, sizeof(p), NULL, 0); + rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, &p, sizeof(p), + NULL, 0); TEST_ASSERT(rv == EC_RES_SUCCESS); wait_charging_state(); TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_DISCHARGE); @@ -876,8 +869,8 @@ static int test_battery_sustainer(void) p.mode = CHARGE_CONTROL_NORMAL; p.sustain_soc.lower = 79; p.sustain_soc.upper = 80; - rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, - &p, sizeof(p), NULL, 0); + rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, &p, sizeof(p), + NULL, 0); TEST_ASSERT(rv == EC_RES_SUCCESS); wait_charging_state(); TEST_ASSERT(get_chg_ctrl_mode() == CHARGE_CONTROL_DISCHARGE); @@ -898,8 +891,8 @@ static int test_battery_sustainer_discharge_idle(void) p.mode = CHARGE_CONTROL_NORMAL; p.sustain_soc.lower = 80; p.sustain_soc.upper = 80; - rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, - &p, sizeof(p), NULL, 0); + rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, &p, sizeof(p), + NULL, 0); TEST_ASSERT(rv == EC_RES_SUCCESS); /* Check mode transition as the SoC changes. */ @@ -939,8 +932,8 @@ static int test_battery_sustainer_discharge_idle(void) p.mode = CHARGE_CONTROL_NORMAL; p.sustain_soc.lower = -1; p.sustain_soc.upper = -1; - rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, - &p, sizeof(p), NULL, 0); + rv = test_send_host_command(EC_CMD_CHARGE_CONTROL, 2, &p, sizeof(p), + NULL, 0); TEST_ASSERT(rv == EC_RES_SUCCESS); /* This time, mode will stay in NORMAL even when upper < SoC. */ @@ -951,7 +944,7 @@ static int test_battery_sustainer_discharge_idle(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { RUN_TEST(test_charge_state); RUN_TEST(test_low_battery); diff --git a/test/sbs_charging_v2.tasklist b/test/sbs_charging_v2.tasklist index 3895762986..202541188f 100644 --- a/test/sbs_charging_v2.tasklist +++ b/test/sbs_charging_v2.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/scratchpad.c b/test/scratchpad.c index 1bea76f7a1..c023f1dc72 100644 --- a/test/scratchpad.c +++ b/test/scratchpad.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -27,7 +27,7 @@ test_static int test_scratchpad(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { RUN_TEST(test_scratchpad); test_print_result(); diff --git a/test/scratchpad.tasklist b/test/scratchpad.tasklist index 51734f058d..a1f1a94e2d 100644 --- a/test/scratchpad.tasklist +++ b/test/scratchpad.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/sha256.c b/test/sha256.c index 105ae8fec5..4b5326d189 100644 --- a/test/sha256.c +++ b/test/sha256.c @@ -1,4 +1,4 @@ -/* Copyright 2017 The Chromium OS Authors. All rights reserved. +/* Copyright 2017 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -12,23 +12,20 @@ #include "util.h" /* Short Msg from NIST FIPS 180-4 (Len = 8) */ -static const uint8_t sha256_8_input[] = { - 0xd3 -}; +static const uint8_t sha256_8_input[] = { 0xd3 }; static const uint8_t sha256_8_output[SHA256_DIGEST_SIZE] = { - 0x28, 0x96, 0x9c, 0xdf, 0xa7, 0x4a, 0x12, 0xc8, 0x2f, 0x3b, 0xad, 0x96, - 0x0b, 0x0b, 0x00, 0x0a, 0xca, 0x2a, 0xc3, 0x29, 0xde, 0xea, 0x5c, 0x23, - 0x28, 0xeb, 0xc6, 0xf2, 0xba, 0x98, 0x02, 0xc1 + 0x28, 0x96, 0x9c, 0xdf, 0xa7, 0x4a, 0x12, 0xc8, 0x2f, 0x3b, 0xad, + 0x96, 0x0b, 0x0b, 0x00, 0x0a, 0xca, 0x2a, 0xc3, 0x29, 0xde, 0xea, + 0x5c, 0x23, 0x28, 0xeb, 0xc6, 0xf2, 0xba, 0x98, 0x02, 0xc1 }; /* Short Msg from NIST FIPS 180-4 (Len = 72) */ -static const uint8_t sha256_72_input[] = { - 0x33, 0x34, 0xc5, 0x80, 0x75, 0xd3, 0xf4, 0x13, 0x9e -}; +static const uint8_t sha256_72_input[] = { 0x33, 0x34, 0xc5, 0x80, 0x75, + 0xd3, 0xf4, 0x13, 0x9e }; static const uint8_t sha256_72_output[SHA256_DIGEST_SIZE] = { - 0x07, 0x8d, 0xa3, 0xd7, 0x7e, 0xd4, 0x3b, 0xd3, 0x03, 0x7a, 0x43, 0x3f, - 0xd0, 0x34, 0x18, 0x55, 0x02, 0x37, 0x93, 0xf9, 0xaf, 0xd0, 0x8b, 0x4b, - 0x08, 0xea, 0x1e, 0x55, 0x97, 0xce, 0xef, 0x20 + 0x07, 0x8d, 0xa3, 0xd7, 0x7e, 0xd4, 0x3b, 0xd3, 0x03, 0x7a, 0x43, + 0x3f, 0xd0, 0x34, 0x18, 0x55, 0x02, 0x37, 0x93, 0xf9, 0xaf, 0xd0, + 0x8b, 0x4b, 0x08, 0xea, 0x1e, 0x55, 0x97, 0xce, 0xef, 0x20 }; /* Long Msg from NIST FIPS 180-4 (Len = 2888) */ @@ -66,9 +63,9 @@ static const uint8_t sha256_2888_input[] = { 0x93 }; static const uint8_t sha256_2888_output[SHA256_DIGEST_SIZE] = { - 0x5f, 0x4e, 0x16, 0xa7, 0x2d, 0x6c, 0x98, 0x57, 0xda, 0x0b, 0xa0, 0x09, - 0xcc, 0xac, 0xd4, 0xf2, 0x6d, 0x7f, 0x6b, 0xf6, 0xc1, 0xb7, 0x8a, 0x2e, - 0xd3, 0x5e, 0x68, 0xfc, 0xb1, 0x5b, 0x8e, 0x40 + 0x5f, 0x4e, 0x16, 0xa7, 0x2d, 0x6c, 0x98, 0x57, 0xda, 0x0b, 0xa0, + 0x09, 0xcc, 0xac, 0xd4, 0xf2, 0x6d, 0x7f, 0x6b, 0xf6, 0xc1, 0xb7, + 0x8a, 0x2e, 0xd3, 0x5e, 0x68, 0xfc, 0xb1, 0x5b, 0x8e, 0x40 }; /* HMAC short key (40 bytes) from NIST FIPS 198-1 (Count = 34) */ @@ -86,15 +83,15 @@ static const uint8_t hmac_short_msg[] = { 0x03, 0x2b, 0x31, 0xd2, 0x41, 0xad, 0x33, 0x71 }; static const uint8_t hmac_short_key[] = { - 0x9d, 0xa0, 0xc1, 0x14, 0x68, 0x2f, 0x82, 0xc1, 0xd1, 0xe9, 0xb5, 0x44, - 0x30, 0x58, 0x0b, 0x9c, 0x56, 0x94, 0x89, 0xca, 0x16, 0xb9, 0x2e, 0xe1, - 0x04, 0x98, 0xd5, 0x5d, 0x7c, 0xad, 0x5d, 0xb5, 0xe6, 0x52, 0x06, 0x34, - 0x39, 0x31, 0x1e, 0x04 + 0x9d, 0xa0, 0xc1, 0x14, 0x68, 0x2f, 0x82, 0xc1, 0xd1, 0xe9, + 0xb5, 0x44, 0x30, 0x58, 0x0b, 0x9c, 0x56, 0x94, 0x89, 0xca, + 0x16, 0xb9, 0x2e, 0xe1, 0x04, 0x98, 0xd5, 0x5d, 0x7c, 0xad, + 0x5d, 0xb5, 0xe6, 0x52, 0x06, 0x34, 0x39, 0x31, 0x1e, 0x04 }; static const uint8_t hmac_short_output[] = { - 0xcd, 0xea, 0xcf, 0xce, 0xbf, 0x46, 0xcc, 0x9d, 0x7e, 0x4d, 0x41, 0x75, - 0xe5, 0xd8, 0xd2, 0x67, 0xc2, 0x3a, 0x64, 0xcd, 0xe8, 0x3e, 0x86, 0x7e, - 0x50, 0x01, 0xec, 0xf2, 0x6f, 0xbd, 0x30, 0xd2 + 0xcd, 0xea, 0xcf, 0xce, 0xbf, 0x46, 0xcc, 0x9d, 0x7e, 0x4d, 0x41, + 0x75, 0xe5, 0xd8, 0xd2, 0x67, 0xc2, 0x3a, 0x64, 0xcd, 0xe8, 0x3e, + 0x86, 0x7e, 0x50, 0x01, 0xec, 0xf2, 0x6f, 0xbd, 0x30, 0xd2 }; /* HMAC medium key (64 bytes) from NIST FIPS 198-1 (Count = 120) */ @@ -112,17 +109,17 @@ static const uint8_t hmac_medium_msg[] = { 0x85, 0x46, 0x80, 0x4f, 0x9c, 0xf2, 0xec, 0xfe }; static const uint8_t hmac_medium_key[] = { - 0x99, 0x28, 0x68, 0x50, 0x4d, 0x25, 0x64, 0xc4, 0xfb, 0x47, 0xbc, 0xbd, - 0x4a, 0xe4, 0x82, 0xd8, 0xfb, 0x0e, 0x8e, 0x56, 0xd7, 0xb8, 0x18, 0x64, - 0xe6, 0x19, 0x86, 0xa0, 0xe2, 0x56, 0x82, 0xda, 0xeb, 0x5b, 0x50, 0x17, - 0x7c, 0x09, 0x5e, 0xdc, 0x9e, 0x97, 0x1d, 0xa9, 0x5c, 0x32, 0x10, 0xc3, - 0x76, 0xe7, 0x23, 0x36, 0x5a, 0xc3, 0x3d, 0x1b, 0x4f, 0x39, 0x18, 0x17, - 0xf4, 0xc3, 0x51, 0x24 + 0x99, 0x28, 0x68, 0x50, 0x4d, 0x25, 0x64, 0xc4, 0xfb, 0x47, 0xbc, + 0xbd, 0x4a, 0xe4, 0x82, 0xd8, 0xfb, 0x0e, 0x8e, 0x56, 0xd7, 0xb8, + 0x18, 0x64, 0xe6, 0x19, 0x86, 0xa0, 0xe2, 0x56, 0x82, 0xda, 0xeb, + 0x5b, 0x50, 0x17, 0x7c, 0x09, 0x5e, 0xdc, 0x9e, 0x97, 0x1d, 0xa9, + 0x5c, 0x32, 0x10, 0xc3, 0x76, 0xe7, 0x23, 0x36, 0x5a, 0xc3, 0x3d, + 0x1b, 0x4f, 0x39, 0x18, 0x17, 0xf4, 0xc3, 0x51, 0x24 }; static const uint8_t hmac_medium_output[] = { - 0x2f, 0x83, 0x21, 0xf4, 0x16, 0xb9, 0xbb, 0x24, 0x9f, 0x11, 0x3b, 0x13, - 0xfc, 0x12, 0xd7, 0x0e, 0x16, 0x68, 0xdc, 0x33, 0x28, 0x39, 0xc1, 0x0d, - 0xaa, 0x57, 0x17, 0x89, 0x6c, 0xb7, 0x0d, 0xdf + 0x2f, 0x83, 0x21, 0xf4, 0x16, 0xb9, 0xbb, 0x24, 0x9f, 0x11, 0x3b, + 0x13, 0xfc, 0x12, 0xd7, 0x0e, 0x16, 0x68, 0xdc, 0x33, 0x28, 0x39, + 0xc1, 0x0d, 0xaa, 0x57, 0x17, 0x89, 0x6c, 0xb7, 0x0d, 0xdf }; static int test_sha256(const uint8_t *input, int input_len, @@ -156,9 +153,8 @@ static int test_sha256(const uint8_t *input, int input_len, return 1; } -static int test_hmac(const uint8_t *key, int key_len, - const uint8_t *input, int input_len, - const uint8_t *output) +static int test_hmac(const uint8_t *key, int key_len, const uint8_t *input, + int input_len, const uint8_t *output) { uint8_t tmp[SHA256_DIGEST_SIZE]; @@ -172,7 +168,7 @@ static int test_hmac(const uint8_t *key, int key_len, return 1; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { ccprintf("Testing short message (8 bytes)\n"); if (!test_sha256(sha256_8_input, sizeof(sha256_8_input), @@ -196,9 +192,8 @@ void run_test(int argc, char **argv) } ccprintf("HMAC: Testing short key\n"); - if (!test_hmac(hmac_short_key, sizeof(hmac_short_key), - hmac_short_msg, sizeof(hmac_short_msg), - hmac_short_output)) { + if (!test_hmac(hmac_short_key, sizeof(hmac_short_key), hmac_short_msg, + sizeof(hmac_short_msg), hmac_short_output)) { test_fail(); return; } diff --git a/test/sha256.tasklist b/test/sha256.tasklist index 80072bb620..329f9a3d28 100644 --- a/test/sha256.tasklist +++ b/test/sha256.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2017 The Chromium OS Authors. All rights reserved. +/* Copyright 2017 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/shmalloc.c b/test/shmalloc.c index a596d173e7..899876ab43 100644 --- a/test/shmalloc.c +++ b/test/shmalloc.c @@ -1,5 +1,5 @@ /* - * Copyright 2016 The Chromium OS Authors. All rights reserved. + * Copyright 2016 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -36,14 +36,14 @@ static uint32_t next = 127; static uint32_t myrand(void) { next = next * 1103515245 + 12345; - return ((uint32_t)(next/65536) % 32768); + return ((uint32_t)(next / 65536) % 32768); } /* Keep track of buffers allocated by the test function. */ static struct { void *buf; size_t buffer_size; -} allocations[12]; /* Up to 12 buffers could be allocated concurrently. */ +} allocations[12]; /* Up to 12 buffers could be allocated concurrently. */ /* * Verify that allocated and free buffers do not overlap, and that our and @@ -77,8 +77,7 @@ static int check_for_overlaps(void) * multiple times to keep things simple. */ allocated_count = 0; - for (allocced_buf = allocced_buf_chain; - allocced_buf; + for (allocced_buf = allocced_buf_chain; allocced_buf; allocced_buf = allocced_buf->next_buffer) { int allocated_size, allocation_size; @@ -112,13 +111,13 @@ static int check_for_overlaps(void) } } if (!allocation_match) { - ccprintf("missing match %pP!\n", allocations[i].buf); + ccprintf("missing match %p!\n", allocations[i].buf); return 0; } } if (allocations_count != allocated_count) { - ccprintf("count mismatch (%d != %d)!\n", - allocations_count, allocated_count); + ccprintf("count mismatch (%d != %d)!\n", allocations_count, + allocated_count); return 0; } return 1; @@ -137,7 +136,7 @@ static int shmem_is_ok(int line) struct shm_buffer *pbuf = free_buf_chain; if (pbuf && pbuf->prev_buffer) { - ccprintf("Bad free buffer list start %pP\n", pbuf); + ccprintf("Bad free buffer list start %p\n", pbuf); goto bailout; } @@ -146,20 +145,20 @@ static int shmem_is_ok(int line) running_size += pbuf->buffer_size; if (count++ > 100) - goto bailout; /* Is there a loop? */ + goto bailout; /* Is there a loop? */ top = (struct shm_buffer *)((uintptr_t)pbuf + - pbuf->buffer_size); + pbuf->buffer_size); if (pbuf->next_buffer) { if (top >= pbuf->next_buffer) { ccprintf("%s:%d" - " - inconsistent buffer size at %pP\n", + " - inconsistent buffer size at %p\n", __func__, __LINE__, pbuf); goto bailout; } if (pbuf->next_buffer->prev_buffer != pbuf) { ccprintf("%s:%d" - " - inconsistent next buffer at %pP\n", + " - inconsistent next buffer at %p\n", __func__, __LINE__, pbuf); goto bailout; } @@ -193,7 +192,7 @@ static int shmem_is_ok(int line) return 1; - bailout: +bailout: ccprintf("Line %d, counter %d. The list has been corrupted, " "total size %d, running size %d\n", line, counter, total_size, running_size); @@ -207,7 +206,7 @@ static int shmem_is_ok(int line) */ static uint32_t test_map; -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { int index; const int shmem_size = shared_mem_size(); @@ -229,8 +228,7 @@ void run_test(int argc, char **argv) if (test_map & ~ALL_PATHS_MASK) { ccprintf("Unexpected mask bits set: %x" ", counter %d\n", - test_map & ~ALL_PATHS_MASK, - counter); + test_map & ~ALL_PATHS_MASK, counter); test_fail(); return; } @@ -261,7 +259,7 @@ void run_test(int argc, char **argv) */ if (shared_mem_acquire(alloc_size, &shptr) == EC_SUCCESS) { - allocations[index].buf = (void *) shptr; + allocations[index].buf = (void *)shptr; allocations[index].buffer_size = alloc_size; /* @@ -269,8 +267,8 @@ void run_test(int argc, char **argv) * modified. */ while (alloc_size--) - shptr[alloc_size] = - shptr[alloc_size] ^ 0xff; + shptr[alloc_size] = shptr[alloc_size] ^ + 0xff; if (!shmem_is_ok(__LINE__)) { test_fail(); @@ -294,8 +292,8 @@ void run_test(int argc, char **argv) } } - ccprintf("Did not pass all paths, map %x != %x\n", - test_map, ALL_PATHS_MASK); + ccprintf("Did not pass all paths, map %x != %x\n", test_map, + ALL_PATHS_MASK); test_fail(); } diff --git a/test/shmalloc.tasklist b/test/shmalloc.tasklist index a8ef01a489..1413e373b1 100644 --- a/test/shmalloc.tasklist +++ b/test/shmalloc.tasklist @@ -1,5 +1,5 @@ /* - * Copyright 2016 The Chromium OS Authors. All rights reserved. + * Copyright 2016 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/static_if.c b/test/static_if.c index f70f7d30c3..9e8b9db465 100644 --- a/test/static_if.c +++ b/test/static_if.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -39,7 +39,7 @@ static int test_static_if_unused_no_fail(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/static_if.tasklist b/test/static_if.tasklist index 5ffe662d01..2d4595f76a 100644 --- a/test/static_if.tasklist +++ b/test/static_if.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/static_if_error.c b/test/static_if_error.c index 65882b3bbd..99765ece99 100644 --- a/test/static_if_error.c +++ b/test/static_if_error.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -24,7 +24,7 @@ /* This is intended to cause a compilation error. */ TEST_MACRO(CONFIG_FOO) __maybe_unused int foo; -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/static_if_error.sh b/test/static_if_error.sh index efc7cd3e1e..ef17780f4c 100644 --- a/test/static_if_error.sh +++ b/test/static_if_error.sh @@ -1,5 +1,5 @@ #!/bin/bash -e -# Copyright 2019 The Chromium OS Authors. All rights reserved. +# Copyright 2019 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. diff --git a/test/static_if_error.tasklist b/test/static_if_error.tasklist index 5ffe662d01..2d4595f76a 100644 --- a/test/static_if_error.tasklist +++ b/test/static_if_error.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/stdlib.c b/test/stdlib.c new file mode 100644 index 0000000000..efff64829d --- /dev/null +++ b/test/stdlib.c @@ -0,0 +1,520 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Test standard library functions. + */ + +#include "common.h" +#include "console.h" +#include "system.h" +#include "printf.h" +#include "shared_mem.h" +#include "test_util.h" +#include "timer.h" +#include "util.h" + +#ifdef USE_BUILTIN_STDLIB +static const bool use_builtin_stdlib = true; +#else +static const bool use_builtin_stdlib = false; +#endif + +static int test_isalpha(void) +{ + TEST_ASSERT(isalpha('a')); + TEST_ASSERT(isalpha('z')); + TEST_ASSERT(isalpha('A')); + TEST_ASSERT(isalpha('Z')); + TEST_ASSERT(!isalpha('0')); + TEST_ASSERT(!isalpha('~')); + TEST_ASSERT(!isalpha(' ')); + TEST_ASSERT(!isalpha('\0')); + TEST_ASSERT(!isalpha('\n')); + return EC_SUCCESS; +} + +static int test_isprint(void) +{ + TEST_ASSERT(isprint('a')); + TEST_ASSERT(isprint('z')); + TEST_ASSERT(isprint('A')); + TEST_ASSERT(isprint('Z')); + TEST_ASSERT(isprint('0')); + TEST_ASSERT(isprint('~')); + TEST_ASSERT(isprint(' ')); + TEST_ASSERT(!isprint('\0')); + TEST_ASSERT(!isprint('\n')); + return EC_SUCCESS; +} + +static int test_strstr(void) +{ + const char s1[] = "abcde"; + + TEST_ASSERT(strstr(s1, "ab") == s1); + if (use_builtin_stdlib) { + /* + * TODO(http://b/243192369): This is incorrect and should be + * fixed. + */ + TEST_ASSERT(strstr(s1, "") == NULL); + } else { + /* + * From the man page: If needle is the empty string, the return + * value is always haystack itself. + */ + TEST_ASSERT(strstr(s1, "") == s1); + } + TEST_ASSERT(strstr("", "ab") == NULL); + TEST_ASSERT(strstr("", "x") == NULL); + TEST_ASSERT(strstr(s1, "de") == &s1[3]); + TEST_ASSERT(strstr(s1, "def") == NULL); + + return EC_SUCCESS; +} + +static int test_strtoull(void) +{ + char *e; + + TEST_ASSERT(strtoull("10", &e, 0) == 10); + TEST_ASSERT(e && (*e == '\0')); + TEST_ASSERT(strtoull("010", &e, 0) == 8); + TEST_ASSERT(e && (*e == '\0')); + TEST_ASSERT(strtoull("+010", &e, 0) == 8); + TEST_ASSERT(e && (*e == '\0')); + + if (use_builtin_stdlib) { + /* + * TODO(http://b/243192369): This is incorrect and should be + * fixed. + */ + TEST_ASSERT(strtoull("-010", &e, 0) == 0); + TEST_ASSERT(e && (*e == '-')); + } else { + /* + * From the man page: The strtoull() function returns either + * the result of the conversion or, if there was a leading + * minus sign, the negation of the result of the conversion + * represented as an unsigned value, unless the original + * (nonnegated) value would overflow + */ + TEST_ASSERT(strtoull("-010", &e, 0) == 0xFFFFFFFFFFFFFFF8); + } + + TEST_ASSERT(strtoull("0x1f z", &e, 0) == 31); + TEST_ASSERT(e && (*e == ' ')); + TEST_ASSERT(strtoull("0X1f z", &e, 0) == 31); + TEST_ASSERT(e && (*e == ' ')); + TEST_ASSERT(strtoull("10a", &e, 16) == 266); + TEST_ASSERT(e && (*e == '\0')); + TEST_ASSERT(strtoull("0x02C", &e, 16) == 44); + TEST_ASSERT(e && (*e == '\0')); + TEST_ASSERT(strtoull("+0x02C", &e, 16) == 44); + TEST_ASSERT(e && (*e == '\0')); + + if (use_builtin_stdlib) { + /* + * TODO(http://b/243192369): This is incorrect and should be + * fixed. + */ + TEST_ASSERT(strtoull("-0x02C", &e, 16) == 0); + TEST_ASSERT(e && (*e == '-')); + } else { + TEST_ASSERT(strtoull("-0x02C", &e, 16) == 0xFFFFFFFFFFFFFFD4); + } + + TEST_ASSERT(strtoull("0x02C", &e, 0) == 44); + TEST_ASSERT(e && (*e == '\0')); + TEST_ASSERT(strtoull("+0x02C", &e, 0) == 44); + TEST_ASSERT(e && (*e == '\0')); + + if (use_builtin_stdlib) { + /* + * TODO(http://b/243192369): This is incorrect and should be + * fixed. + */ + TEST_ASSERT(strtoull("-0x02C", &e, 0) == 0); + TEST_ASSERT(e && (*e == '-')); + } else { + TEST_ASSERT(strtoull("-0x02C", &e, 0) == 0xFFFFFFFFFFFFFFD4); + } + + TEST_ASSERT(strtoull("0X02C", &e, 16) == 44); + TEST_ASSERT(e && (*e == '\0')); + TEST_ASSERT(strtoull("+0X02C", &e, 16) == 44); + TEST_ASSERT(e && (*e == '\0')); + + if (use_builtin_stdlib) { + /* + * TODO(http://b/243192369): This is incorrect and should be + * fixed. + */ + TEST_ASSERT(strtoull("-0X02C", &e, 16) == 0); + TEST_ASSERT(e && (*e == '-')); + } else { + TEST_ASSERT(strtoull("-0X02C", &e, 16) == 0xFFFFFFFFFFFFFFD4); + } + + TEST_ASSERT(strtoull("0X02C", &e, 0) == 44); + TEST_ASSERT(e && (*e == '\0')); + TEST_ASSERT(strtoull("+0X02C", &e, 0) == 44); + TEST_ASSERT(e && (*e == '\0')); + + if (use_builtin_stdlib) { + /* + * TODO(http://b/243192369): This is incorrect and should be + * fixed. + */ + TEST_ASSERT(strtoull("-0X02C", &e, 0) == 0); + TEST_ASSERT(e && (*e == '-')); + } else { + TEST_ASSERT(strtoull("-0X02C", &e, 0) == 0xFFFFFFFFFFFFFFD4); + } + + if (use_builtin_stdlib) { + /* + * TODO(http://b/243192369): This is incorrect and should be + * fixed. + */ + TEST_ASSERT(strtoull(" -12", &e, 0) == 0); + TEST_ASSERT(e && (*e == '-')); + } else { + TEST_ASSERT(strtoull(" -12", &e, 0) == 0xFFFFFFFFFFFFFFF4); + } + + TEST_ASSERT(strtoull("!", &e, 0) == 0); + TEST_ASSERT(e && (*e == '!')); + + TEST_ASSERT(strtoull("+!", &e, 0) == 0); + if (use_builtin_stdlib) { + /* + * TODO(http://b/243192369): This is incorrect and should be + * fixed. + */ + TEST_ASSERT(e && (*e == '!')); + } else { + TEST_ASSERT(e && (*e == '+')); + } + + TEST_ASSERT(strtoull("+0!", &e, 0) == 0); + TEST_ASSERT(e && (*e == '!')); + + TEST_ASSERT(strtoull("+0x!", &e, 0) == 0); + if (use_builtin_stdlib) { + TEST_ASSERT(e && (*e == '!')); + } else { + if (IS_ENABLED(EMU_BUILD)) + TEST_ASSERT(e && (*e == 'x')); + else + TEST_ASSERT(e && (*e == '+')); + } + + TEST_ASSERT(strtoull("+0X!", &e, 0) == 0); + if (use_builtin_stdlib) { + TEST_ASSERT(e && (*e == '!')); + } else { + if (IS_ENABLED(EMU_BUILD)) + TEST_ASSERT(e && (*e == 'X')); + else + TEST_ASSERT(e && (*e == '+')); + } + + return EC_SUCCESS; +} + +static int test_strncpy(void) +{ + char dest[10]; + + strncpy(dest, "test", 10); + TEST_ASSERT_ARRAY_EQ("test", dest, 5); + strncpy(dest, "12345", 6); + TEST_ASSERT_ARRAY_EQ("12345", dest, 6); + /* + * gcc complains: + * error: ‘__builtin_strncpy’ output truncated copying 10 bytes from a + * string of length 12 [-Werror=stringop-truncation] + */ +#pragma GCC diagnostic push +#if defined(__GNUC__) && __GNUC__ >= 8 +#pragma GCC diagnostic ignored "-Wstringop-truncation" +#endif + strncpy(dest, "testtesttest", 10); +#pragma GCC diagnostic pop + TEST_ASSERT_ARRAY_EQ("testtestte", dest, 10); + + return EC_SUCCESS; +} + +static int test_strncmp(void) +{ + TEST_ASSERT(strncmp("123", "123", 8) == 0); + TEST_ASSERT(strncmp("789", "456", 8) > 0); + TEST_ASSERT(strncmp("abc", "abd", 4) < 0); + TEST_ASSERT(strncmp("abc", "abd", 2) == 0); + return EC_SUCCESS; +} + +static int test_strlen(void) +{ + TEST_ASSERT(strlen("this is a string") == 16); + return EC_SUCCESS; +} + +static int test_strnlen(void) +{ + TEST_ASSERT(strnlen("this is a string", 17) == 16); + TEST_ASSERT(strnlen("this is a string", 16) == 16); + TEST_ASSERT(strnlen("this is a string", 5) == 5); + + return EC_SUCCESS; +} + +static int test_strcasecmp(void) +{ + TEST_ASSERT(strcasecmp("test string", "TEST strIng") == 0); + TEST_ASSERT(strcasecmp("test123!@#", "TesT123!@#") == 0); + TEST_ASSERT(strcasecmp("lower", "UPPER") != 0); + return EC_SUCCESS; +} + +static int test_strncasecmp(void) +{ + TEST_ASSERT(strncasecmp("test string", "TEST str", 4) == 0); + TEST_ASSERT(strncasecmp("test string", "TEST str", 8) == 0); + TEST_ASSERT(strncasecmp("test123!@#", "TesT321!@#", 5) != 0); + TEST_ASSERT(strncasecmp("test123!@#", "TesT321!@#", 4) == 0); + TEST_ASSERT(strncasecmp("1test123!@#", "1TesT321!@#", 5) == 0); + TEST_ASSERT(strncasecmp("1test123", "teststr", 0) == 0); + return EC_SUCCESS; +} + +static int test_atoi(void) +{ + TEST_ASSERT(atoi(" 901") == 901); + TEST_ASSERT(atoi("-12c") == -12); + TEST_ASSERT(atoi(" 0 ") == 0); + TEST_ASSERT(atoi("\t111") == 111); + return EC_SUCCESS; +} + +static int test_snprintf(void) +{ + char buffer[32]; + + TEST_ASSERT(snprintf(buffer, sizeof(buffer), "%u", 1234) == 4); + TEST_ASSERT(strncmp(buffer, "1234", sizeof(buffer)) == 0); + return EC_SUCCESS; +} + +static int test_strcspn(void) +{ + const char str1[] = "abc"; + const char str2[] = "This is a string\nwith newlines!"; + + TEST_EQ(strcspn(str1, "a"), (size_t)0, "%zu"); + TEST_EQ(strcspn(str1, "b"), (size_t)1, "%zu"); + TEST_EQ(strcspn(str1, "c"), (size_t)2, "%zu"); + TEST_EQ(strcspn(str1, "ccc"), (size_t)2, "%zu"); + TEST_EQ(strcspn(str1, "cba"), (size_t)0, "%zu"); + TEST_EQ(strcspn(str1, "cb"), (size_t)1, "%zu"); + TEST_EQ(strcspn(str1, "bc"), (size_t)1, "%zu"); + TEST_EQ(strcspn(str1, "cbc"), (size_t)1, "%zu"); + TEST_EQ(strcspn(str1, "z"), strlen(str1), "%zu"); + TEST_EQ(strcspn(str1, "xyz"), strlen(str1), "%zu"); + TEST_EQ(strcspn(str1, ""), strlen(str1), "%zu"); + + TEST_EQ(strcspn(str2, " "), (size_t)4, "%zu"); + TEST_EQ(strcspn(str2, "\n"), (size_t)16, "%zu"); + TEST_EQ(strcspn(str2, "\n "), (size_t)4, "%zu"); + TEST_EQ(strcspn(str2, "!"), strlen(str2) - 1, "%zu"); + TEST_EQ(strcspn(str2, "z"), strlen(str2), "%zu"); + TEST_EQ(strcspn(str2, "z!"), strlen(str2) - 1, "%zu"); + + return EC_SUCCESS; +} + +static int test_memmove(void) +{ + int i; + timestamp_t t0, t1, t2, t3; + char *buf; + const int buf_size = 1000; + const int len = 400; + const int iteration = 1000; + + TEST_ASSERT(shared_mem_acquire(buf_size, &buf) == EC_SUCCESS); + + for (i = 0; i < len; ++i) + buf[i] = i & 0x7f; + for (i = len; i < buf_size; ++i) + buf[i] = 0; + + t0 = get_time(); + for (i = 0; i < iteration; ++i) + memmove(buf + 101, buf, len); /* unaligned */ + t1 = get_time(); + TEST_ASSERT_ARRAY_EQ(buf + 101, buf, len); + ccprintf(" (speed gain: %" PRId64 " ->", t1.val - t0.val); + + t2 = get_time(); + for (i = 0; i < iteration; ++i) + memmove(buf + 100, buf, len); /* aligned */ + t3 = get_time(); + ccprintf(" %" PRId64 " us) ", t3.val - t2.val); + TEST_ASSERT_ARRAY_EQ(buf + 100, buf, len); + + if (!IS_ENABLED(EMU_BUILD) && use_builtin_stdlib) + TEST_ASSERT((t1.val - t0.val) > (t3.val - t2.val)); + + /* Test small moves */ + memmove(buf + 1, buf, 1); + TEST_ASSERT_ARRAY_EQ(buf + 1, buf, 1); + memmove(buf + 5, buf, 4); + memmove(buf + 1, buf, 4); + TEST_ASSERT_ARRAY_EQ(buf + 1, buf + 5, 4); + + shared_mem_release(buf); + return EC_SUCCESS; +} + +static int test_memcpy(void) +{ + int i; + timestamp_t t0, t1, t2, t3; + char *buf; + const int buf_size = 1000; + const int len = 400; + const int dest_offset = 500; + const int iteration = 1000; + + TEST_ASSERT(shared_mem_acquire(buf_size, &buf) == EC_SUCCESS); + + for (i = 0; i < len; ++i) + buf[i] = i & 0x7f; + for (i = len; i < buf_size; ++i) + buf[i] = 0; + + t0 = get_time(); + for (i = 0; i < iteration; ++i) + memcpy(buf + dest_offset + 1, buf, len); /* unaligned */ + t1 = get_time(); + TEST_ASSERT_ARRAY_EQ(buf + dest_offset + 1, buf, len); + ccprintf(" (speed gain: %" PRId64 " ->", t1.val - t0.val); + + t2 = get_time(); + for (i = 0; i < iteration; ++i) + memcpy(buf + dest_offset, buf, len); /* aligned */ + t3 = get_time(); + ccprintf(" %" PRId64 " us) ", t3.val - t2.val); + TEST_ASSERT_ARRAY_EQ(buf + dest_offset, buf, len); + + if (!IS_ENABLED(EMU_BUILD)) + TEST_ASSERT((t1.val - t0.val) > (t3.val - t2.val)); + + memcpy(buf + dest_offset + 1, buf + 1, len - 1); + TEST_ASSERT_ARRAY_EQ(buf + dest_offset + 1, buf + 1, len - 1); + + /* Test small copies */ + memcpy(buf + dest_offset, buf, 1); + TEST_ASSERT_ARRAY_EQ(buf + dest_offset, buf, 1); + memcpy(buf + dest_offset, buf, 4); + TEST_ASSERT_ARRAY_EQ(buf + dest_offset, buf, 4); + memcpy(buf + dest_offset + 1, buf, 1); + TEST_ASSERT_ARRAY_EQ(buf + dest_offset + 1, buf, 1); + memcpy(buf + dest_offset + 1, buf, 4); + TEST_ASSERT_ARRAY_EQ(buf + dest_offset + 1, buf, 4); + + shared_mem_release(buf); + return EC_SUCCESS; +} + +/* Plain memset, used as a reference to measure speed gain */ +static void *dumb_memset(void *dest, int c, int len) +{ + char *d = (char *)dest; + while (len > 0) { + *(d++) = c; + len--; + } + return dest; +} + +static int test_memset(void) +{ + int i; + timestamp_t t0, t1, t2, t3; + char *buf; + const int buf_size = 1000; + const int len = 400; + const int iteration = 1000; + + TEST_ASSERT(shared_mem_acquire(buf_size, &buf) == EC_SUCCESS); + + t0 = get_time(); + for (i = 0; i < iteration; ++i) + dumb_memset(buf, 1, len); + t1 = get_time(); + TEST_ASSERT_MEMSET(buf, (char)1, len); + ccprintf(" (speed gain: %" PRId64 " ->", t1.val - t0.val); + + t2 = get_time(); + for (i = 0; i < iteration; ++i) + memset(buf, 1, len); + t3 = get_time(); + TEST_ASSERT_MEMSET(buf, (char)1, len); + ccprintf(" %" PRId64 " us) ", t3.val - t2.val); + + if (!IS_ENABLED(EMU_BUILD)) + TEST_ASSERT((t1.val - t0.val) > (t3.val - t2.val)); + + memset(buf, 128, len); + TEST_ASSERT_MEMSET(buf, (char)128, len); + + memset(buf, -2, len); + TEST_ASSERT_MEMSET(buf, (char)-2, len); + + memset(buf + 1, 1, len - 2); + TEST_ASSERT_MEMSET(buf + 1, (char)1, len - 2); + + shared_mem_release(buf); + return EC_SUCCESS; +} + +static int test_memchr(void) +{ + char *buf = "1234"; + + TEST_ASSERT(memchr("123567890", '4', 8) == NULL); + TEST_ASSERT(memchr("123", '3', 2) == NULL); + TEST_ASSERT(memchr(buf, '3', 4) == buf + 2); + TEST_ASSERT(memchr(buf, '4', 4) == buf + 3); + return EC_SUCCESS; +} + +void run_test(int argc, const char **argv) +{ + test_reset(); + + RUN_TEST(test_isalpha); + RUN_TEST(test_isprint); + RUN_TEST(test_strstr); + RUN_TEST(test_strtoull); + RUN_TEST(test_strncpy); + RUN_TEST(test_strncmp); + RUN_TEST(test_strlen); + RUN_TEST(test_strnlen); + RUN_TEST(test_strcasecmp); + RUN_TEST(test_strncasecmp); + RUN_TEST(test_atoi); + RUN_TEST(test_snprintf); + RUN_TEST(test_strcspn); + RUN_TEST(test_memmove); + RUN_TEST(test_memcpy); + RUN_TEST(test_memset); + RUN_TEST(test_memchr); + + test_print_result(); +} diff --git a/test/stdlib.tasklist b/test/stdlib.tasklist new file mode 100644 index 0000000000..1154b1ae8b --- /dev/null +++ b/test/stdlib.tasklist @@ -0,0 +1,9 @@ +/* Copyright 2022 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/** + * See CONFIG_TASK_LIST in config.h for details. + */ +#define CONFIG_TEST_TASK_LIST /* No test task */ diff --git a/test/stillness_detector.c b/test/stillness_detector.c index 57057e217e..8858d751d7 100644 --- a/test/stillness_detector.c +++ b/test/stillness_detector.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -35,8 +35,8 @@ static int test_not_still_short_window(void) int i; for (i = 0; i < 6; ++i) - TEST_ASSERT(!still_det_update(&det, i * 100 * MSEC, - 0.0f, 0.0f, 0.0f)); + TEST_ASSERT(!still_det_update(&det, i * 100 * MSEC, 0.0f, 0.0f, + 0.0f)); return EC_SUCCESS; } @@ -47,8 +47,8 @@ static int test_not_still_long_window(void) int i; for (i = 0; i < 5; ++i) - TEST_ASSERT(!still_det_update(&det, i * 300 * MSEC, - 0.0f, 0.0f, 0.0f)); + TEST_ASSERT(!still_det_update(&det, i * 300 * MSEC, 0.0f, 0.0f, + 0.0f)); return EC_SUCCESS; } @@ -59,8 +59,8 @@ static int test_not_still_not_enough_samples(void) int i; for (i = 0; i < 4; ++i) - TEST_ASSERT(!still_det_update(&det, i * 200 * MSEC, - 0.0f, 0.0f, 0.0f)); + TEST_ASSERT(!still_det_update(&det, i * 200 * MSEC, 0.0f, 0.0f, + 0.0f)); return EC_SUCCESS; } @@ -71,9 +71,8 @@ static int test_is_still_all_axes(void) int i; for (i = 0; i < 9; ++i) { - int result = still_det_update(&det, i * 100 * MSEC, - i * 0.001f, i * 0.001f, - i * 0.001f); + int result = still_det_update(&det, i * 100 * MSEC, i * 0.001f, + i * 0.001f, i * 0.001f); TEST_EQ(result, i == 8 ? 1 : 0, "%d"); } @@ -90,9 +89,8 @@ static int test_not_still_one_axis(void) int i; for (i = 0; i < 9; ++i) { - TEST_ASSERT(!still_det_update(&det, i * 100 * MSEC, - i * 0.001f, i * 0.001f, - i * 0.01f)); + TEST_ASSERT(!still_det_update(&det, i * 100 * MSEC, i * 0.001f, + i * 0.001f, i * 0.01f)); } return EC_SUCCESS; @@ -104,15 +102,13 @@ static int test_resets(void) int i; for (i = 0; i < 9; ++i) { - TEST_ASSERT(!still_det_update(&det, i * 100 * MSEC, - i * 0.001f, i * 0.001f, - i * 0.01f)); + TEST_ASSERT(!still_det_update(&det, i * 100 * MSEC, i * 0.001f, + i * 0.001f, i * 0.01f)); } for (i = 0; i < 9; ++i) { - int result = still_det_update(&det, i * 100 * MSEC, - i * 0.001f, i * 0.001f, - i * 0.001f); + int result = still_det_update(&det, i * 100 * MSEC, i * 0.001f, + i * 0.001f, i * 0.001f); TEST_EQ(result, i == 8 ? 1 : 0, "%d"); } @@ -123,7 +119,7 @@ static int test_resets(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); @@ -136,6 +132,6 @@ void run_test(int argc, char **argv) RUN_TEST(test_resets); /* Wait for all background tasks to start. */ - sleep(2); + sleep(4); test_print_result(); } diff --git a/test/stillness_detector.tasklist b/test/stillness_detector.tasklist index 5ffe662d01..2d4595f76a 100644 --- a/test/stillness_detector.tasklist +++ b/test/stillness_detector.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/stm32f_rtc.c b/test/stm32f_rtc.c index b9b48ec043..b055398b28 100644 --- a/test/stm32f_rtc.c +++ b/test/stm32f_rtc.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -67,7 +67,7 @@ test_static int test_rtc_match_delay(void) } ccprintf("Expected number of RTC alarm interrupts %d\n", - rtc_match_delay_iterations); + rtc_match_delay_iterations); ccprintf("Actual number of RTC alarm interrupts %d\n", rtc_fired); /* Make sure each set_rtc_alarm() generated the interrupt. */ @@ -76,7 +76,7 @@ test_static int test_rtc_match_delay(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/stm32f_rtc.tasklist b/test/stm32f_rtc.tasklist index 51734f058d..a1f1a94e2d 100644 --- a/test/stm32f_rtc.tasklist +++ b/test/stm32f_rtc.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/stress.c b/test/stress.c index 91a65197f8..f497644602 100644 --- a/test/stress.c +++ b/test/stress.c @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -46,8 +46,7 @@ struct i2c_test_param_t { /* period between 500us and 32ms */ #define RAND_US() (((prng_no_seed() % 64) + 1) * 500) -static int stress(const char *name, - int (*test_routine)(void), +static int stress(const char *name, int (*test_routine)(void), const int iteration) { int i; @@ -65,12 +64,12 @@ static int stress(const char *name, return EC_SUCCESS; } -#define RUN_STRESS_TEST(n, r, iter) \ - do { \ +#define RUN_STRESS_TEST(n, r, iter) \ + do { \ if (stress(n, r, iter) != EC_SUCCESS) { \ - ccputs("Fail\n"); \ - error_count++; \ - } \ + ccputs("Fail\n"); \ + error_count++; \ + } \ } while (0) /*****************************************************************************/ @@ -81,26 +80,27 @@ static int test_i2c(void) int res = EC_ERROR_UNKNOWN; int mock_data; struct i2c_test_param_t *param; - param = i2c_test_params + (prng_no_seed() % (sizeof(i2c_test_params) / - sizeof(struct i2c_test_param_t))); + param = i2c_test_params + + (prng_no_seed() % + (sizeof(i2c_test_params) / sizeof(struct i2c_test_param_t))); if (param->width == 8 && param->data == -1) - res = i2c_read8(param->port, param->addr, - param->offset, &mock_data); + res = i2c_read8(param->port, param->addr, param->offset, + &mock_data); else if (param->width == 8 && param->data >= 0) - res = i2c_write8(param->port, param->addr, - param->offset, param->data); + res = i2c_write8(param->port, param->addr, param->offset, + param->data); else if (param->width == 16 && param->data == -1) - res = i2c_read16(param->port, param->addr, - param->offset, &mock_data); + res = i2c_read16(param->port, param->addr, param->offset, + &mock_data); else if (param->width == 16 && param->data >= 0) - res = i2c_write16(param->port, param->addr, - param->offset, param->data); + res = i2c_write16(param->port, param->addr, param->offset, + param->data); else if (param->width == 32 && param->data == -1) - res = i2c_read32(param->port, param->addr, - param->offset, &mock_data); + res = i2c_read32(param->port, param->addr, param->offset, + &mock_data); else if (param->width == 32 && param->data >= 0) - res = i2c_write32(param->port, param->addr, - param->offset, param->data); + res = i2c_write32(param->port, param->addr, param->offset, + param->data); return res; } @@ -128,7 +128,7 @@ static int test_adc(void) } #endif -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/stress.tasklist b/test/stress.tasklist index da0ab6211a..100cb6b5bd 100644 --- a/test/stress.tasklist +++ b/test/stress.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/system.c b/test/system.c index 79383b82d9..d123bd5cee 100644 --- a/test/system.c +++ b/test/system.c @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -13,8 +13,8 @@ #include "timer.h" #include "util.h" -#define TEST_STATE_STEP_2 (1 << 0) -#define TEST_STATE_FAIL (1 << 1) +#define TEST_STATE_STEP_2 (1 << 0) +#define TEST_STATE_FAIL (1 << 1) static int test_reboot_on_shutdown(void) { @@ -92,7 +92,7 @@ static void fail_and_clean_up(void) test_fail(); } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { uint32_t state = 0; diff --git a/test/system.tasklist b/test/system.tasklist index 4e455a7ea3..6967ec1095 100644 --- a/test/system.tasklist +++ b/test/system.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/system_is_locked.c b/test/system_is_locked.c index 9870f77ebc..47a7977601 100644 --- a/test/system_is_locked.c +++ b/test/system_is_locked.c @@ -1,4 +1,4 @@ -/* Copyright 2022 The Chromium OS Authors. All rights reserved. +/* Copyright 2022 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -60,7 +60,7 @@ void test_run_step(uint32_t state) else if (write_protect_enabled) { ccprintf("Request RO protection at boot\n"); crec_flash_set_protect(EC_FLASH_PROTECT_RO_AT_BOOT, - EC_FLASH_PROTECT_RO_AT_BOOT); + EC_FLASH_PROTECT_RO_AT_BOOT); test_reboot_to_next_step(TEST_STATE_STEP_2); } else { /* Write protect is disabled, nothing else to do */ @@ -90,7 +90,7 @@ int task_test(void *unused) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/system_is_locked.tasklist b/test/system_is_locked.tasklist index 6a2f1834ca..273a9664c0 100644 --- a/test/system_is_locked.tasklist +++ b/test/system_is_locked.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2022 The Chromium OS Authors. All rights reserved. +/* Copyright 2022 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/test_config.h b/test/test_config.h index afd72ce1d2..d72a078434 100644 --- a/test/test_config.h +++ b/test/test_config.h @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -20,9 +20,13 @@ /* Don't compile features unless specifically testing for them */ #undef CONFIG_VBOOT_HASH + +/* Only disable this if we didn't explicitly enable it in Kconfig */ +#ifndef CONFIG_PLATFORM_EC_USB_PD_LOGGING #undef CONFIG_USB_PD_LOGGING +#endif -#ifdef TEST_AES +#if defined(TEST_AES) || defined(TEST_CRYPTO_BENCHMARK) #define CONFIG_AES #define CONFIG_AES_GCM #endif @@ -55,6 +59,8 @@ #ifdef TEST_KB_8042 #define CONFIG_KEYBOARD_PROTOCOL_8042 +#define CONFIG_8042_AUX +#define CONFIG_KEYBOARD_DEBUG #endif #ifdef TEST_KB_MKBP @@ -142,6 +148,11 @@ #define CONFIG_RGBKBD_DEMO_DOT #endif +#ifdef TEST_NVIDIA_GPU +#define CONFIG_GPU_NVIDIA +#define GPIO_NVIDIA_GPU_ACOFF_ODL 123 +#endif + #ifdef TEST_STILLNESS_DETECTOR #define CONFIG_MKBP_EVENT #define CONFIG_MKBP_USE_GPIO @@ -169,17 +180,13 @@ #define CONFIG_MKBP_USE_GPIO #endif -#if defined(CONFIG_ONLINE_CALIB) && \ - !defined(CONFIG_TEMP_CACHE_STALE_THRES) +#if defined(CONFIG_ONLINE_CALIB) && !defined(CONFIG_TEMP_CACHE_STALE_THRES) #define CONFIG_TEMP_CACHE_STALE_THRES (1 * SECOND) #endif /* CONFIG_ONLINE_CALIB && !CONFIG_TEMP_CACHE_STALE_THRES */ -#if defined(CONFIG_ONLINE_CALIB) || \ - defined(TEST_BODY_DETECTION) || \ - defined(TEST_MOTION_ANGLE) || \ - defined(TEST_MOTION_ANGLE_TABLET) || \ - defined(TEST_MOTION_LID) || \ - defined(TEST_MOTION_SENSE_FIFO) +#if defined(CONFIG_ONLINE_CALIB) || defined(TEST_BODY_DETECTION) || \ + defined(TEST_MOTION_ANGLE) || defined(TEST_MOTION_ANGLE_TABLET) || \ + defined(TEST_MOTION_LID) || defined(TEST_MOTION_SENSE_FIFO) enum sensor_id { BASE, LID, @@ -195,15 +202,14 @@ enum sensor_id { #endif #if defined(TEST_MOTION_ANGLE) -#define CONFIG_ACCEL_FORCE_MODE_MASK \ +#define CONFIG_ACCEL_FORCE_MODE_MASK \ ((1 << CONFIG_LID_ANGLE_SENSOR_BASE) | \ (1 << CONFIG_LID_ANGLE_SENSOR_LID)) #define CONFIG_ACCEL_STD_REF_FRAME_OLD #endif -#if defined(TEST_MOTION_ANGLE_TABLET) || \ - defined(TEST_MOTION_LID) -#define CONFIG_ACCEL_FORCE_MODE_MASK \ +#if defined(TEST_MOTION_ANGLE_TABLET) || defined(TEST_MOTION_LID) +#define CONFIG_ACCEL_FORCE_MODE_MASK \ ((1 << CONFIG_LID_ANGLE_SENSOR_BASE) | \ (1 << CONFIG_LID_ANGLE_SENSOR_LID)) #endif @@ -216,19 +222,21 @@ enum sensor_id { #ifdef TEST_RMA_AUTH /* Test server public and private keys */ -#define RMA_KEY_BLOB { \ - 0x03, 0xae, 0x2d, 0x2c, 0x06, 0x23, 0xe0, 0x73, \ - 0x0d, 0xd3, 0xb7, 0x92, 0xac, 0x54, 0xc5, 0xfd, \ - 0x7e, 0x9c, 0xf0, 0xa8, 0xeb, 0x7e, 0x2a, 0xb5, \ - 0xdb, 0xf4, 0x79, 0x5f, 0x8a, 0x0f, 0x28, 0x3f, \ - 0x10 \ +#define RMA_KEY_BLOB \ + { \ + 0x03, 0xae, 0x2d, 0x2c, 0x06, 0x23, 0xe0, 0x73, 0x0d, 0xd3, \ + 0xb7, 0x92, 0xac, 0x54, 0xc5, 0xfd, 0x7e, 0x9c, 0xf0, \ + 0xa8, 0xeb, 0x7e, 0x2a, 0xb5, 0xdb, 0xf4, 0x79, 0x5f, \ + 0x8a, 0x0f, 0x28, 0x3f, 0x10 \ } -#define RMA_TEST_SERVER_PRIVATE_KEY { \ - 0x47, 0x3b, 0xa5, 0xdb, 0xc4, 0xbb, 0xd6, 0x77, \ - 0x20, 0xbd, 0xd8, 0xbd, 0xc8, 0x7a, 0xbb, 0x07, \ - 0x03, 0x79, 0xba, 0x7b, 0x52, 0x8c, 0xec, 0xb3, \ - 0x4d, 0xaa, 0x69, 0xf5, 0x65, 0xb4, 0x31, 0xad} +#define RMA_TEST_SERVER_PRIVATE_KEY \ + { \ + 0x47, 0x3b, 0xa5, 0xdb, 0xc4, 0xbb, 0xd6, 0x77, 0x20, 0xbd, \ + 0xd8, 0xbd, 0xc8, 0x7a, 0xbb, 0x07, 0x03, 0x79, 0xba, \ + 0x7b, 0x52, 0x8c, 0xec, 0xb3, 0x4d, 0xaa, 0x69, 0xf5, \ + 0x65, 0xb4, 0x31, 0xad \ + } #define RMA_TEST_SERVER_KEY_ID 0x10 #define CONFIG_BASE32 @@ -290,8 +298,8 @@ int board_discharge_on_ac(int enabled); #define I2C_PORT_BATTERY 0 #define I2C_PORT_CHARGER 0 #define CONFIG_BATTERY_LOW_VOLTAGE_PROTECTION -#undef CONFIG_BATTERY_LOW_VOLTAGE_TIMEOUT -#define CONFIG_BATTERY_LOW_VOLTAGE_TIMEOUT (2*SECOND) +#undef CONFIG_BATTERY_LOW_VOLTAGE_TIMEOUT +#define CONFIG_BATTERY_LOW_VOLTAGE_TIMEOUT (2 * SECOND) #endif #ifdef TEST_THERMAL @@ -361,10 +369,8 @@ int ncp15wb_calculate_temp(uint16_t adc); #define CONFIG_USB_PD_ONLY_FIXED_PDOS #endif -#if defined(TEST_USB_SM_FRAMEWORK_H3) || \ - defined(TEST_USB_SM_FRAMEWORK_H2) || \ - defined(TEST_USB_SM_FRAMEWORK_H1) || \ - defined(TEST_USB_SM_FRAMEWORK_H0) +#if defined(TEST_USB_SM_FRAMEWORK_H3) || defined(TEST_USB_SM_FRAMEWORK_H2) || \ + defined(TEST_USB_SM_FRAMEWORK_H1) || defined(TEST_USB_SM_FRAMEWORK_H0) #define CONFIG_TEST_SM #endif @@ -457,8 +463,7 @@ int ncp15wb_calculate_temp(uint16_t adc); #endif /* TEST_USB_PE_DRP || TEST_USB_PE_DRP_NOEXTENDED */ /* Common TypeC tests defines */ -#if defined(TEST_USB_TYPEC_VPD) || \ - defined(TEST_USB_TYPEC_CTVPD) +#if defined(TEST_USB_TYPEC_VPD) || defined(TEST_USB_TYPEC_CTVPD) #define CONFIG_USB_PID 0x5036 #define VPD_HW_VERSION 0x0001 #define VPD_FW_VERSION 0x0001 @@ -629,18 +634,17 @@ int ncp15wb_calculate_temp(uint16_t adc); #define CONFIG_RSA #define CONFIG_RWSIG_TYPE_RWSIG #define CONFIG_RW_B -#define CONFIG_RW_B_MEM_OFF CONFIG_RO_MEM_OFF -#undef CONFIG_RO_SIZE -#define CONFIG_RO_SIZE (CONFIG_FLASH_SIZE_BYTES / 4) -#undef CONFIG_RW_SIZE -#define CONFIG_RW_SIZE CONFIG_RO_SIZE -#define CONFIG_RW_A_STORAGE_OFF CONFIG_RW_STORAGE_OFF -#define CONFIG_RW_B_STORAGE_OFF (CONFIG_RW_A_STORAGE_OFF + \ - CONFIG_RW_SIZE) -#define CONFIG_RW_A_SIGN_STORAGE_OFF (CONFIG_RW_A_STORAGE_OFF + \ - CONFIG_RW_SIZE - CONFIG_RW_SIG_SIZE) -#define CONFIG_RW_B_SIGN_STORAGE_OFF (CONFIG_RW_B_STORAGE_OFF + \ - CONFIG_RW_SIZE - CONFIG_RW_SIG_SIZE) +#define CONFIG_RW_B_MEM_OFF CONFIG_RO_MEM_OFF +#undef CONFIG_RO_SIZE +#define CONFIG_RO_SIZE (CONFIG_FLASH_SIZE_BYTES / 4) +#undef CONFIG_RW_SIZE +#define CONFIG_RW_SIZE CONFIG_RO_SIZE +#define CONFIG_RW_A_STORAGE_OFF CONFIG_RW_STORAGE_OFF +#define CONFIG_RW_B_STORAGE_OFF (CONFIG_RW_A_STORAGE_OFF + CONFIG_RW_SIZE) +#define CONFIG_RW_A_SIGN_STORAGE_OFF \ + (CONFIG_RW_A_STORAGE_OFF + CONFIG_RW_SIZE - CONFIG_RW_SIG_SIZE) +#define CONFIG_RW_B_SIGN_STORAGE_OFF \ + (CONFIG_RW_B_STORAGE_OFF + CONFIG_RW_SIZE - CONFIG_RW_SIG_SIZE) #endif #ifdef TEST_X25519 @@ -654,5 +658,5 @@ int ncp15wb_calculate_temp(uint16_t adc); #define I2C_BITBANG_PORT_COUNT 1 #endif -#endif /* TEST_BUILD */ -#endif /* __TEST_TEST_CONFIG_H */ +#endif /* TEST_BUILD */ +#endif /* __TEST_TEST_CONFIG_H */ diff --git a/test/thermal.c b/test/thermal.c index 1161ecbf1b..a70137238d 100644 --- a/test/thermal.c +++ b/test/thermal.c @@ -1,10 +1,11 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * * Test thermal engine. */ +#include "builtin/assert.h" #include "common.h" #include "console.h" #include "driver/temp_sensor/thermistor.h" @@ -18,7 +19,6 @@ #include "timer.h" #include "util.h" - /*****************************************************************************/ /* Exported data */ @@ -95,7 +95,7 @@ static void reset_mocks(void) memset(thermal_params, 0, sizeof(thermal_params)); /* All sensors report error anyway */ - set_temps(-1, -1 , -1, -1); + set_temps(-1, -1, -1, -1); /* Reset expectations */ host_throttled = 0; @@ -105,7 +105,6 @@ static void reset_mocks(void) no_temps_read = 0; } - /*****************************************************************************/ /* Tests */ @@ -147,7 +146,6 @@ static int test_sensors_can_be_read(void) return EC_SUCCESS; } - static int test_one_fan(void) { reset_mocks(); @@ -448,42 +446,41 @@ static int test_several_limits(void) TEST_ASSERT(cpu_throttled == 0); TEST_ASSERT(cpu_shutdown == 0); - set_temps(500, 50, -1, 10); /* 1=low, 2=X, 3=low */ + set_temps(500, 50, -1, 10); /* 1=low, 2=X, 3=low */ sleep(2); TEST_ASSERT(host_throttled == 0); TEST_ASSERT(cpu_throttled == 0); TEST_ASSERT(cpu_shutdown == 0); - set_temps(500, 170, 210, 10); /* 1=warn, 2=high, 3=low */ + set_temps(500, 170, 210, 10); /* 1=warn, 2=high, 3=low */ sleep(2); TEST_ASSERT(host_throttled == 1); TEST_ASSERT(cpu_throttled == 1); TEST_ASSERT(cpu_shutdown == 0); - set_temps(500, 100, 50, 40); /* 1=low, 2=low, 3=high */ + set_temps(500, 100, 50, 40); /* 1=low, 2=low, 3=high */ sleep(2); TEST_ASSERT(host_throttled == 1); TEST_ASSERT(cpu_throttled == 1); TEST_ASSERT(cpu_shutdown == 0); - set_temps(500, 100, 50, 41); /* 1=low, 2=low, 3=shutdown */ + set_temps(500, 100, 50, 41); /* 1=low, 2=low, 3=shutdown */ sleep(2); TEST_ASSERT(host_throttled == 1); TEST_ASSERT(cpu_throttled == 1); TEST_ASSERT(cpu_shutdown == 1); - all_temps(0); /* reset from shutdown */ + all_temps(0); /* reset from shutdown */ sleep(2); TEST_ASSERT(host_throttled == 0); TEST_ASSERT(cpu_throttled == 0); - return EC_SUCCESS; } /* Tests for ncp15wb thermistor ADC-to-temp calculation */ -#define LOW_ADC_TEST_VALUE 887 /* 0 C */ -#define HIGH_ADC_TEST_VALUE 100 /* > 100C */ +#define LOW_ADC_TEST_VALUE 887 /* 0 C */ +#define HIGH_ADC_TEST_VALUE 100 /* > 100C */ static int test_ncp15wb_adc_to_temp(void) { @@ -496,18 +493,11 @@ static int test_ncp15wb_adc_to_temp(void) int adc; int temp; } adc_temp_datapoints[] = { - { 615, 30 }, - { 561, 35 }, - { 508, 40 }, - { 407, 50 }, - { 315, 60 }, - { 243, 70 }, - { 186, 80 }, - { 140, 90 }, - { 107, 100 }, + { 615, 30 }, { 561, 35 }, { 508, 40 }, + { 407, 50 }, { 315, 60 }, { 243, 70 }, + { 186, 80 }, { 140, 90 }, { 107, 100 }, }; - /* * Verify that calculated temp is decreasing for entire ADC range, * and that a tick down in ADC value results in no more than 1C @@ -518,8 +508,7 @@ static int test_ncp15wb_adc_to_temp(void) while (--i > HIGH_ADC_TEST_VALUE) { new_temp = ncp15wb_calculate_temp(i); - TEST_ASSERT(new_temp == temp || - new_temp == temp + 1); + TEST_ASSERT(new_temp == temp || new_temp == temp + 1); temp = new_temp; } @@ -539,9 +528,7 @@ static int test_thermistor_linear_interpolate(void) int i, t, t0; uint16_t mv; /* Simple test case - a straight line. */ - struct thermistor_data_pair line_data[] = { - { 100, 0 }, { 0, 100 } - }; + struct thermistor_data_pair line_data[] = { { 100, 0 }, { 0, 100 } }; struct thermistor_info line_info = { .scaling_factor = 1, .num_pairs = ARRAY_SIZE(line_data), @@ -576,19 +563,17 @@ static int test_thermistor_linear_interpolate(void) * of derived values but at temp - 1, temp + 1, and in between. */ struct { - uint16_t mv; /* not scaled */ + uint16_t mv; /* not scaled */ int temp; } cmp[] = { - { 3030, 1 }, { 2341, 5 }, { 2195, 9 }, - { 2120, 11 }, { 1966, 15 }, { 1811, 19 }, - { 1733, 21 }, { 1581, 25 }, { 1434, 29 }, - { 1363, 31 }, { 1227, 35 }, { 1100, 39 }, - { 1040, 41 }, { 929, 45 }, { 827, 49 }, - { 780, 51 }, { 693, 55 }, { 615, 59 }, - { 579, 61 }, { 514, 65 }, { 460, 69 }, - { 430, 71 }, { 382, 75 }, { 339, 79 }, - { 320, 81 }, { 285, 85 }, { 254, 89 }, - { 240, 91 }, { 214, 95 }, { 192, 99 }, + { 3030, 1 }, { 2341, 5 }, { 2195, 9 }, { 2120, 11 }, + { 1966, 15 }, { 1811, 19 }, { 1733, 21 }, { 1581, 25 }, + { 1434, 29 }, { 1363, 31 }, { 1227, 35 }, { 1100, 39 }, + { 1040, 41 }, { 929, 45 }, { 827, 49 }, { 780, 51 }, + { 693, 55 }, { 615, 59 }, { 579, 61 }, { 514, 65 }, + { 460, 69 }, { 430, 71 }, { 382, 75 }, { 339, 79 }, + { 320, 81 }, { 285, 85 }, { 254, 89 }, { 240, 91 }, + { 214, 95 }, { 192, 99 }, }; /* Return lowest temperature in data set if voltage is too high. */ @@ -602,9 +587,8 @@ static int test_thermistor_linear_interpolate(void) TEST_ASSERT(t == data[info.num_pairs - 1].temp); /* Simple line test */ - for (mv = line_data[0].mv; - mv > line_data[line_info.num_pairs - 1].mv; - mv--) { + for (mv = line_data[0].mv; mv > line_data[line_info.num_pairs - 1].mv; + mv--) { t = thermistor_linear_interpolate(mv, &line_info); TEST_ASSERT(mv == line_data[line_info.num_pairs - 1].temp - t); } @@ -614,8 +598,7 @@ static int test_thermistor_linear_interpolate(void) * decreases with increase in voltage (0-5V, 10mV steps). */ for (mv = data[0].mv * info.scaling_factor, t0 = data[0].temp; - mv > data[info.num_pairs - 1].mv; - mv -= 10) { + mv > data[info.num_pairs - 1].mv; mv -= 10) { int t1 = thermistor_linear_interpolate(mv, &info); TEST_ASSERT(t1 >= t0); @@ -642,7 +625,7 @@ static int test_thermistor_linear_interpolate(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { RUN_TEST(test_init_val); RUN_TEST(test_sensors_can_be_read); diff --git a/test/thermal.tasklist b/test/thermal.tasklist index d22719d1fb..7494e757cf 100644 --- a/test/thermal.tasklist +++ b/test/thermal.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/timer_calib.c b/test/timer_calib.c index 68603762fe..9a58237e2f 100644 --- a/test/timer_calib.c +++ b/test/timer_calib.c @@ -1,4 +1,4 @@ -/* Copyright 2012 The Chromium OS Authors. All rights reserved. +/* Copyright 2012 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -13,7 +13,7 @@ uint32_t difftime(timestamp_t t0, timestamp_t t1) { - return (uint32_t)(t1.val-t0.val); + return (uint32_t)(t1.val - t0.val); } int timer_calib_task(void *data) @@ -56,7 +56,7 @@ int timer_calib_task(void *data) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { task_wake(TASK_ID_TESTTMR); } diff --git a/test/timer_calib.py b/test/timer_calib.py index 2a625d80c7..2b7c33060e 100644 --- a/test/timer_calib.py +++ b/test/timer_calib.py @@ -1,4 +1,4 @@ -# Copyright 2011 The Chromium OS Authors. All rights reserved. +# Copyright 2011 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # @@ -7,48 +7,54 @@ import time -def one_pass(helper): - helper.wait_output("=== Timer calibration ===") - res = helper.wait_output("back-to-back get_time : (?P<lat>[0-9]+) us", - use_re=True)["lat"] - minlat = int(res) - helper.trace("get_time latency %d us\n" % minlat) - - helper.wait_output("sleep 1s") - t0 = time.time() - second = helper.wait_output("done. delay = (?P<second>[0-9]+) us", - use_re=True)["second"] - t1 = time.time() - secondreal = t1 - t0 - secondlat = int(second) - 1000000 - helper.trace("1s timer latency %d us / real time %f s\n" % (secondlat, - secondreal)) - - us = {} - for pow2 in range(7): - delay = 1 << (7-pow2) - us[delay] = helper.wait_output("%d us => (?P<us>[0-9]+) us" % delay, - use_re=True)["us"] - helper.wait_output("Done.") - - return minlat, secondlat, secondreal +def one_pass(helper): + helper.wait_output("=== Timer calibration ===") + res = helper.wait_output( + "back-to-back get_time : (?P<lat>[0-9]+) us", use_re=True + )["lat"] + minlat = int(res) + helper.trace("get_time latency %d us\n" % minlat) + + helper.wait_output("sleep 1s") + t0 = time.time() + second = helper.wait_output( + "done. delay = (?P<second>[0-9]+) us", use_re=True + )["second"] + t1 = time.time() + secondreal = t1 - t0 + secondlat = int(second) - 1000000 + helper.trace( + "1s timer latency %d us / real time %f s\n" % (secondlat, secondreal) + ) + + us = {} + for pow2 in range(7): + delay = 1 << (7 - pow2) + us[delay] = helper.wait_output( + "%d us => (?P<us>[0-9]+) us" % delay, use_re=True + )["us"] + helper.wait_output("Done.") + + return minlat, secondlat, secondreal def test(helper): - one_pass(helper) + one_pass(helper) - helper.ec_command("reboot") - helper.wait_output("--- UART initialized") + helper.ec_command("reboot") + helper.wait_output("--- UART initialized") - # get the timing results on the second pass - # to avoid binary translation overhead - minlat, secondlat, secondreal = one_pass(helper) + # get the timing results on the second pass + # to avoid binary translation overhead + minlat, secondlat, secondreal = one_pass(helper) - # check that the timings somewhat make sense - if minlat > 220 or secondlat > 500 or abs(secondreal-1.0) > 0.200: - helper.fail("imprecise timings " + - "(get_time %d us sleep %d us / real time %.3f s)" % - (minlat, secondlat, secondreal)) + # check that the timings somewhat make sense + if minlat > 220 or secondlat > 500 or abs(secondreal - 1.0) > 0.200: + helper.fail( + "imprecise timings " + + "(get_time %d us sleep %d us / real time %.3f s)" + % (minlat, secondlat, secondreal) + ) - return True # PASS ! + return True # PASS ! diff --git a/test/timer_calib.tasklist b/test/timer_calib.tasklist index 51f5beb6c1..22a63c247e 100644 --- a/test/timer_calib.tasklist +++ b/test/timer_calib.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/timer_dos.c b/test/timer_dos.c index c681300102..ef9cc3ef0c 100644 --- a/test/timer_dos.c +++ b/test/timer_dos.c @@ -1,4 +1,4 @@ -/* Copyright 2012 The Chromium OS Authors. All rights reserved. +/* Copyright 2012 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -68,7 +68,7 @@ int task_timer(void *seed) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { wait_for_task_started(); task_wake(TASK_ID_TMRD); diff --git a/test/timer_dos.tasklist b/test/timer_dos.tasklist index 4da3419f77..5bd77b0580 100644 --- a/test/timer_dos.tasklist +++ b/test/timer_dos.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/timer_jump.py b/test/timer_jump.py index f506a69fcf..a4350cecdf 100644 --- a/test/timer_jump.py +++ b/test/timer_jump.py @@ -1,4 +1,4 @@ -# Copyright 2012 The Chromium OS Authors. All rights reserved. +# Copyright 2012 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. # @@ -10,22 +10,25 @@ import time DELAY = 5 ERROR_MARGIN = 0.5 + def test(helper): - helper.wait_output("idle task started") - helper.ec_command("sysinfo") - copy = helper.wait_output("Copy:\s+(?P<c>\S+)", use_re=True)["c"] - if copy != "RO": - helper.ec_command("sysjump ro") - helper.wait_output("idle task started") - helper.ec_command("gettime") - ec_start_time = helper.wait_output("Time: 0x[0-9a-f]* = (?P<t>[\d\.]+) s", - use_re=True)["t"] - time.sleep(DELAY) - helper.ec_command("sysjump a") - helper.wait_output("idle task started") - helper.ec_command("gettime") - ec_end_time = helper.wait_output("Time: 0x[0-9a-f]* = (?P<t>[\d\.]+) s", - use_re=True)["t"] + helper.wait_output("idle task started") + helper.ec_command("sysinfo") + copy = helper.wait_output("Copy:\s+(?P<c>\S+)", use_re=True)["c"] + if copy != "RO": + helper.ec_command("sysjump ro") + helper.wait_output("idle task started") + helper.ec_command("gettime") + ec_start_time = helper.wait_output( + "Time: 0x[0-9a-f]* = (?P<t>[\d\.]+) s", use_re=True + )["t"] + time.sleep(DELAY) + helper.ec_command("sysjump a") + helper.wait_output("idle task started") + helper.ec_command("gettime") + ec_end_time = helper.wait_output( + "Time: 0x[0-9a-f]* = (?P<t>[\d\.]+) s", use_re=True + )["t"] - time_diff = float(ec_end_time) - float(ec_start_time) - return time_diff >= DELAY and time_diff <= DELAY + ERROR_MARGIN + time_diff = float(ec_end_time) - float(ec_start_time) + return time_diff >= DELAY and time_diff <= DELAY + ERROR_MARGIN diff --git a/test/timer_jump.tasklist b/test/timer_jump.tasklist index da0ab6211a..100cb6b5bd 100644 --- a/test/timer_jump.tasklist +++ b/test/timer_jump.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/uptime.c b/test/uptime.c index 651628ab7b..0b6c9b56e6 100644 --- a/test/uptime.c +++ b/test/uptime.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -62,7 +62,7 @@ test_static int test_host_uptime_info_command_failure(void) return EC_RES_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/uptime.tasklist b/test/uptime.tasklist index 9bf1c80c20..b5c09fb4c3 100644 --- a/test/uptime.tasklist +++ b/test/uptime.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_common.tasklist b/test/usb_common.tasklist index 9bf1c80c20..b5c09fb4c3 100644 --- a/test/usb_common.tasklist +++ b/test/usb_common.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_common_test.c b/test/usb_common_test.c index 620e061f74..e385b57c16 100644 --- a/test/usb_common_test.c +++ b/test/usb_common_test.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -194,7 +194,7 @@ int test_pd_extract_pdo_power(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { RUN_TEST(test_pd_get_cc_state); RUN_TEST(test_pd_extract_pdo_power); diff --git a/test/usb_pd.c b/test/usb_pd.c index 9fdb439b49..505b80e830 100644 --- a/test/usb_pd.c +++ b/test/usb_pd.c @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -14,8 +14,8 @@ #include "usb_pd_test_util.h" #include "util.h" -#define PORT0 0 -#define PORT1 1 +#define PORT0 0 +#define PORT1 1 #define BATTERY_DESIGN_VOLTAGE 7600 #define BATTERY_DESIGN_CAPACITY 5131 @@ -87,7 +87,7 @@ int pd_adc_read(int port, int cc) /* we are source connected to sink, return Rd/Open */ return (pd_port[port].partner_polarity == cc) ? 400 : 3000; else if (!pd_port[port].host_mode && - pd_port[port].partner_role == PD_ROLE_SOURCE) + pd_port[port].partner_role == PD_ROLE_SOURCE) /* we are sink connected to source, return Rp/Open */ return (pd_port[port].partner_polarity == cc) ? 1700 : 0; else if (pd_port[port].host_mode) @@ -179,39 +179,38 @@ static void simulate_rx_msg(int port, uint16_t header, int cnt, static void simulate_wait(int port) { - uint16_t header = PD_HEADER(PD_CTRL_WAIT, PD_ROLE_SOURCE, - PD_ROLE_DFP, pd_port[port].msg_rx_id, - 0, pd_port[port].rev, 0); + uint16_t header = PD_HEADER(PD_CTRL_WAIT, PD_ROLE_SOURCE, PD_ROLE_DFP, + pd_port[port].msg_rx_id, 0, + pd_port[port].rev, 0); simulate_rx_msg(port, header, 0, NULL); } static void simulate_accept(int port) { - uint16_t header = PD_HEADER(PD_CTRL_ACCEPT, PD_ROLE_SOURCE, - PD_ROLE_DFP, pd_port[port].msg_rx_id, - 0, pd_port[port].rev, 0); + uint16_t header = PD_HEADER(PD_CTRL_ACCEPT, PD_ROLE_SOURCE, PD_ROLE_DFP, + pd_port[port].msg_rx_id, 0, + pd_port[port].rev, 0); simulate_rx_msg(port, header, 0, NULL); } static void simulate_reject(int port) { - uint16_t header = PD_HEADER(PD_CTRL_REJECT, PD_ROLE_SOURCE, - PD_ROLE_DFP, pd_port[port].msg_rx_id, - 0, pd_port[port].rev, 0); + uint16_t header = PD_HEADER(PD_CTRL_REJECT, PD_ROLE_SOURCE, PD_ROLE_DFP, + pd_port[port].msg_rx_id, 0, + pd_port[port].rev, 0); simulate_rx_msg(port, header, 0, NULL); } - #ifdef CONFIG_USB_PD_REV30 static void simulate_get_bat_cap(int port) { uint16_t msg[2]; uint16_t header = PD_HEADER(PD_EXT_GET_BATTERY_CAP, PD_ROLE_SOURCE, - PD_ROLE_DFP, pd_port[port].msg_rx_id, - 1, pd_port[port].rev, 1); + PD_ROLE_DFP, pd_port[port].msg_rx_id, 1, + pd_port[port].rev, 1); /* set extended header */ msg[0] = PD_EXT_HEADER(0, 0, 1); @@ -226,8 +225,8 @@ static void simulate_get_bat_status(int port) { uint16_t msg[2]; uint16_t header = PD_HEADER(PD_EXT_GET_BATTERY_STATUS, PD_ROLE_SOURCE, - PD_ROLE_DFP, pd_port[port].msg_rx_id, - 1, pd_port[port].rev, 1); + PD_ROLE_DFP, pd_port[port].msg_rx_id, 1, + pd_port[port].rev, 1); /* set extended header */ msg[0] = PD_EXT_HEADER(0, 0, 1); @@ -252,18 +251,20 @@ static void simulate_source_cap(int port, uint32_t cnt) static void simulate_goodcrc(int port, int role, int id) { - simulate_rx_msg(port, PD_HEADER(PD_CTRL_GOOD_CRC, role, role, id, 0, - pd_port[port].rev, 0), 0, NULL); + simulate_rx_msg(port, + PD_HEADER(PD_CTRL_GOOD_CRC, role, role, id, 0, + pd_port[port].rev, 0), + 0, NULL); } static int verify_goodcrc(int port, int role, int id) { - return pd_test_tx_msg_verify_sop(port) && - pd_test_tx_msg_verify_short(port, PD_HEADER(PD_CTRL_GOOD_CRC, - role, role, id, 0, 0, 0)) && - pd_test_tx_msg_verify_crc(port) && - pd_test_tx_msg_verify_eop(port); + pd_test_tx_msg_verify_short(port, + PD_HEADER(PD_CTRL_GOOD_CRC, role, + role, id, 0, 0, 0)) && + pd_test_tx_msg_verify_crc(port) && + pd_test_tx_msg_verify_eop(port); } static void plug_in_source(int port, int polarity) @@ -296,7 +297,7 @@ static void unplug(int port) usleep(30 * MSEC); } -void pd_snk_give_back(int port, uint32_t * const ma, uint32_t * const mv) +void pd_snk_give_back(int port, uint32_t *const ma, uint32_t *const mv) { if (*ma == 3000) give_back_called = 1; @@ -304,9 +305,9 @@ void pd_snk_give_back(int port, uint32_t * const ma, uint32_t * const mv) static void simulate_ps_rdy(int port) { - uint16_t header = PD_HEADER(PD_CTRL_PS_RDY, PD_ROLE_SOURCE, - PD_ROLE_DFP, pd_port[port].msg_rx_id, - 0, pd_port[port].rev, 0); + uint16_t header = PD_HEADER(PD_CTRL_PS_RDY, PD_ROLE_SOURCE, PD_ROLE_DFP, + pd_port[port].msg_rx_id, 0, + pd_port[port].rev, 0); simulate_rx_msg(port, header, 0, NULL); } @@ -314,7 +315,8 @@ static void simulate_ps_rdy(int port) static void simulate_goto_min(int port) { uint16_t header = PD_HEADER(PD_CTRL_GOTO_MIN, PD_ROLE_SOURCE, - PD_ROLE_DFP, pd_port[port].msg_rx_id, 0, pd_port[port].rev, 0); + PD_ROLE_DFP, pd_port[port].msg_rx_id, 0, + pd_port[port].rev, 0); simulate_rx_msg(port, header, 0, NULL); } @@ -324,8 +326,9 @@ static int test_request_with_wait_and_contract(void) #ifdef CONFIG_USB_PD_REV30 uint32_t expected_status_bsdo = BSDO_CAP(DIV_ROUND_NEAREST(BATTERY_REMAINING_CAPACITY * - BATTERY_DESIGN_VOLTAGE, 100000)) | - BSDO_PRESENT; + BATTERY_DESIGN_VOLTAGE, + 100000)) | + BSDO_PRESENT; uint16_t expected_cap_hdr = PD_EXT_HEADER(0, 0, 9); uint16_t expected_cap_vid = USB_VID_GOOGLE; #ifdef CONFIG_USB_PID @@ -333,12 +336,10 @@ static int test_request_with_wait_and_contract(void) #else uint16_t expected_cap_pid = 0; #endif - uint16_t expected_cap_des = - DIV_ROUND_NEAREST(BATTERY_DESIGN_CAPACITY * - BATTERY_DESIGN_VOLTAGE, 100000); - uint16_t expected_cap_ful = - DIV_ROUND_NEAREST(BATTERY_FULL_CHARGE_CAPACITY * - BATTERY_DESIGN_VOLTAGE, 100000); + uint16_t expected_cap_des = DIV_ROUND_NEAREST( + BATTERY_DESIGN_CAPACITY * BATTERY_DESIGN_VOLTAGE, 100000); + uint16_t expected_cap_ful = DIV_ROUND_NEAREST( + BATTERY_FULL_CHARGE_CAPACITY * BATTERY_DESIGN_VOLTAGE, 100000); uint16_t expected_cap_type = 0; #endif @@ -358,8 +359,8 @@ static int test_request_with_wait_and_contract(void) /* We're in SNK_DISCOVERY now. Let's send the source cap. */ simulate_source_cap(port, 1); task_wait_event(30 * MSEC); - TEST_ASSERT(verify_goodcrc(port, PD_ROLE_SINK, - pd_port[port].msg_rx_id)); + TEST_ASSERT( + verify_goodcrc(port, PD_ROLE_SINK, pd_port[port].msg_rx_id)); /* Wait for the power request */ task_wake(PD_PORT_TO_TASK_ID(port)); @@ -368,9 +369,10 @@ static int test_request_with_wait_and_contract(void) /* Process the request */ TEST_ASSERT(pd_test_tx_msg_verify_sop(port)); - TEST_ASSERT(pd_test_tx_msg_verify_short(port, - PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, - pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); + TEST_ASSERT(pd_test_tx_msg_verify_short( + port, + PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, + pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_rdo)); TEST_ASSERT(pd_test_tx_msg_verify_crc(port)); TEST_ASSERT(pd_test_tx_msg_verify_eop(port)); @@ -399,8 +401,8 @@ static int test_request_with_wait_and_contract(void) */ simulate_source_cap(port, 1); task_wait_event(30 * MSEC); - TEST_ASSERT(verify_goodcrc(port, PD_ROLE_SINK, - pd_port[port].msg_rx_id)); + TEST_ASSERT( + verify_goodcrc(port, PD_ROLE_SINK, pd_port[port].msg_rx_id)); /* Wait for the power request */ task_wake(PD_PORT_TO_TASK_ID(port)); @@ -409,9 +411,10 @@ static int test_request_with_wait_and_contract(void) /* Process the request */ TEST_ASSERT(pd_test_tx_msg_verify_sop(port)); - TEST_ASSERT(pd_test_tx_msg_verify_short(port, - PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, - pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); + TEST_ASSERT(pd_test_tx_msg_verify_short( + port, + PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, + pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_rdo)); TEST_ASSERT(pd_test_tx_msg_verify_crc(port)); TEST_ASSERT(pd_test_tx_msg_verify_eop(port)); @@ -441,11 +444,10 @@ static int test_request_with_wait_and_contract(void) /* We had an explicit contract. So request should have been resent. */ /* Process the request */ TEST_ASSERT(pd_test_tx_msg_verify_sop(port)); - TEST_ASSERT(pd_test_tx_msg_verify_short(port, - PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, - pd_port[port].msg_tx_id, 1, - pd_port[port].rev, 0 - ))); + TEST_ASSERT(pd_test_tx_msg_verify_short( + port, + PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, + pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_rdo)); TEST_ASSERT(pd_test_tx_msg_verify_crc(port)); TEST_ASSERT(pd_test_tx_msg_verify_eop(port)); @@ -492,9 +494,10 @@ static int test_request_with_wait_and_contract(void) /* Process the request */ TEST_ASSERT(pd_test_tx_msg_verify_sop(port)); - TEST_ASSERT(pd_test_tx_msg_verify_short(port, + TEST_ASSERT(pd_test_tx_msg_verify_short( + port, PD_HEADER(PD_EXT_BATTERY_CAP, PD_ROLE_SINK, PD_ROLE_UFP, - pd_port[port].msg_tx_id, 3, pd_port[port].rev, 1))); + pd_port[port].msg_tx_id, 3, pd_port[port].rev, 1))); TEST_ASSERT(pd_test_tx_msg_verify_short(port, expected_cap_hdr)); TEST_ASSERT(pd_test_tx_msg_verify_short(port, expected_cap_vid)); TEST_ASSERT(pd_test_tx_msg_verify_short(port, expected_cap_pid)); @@ -524,9 +527,10 @@ static int test_request_with_wait_and_contract(void) /* Process the request */ TEST_ASSERT(pd_test_tx_msg_verify_sop(port)); - TEST_ASSERT(pd_test_tx_msg_verify_short(port, + TEST_ASSERT(pd_test_tx_msg_verify_short( + port, PD_HEADER(PD_DATA_BATTERY_STATUS, PD_ROLE_SINK, PD_ROLE_UFP, - pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); + pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_status_bsdo)); TEST_ASSERT(pd_test_tx_msg_verify_crc(port)); TEST_ASSERT(pd_test_tx_msg_verify_eop(port)); @@ -564,7 +568,7 @@ static int test_request_with_wait(void) { #ifdef CONFIG_USB_PD_GIVE_BACK uint32_t expected_rdo = RDO_FIXED(1, 900, PD_MIN_CURRENT_MA, - RDO_CAP_MISMATCH | RDO_GIVE_BACK); + RDO_CAP_MISMATCH | RDO_GIVE_BACK); #else uint32_t expected_rdo = RDO_FIXED(1, 900, 900, RDO_CAP_MISMATCH); #endif @@ -578,8 +582,8 @@ static int test_request_with_wait(void) /* We're in SNK_DISCOVERY now. Let's send the source cap. */ simulate_source_cap(port, 0); task_wait_event(30 * MSEC); - TEST_ASSERT(verify_goodcrc(port, - PD_ROLE_SINK, pd_port[port].msg_rx_id)); + TEST_ASSERT( + verify_goodcrc(port, PD_ROLE_SINK, pd_port[port].msg_rx_id)); /* Wait for the power request */ task_wake(PD_PORT_TO_TASK_ID(port)); @@ -588,9 +592,10 @@ static int test_request_with_wait(void) /* Process the request */ TEST_ASSERT(pd_test_tx_msg_verify_sop(port)); - TEST_ASSERT(pd_test_tx_msg_verify_short(port, - PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, - pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); + TEST_ASSERT(pd_test_tx_msg_verify_short( + port, + PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, + pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_rdo)); TEST_ASSERT(pd_test_tx_msg_verify_crc(port)); TEST_ASSERT(pd_test_tx_msg_verify_eop(port)); @@ -617,8 +622,8 @@ static int test_request_with_wait(void) /* Resend Source Cap. */ simulate_source_cap(port, 0); task_wait_event(30 * MSEC); - TEST_ASSERT(verify_goodcrc(port, - PD_ROLE_SINK, pd_port[port].msg_rx_id)); + TEST_ASSERT( + verify_goodcrc(port, PD_ROLE_SINK, pd_port[port].msg_rx_id)); /* Wait for the power request */ task_wake(PD_PORT_TO_TASK_ID(port)); @@ -627,9 +632,10 @@ static int test_request_with_wait(void) /* Process the request */ TEST_ASSERT(pd_test_tx_msg_verify_sop(port)); - TEST_ASSERT(pd_test_tx_msg_verify_short(port, - PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, - pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); + TEST_ASSERT(pd_test_tx_msg_verify_short( + port, + PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, + pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_rdo)); TEST_ASSERT(pd_test_tx_msg_verify_crc(port)); TEST_ASSERT(pd_test_tx_msg_verify_eop(port)); @@ -652,7 +658,7 @@ static int test_request_with_wait_no_src_cap(void) { #ifdef CONFIG_USB_PD_GIVE_BACK uint32_t expected_rdo = RDO_FIXED(1, 900, PD_MIN_CURRENT_MA, - RDO_CAP_MISMATCH | RDO_GIVE_BACK); + RDO_CAP_MISMATCH | RDO_GIVE_BACK); #else uint32_t expected_rdo = RDO_FIXED(1, 900, 900, RDO_CAP_MISMATCH); #endif @@ -666,8 +672,8 @@ static int test_request_with_wait_no_src_cap(void) /* We're in SNK_DISCOVERY now. Let's send the source cap. */ simulate_source_cap(port, 0); task_wait_event(30 * MSEC); - TEST_ASSERT(verify_goodcrc(port, - PD_ROLE_SINK, pd_port[port].msg_rx_id)); + TEST_ASSERT( + verify_goodcrc(port, PD_ROLE_SINK, pd_port[port].msg_rx_id)); /* Wait for the power request */ task_wake(PD_PORT_TO_TASK_ID(port)); @@ -676,9 +682,10 @@ static int test_request_with_wait_no_src_cap(void) /* Process the request */ TEST_ASSERT(pd_test_tx_msg_verify_sop(port)); - TEST_ASSERT(pd_test_tx_msg_verify_short(port, - PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, - pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); + TEST_ASSERT(pd_test_tx_msg_verify_short( + port, + PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, + pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_rdo)); TEST_ASSERT(pd_test_tx_msg_verify_crc(port)); TEST_ASSERT(pd_test_tx_msg_verify_eop(port)); @@ -711,9 +718,10 @@ static int test_request_with_wait_no_src_cap(void) /* Process the request */ TEST_ASSERT(pd_test_tx_msg_verify_sop(port)); - TEST_ASSERT(pd_test_tx_msg_verify_short(port, - PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, - pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); + TEST_ASSERT(pd_test_tx_msg_verify_short( + port, + PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, + pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_rdo)); TEST_ASSERT(pd_test_tx_msg_verify_crc(port)); TEST_ASSERT(pd_test_tx_msg_verify_eop(port)); @@ -736,7 +744,7 @@ static int test_request_with_reject(void) { #ifdef CONFIG_USB_PD_GIVE_BACK uint32_t expected_rdo = RDO_FIXED(1, 900, PD_MIN_CURRENT_MA, - RDO_CAP_MISMATCH | RDO_GIVE_BACK); + RDO_CAP_MISMATCH | RDO_GIVE_BACK); #else uint32_t expected_rdo = RDO_FIXED(1, 900, 900, RDO_CAP_MISMATCH); #endif @@ -750,8 +758,8 @@ static int test_request_with_reject(void) /* We're in SNK_DISCOVERY now. Let's send the source cap. */ simulate_source_cap(port, 0); task_wait_event(30 * MSEC); - TEST_ASSERT(verify_goodcrc(port, - PD_ROLE_SINK, pd_port[port].msg_rx_id)); + TEST_ASSERT( + verify_goodcrc(port, PD_ROLE_SINK, pd_port[port].msg_rx_id)); /* Wait for the power request */ task_wake(PD_PORT_TO_TASK_ID(port)); @@ -760,9 +768,10 @@ static int test_request_with_reject(void) /* Process the request */ TEST_ASSERT(pd_test_tx_msg_verify_sop(port)); - TEST_ASSERT(pd_test_tx_msg_verify_short(port, - PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, - pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); + TEST_ASSERT(pd_test_tx_msg_verify_short( + port, + PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, + pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_rdo)); TEST_ASSERT(pd_test_tx_msg_verify_crc(port)); TEST_ASSERT(pd_test_tx_msg_verify_eop(port)); @@ -788,8 +797,8 @@ static int test_request_with_reject(void) /* We're in SNK_READY. Send source cap. again. */ simulate_source_cap(port, 0); task_wait_event(30 * MSEC); - TEST_ASSERT(verify_goodcrc(port, - PD_ROLE_SINK, pd_port[port].msg_rx_id)); + TEST_ASSERT( + verify_goodcrc(port, PD_ROLE_SINK, pd_port[port].msg_rx_id)); /* Wait for the power request */ task_wake(PD_PORT_TO_TASK_ID(port)); @@ -798,9 +807,10 @@ static int test_request_with_reject(void) /* Process the request */ TEST_ASSERT(pd_test_tx_msg_verify_sop(port)); - TEST_ASSERT(pd_test_tx_msg_verify_short(port, - PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, - pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); + TEST_ASSERT(pd_test_tx_msg_verify_short( + port, + PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, + pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_rdo)); TEST_ASSERT(pd_test_tx_msg_verify_crc(port)); TEST_ASSERT(pd_test_tx_msg_verify_eop(port)); @@ -814,7 +824,7 @@ static int test_request(void) { #ifdef CONFIG_USB_PD_GIVE_BACK uint32_t expected_rdo = RDO_FIXED(1, 900, PD_MIN_CURRENT_MA, - RDO_CAP_MISMATCH | RDO_GIVE_BACK); + RDO_CAP_MISMATCH | RDO_GIVE_BACK); #else uint32_t expected_rdo = RDO_FIXED(1, 900, 900, RDO_CAP_MISMATCH); #endif @@ -828,8 +838,8 @@ static int test_request(void) /* We're in SNK_DISCOVERY now. Let's send the source cap. */ simulate_source_cap(port, 0); task_wait_event(30 * MSEC); - TEST_ASSERT(verify_goodcrc(port, - PD_ROLE_SINK, pd_port[port].msg_rx_id)); + TEST_ASSERT( + verify_goodcrc(port, PD_ROLE_SINK, pd_port[port].msg_rx_id)); /* Wait for the power request */ task_wake(PD_PORT_TO_TASK_ID(port)); @@ -838,9 +848,10 @@ static int test_request(void) /* Process the request */ TEST_ASSERT(pd_test_tx_msg_verify_sop(port)); - TEST_ASSERT(pd_test_tx_msg_verify_short(port, - PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, - pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); + TEST_ASSERT(pd_test_tx_msg_verify_short( + port, + PD_HEADER(PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, + pd_port[port].msg_tx_id, 1, pd_port[port].rev, 0))); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_rdo)); TEST_ASSERT(pd_test_tx_msg_verify_crc(port)); TEST_ASSERT(pd_test_tx_msg_verify_eop(port)); @@ -872,10 +883,10 @@ static int test_sink(void) /* The source cap should be sent */ TEST_ASSERT(pd_test_tx_msg_verify_sop(port)); - TEST_ASSERT(pd_test_tx_msg_verify_short(port, - PD_HEADER(PD_DATA_SOURCE_CAP, PD_ROLE_SOURCE, - PD_ROLE_DFP, pd_port[port].msg_tx_id, - pd_src_pdo_cnt, pd_port[port].rev, 0))); + TEST_ASSERT(pd_test_tx_msg_verify_short( + port, PD_HEADER(PD_DATA_SOURCE_CAP, PD_ROLE_SOURCE, PD_ROLE_DFP, + pd_port[port].msg_tx_id, pd_src_pdo_cnt, + pd_port[port].rev, 0))); for (i = 0; i < pd_src_pdo_cnt; ++i) TEST_ASSERT(pd_test_tx_msg_verify_word(port, pd_src_pdo[i])); @@ -900,7 +911,7 @@ static int test_sink(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); init_ports(); diff --git a/test/usb_pd.tasklist b/test/usb_pd.tasklist index fbd319148e..6ba85de1aa 100644 --- a/test/usb_pd.tasklist +++ b/test/usb_pd.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_pd_console.c b/test/usb_pd_console.c index c762bebfc8..711664aeb0 100644 --- a/test/usb_pd_console.c +++ b/test/usb_pd_console.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -17,8 +17,7 @@ #include "test_util.h" /* Defined in implementation */ -int command_pd(int argc, char **argv); -int remote_flashing(int argc, char **argv); +int command_pd(int argc, const char **argv); static enum debug_level prl_debug_level; static enum debug_level pe_debug_level; @@ -43,6 +42,7 @@ static int test_port; static enum pd_dpm_request request; static int max_volt; static int comm_enable; +static int pd_suspended; static int dev_info; static int vdm_cmd; static int vdm_count; @@ -140,7 +140,7 @@ uint8_t board_get_usb_pd_port_count(void) } void pe_send_vdm(int port, uint32_t vid, int cmd, const uint32_t *data, - int count) + int count) { int i; @@ -180,6 +180,12 @@ void pd_comm_enable(int port, int enable) comm_enable = enable; } +void pd_set_suspend(int port, int enable) +{ + test_port = port; + pd_suspended = enable; +} + void tc_print_dev_info(int port) { test_port = port; @@ -241,10 +247,15 @@ enum try_src_override_t tc_get_try_src_override(void) return try_src_override; } +enum pd_cc_states pd_get_task_cc_state(int port) +{ + return PD_CC_NONE; +} + static int test_command_pd_dump(void) { int argc = 3; - char *argv[] = {"pd", "dump", "", 0, 0, 0}; + const char *argv[] = { "pd", "dump", "", 0, 0, 0 }; char test[2]; sprintf(test, "e"); @@ -272,7 +283,7 @@ static int test_command_pd_dump(void) static int test_command_pd_try_src(void) { int argc = 3; - char *argv[] = {"pd", "trysrc", "2", 0, 0}; + const char *argv[] = { "pd", "trysrc", "2", 0, 0 }; try_src_override = 0; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -292,7 +303,7 @@ static int test_command_pd_try_src(void) static int test_command_pd_version(void) { int argc = 2; - char *argv[] = {"pd", "version", 0, 0, 0}; + const char *argv[] = { "pd", "version", 0, 0, 0 }; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -302,7 +313,7 @@ static int test_command_pd_version(void) static int test_command_pd_arg_count(void) { int argc; - char *argv[] = {"pd", "", 0, 0, 0}; + const char *argv[] = { "pd", "", 0, 0, 0 }; for (argc = 0; argc < 3; argc++) TEST_ASSERT(command_pd(argc, argv) == EC_ERROR_PARAM_COUNT); @@ -313,7 +324,7 @@ static int test_command_pd_arg_count(void) static int test_command_pd_port_num(void) { int argc = 3; - char *argv[10] = {"pd", "0", 0, 0, 0}; + const char *argv[10] = { "pd", "0", 0, 0, 0 }; char test[2]; sprintf(test, "%d", CONFIG_USB_PD_PORT_MAX_COUNT); @@ -326,7 +337,7 @@ static int test_command_pd_port_num(void) static int test_command_pd_tx(void) { int argc = 3; - char *argv[] = {"pd", "0", "tx", 0, 0}; + const char *argv[] = { "pd", "0", "tx", 0, 0 }; request = 0; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -339,7 +350,7 @@ static int test_command_pd_tx(void) static int test_command_pd_charger(void) { int argc = 3; - char *argv[] = {"pd", "1", "charger", 0, 0}; + const char *argv[] = { "pd", "1", "charger", 0, 0 }; request = 0; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -352,7 +363,7 @@ static int test_command_pd_charger(void) static int test_command_pd_dev1(void) { int argc = 4; - char *argv[] = {"pd", "0", "dev", "20", 0}; + const char *argv[] = { "pd", "0", "dev", "20", 0 }; request = 0; max_volt = 0; @@ -367,7 +378,7 @@ static int test_command_pd_dev1(void) static int test_command_pd_dev2(void) { int argc = 3; - char *argv[] = {"pd", "1", "dev", 0, 0}; + const char *argv[] = { "pd", "1", "dev", 0, 0 }; request = 0; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -381,7 +392,7 @@ static int test_command_pd_dev2(void) static int test_command_pd_disable(void) { int argc = 3; - char *argv[] = {"pd", "0", "disable", 0, 0}; + const char *argv[] = { "pd", "0", "disable", 0, 0 }; comm_enable = 1; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -394,7 +405,7 @@ static int test_command_pd_disable(void) static int test_command_pd_enable(void) { int argc = 3; - char *argv[] = {"pd", "1", "enable", 0, 0}; + const char *argv[] = { "pd", "1", "enable", 0, 0 }; comm_enable = 0; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -407,7 +418,7 @@ static int test_command_pd_enable(void) static int test_command_pd_hard(void) { int argc = 3; - char *argv[] = {"pd", "0", "hard", 0, 0}; + const char *argv[] = { "pd", "0", "hard", 0, 0 }; request = 0; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -420,7 +431,7 @@ static int test_command_pd_hard(void) static int test_command_pd_soft(void) { int argc = 3; - char *argv[] = {"pd", "0", "soft", 0, 0}; + const char *argv[] = { "pd", "0", "soft", 0, 0 }; request = 0; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -430,10 +441,42 @@ static int test_command_pd_soft(void) return EC_SUCCESS; } +static int test_command_pd_suspend(void) +{ + int argc = 3; + static const char *argv[] = { "pd", "0", "suspend" }; + + test_port = -1; + comm_enable = -1; + pd_suspended = -1; + TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); + TEST_ASSERT(test_port == 0); + TEST_ASSERT(comm_enable == 0); + TEST_ASSERT(pd_suspended == 1); + + return EC_SUCCESS; +} + +static int test_command_pd_resume(void) +{ + int argc = 3; + static const char *argv[] = { "pd", "1", "resume" }; + + test_port = -1; + comm_enable = -1; + pd_suspended = -1; + TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); + TEST_ASSERT(test_port == 1); + TEST_ASSERT(comm_enable == 1); + TEST_ASSERT(pd_suspended == 0); + + return EC_SUCCESS; +} + static int test_command_pd_swap1(void) { int argc = 3; - char *argv[] = {"pd", "0", "swap", 0, 0}; + const char *argv[] = { "pd", "0", "swap", 0, 0 }; TEST_ASSERT(command_pd(argc, argv) == EC_ERROR_PARAM_COUNT); @@ -443,7 +486,7 @@ static int test_command_pd_swap1(void) static int test_command_pd_swap2(void) { int argc = 4; - char *argv[] = {"pd", "0", "swap", "power", 0}; + const char *argv[] = { "pd", "0", "swap", "power", 0 }; request = 0; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -456,7 +499,7 @@ static int test_command_pd_swap2(void) static int test_command_pd_swap3(void) { int argc = 4; - char *argv[] = {"pd", "1", "swap", "data", 0}; + const char *argv[] = { "pd", "1", "swap", "data", 0 }; request = 0; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -469,7 +512,7 @@ static int test_command_pd_swap3(void) static int test_command_pd_swap4(void) { int argc = 4; - char *argv[] = {"pd", "0", "swap", "vconn", 0}; + const char *argv[] = { "pd", "0", "swap", "vconn", 0 }; request = 0; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -482,7 +525,7 @@ static int test_command_pd_swap4(void) static int test_command_pd_swap5(void) { int argc = 4; - char *argv[] = {"pd", "0", "swap", "xyz", 0}; + const char *argv[] = { "pd", "0", "swap", "xyz", 0 }; TEST_ASSERT(command_pd(argc, argv) == EC_ERROR_PARAM3); @@ -492,7 +535,7 @@ static int test_command_pd_swap5(void) static int test_command_pd_dualrole0(void) { int argc = 3; - char *argv[] = {"pd", "0", "dualrole", 0, 0}; + const char *argv[] = { "pd", "0", "dualrole", 0, 0 }; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -502,7 +545,7 @@ static int test_command_pd_dualrole0(void) static int test_command_pd_dualrole1(void) { int argc = 4; - char *argv[] = {"pd", "0", "dualrole", "on", 0}; + const char *argv[] = { "pd", "0", "dualrole", "on", 0 }; dr_state = 0; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -515,7 +558,7 @@ static int test_command_pd_dualrole1(void) static int test_command_pd_dualrole2(void) { int argc = 4; - char *argv[] = {"pd", "0", "dualrole", "off", 0}; + const char *argv[] = { "pd", "0", "dualrole", "off", 0 }; dr_state = 0; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -528,7 +571,7 @@ static int test_command_pd_dualrole2(void) static int test_command_pd_dualrole3(void) { int argc = 4; - char *argv[] = {"pd", "0", "dualrole", "freeze", 0}; + const char *argv[] = { "pd", "0", "dualrole", "freeze", 0 }; dr_state = 0; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -541,7 +584,7 @@ static int test_command_pd_dualrole3(void) static int test_command_pd_dualrole4(void) { int argc = 4; - char *argv[] = {"pd", "0", "dualrole", "sink", 0}; + const char *argv[] = { "pd", "0", "dualrole", "sink", 0 }; dr_state = 0; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -554,7 +597,7 @@ static int test_command_pd_dualrole4(void) static int test_command_pd_dualrole5(void) { int argc = 4; - char *argv[] = {"pd", "0", "dualrole", "source", 0}; + const char *argv[] = { "pd", "0", "dualrole", "source", 0 }; dr_state = 0; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -567,7 +610,7 @@ static int test_command_pd_dualrole5(void) static int test_command_pd_state(void) { int argc = 3; - char *argv[] = {"pd", "0", "state", 0, 0}; + const char *argv[] = { "pd", "0", "state", 0, 0 }; pd_get_polarity_called = false; pd_comm_is_enabled_called = false; @@ -596,7 +639,7 @@ static int test_command_pd_state(void) static int test_command_pd_srccaps(void) { int argc = 3; - char *argv[] = {"pd", "0", "srccaps", 0, 0}; + const char *argv[] = { "pd", "0", "srccaps", 0, 0 }; pd_srccaps_dump_called = false; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -608,7 +651,7 @@ static int test_command_pd_srccaps(void) static int test_command_pd_timer(void) { int argc = 3; - char *argv[] = {"pd", "0", "timer", 0, 0}; + const char *argv[] = { "pd", "0", "timer", 0, 0 }; pd_timer_dump_called = false; TEST_ASSERT(command_pd(argc, argv) == EC_SUCCESS); @@ -617,8 +660,7 @@ static int test_command_pd_timer(void) return EC_SUCCESS; } - -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); @@ -635,6 +677,8 @@ void run_test(int argc, char **argv) RUN_TEST(test_command_pd_enable); RUN_TEST(test_command_pd_hard); RUN_TEST(test_command_pd_soft); + RUN_TEST(test_command_pd_suspend); + RUN_TEST(test_command_pd_resume); RUN_TEST(test_command_pd_swap1); RUN_TEST(test_command_pd_swap2); RUN_TEST(test_command_pd_swap3); diff --git a/test/usb_pd_console.tasklist b/test/usb_pd_console.tasklist index 8889009b0a..959f62ef79 100644 --- a/test/usb_pd_console.tasklist +++ b/test/usb_pd_console.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2022 The Chromium OS Authors. All rights reserved. +/* Copyright 2022 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_pd_int.c b/test/usb_pd_int.c index 5d3cbbf0f2..44cc280ed1 100644 --- a/test/usb_pd_int.c +++ b/test/usb_pd_int.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -19,11 +19,12 @@ const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { }, }; -const struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { - { - .driver = &mock_usb_mux_driver, - } -}; +const struct usb_mux_chain usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { { + .mux = + &(const struct usb_mux){ + .driver = &mock_usb_mux_driver, + }, +} }; void board_reset_pd_mcu(void) { @@ -32,74 +33,74 @@ void board_reset_pd_mcu(void) static int deferred_resume_called; void pd_deferred_resume(int port) { - deferred_resume_called = 1; + deferred_resume_called = 1; } static int num_events; uint16_t tcpc_get_alert_status(void) { - if (--num_events > 0) - return PD_STATUS_TCPC_ALERT_0; - else - return 0; + if (--num_events > 0) + return PD_STATUS_TCPC_ALERT_0; + else + return 0; } test_static int test_storm_not_triggered(void) { - num_events = 100; - deferred_resume_called = 0; - schedule_deferred_pd_interrupt(PORT0); - task_wait_event(SECOND); - TEST_EQ(deferred_resume_called, 0, "%d"); + num_events = 100; + deferred_resume_called = 0; + schedule_deferred_pd_interrupt(PORT0); + task_wait_event(SECOND); + TEST_EQ(deferred_resume_called, 0, "%d"); - return EC_SUCCESS; + return EC_SUCCESS; } test_static int test_storm_triggered(void) { - num_events = 1000; - deferred_resume_called = 0; - schedule_deferred_pd_interrupt(PORT0); - task_wait_event(SECOND); - TEST_EQ(deferred_resume_called, 1, "%d"); + num_events = 1000; + deferred_resume_called = 0; + schedule_deferred_pd_interrupt(PORT0); + task_wait_event(SECOND); + TEST_EQ(deferred_resume_called, 1, "%d"); - return EC_SUCCESS; + return EC_SUCCESS; } test_static int test_storm_not_triggered_for_32bit_overflow(void) { - int i; - timestamp_t time; - - /* - * Ensure the MSB is 1 for overflow comparison tests. - * But make sure not to move time backwards. - */ - time.val = (get_time().val + 0x100000000) | 0xff000000; - force_time(time); - - /* - * 100 events every second for 10 seconds should never trigger - * a shutdown call. - */ - for (i = 0; i < 10; ++i) { - num_events = 100; - deferred_resume_called = 0; - schedule_deferred_pd_interrupt(PORT0); - task_wait_event(SECOND); - - TEST_EQ(deferred_resume_called, 0, "%d"); - } - - return EC_SUCCESS; + int i; + timestamp_t time; + + /* + * Ensure the MSB is 1 for overflow comparison tests. + * But make sure not to move time backwards. + */ + time.val = (get_time().val + 0x100000000) | 0xff000000; + force_time(time); + + /* + * 100 events every second for 10 seconds should never trigger + * a shutdown call. + */ + for (i = 0; i < 10; ++i) { + num_events = 100; + deferred_resume_called = 0; + schedule_deferred_pd_interrupt(PORT0); + task_wait_event(SECOND); + + TEST_EQ(deferred_resume_called, 0, "%d"); + } + + return EC_SUCCESS; } void before_test(void) { - pd_set_suspend(PORT0, 0); + pd_set_suspend(PORT0, 0); } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { /* Let tasks settle down */ task_wait_event(MINUTE); diff --git a/test/usb_pd_int.mocklist b/test/usb_pd_int.mocklist index 71c2e2cee9..cbff5e73eb 100644 --- a/test/usb_pd_int.mocklist +++ b/test/usb_pd_int.mocklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_pd_int.tasklist b/test/usb_pd_int.tasklist index 3487d55dc7..1888d3fa8c 100644 --- a/test/usb_pd_int.tasklist +++ b/test/usb_pd_int.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_pd_pdo_fixed.tasklist b/test/usb_pd_pdo_fixed.tasklist index 9a1e6b3e08..1d7b3e08c1 100644 --- a/test/usb_pd_pdo_fixed.tasklist +++ b/test/usb_pd_pdo_fixed.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_pd_pdo_fixed_test.c b/test/usb_pd_pdo_fixed_test.c index ad247c3ba2..530f90843a 100644 --- a/test/usb_pd_pdo_fixed_test.c +++ b/test/usb_pd_pdo_fixed_test.c @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -39,7 +39,7 @@ test_static int test_pd_find_pdo_index(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { RUN_TEST(test_pd_find_pdo_index); diff --git a/test/usb_pd_test_util.h b/test/usb_pd_test_util.h index 02fae22b41..c25d07db5d 100644 --- a/test/usb_pd_test_util.h +++ b/test/usb_pd_test_util.h @@ -1,4 +1,4 @@ -/* Copyright 2014 The Chromium OS Authors. All rights reserved. +/* Copyright 2014 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -31,4 +31,4 @@ int pd_test_tx_msg_verify_short(int port, uint16_t val); int pd_test_tx_msg_verify_word(int port, uint32_t val); int pd_test_tx_msg_verify_crc(int port); -#endif /* __TEST_USB_PD_TEST_UTIL_H */ +#endif /* __TEST_USB_PD_TEST_UTIL_H */ diff --git a/test/usb_pd_timer.c b/test/usb_pd_timer.c index 85044fc987..d469e67c48 100644 --- a/test/usb_pd_timer.c +++ b/test/usb_pd_timer.c @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -195,9 +195,10 @@ int test_pd_timers(void) TEST_ASSERT(pd_timer_is_disabled(port, bit)); /* - * Disable the PE timer range, which contains the previously enabled - * timers 1-5. + * Disable the PE and DPM timer ranges, which contain the previously + * enabled timers 1-5. */ + pd_timer_disable_range(port, DPM_TIMER_RANGE); pd_timer_disable_range(port, PE_TIMER_RANGE); /* Verify all timers are disabled. */ for (bit = 0; bit < PD_TIMER_COUNT; ++bit) @@ -206,7 +207,7 @@ int test_pd_timers(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { RUN_TEST(test_pd_timers_init); RUN_TEST(test_pd_timers_bit_ops); diff --git a/test/usb_pd_timer.tasklist b/test/usb_pd_timer.tasklist index 9a1e6b3e08..1d7b3e08c1 100644 --- a/test/usb_pd_timer.tasklist +++ b/test/usb_pd_timer.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_pe.h b/test/usb_pe.h index f0c7f603ee..41891af557 100644 --- a/test/usb_pe.h +++ b/test/usb_pe.h @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * diff --git a/test/usb_pe_drp.c b/test/usb_pe_drp.c index 5130c4a4a9..8d75454c6a 100644 --- a/test/usb_pe_drp.c +++ b/test/usb_pe_drp.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -28,11 +28,12 @@ const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { }, }; -const struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { - { - .driver = &mock_usb_mux_driver, - } -}; +const struct usb_mux_chain usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { { + .mux = + &(const struct usb_mux){ + .driver = &mock_usb_mux_driver, + }, +} }; void before_test(void) { @@ -57,8 +58,7 @@ void before_test(void) test_static void rx_message(enum tcpci_msg_type sop, enum pd_ctrl_msg_type ctrl_msg, enum pd_data_msg_type data_msg, - enum pd_power_role prole, - enum pd_data_role drole, + enum pd_power_role prole, enum pd_data_role drole, uint32_t data) { int type, cnt; @@ -70,8 +70,9 @@ test_static void rx_message(enum tcpci_msg_type sop, type = data_msg; cnt = 1; } - rx_emsg[PORT0].header = (PD_HEADER_SOP(sop) - | PD_HEADER(type, prole, drole, 0, cnt, PD_REV30, 0)); + rx_emsg[PORT0].header = + (PD_HEADER_SOP(sop) | + PD_HEADER(type, prole, drole, 0, cnt, PD_REV30, 0)); rx_emsg[PORT0].len = cnt * 4; *(uint32_t *)rx_emsg[PORT0].buf = data; mock_prl_message_received(PORT0); @@ -94,8 +95,8 @@ test_static int finish_src_discovery(int startup_cable_probes) EC_SUCCESS, "%d"); mock_prl_message_sent(PORT0); task_wait_event(10 * MSEC); - rx_message(TCPCI_MSG_SOP, PD_CTRL_NOT_SUPPORTED, 0, - PD_ROLE_SINK, PD_ROLE_UFP, 0); + rx_message(TCPCI_MSG_SOP, PD_CTRL_NOT_SUPPORTED, 0, PD_ROLE_SINK, + PD_ROLE_UFP, 0); /* Expect GET_REVISION, reply NOT_SUPPORTED. */ TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, @@ -103,29 +104,28 @@ test_static int finish_src_discovery(int startup_cable_probes) EC_SUCCESS, "%d"); mock_prl_message_sent(PORT0); task_wait_event(10 * MSEC); - rx_message(TCPCI_MSG_SOP, PD_CTRL_NOT_SUPPORTED, 0, - PD_ROLE_SINK, PD_ROLE_UFP, 0); + rx_message(TCPCI_MSG_SOP, PD_CTRL_NOT_SUPPORTED, 0, PD_ROLE_SINK, + PD_ROLE_UFP, 0); /* * Cable identity discovery is attempted 6 times total. 1 was done * above, so expect 5 more now. */ for (i = startup_cable_probes; i < 6; i++) { - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP_PRIME, - 0, PD_DATA_VENDOR_DEF, - 60 * MSEC), + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP_PRIME, 0, + PD_DATA_VENDOR_DEF, 60 * MSEC), EC_SUCCESS, "%d"); mock_prl_report_error(PORT0, ERR_TCH_XMIT, TCPCI_MSG_SOP_PRIME); } /* Expect VENDOR_DEF for partner identity, reply NOT_SUPPORTED. */ - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, - 0, PD_DATA_VENDOR_DEF, 10 * MSEC), + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, 0, + PD_DATA_VENDOR_DEF, 10 * MSEC), EC_SUCCESS, "%d"); mock_prl_message_sent(PORT0); task_wait_event(10 * MSEC); - rx_message(TCPCI_MSG_SOP, PD_CTRL_NOT_SUPPORTED, 0, - PD_ROLE_SINK, PD_ROLE_UFP, 0); + rx_message(TCPCI_MSG_SOP, PD_CTRL_NOT_SUPPORTED, 0, PD_ROLE_SINK, + PD_ROLE_UFP, 0); return EC_SUCCESS; } @@ -140,8 +140,8 @@ test_static int test_send_caps_error_before_connected(void) mock_tc_port[PORT0].power_role = PD_ROLE_SOURCE; mock_tc_port[PORT0].pd_enable = 1; mock_tc_port[PORT0].vconn_src = true; - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, - 0, PD_DATA_SOURCE_CAP, 10 * MSEC), + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, 0, + PD_DATA_SOURCE_CAP, 10 * MSEC), EC_SUCCESS, "%d"); /* @@ -155,8 +155,8 @@ test_static int test_send_caps_error_before_connected(void) * We should have gone to PE_SRC_Discovery on above error, so expect * VENDOR_DEF for cable identity, simulate no cable. */ - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP_PRIME, - 0, PD_DATA_VENDOR_DEF, 10 * MSEC), + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP_PRIME, 0, + PD_DATA_VENDOR_DEF, 10 * MSEC), EC_SUCCESS, "%d"); mock_prl_report_error(PORT0, ERR_TCH_XMIT, TCPCI_MSG_SOP_PRIME); @@ -164,8 +164,8 @@ test_static int test_send_caps_error_before_connected(void) * Expect SOURCE_CAP again. This is a retry since the first one above * got ERR_TCH_XMIT. Now simulate success (ie GoodCRC). */ - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, - 0, PD_DATA_SOURCE_CAP, 110 * MSEC), + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, 0, + PD_DATA_SOURCE_CAP, 110 * MSEC), EC_SUCCESS, "%d"); mock_prl_message_sent(PORT0); task_wait_event(10 * MSEC); @@ -179,14 +179,14 @@ test_static int test_send_caps_error_before_connected(void) */ /* REQUEST 5V, expect ACCEPT, PS_RDY. */ - rx_message(TCPCI_MSG_SOP, 0, PD_DATA_REQUEST, - PD_ROLE_SINK, PD_ROLE_UFP, RDO_FIXED(1, 500, 500, 0)); - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, - PD_CTRL_ACCEPT, 0, 10 * MSEC), + rx_message(TCPCI_MSG_SOP, 0, PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, + RDO_FIXED(1, 500, 500, 0)); + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, PD_CTRL_ACCEPT, + 0, 10 * MSEC), EC_SUCCESS, "%d"); mock_prl_message_sent(PORT0); - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, - PD_CTRL_PS_RDY, 0, 35 * MSEC), + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, PD_CTRL_PS_RDY, + 0, 35 * MSEC), EC_SUCCESS, "%d"); mock_prl_message_sent(PORT0); @@ -207,21 +207,21 @@ test_static int test_send_caps_error_when_connected(void) mock_tc_port[PORT0].power_role = PD_ROLE_SOURCE; mock_tc_port[PORT0].pd_enable = 1; mock_tc_port[PORT0].vconn_src = true; - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, - 0, PD_DATA_SOURCE_CAP, 10 * MSEC), + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, 0, + PD_DATA_SOURCE_CAP, 10 * MSEC), EC_SUCCESS, "%d"); mock_prl_message_sent(PORT0); task_wait_event(10 * MSEC); /* REQUEST 5V, expect ACCEPT, PS_RDY. */ - rx_message(TCPCI_MSG_SOP, 0, PD_DATA_REQUEST, - PD_ROLE_SINK, PD_ROLE_UFP, RDO_FIXED(1, 500, 500, 0)); - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, - PD_CTRL_ACCEPT, 0, 10 * MSEC), + rx_message(TCPCI_MSG_SOP, 0, PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, + RDO_FIXED(1, 500, 500, 0)); + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, PD_CTRL_ACCEPT, + 0, 10 * MSEC), EC_SUCCESS, "%d"); mock_prl_message_sent(PORT0); - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, - PD_CTRL_PS_RDY, 0, 35 * MSEC), + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, PD_CTRL_PS_RDY, + 0, 35 * MSEC), EC_SUCCESS, "%d"); mock_prl_message_sent(PORT0); @@ -233,10 +233,10 @@ test_static int test_send_caps_error_when_connected(void) * Now connected. Send GET_SOURCE_CAP, to check how error sending * SOURCE_CAP is handled. */ - rx_message(TCPCI_MSG_SOP, PD_CTRL_GET_SOURCE_CAP, 0, - PD_ROLE_SINK, PD_ROLE_UFP, 0); - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, - 0, PD_DATA_SOURCE_CAP, 10 * MSEC), + rx_message(TCPCI_MSG_SOP, PD_CTRL_GET_SOURCE_CAP, 0, PD_ROLE_SINK, + PD_ROLE_UFP, 0); + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, 0, + PD_DATA_SOURCE_CAP, 10 * MSEC), EC_SUCCESS, "%d"); /* Simulate error sending SOURCE_CAP. */ @@ -269,21 +269,21 @@ test_static int test_interrupting_pr_swap(void) mock_tc_port[PORT0].power_role = PD_ROLE_SOURCE; mock_tc_port[PORT0].pd_enable = 1; mock_tc_port[PORT0].vconn_src = true; - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, - 0, PD_DATA_SOURCE_CAP, 10 * MSEC), + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, 0, + PD_DATA_SOURCE_CAP, 10 * MSEC), EC_SUCCESS, "%d"); mock_prl_message_sent(PORT0); task_wait_event(10 * MSEC); /* REQUEST 5V, expect ACCEPT, PS_RDY. */ - rx_message(TCPCI_MSG_SOP, 0, PD_DATA_REQUEST, - PD_ROLE_SINK, PD_ROLE_UFP, RDO_FIXED(1, 500, 500, 0)); - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, - PD_CTRL_ACCEPT, 0, 10 * MSEC), + rx_message(TCPCI_MSG_SOP, 0, PD_DATA_REQUEST, PD_ROLE_SINK, PD_ROLE_UFP, + RDO_FIXED(1, 500, 500, 0)); + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, PD_CTRL_ACCEPT, + 0, 10 * MSEC), EC_SUCCESS, "%d"); mock_prl_message_sent(PORT0); - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, - PD_CTRL_PS_RDY, 0, 35 * MSEC), + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, PD_CTRL_PS_RDY, + 0, 35 * MSEC), EC_SUCCESS, "%d"); mock_prl_message_sent(PORT0); @@ -295,32 +295,32 @@ test_static int test_interrupting_pr_swap(void) * Now connected. Initiate a PR swap and then interrupt it after the * Accept, when power is transitioning to off. */ - rx_message(TCPCI_MSG_SOP, PD_CTRL_PR_SWAP, 0, - PD_ROLE_SINK, PD_ROLE_UFP, 0); + rx_message(TCPCI_MSG_SOP, PD_CTRL_PR_SWAP, 0, PD_ROLE_SINK, PD_ROLE_UFP, + 0); - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, - PD_CTRL_ACCEPT, 0, 10 * MSEC), + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_SOP, PD_CTRL_ACCEPT, + 0, 10 * MSEC), EC_SUCCESS, "%d"); mock_prl_message_sent(PORT0); task_wait_event(5 * SECOND); /* Interrupt the non-interruptible AMS */ - rx_message(TCPCI_MSG_SOP, PD_CTRL_PR_SWAP, 0, - PD_ROLE_SINK, PD_ROLE_UFP, 0); + rx_message(TCPCI_MSG_SOP, PD_CTRL_PR_SWAP, 0, PD_ROLE_SINK, PD_ROLE_UFP, + 0); /* * Expect a hard reset since power was transitioning during this * interruption */ - TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_TX_HARD_RESET, - 0, 0, 10 * MSEC), + TEST_EQ(mock_prl_wait_for_tx_msg(PORT0, TCPCI_MSG_TX_HARD_RESET, 0, 0, + 10 * MSEC), EC_SUCCESS, "%d"); return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/usb_pe_drp.mocklist b/test/usb_pe_drp.mocklist index b8879415d8..633b43d48d 100644 --- a/test/usb_pe_drp.mocklist +++ b/test/usb_pe_drp.mocklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_pe_drp.tasklist b/test/usb_pe_drp.tasklist index eb41326e3e..5c7f804157 100644 --- a/test/usb_pe_drp.tasklist +++ b/test/usb_pe_drp.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_pe_drp_noextended.c b/test/usb_pe_drp_noextended.c index 68da7426e2..6108458c9c 100644 --- a/test/usb_pe_drp_noextended.c +++ b/test/usb_pe_drp_noextended.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -24,18 +24,19 @@ const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { }, }; -const struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { - { - .driver = &mock_usb_mux_driver, - } -}; +const struct usb_mux_chain usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { { + .mux = + &(const struct usb_mux){ + .driver = &mock_usb_mux_driver, + }, +} }; void before_test(void) { mock_tc_port_reset(); } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/usb_pe_drp_noextended.tasklist b/test/usb_pe_drp_noextended.tasklist index eb41326e3e..5c7f804157 100644 --- a/test/usb_pe_drp_noextended.tasklist +++ b/test/usb_pe_drp_noextended.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_pe_drp_old.c b/test/usb_pe_drp_old.c index 1954ae065b..0985a4cae9 100644 --- a/test/usb_pe_drp_old.c +++ b/test/usb_pe_drp_old.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -21,9 +21,9 @@ #include "usb_tc_sm.h" #include "mock/usb_prl_mock.h" -#define pe_set_flag(_p, name) pe_set_fn((_p), (name ## _FN)) -#define pe_clr_flag(_p, name) pe_clr_fn((_p), (name ## _FN)) -#define pe_chk_flag(_p, name) pe_chk_fn((_p), (name ## _FN)) +#define pe_set_flag(_p, name) pe_set_fn((_p), (name##_FN)) +#define pe_clr_flag(_p, name) pe_clr_fn((_p), (name##_FN)) +#define pe_chk_flag(_p, name) pe_chk_fn((_p), (name##_FN)) /** * STUB Section @@ -35,7 +35,7 @@ const struct svdm_response svdm_rsp = { }; const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT]; -const struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT]; +const struct usb_mux_chain usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT]; static bool prl_is_busy_flag; @@ -77,12 +77,10 @@ bool pd_alt_mode_capable(int port) void pd_set_suspend(int port, int suspend) { - } void pd_set_error_recovery(int port) { - } test_static void setup_source(void) @@ -219,8 +217,8 @@ static int test_snk_give_source_cap(void) TEST_ASSERT(!pe_chk_flag(PORT0, PE_FLAGS_MSG_RECEIVED)); TEST_ASSERT(!pe_chk_flag(PORT0, PE_FLAGS_TX_COMPLETE)); - TEST_EQ(mock_prl_get_last_sent_data_msg(PORT0), - PD_DATA_SOURCE_CAP, "%d"); + TEST_EQ(mock_prl_get_last_sent_data_msg(PORT0), PD_DATA_SOURCE_CAP, + "%d"); TEST_EQ(get_state_pe(PORT0), PE_DR_SNK_GIVE_SOURCE_CAP, "%d"); pe_set_flag(PORT0, PE_FLAGS_TX_COMPLETE); @@ -249,9 +247,9 @@ test_static int test_extended_message_not_supported(void) * Receive an extended, non-chunked message; expect a Not Supported * response. */ - rx_emsg[PORT0].header = PD_HEADER( - PD_DATA_BATTERY_STATUS, PD_ROLE_SINK, PD_ROLE_UFP, 0, - PDO_MAX_OBJECTS, PD_REV30, 1); + rx_emsg[PORT0].header = PD_HEADER(PD_DATA_BATTERY_STATUS, PD_ROLE_SINK, + PD_ROLE_UFP, 0, PDO_MAX_OBJECTS, + PD_REV30, 1); *(uint16_t *)rx_emsg[PORT0].buf = PD_EXT_HEADER(0, 0, ARRAY_SIZE(rx_emsg[PORT0].buf)) & ~BIT(15); pe_set_flag(PORT0, PE_FLAGS_MSG_RECEIVED); @@ -261,16 +259,16 @@ test_static int test_extended_message_not_supported(void) pe_set_flag(PORT0, PE_FLAGS_TX_COMPLETE); task_wait_event(10 * MSEC); TEST_EQ(mock_prl_get_last_sent_ctrl_msg(PORT0), PD_CTRL_NOT_SUPPORTED, - "%d"); + "%d"); /* At this point, the PE should again be running in PE_SRC_Ready. */ /* * Receive an extended, chunked, single-chunk message; expect a Not * Supported response. */ - rx_emsg[PORT0].header = PD_HEADER( - PD_DATA_BATTERY_STATUS, PD_ROLE_SINK, PD_ROLE_UFP, 0, - PDO_MAX_OBJECTS, PD_REV30, 1); + rx_emsg[PORT0].header = PD_HEADER(PD_DATA_BATTERY_STATUS, PD_ROLE_SINK, + PD_ROLE_UFP, 0, PDO_MAX_OBJECTS, + PD_REV30, 1); *(uint16_t *)rx_emsg[PORT0].buf = PD_EXT_HEADER(0, 0, PD_MAX_EXTENDED_MSG_CHUNK_LEN); pe_set_flag(PORT0, PE_FLAGS_MSG_RECEIVED); @@ -280,16 +278,16 @@ test_static int test_extended_message_not_supported(void) pe_set_flag(PORT0, PE_FLAGS_TX_COMPLETE); task_wait_event(10 * MSEC); TEST_EQ(mock_prl_get_last_sent_ctrl_msg(PORT0), PD_CTRL_NOT_SUPPORTED, - "%d"); + "%d"); /* At this point, the PE should again be running in PE_SRC_Ready. */ /* * Receive an extended, chunked, multi-chunk message; expect a Not * Supported response after tChunkingNotSupported (not earlier). */ - rx_emsg[PORT0].header = PD_HEADER( - PD_DATA_BATTERY_STATUS, PD_ROLE_SINK, PD_ROLE_UFP, 0, - PDO_MAX_OBJECTS, PD_REV30, 1); + rx_emsg[PORT0].header = PD_HEADER(PD_DATA_BATTERY_STATUS, PD_ROLE_SINK, + PD_ROLE_UFP, 0, PDO_MAX_OBJECTS, + PD_REV30, 1); *(uint16_t *)rx_emsg[PORT0].buf = PD_EXT_HEADER(0, 0, ARRAY_SIZE(rx_emsg[PORT0].buf)); pe_set_flag(PORT0, PE_FLAGS_MSG_RECEIVED); @@ -301,13 +299,13 @@ test_static int test_extended_message_not_supported(void) */ task_wait_event(10 * MSEC); TEST_NE(mock_prl_get_last_sent_ctrl_msg(PORT0), PD_CTRL_NOT_SUPPORTED, - "%d"); + "%d"); task_wait_event(PD_T_CHUNKING_NOT_SUPPORTED); pe_set_flag(PORT0, PE_FLAGS_TX_COMPLETE); task_wait_event(10 * MSEC); TEST_EQ(mock_prl_get_last_sent_ctrl_msg(PORT0), PD_CTRL_NOT_SUPPORTED, - "%d"); + "%d"); /* At this point, the PE should again be running in PE_SRC_Ready. */ /* @@ -408,14 +406,14 @@ static int test_send_caps_error(void) pe_set_flag(PORT0, PE_FLAGS_PD_CONNECTION); set_state_pe(PORT0, PE_SRC_SEND_CAPABILITIES); task_wait_event(10 * MSEC); - TEST_EQ(mock_prl_get_last_sent_ctrl_msg(PORT0), - PD_CTRL_SOFT_RESET, "%d"); + TEST_EQ(mock_prl_get_last_sent_ctrl_msg(PORT0), PD_CTRL_SOFT_RESET, + "%d"); TEST_EQ(get_state_pe(PORT0), PE_SEND_SOFT_RESET, "%d"); return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/usb_pe_drp_old.mocklist b/test/usb_pe_drp_old.mocklist index 0582e5cbb3..118cec69a0 100644 --- a/test/usb_pe_drp_old.mocklist +++ b/test/usb_pe_drp_old.mocklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_pe_drp_old.tasklist b/test/usb_pe_drp_old.tasklist index eb41326e3e..5c7f804157 100644 --- a/test/usb_pe_drp_old.tasklist +++ b/test/usb_pe_drp_old.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_pe_drp_old_noextended.c b/test/usb_pe_drp_old_noextended.c index cefd77b7d2..43df6375b0 100644 --- a/test/usb_pe_drp_old_noextended.c +++ b/test/usb_pe_drp_old_noextended.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -27,7 +27,7 @@ const struct svdm_response svdm_rsp = { }; const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT]; -const struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT]; +const struct usb_mux_chain usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT]; int board_vbus_source_enabled(int port) { @@ -62,12 +62,10 @@ bool pd_alt_mode_capable(int port) void pd_set_suspend(int port, int suspend) { - } void pd_set_error_recovery(int port) { - } test_static void setup_source(void) @@ -198,8 +196,8 @@ static int test_snk_give_source_cap(void) TEST_ASSERT(!pe_chk_flag(PORT0, PE_FLAGS_MSG_RECEIVED)); TEST_ASSERT(!pe_chk_flag(PORT0, PE_FLAGS_TX_COMPLETE)); - TEST_EQ(fake_prl_get_last_sent_data_msg_type(PORT0), - PD_DATA_SOURCE_CAP, "%d"); + TEST_EQ(fake_prl_get_last_sent_data_msg_type(PORT0), PD_DATA_SOURCE_CAP, + "%d"); TEST_EQ(get_state_pe(PORT0), PE_DR_SNK_GIVE_SOURCE_CAP, "%d"); pe_set_flag(PORT0, PE_FLAGS_TX_COMPLETE); @@ -228,9 +226,9 @@ test_static int test_extended_message_not_supported(void) * Receive an extended, non-chunked message; expect a Not Supported * response. */ - rx_emsg[PORT0].header = PD_HEADER( - PD_DATA_BATTERY_STATUS, PD_ROLE_SINK, PD_ROLE_UFP, 0, - PDO_MAX_OBJECTS, PD_REV30, 1); + rx_emsg[PORT0].header = PD_HEADER(PD_DATA_BATTERY_STATUS, PD_ROLE_SINK, + PD_ROLE_UFP, 0, PDO_MAX_OBJECTS, + PD_REV30, 1); *(uint16_t *)rx_emsg[PORT0].buf = PD_EXT_HEADER(0, 0, ARRAY_SIZE(rx_emsg[PORT0].buf)) & ~BIT(15); pe_set_flag(PORT0, PE_FLAGS_MSG_RECEIVED); @@ -240,16 +238,16 @@ test_static int test_extended_message_not_supported(void) pe_set_flag(PORT0, PE_FLAGS_TX_COMPLETE); task_wait_event(10 * MSEC); TEST_EQ(fake_prl_get_last_sent_ctrl_msg(PORT0), PD_CTRL_NOT_SUPPORTED, - "%d"); + "%d"); /* At this point, the PE should again be running in PE_SRC_Ready. */ /* * Receive an extended, chunked, single-chunk message; expect a Not * Supported response. */ - rx_emsg[PORT0].header = PD_HEADER( - PD_DATA_BATTERY_STATUS, PD_ROLE_SINK, PD_ROLE_UFP, 0, - PDO_MAX_OBJECTS, PD_REV30, 1); + rx_emsg[PORT0].header = PD_HEADER(PD_DATA_BATTERY_STATUS, PD_ROLE_SINK, + PD_ROLE_UFP, 0, PDO_MAX_OBJECTS, + PD_REV30, 1); *(uint16_t *)rx_emsg[PORT0].buf = PD_EXT_HEADER(0, 0, PD_MAX_EXTENDED_MSG_CHUNK_LEN); pe_set_flag(PORT0, PE_FLAGS_MSG_RECEIVED); @@ -259,16 +257,16 @@ test_static int test_extended_message_not_supported(void) pe_set_flag(PORT0, PE_FLAGS_TX_COMPLETE); task_wait_event(10 * MSEC); TEST_EQ(fake_prl_get_last_sent_ctrl_msg(PORT0), PD_CTRL_NOT_SUPPORTED, - "%d"); + "%d"); /* At this point, the PE should again be running in PE_SRC_Ready. */ /* * Receive an extended, chunked, multi-chunk message; expect a Not * Supported response after tChunkingNotSupported (not earlier). */ - rx_emsg[PORT0].header = PD_HEADER( - PD_DATA_BATTERY_STATUS, PD_ROLE_SINK, PD_ROLE_UFP, 0, - PDO_MAX_OBJECTS, PD_REV30, 1); + rx_emsg[PORT0].header = PD_HEADER(PD_DATA_BATTERY_STATUS, PD_ROLE_SINK, + PD_ROLE_UFP, 0, PDO_MAX_OBJECTS, + PD_REV30, 1); *(uint16_t *)rx_emsg[PORT0].buf = PD_EXT_HEADER(0, 0, ARRAY_SIZE(rx_emsg[PORT0].buf)); pe_set_flag(PORT0, PE_FLAGS_MSG_RECEIVED); @@ -280,13 +278,13 @@ test_static int test_extended_message_not_supported(void) */ task_wait_event(10 * MSEC); TEST_NE(fake_prl_get_last_sent_ctrl_msg(PORT0), PD_CTRL_NOT_SUPPORTED, - "%d"); + "%d"); task_wait_event(PD_T_CHUNKING_NOT_SUPPORTED); pe_set_flag(PORT0, PE_FLAGS_TX_COMPLETE); task_wait_event(10 * MSEC); TEST_EQ(fake_prl_get_last_sent_ctrl_msg(PORT0), PD_CTRL_NOT_SUPPORTED, - "%d"); + "%d"); /* At this point, the PE should again be running in PE_SRC_Ready. */ /* @@ -337,14 +335,14 @@ static int test_send_caps_error(void) pe_set_flag(PORT0, PE_FLAGS_PD_CONNECTION); set_state_pe(PORT0, PE_SRC_SEND_CAPABILITIES); task_wait_event(10 * MSEC); - TEST_EQ(fake_prl_get_last_sent_ctrl_msg(PORT0), - PD_CTRL_SOFT_RESET, "%d"); + TEST_EQ(fake_prl_get_last_sent_ctrl_msg(PORT0), PD_CTRL_SOFT_RESET, + "%d"); TEST_EQ(get_state_pe(PORT0), PE_SEND_SOFT_RESET, "%d"); return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/usb_pe_drp_old_noextended.mocklist b/test/usb_pe_drp_old_noextended.mocklist index 0582e5cbb3..118cec69a0 100644 --- a/test/usb_pe_drp_old_noextended.mocklist +++ b/test/usb_pe_drp_old_noextended.mocklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_pe_drp_old_noextended.tasklist b/test/usb_pe_drp_old_noextended.tasklist index eb41326e3e..5c7f804157 100644 --- a/test/usb_pe_drp_old_noextended.tasklist +++ b/test/usb_pe_drp_old_noextended.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_ppc.c b/test/usb_ppc.c index 0cf6f69bf3..d08ae47946 100644 --- a/test/usb_ppc.c +++ b/test/usb_ppc.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -28,15 +28,12 @@ const struct ppc_drv null_drv = { }; struct ppc_config_t ppc_chips[] = { - [0] = { - .drv = &null_drv - }, + [0] = { .drv = &null_drv }, }; unsigned int ppc_cnt = ARRAY_SIZE(ppc_chips); const struct tcpc_config_t tcpc_config[] = { - [0] = { - }, + [0] = {}, }; static int test_ppc_init(void) @@ -171,9 +168,7 @@ static int test_ppc_is_vbus_present(void) return EC_SUCCESS; } - - -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/usb_ppc.tasklist b/test/usb_ppc.tasklist index 9fc1a80f4d..844ddb6c10 100644 --- a/test/usb_ppc.tasklist +++ b/test/usb_ppc.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_prl.c b/test/usb_prl.c index 3ef3450649..9b4c956649 100644 --- a/test/usb_prl.c +++ b/test/usb_prl.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -34,14 +34,14 @@ const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { static enum pd_power_role get_partner_power_role(int port) { - return pd_get_power_role(port) == PD_ROLE_SINK ? - PD_ROLE_SOURCE : PD_ROLE_SINK; + return pd_get_power_role(port) == PD_ROLE_SINK ? PD_ROLE_SOURCE : + PD_ROLE_SINK; } static enum pd_data_role get_partner_data_role(int port) { - return pd_get_data_role(port) == PD_ROLE_UFP ? - PD_ROLE_DFP : PD_ROLE_UFP; + return pd_get_data_role(port) == PD_ROLE_UFP ? PD_ROLE_DFP : + PD_ROLE_UFP; } static void enable_prl(int port, int en) @@ -50,7 +50,7 @@ static void enable_prl(int port, int en) mock_tc_port[port].pd_enable = en; - task_wait_event(10*MSEC); + task_wait_event(10 * MSEC); prl_set_rev(port, TCPCI_MSG_SOP, mock_tc_port[port].rev); } @@ -59,16 +59,16 @@ static int test_receive_control_msg(void) { int port = PORT0; uint16_t header = PD_HEADER(PD_CTRL_DR_SWAP, - get_partner_power_role(port), - get_partner_data_role(port), - mock_tc_port[port].msg_rx_id, - 0, mock_tc_port[port].rev, 0); + get_partner_power_role(port), + get_partner_data_role(port), + mock_tc_port[port].msg_rx_id, 0, + mock_tc_port[port].rev, 0); /* Set up the message to be received. */ mock_tcpm_rx_msg(port, header, 0, NULL); /* Process the message. */ - task_wait_event(10*MSEC); + task_wait_event(10 * MSEC); /* Check results. */ TEST_NE(mock_pe_port[port].mock_pe_message_received, 0, "%d"); @@ -94,7 +94,7 @@ static int test_send_control_msg(void) /* Simulate the TX complete that the PD_INT handler would signal */ pd_transmit_complete(port, TCPC_TX_COMPLETE_SUCCESS); - task_wait_event(10*MSEC); + task_wait_event(10 * MSEC); /* Check results. */ TEST_NE(mock_pe_port[port].mock_pe_message_sent, 0, "%d"); @@ -111,16 +111,16 @@ static int test_discard_queued_tx_when_rx_happens(void) { int port = PORT0; uint16_t header = PD_HEADER(PD_CTRL_DR_SWAP, - get_partner_power_role(port), - get_partner_data_role(port), - mock_tc_port[port].msg_rx_id, - 0, mock_tc_port[port].rev, 0); + get_partner_power_role(port), + get_partner_data_role(port), + mock_tc_port[port].msg_rx_id, 0, + mock_tc_port[port].rev, 0); uint8_t *buf = tx_emsg[port].buf; uint8_t len = 8; uint8_t i = 0; /* Set up the message to be sent. */ - for (i = 0 ; i < len ; i++) + for (i = 0; i < len; i++) buf[i] = (uint8_t)i; tx_emsg[port].len = len; @@ -130,7 +130,7 @@ static int test_discard_queued_tx_when_rx_happens(void) mock_tcpm_rx_msg(port, header, 0, NULL); /* Process the message. */ - task_wait_event(10*MSEC); + task_wait_event(10 * MSEC); /* Check results. Source should have discarded its message queued up * to TX, and should have received the message from the sink. @@ -166,14 +166,13 @@ void after_test(void) enable_prl(PORT0, 0); } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { RUN_TEST(test_receive_control_msg); RUN_TEST(test_send_control_msg); RUN_TEST(test_discard_queued_tx_when_rx_happens); /* TODO add tests here */ - /* Do basic state machine validity checks last. */ RUN_TEST(test_prl_no_parent_cycles); RUN_TEST(test_prl_all_states_named); diff --git a/test/usb_prl.mocklist b/test/usb_prl.mocklist index bf5357334a..7a5af3392e 100644 --- a/test/usb_prl.mocklist +++ b/test/usb_prl.mocklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_prl.tasklist b/test/usb_prl.tasklist index eb41326e3e..5c7f804157 100644 --- a/test/usb_prl.tasklist +++ b/test/usb_prl.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_prl_noextended.c b/test/usb_prl_noextended.c index a47c01a13e..956c0027f5 120000..100644 --- a/test/usb_prl_noextended.c +++ b/test/usb_prl_noextended.c @@ -1 +1,1347 @@ -usb_prl_old.c
\ No newline at end of file +/* Copyright 2019 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + * + * Test USB Protocol Layer module. + */ +#include "common.h" +#include "crc.h" +#include "task.h" +#include "tcpm/tcpm.h" +#include "test_util.h" +#include "timer.h" +#include "usb_emsg.h" +#include "usb_pd_test_util.h" +#include "usb_pd.h" +#include "usb_pd_tcpm.h" +#include "usb_pe_sm.h" +#include "usb_prl_sm.h" +#include "usb_sm_checks.h" +#include "usb_tc_sm.h" +#include "util.h" + +#define PORT0 0 + +/* + * These enum definitions are declared in usb_prl_sm and are private to that + * file. If those definitions are re-ordered, then we need to update these + * definitions (should be very rare). + */ +enum usb_prl_tx_state { + PRL_TX_PHY_LAYER_RESET, + PRL_TX_WAIT_FOR_MESSAGE_REQUEST, + PRL_TX_LAYER_RESET_FOR_TRANSMIT, + PRL_TX_WAIT_FOR_PHY_RESPONSE, + PRL_TX_SRC_SOURCE_TX, + PRL_TX_SNK_START_AMS, + PRL_TX_SRC_PENDING, + PRL_TX_SNK_PENDING, + PRL_TX_DISCARD_MESSAGE, +}; + +enum usb_prl_hr_state { + PRL_HR_WAIT_FOR_REQUEST, + PRL_HR_RESET_LAYER, + PRL_HR_WAIT_FOR_PHY_HARD_RESET_COMPLETE, + PRL_HR_WAIT_FOR_PE_HARD_RESET_COMPLETE, +}; + +enum usb_rch_state { + RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, + RCH_PASS_UP_MESSAGE, + RCH_PROCESSING_EXTENDED_MESSAGE, + RCH_REQUESTING_CHUNK, + RCH_WAITING_CHUNK, + RCH_REPORT_ERROR, +}; + +enum usb_tch_state { + TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE, + TCH_WAIT_FOR_TRANSMISSION_COMPLETE, + TCH_CONSTRUCT_CHUNKED_MESSAGE, + TCH_SENDING_CHUNKED_MESSAGE, + TCH_WAIT_CHUNK_REQUEST, + TCH_MESSAGE_RECEIVED, + TCH_MESSAGE_SENT, + TCH_REPORT_ERROR, +}; + +/* Defined in implementation */ +enum usb_prl_tx_state prl_tx_get_state(const int port); +enum usb_prl_hr_state prl_hr_get_state(const int port); +enum usb_rch_state rch_get_state(const int port); +enum usb_tch_state tch_get_state(const int port); + +#ifndef CONFIG_USB_PD_EXTENDED_MESSAGES +enum usb_rch_state rch_get_state(const int port) +{ + return RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER; +} +#endif + +static uint32_t test_data[] = { + 0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f, 0x10111213, 0x14151617, + 0x1819a0b0, 0xc0d0e0f0, 0x20212223, 0x24252627, 0x28292a2b, 0x2c2d2e2f, + 0x30313233, 0x34353637, 0x38393a3b, 0x3c3d3e3f, 0x40414243, 0x44454647, + 0x48494a4b, 0x4c4d4e4f, 0x50515253, 0x54555657, 0x58595a5b, 0x5c5d5e5f, + 0x60616263, 0x64656667, 0x68696a6b, 0x6c6d6e6f, 0x70717273, 0x74757677, + 0x78797a7b, 0x7c7d7e7f, 0x80818283, 0x84858687, 0x88898a8b, 0x8c8d8e8f, + 0x90919293, 0x94959697, 0x98999a9b, 0x9c9d9e9f, 0xa0a1a2a3, 0xa4a5a6a7, + 0xa8a9aaab, 0xacadaeaf, 0xb0b1b2b3, 0xb4b5b6b7, 0xb8b9babb, 0xbcbdbebf, + 0xc0c1c2c3, 0xc4c5c6c7, 0xc8c9cacb, 0xcccdcecf, 0xd0d1d2d3, 0xd4d5d6d7, + 0xd8d9dadb, 0xdcdddedf, 0xe0e1e2e3, 0xe4e5e6e7, 0xe8e9eaeb, 0xecedeeef, + 0xf0f1f2f3, 0xf4f5f6f7, 0xf8f9fafb, 0xfcfdfeff, 0x11223344 +}; + +void pd_set_suspend(int port, int suspend) +{ +} + +void pd_set_error_recovery(int port) +{ +} + +static enum pd_power_role get_partner_power_role(int port); +static enum pd_data_role get_partner_data_role(int port); + +static struct pd_prl { + int rev; + int pd_enable; + enum pd_power_role power_role; + enum pd_data_role data_role; + int msg_tx_id; + int msg_rx_id; + enum tcpci_msg_type sop; + + int mock_pe_message_sent; + int mock_pe_error; + int mock_pe_hard_reset_sent; + int mock_pe_got_hard_reset; + int mock_pe_message_received; + int mock_got_soft_reset; + int mock_message_discard; +} pd_port[CONFIG_USB_PD_PORT_MAX_COUNT]; + +static void init_port(int port, int rev) +{ + pd_port[port].rev = rev; + pd_port[port].pd_enable = 0; + pd_port[port].power_role = PD_ROLE_SINK; + pd_port[port].data_role = PD_ROLE_UFP; + pd_port[port].msg_tx_id = 0; + pd_port[port].msg_rx_id = 0; + + tcpm_init(port); + tcpm_set_polarity(port, 0); + tcpm_set_rx_enable(port, 0); +} + +static inline uint32_t pending_pd_task_events(int port) +{ + return *task_get_event_bitmap(PD_PORT_TO_TASK_ID(port)); +} + +void inc_tx_id(int port) +{ + pd_port[port].msg_tx_id = (pd_port[port].msg_tx_id + 1) & 7; +} + +void inc_rx_id(int port) +{ + pd_port[port].msg_rx_id = (pd_port[port].msg_rx_id + 1) % 7; +} + +static int verify_goodcrc(int port, int role, int id) +{ + return pd_test_tx_msg_verify_sop(port) && + pd_test_tx_msg_verify_short(port, + PD_HEADER(PD_CTRL_GOOD_CRC, role, + role, id, 0, 0, 0)) && + pd_test_tx_msg_verify_crc(port) && + pd_test_tx_msg_verify_eop(port); +} + +static void simulate_rx_msg(int port, uint16_t header, int cnt, + const uint32_t *data) +{ + int i; + + pd_test_rx_set_preamble(port, 1); + pd_test_rx_msg_append_sop(port); + pd_test_rx_msg_append_short(port, header); + + crc32_init(); + crc32_hash16(header); + + for (i = 0; i < cnt; ++i) { + pd_test_rx_msg_append_word(port, data[i]); + crc32_hash32(data[i]); + } + + pd_test_rx_msg_append_word(port, crc32_result()); + + pd_test_rx_msg_append_eop(port); + pd_test_rx_msg_append_last_edge(port); + + pd_simulate_rx(port); +} + +static void simulate_goodcrc(int port, int role, int id) +{ + simulate_rx_msg(port, + PD_HEADER(PD_CTRL_GOOD_CRC, role, role, id, 0, + pd_port[port].rev, 0), + 0, NULL); +} + +static void cycle_through_state_machine(int port, uint32_t num, uint32_t time) +{ + int i; + + for (i = 0; i < num; i++) { + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(time); + } +} + +static int simulate_request_chunk(int port, enum pd_ext_msg_type msg_type, + int chunk_num, int len) +{ + uint16_t header = PD_HEADER(msg_type, get_partner_power_role(port), + get_partner_data_role(port), + pd_port[port].msg_rx_id, 1, + pd_port[port].rev, 1); + uint32_t msg = PD_EXT_HEADER(chunk_num, 1, len); + + simulate_rx_msg(port, header, 1, (const uint32_t *)&msg); + task_wait_event(30 * MSEC); + + if (!verify_goodcrc(port, pd_port[port].data_role, + pd_port[port].msg_rx_id)) + return 0; + + return 1; +} + +static int simulate_receive_ctrl_msg(int port, enum pd_ctrl_msg_type msg_type) +{ + uint16_t header = PD_HEADER(msg_type, get_partner_power_role(port), + get_partner_data_role(port), + pd_port[port].msg_rx_id, 0, + pd_port[port].rev, 0); + + simulate_rx_msg(port, header, 0, NULL); + task_wait_event(30 * MSEC); + + if (!verify_goodcrc(port, pd_port[port].data_role, + pd_port[port].msg_rx_id)) + return 0; + + return 1; +} + +static int verify_data_reception(int port, uint16_t header, int len) +{ + int i; + int cnt = (len + 3) & ~3; + + cycle_through_state_machine(port, 3, 10 * MSEC); + + if (pd_port[port].mock_pe_error >= 0) + return 0; + + if (!pd_port[port].mock_pe_message_received) + return 0; + + if (rx_emsg[port].header != header) + return 0; + + if (rx_emsg[port].len != cnt) + return 0; + + for (i = 0; i < cnt; i++) { + if (i < len) { + if (rx_emsg[port].buf[i] != + *((unsigned char *)test_data + i)) + return 0; + } else { + if (rx_emsg[port].buf[i] != 0) + return 0; + } + } + + return 1; +} + +static int verify_chunk_data_reception(int port, uint16_t header, int len) +{ + int i; + uint8_t *td = (uint8_t *)test_data; + + if (pd_port[port].mock_got_soft_reset) { + ccprintf("Got mock soft reset\n"); + return 0; + } + + if (!pd_port[port].mock_pe_message_received) { + ccprintf("No mock pe msg received\n"); + return 0; + } + + if (pd_port[port].mock_pe_error >= 0) { + ccprintf("Mock pe error (%d)\n", pd_port[port].mock_pe_error); + return 0; + } + + if (rx_emsg[port].len != len) { + ccprintf("emsg len (%d) != 0\n", rx_emsg[port].len); + return 0; + } + + for (i = 0; i < len; i++) { + if (rx_emsg[port].buf[i] != td[i]) { + ccprintf("emsg buf[%d] != td\n", i); + return 0; + } + } + + return 1; +} + +static int simulate_receive_data(int port, enum pd_data_msg_type msg_type, + int len) +{ + int i; + int nw = (len + 3) >> 2; + uint8_t td[28]; + uint16_t header = PD_HEADER(msg_type, get_partner_power_role(port), + get_partner_data_role(port), + pd_port[port].msg_rx_id, nw, + pd_port[port].rev, 0); + + pd_port[port].mock_pe_error = -1; + pd_port[port].mock_pe_message_received = 0; + rx_emsg[port].header = 0; + rx_emsg[port].len = 0; + memset(rx_emsg[port].buf, 0, ARRAY_SIZE(rx_emsg[port].buf)); + + for (i = 0; i < 28; i++) { + if (i < len) + td[i] = *((uint8_t *)test_data + i); + else + td[i] = 0; + } + + simulate_rx_msg(port, header, nw, (uint32_t *)td); + task_wait_event(30 * MSEC); + + if (!verify_goodcrc(port, pd_port[port].data_role, + pd_port[port].msg_rx_id)) + return 0; + + inc_rx_id(port); + + return verify_data_reception(port, header, len); +} + +static int simulate_receive_extended_data(int port, + enum pd_data_msg_type msg_type, + int len) +{ + int i; + int j; + int byte_len; + int nw; + int dsize; + uint8_t td[28]; + int chunk_num = 0; + int data_offset = 0; + uint8_t *expected_data = (uint8_t *)test_data; + uint16_t header; + + pd_port[port].mock_pe_error = -1; + pd_port[port].mock_pe_message_received = 0; + rx_emsg[port].header = 0; + rx_emsg[port].len = 0; + memset(rx_emsg[port].buf, 0, ARRAY_SIZE(rx_emsg[port].buf)); + + dsize = len; + for (j = 0; j < 10; j++) { + /* Let state machine settle before starting another round */ + cycle_through_state_machine(port, 10, MSEC); + + byte_len = len; + if (byte_len > PD_MAX_EXTENDED_MSG_CHUNK_LEN) + byte_len = PD_MAX_EXTENDED_MSG_CHUNK_LEN; + + len -= PD_MAX_EXTENDED_MSG_CHUNK_LEN; + + memset(td, 0, 28); + *(uint16_t *)td = PD_EXT_HEADER(chunk_num, 0, dsize); + + for (i = 0; i < byte_len; i++) + td[i + 2] = *(expected_data + data_offset++); + + nw = (byte_len + 2 + 3) >> 2; + header = PD_HEADER(msg_type, get_partner_power_role(port), + get_partner_data_role(port), + pd_port[port].msg_rx_id, nw, + pd_port[port].rev, 1); + + if (pd_port[port].mock_pe_error >= 0) { + ccprintf("Mock pe error (%d) iteration (%d)\n", + pd_port[port].mock_pe_error, j); + return 0; + } + + if (IS_ENABLED(CONFIG_USB_PD_EXTENDED_MESSAGES) && + pd_port[port].mock_pe_message_received) { + ccprintf("Mock pe msg received iteration (%d)\n", j); + return 0; + } + + if (rx_emsg[port].len != 0) { + ccprintf("emsg len (%d) != 0 iteration (%d)\n", + rx_emsg[port].len, j); + return 0; + } + + simulate_rx_msg(port, header, nw, (uint32_t *)td); + cycle_through_state_machine(port, 1, MSEC); + + if (!verify_goodcrc(port, pd_port[port].data_role, + pd_port[port].msg_rx_id)) { + ccprintf("Verify goodcrc bad iteration (%d)\n", j); + return 0; + } + + cycle_through_state_machine(port, 1, MSEC); + inc_rx_id(port); + + if (!IS_ENABLED(CONFIG_USB_PD_EXTENDED_MESSAGES)) { + if (pd_port[port].mock_pe_message_received) + return 1; + return 0; + } + + /* + * If no more data, do expected to get a chunk request + */ + if (len <= 0) + break; + + /* + * We need to ensure that the TX event has been set, which may + * require an extra cycle through the state machine + */ + if (!(PD_EVENT_TX & pending_pd_task_events(port))) + cycle_through_state_machine(port, 1, MSEC); + + chunk_num++; + + /* Test Request next chunk packet */ + if (!pd_test_tx_msg_verify_sop(port)) { + ccprintf("Verify sop bad iteration (%d)\n", j); + return 0; + } + + if (!pd_test_tx_msg_verify_short( + port, PD_HEADER(msg_type, pd_port[port].power_role, + pd_port[port].data_role, + pd_port[port].msg_tx_id, 1, + pd_port[port].rev, 1))) { + ccprintf("Verify msg short bad iteration (%d)\n", j); + return 0; + } + + if (!pd_test_tx_msg_verify_word(port, PD_EXT_HEADER(chunk_num, + 1, 0))) { + ccprintf("Verify msg word bad iteration (%d)\n", j); + return 0; + } + + if (!pd_test_tx_msg_verify_crc(port)) { + ccprintf("Verify msg crc bad iteration (%d)\n", j); + return 0; + } + + if (!pd_test_tx_msg_verify_eop(port)) { + ccprintf("Verify msg eop bad iteration (%d)\n", j); + return 0; + } + + cycle_through_state_machine(port, 1, MSEC); + + /* Request next chunk packet was good. Send GoodCRC */ + simulate_goodcrc(port, get_partner_power_role(port), + pd_port[port].msg_tx_id); + + cycle_through_state_machine(port, 1, MSEC); + + inc_tx_id(port); + } + + cycle_through_state_machine(port, 1, MSEC); + + return verify_chunk_data_reception(port, header, dsize); +} + +static int verify_ctrl_msg_transmission(int port, + enum pd_ctrl_msg_type msg_type) +{ + if (!pd_test_tx_msg_verify_sop(port)) + return 0; + + if (!pd_test_tx_msg_verify_short( + port, + PD_HEADER(msg_type, pd_port[port].power_role, + pd_port[port].data_role, pd_port[port].msg_tx_id, + 0, pd_port[port].rev, 0))) + return 0; + + if (!pd_test_tx_msg_verify_crc(port)) + return 0; + + if (!pd_test_tx_msg_verify_eop(port)) + return 0; + + return 1; +} + +static int +simulate_send_ctrl_msg_request_from_pe(int port, enum tcpci_msg_type type, + enum pd_ctrl_msg_type msg_type) +{ + pd_port[port].mock_got_soft_reset = 0; + pd_port[port].mock_pe_error = -1; + pd_port[port].mock_pe_message_sent = 0; + prl_send_ctrl_msg(port, type, msg_type); + cycle_through_state_machine(port, 1, MSEC); + + return verify_ctrl_msg_transmission(port, msg_type); +} + +static int verify_data_msg_transmission(int port, + enum pd_data_msg_type msg_type, int len) +{ + int i; + int num_words = (len + 3) >> 2; + int data_obj_in_bytes; + uint32_t td; + + if (!pd_test_tx_msg_verify_sop(port)) + return 0; + + if (!pd_test_tx_msg_verify_short( + port, + PD_HEADER(msg_type, pd_port[port].power_role, + pd_port[port].data_role, pd_port[port].msg_tx_id, + num_words, pd_port[port].rev, 0))) + return 0; + + for (i = 0; i < num_words; i++) { + td = test_data[i]; + data_obj_in_bytes = (i + 1) * 4; + if (data_obj_in_bytes > len) { + switch (data_obj_in_bytes - len) { + case 1: + td &= 0x00ffffff; + break; + case 2: + td &= 0x0000ffff; + break; + case 3: + td &= 0x000000ff; + break; + } + } + + if (!pd_test_tx_msg_verify_word(port, td)) + return 0; + } + + if (!pd_test_tx_msg_verify_crc(port)) + return 0; + + if (!pd_test_tx_msg_verify_eop(port)) + return 0; + + return 1; +} + +static int +simulate_send_data_msg_request_from_pe(int port, enum tcpci_msg_type type, + enum pd_data_msg_type msg_type, int len) +{ + int i; + uint8_t *buf = tx_emsg[port].buf; + uint8_t *td = (uint8_t *)test_data; + + pd_port[port].mock_got_soft_reset = 0; + pd_port[port].mock_pe_error = -1; + pd_port[port].mock_pe_message_sent = 0; + + for (i = 0; i < len; i++) + buf[i] = td[i]; + + tx_emsg[port].len = len; + + prl_send_data_msg(port, type, msg_type); + cycle_through_state_machine(port, 1, MSEC); + + return verify_data_msg_transmission(port, msg_type, len); +} + +static int verify_extended_data_msg_transmission(int port, + enum pd_ext_msg_type msg_type, + int len) +{ + int i; + int j; + int nw; + int byte_len; + int dsize; + uint32_t td; + uint8_t *expected_data = (uint8_t *)&test_data; + int data_offset = 0; + int chunk_number_to_send = 0; + + dsize = len; + + for (j = 0; j < 10; j++) { + byte_len = len; + if (byte_len > PD_MAX_EXTENDED_MSG_CHUNK_LEN) + byte_len = PD_MAX_EXTENDED_MSG_CHUNK_LEN; + + nw = (byte_len + 2 + 3) >> 2; + + if (!pd_test_tx_msg_verify_sop(port)) { + ccprintf("failed tx sop; iteration (%d)\n", j); + return 0; + } + + if (!pd_test_tx_msg_verify_short( + port, PD_HEADER(msg_type, pd_port[port].power_role, + pd_port[port].data_role, + pd_port[port].msg_tx_id, nw, + pd_port[port].rev, 1))) { + ccprintf("failed tx short\n"); + return 0; + } + td = PD_EXT_HEADER(chunk_number_to_send, 0, dsize); + td |= *(expected_data + data_offset++) << 16; + td |= *(expected_data + data_offset++) << 24; + + if (byte_len == 1) + td &= 0x00ffffff; + + if (!pd_test_tx_msg_verify_word(port, td)) { + ccprintf("failed tx word\n"); + return 0; + } + + byte_len -= 2; + + if (byte_len > 0) { + nw = (byte_len + 3) >> 2; + for (i = 0; i < nw; i++) { + td = *(expected_data + data_offset++) << 0; + td |= *(expected_data + data_offset++) << 8; + td |= *(expected_data + data_offset++) << 16; + td |= *(expected_data + data_offset++) << 24; + + switch (byte_len) { + case 3: + td &= 0x00ffffff; + break; + case 2: + td &= 0x0000ffff; + break; + case 1: + td &= 0x000000ff; + break; + } + + if (!pd_test_tx_msg_verify_word(port, td)) + return 0; + byte_len -= 4; + } + } + + if (!pd_test_tx_msg_verify_crc(port)) { + ccprintf("failed tx crc\n"); + return 0; + } + + if (!pd_test_tx_msg_verify_eop(port)) { + ccprintf("failed tx eop\n"); + return 0; + } + + cycle_through_state_machine(port, 1, MSEC); + + /* Send GoodCRC */ + simulate_goodcrc(port, get_partner_power_role(port), + pd_port[port].msg_tx_id); + cycle_through_state_machine(port, 1, MSEC); + inc_tx_id(port); + + len -= PD_MAX_EXTENDED_MSG_CHUNK_LEN; + if (len <= 0) + break; + + chunk_number_to_send++; + /* Let state machine settle */ + cycle_through_state_machine(port, 10, MSEC); + if (!simulate_request_chunk(port, msg_type, + chunk_number_to_send, dsize)) { + ccprintf("failed request chunk\n"); + return 0; + } + + cycle_through_state_machine(port, 1, MSEC); + inc_rx_id(port); + } + + return 1; +} + +static int simulate_send_extended_data_msg(int port, enum tcpci_msg_type type, + enum pd_ext_msg_type msg_type, + int len) +{ + int i; + uint8_t *buf = tx_emsg[port].buf; + uint8_t *td = (uint8_t *)test_data; + + memset(buf, 0, ARRAY_SIZE(tx_emsg[port].buf)); + tx_emsg[port].len = len; + + /* don't overflow buffer */ + if (len > ARRAY_SIZE(tx_emsg[port].buf)) + len = ARRAY_SIZE(tx_emsg[port].buf); + + for (i = 0; i < len; i++) + buf[i] = td[i]; + + prl_send_ext_data_msg(port, type, msg_type); + cycle_through_state_machine(port, 1, MSEC); + + return verify_extended_data_msg_transmission(port, msg_type, len); +} + +uint8_t tc_get_pd_enabled(int port) +{ + return pd_port[port].pd_enable; +} + +static void enable_prl(int port, int en) +{ + tcpm_set_rx_enable(port, en); + + pd_port[port].pd_enable = en; + pd_port[port].msg_tx_id = 0; + pd_port[port].msg_rx_id = 0; + + /* Init PRL */ + cycle_through_state_machine(port, 10, MSEC); + + prl_set_rev(port, TCPCI_MSG_SOP, pd_port[port].rev); +} + +enum pd_power_role pd_get_power_role(int port) +{ + return pd_port[port].power_role; +} + +static enum pd_power_role get_partner_power_role(int port) +{ + return pd_port[port].power_role == PD_ROLE_SINK ? PD_ROLE_SOURCE : + PD_ROLE_SINK; +} + +enum pd_data_role pd_get_data_role(int port) +{ + return pd_port[port].data_role; +} + +static enum pd_data_role get_partner_data_role(int port) +{ + return pd_port[port].data_role == PD_ROLE_UFP ? PD_ROLE_DFP : + PD_ROLE_UFP; +} + +enum pd_cable_plug tc_get_cable_plug(int port) +{ + return PD_PLUG_FROM_DFP_UFP; +} + +void pe_report_error(int port, enum pe_error e, enum tcpci_msg_type type) +{ + pd_port[port].mock_pe_error = e; + pd_port[port].sop = type; +} + +void pe_report_discard(int port) +{ + pd_port[port].mock_message_discard = 1; +} + +void pe_got_hard_reset(int port) +{ + pd_port[port].mock_pe_got_hard_reset = 1; +} + +void pe_message_received(int port) +{ + pd_port[port].mock_pe_message_received = 1; +} + +void pe_message_sent(int port) +{ + pd_port[port].mock_pe_message_sent = 1; +} + +void pe_hard_reset_sent(int port) +{ + pd_port[port].mock_pe_hard_reset_sent = 1; +} + +void pe_got_soft_reset(int port) +{ + pd_port[port].mock_got_soft_reset = 1; +} + +bool pe_in_frs_mode(int port) +{ + return false; +} + +bool pe_in_local_ams(int port) +{ + /* We will probably want to change this in the future */ + return false; +} + +static int test_prl_reset(void) +{ + int port = PORT0; + + enable_prl(port, 1); + + prl_reset_soft(port); + + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); + TEST_EQ(rch_get_state(port), RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, + "%u"); + TEST_EQ(tch_get_state(port), TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE, + "%u"); + TEST_EQ(prl_hr_get_state(port), PRL_HR_WAIT_FOR_REQUEST, "%u"); + enable_prl(port, 0); + + return EC_SUCCESS; +} + +static int test_send_ctrl_msg(void) +{ + int i; + int port = PORT0; + + enable_prl(port, 1); + + /* + * TEST: Control message transmission and tx_id increment + */ + for (i = 0; i < 10; i++) { + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(40 * MSEC); + + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, + "%u"); + + TEST_NE(simulate_send_ctrl_msg_request_from_pe( + port, TCPCI_MSG_SOP, PD_CTRL_ACCEPT), + 0, "%d"); + + cycle_through_state_machine(port, 1, MSEC); + + simulate_goodcrc(port, get_partner_power_role(port), + pd_port[port].msg_tx_id); + inc_tx_id(port); + + /* Let statemachine settle */ + cycle_through_state_machine(port, 10, MSEC); + + TEST_EQ(pd_port[port].mock_got_soft_reset, 0, "%d"); + TEST_NE(pd_port[port].mock_pe_message_sent, 0, "%d"); + TEST_LE(pd_port[port].mock_pe_error, 0, "%d"); + } + + enable_prl(port, 0); + + return EC_SUCCESS; +} + +static int test_send_data_msg(void) +{ + int i; + int port = PORT0; + + enable_prl(port, 1); + + /* + * TEST: Sending data message with 1 to 28 bytes + */ + for (i = 1; i <= 28; i++) { + cycle_through_state_machine(port, 1, MSEC); + + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, + "%u"); + + TEST_NE(simulate_send_data_msg_request_from_pe( + port, TCPCI_MSG_SOP, PD_DATA_SOURCE_CAP, i), + 0, "%d"); + + cycle_through_state_machine(port, 1, MSEC); + + simulate_goodcrc(port, get_partner_power_role(port), + pd_port[port].msg_tx_id); + inc_tx_id(port); + + cycle_through_state_machine(port, 10, MSEC); + + TEST_EQ(pd_port[port].mock_got_soft_reset, 0, "%d"); + TEST_NE(pd_port[port].mock_pe_message_sent, 0, "%d"); + TEST_LE(pd_port[port].mock_pe_error, 0, "%d"); + } + + enable_prl(port, 0); + + return EC_SUCCESS; +} + +static int test_send_data_msg_to_much_data(void) +{ + int port = PORT0; + + enable_prl(port, 1); + + /* + * TEST: Send data message with more than 28-bytes, should fail + */ + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(40 * MSEC); + + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); + + /* Try to send 29-bytes */ + TEST_EQ(simulate_send_data_msg_request_from_pe(port, TCPCI_MSG_SOP, + PD_DATA_SOURCE_CAP, 29), + 0, "%d"); + + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(30 * MSEC); + + cycle_through_state_machine(port, 10, MSEC); + + TEST_EQ(pd_port[port].mock_got_soft_reset, 0, "%d"); + TEST_EQ(pd_port[port].mock_pe_message_sent, 0, "%d"); + TEST_EQ(pd_port[port].mock_pe_error, ERR_TCH_XMIT, "%d"); + + enable_prl(port, 0); + + return EC_SUCCESS; +} + +static int test_send_extended_data_msg(void) +{ + int i; + int port = PORT0; + + if (!IS_ENABLED(CONFIG_USB_PD_EXTENDED_MESSAGES)) { + ccprints("CONFIG_USB_PD_EXTENDED_MESSAGES disabled; skipping"); + return EC_SUCCESS; + } + + enable_prl(port, 1); + + /* + * TEST: Sending extended data message with 29 to 260 bytes + */ + + pd_port[port].mock_got_soft_reset = 0; + pd_port[port].mock_pe_error = -1; + + ccprintf("Iteration "); + for (i = 29; i <= PD_MAX_EXTENDED_MSG_LEN; i++) { + ccprintf(".%d", i); + pd_port[port].mock_pe_message_sent = 0; + + cycle_through_state_machine(port, 10, MSEC); + + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, + "%d"); + + TEST_NE(simulate_send_extended_data_msg( + port, TCPCI_MSG_SOP, PD_EXT_MANUFACTURER_INFO, + i), + 0, "%d"); + + cycle_through_state_machine(port, 10, MSEC); + + TEST_EQ(pd_port[port].mock_got_soft_reset, 0, "%d"); + TEST_NE(pd_port[port].mock_pe_message_sent, 0, "%d"); + TEST_LE(pd_port[port].mock_pe_error, 0, "%d"); + } + enable_prl(port, 0); + + return EC_SUCCESS; +} + +static int test_receive_soft_reset_msg(void) +{ + int port = PORT0; + + enable_prl(port, 1); + + /* + * TEST: Receiving Soft Reset + */ + + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(40 * MSEC); + + TEST_EQ(rch_get_state(port), RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, + "%u"); + + pd_port[port].mock_got_soft_reset = 0; + pd_port[port].mock_pe_error = -1; + pd_port[port].mock_pe_message_received = 0; + + TEST_NE(simulate_receive_ctrl_msg(port, PD_CTRL_SOFT_RESET), 0, "%d"); + + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(30 * MSEC); + + cycle_through_state_machine(port, 10, MSEC); + + TEST_EQ(pd_port[port].mock_got_soft_reset, 1, "%d"); + TEST_LE(pd_port[port].mock_pe_error, 0, "%d"); + /* + * We don't want to get pe_got_soft_reset and pe_message_received, just + * pe_got_soft_reset. + */ + TEST_EQ(pd_port[port].mock_pe_message_received, 0, "%d"); + + enable_prl(port, 0); + + return EC_SUCCESS; +} + +static int test_receive_control_msg(void) +{ + int port = PORT0; + int expected_header = + PD_HEADER(PD_CTRL_DR_SWAP, get_partner_power_role(port), + get_partner_data_role(port), pd_port[port].msg_rx_id, + 0, pd_port[port].rev, 0); + + enable_prl(port, 1); + + /* + * TEST: Receiving a control message + */ + + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(40 * MSEC); + + TEST_EQ(rch_get_state(port), RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, + "%u"); + + pd_port[port].mock_got_soft_reset = 0; + pd_port[port].mock_pe_error = -1; + pd_port[port].mock_pe_message_received = 0; + + TEST_NE(simulate_receive_ctrl_msg(port, PD_CTRL_DR_SWAP), 0, "%d"); + + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(30 * MSEC); + + cycle_through_state_machine(port, 3, 10 * MSEC); + + TEST_EQ(pd_port[port].mock_got_soft_reset, 0, "%d"); + TEST_LE(pd_port[port].mock_pe_error, 0, "%d"); + TEST_NE(pd_port[port].mock_pe_message_received, 0, "%d"); + TEST_EQ(expected_header, rx_emsg[port].header, "%d"); + TEST_EQ(rx_emsg[port].len, 0, "%d"); + + enable_prl(port, 0); + + return EC_SUCCESS; +} + +static int test_receive_data_msg(void) +{ + int port = PORT0; + int i; + + enable_prl(port, 1); + + /* + * TEST: Receiving data message with 1 to 28 bytes + */ + + for (i = 1; i <= 28; i++) { + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(40 * MSEC); + + TEST_EQ(rch_get_state(port), + RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, "%u"); + TEST_NE(simulate_receive_data(port, PD_DATA_BATTERY_STATUS, i), + 0, "%d"); + } + + enable_prl(port, 0); + + return EC_SUCCESS; +} + +static int test_receive_extended_data_msg(void) +{ + int len; + int port = PORT0; + + enable_prl(port, 1); + + if (IS_ENABLED(CONFIG_USB_PD_EXTENDED_MESSAGES)) { + /* + * TEST: Receiving extended data message with 29 to 260 bytes + */ + + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(40 * MSEC); + + TEST_EQ(rch_get_state(port), + RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, "%u"); + + for (len = 29; len <= PD_MAX_EXTENDED_MSG_LEN; len++) { + TEST_NE(simulate_receive_extended_data( + port, PD_DATA_BATTERY_STATUS, len), + 0, "%d"); + } + } else { + /* + * TEST: Receiving unsupported extended data message and then + * subsequently receiving a support non-extended data message. + */ + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(40 * MSEC); + TEST_NE(simulate_receive_extended_data( + port, PD_DATA_BATTERY_STATUS, 29), + 0, "%d"); + + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(40 * MSEC); + TEST_NE(simulate_receive_data(port, PD_DATA_BATTERY_STATUS, 28), + 0, "%d"); + } + + enable_prl(port, 0); + + return EC_SUCCESS; +} + +static int test_send_soft_reset_msg(void) +{ + int port = PORT0; + + enable_prl(port, 1); + + /* + * TEST: Send soft reset + */ + + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(40 * MSEC); + + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); + + TEST_NE(simulate_send_ctrl_msg_request_from_pe(port, TCPCI_MSG_SOP, + PD_CTRL_SOFT_RESET), + 0, "%d"); + + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(30 * MSEC); + + simulate_goodcrc(port, get_partner_power_role(port), + pd_port[port].msg_tx_id); + inc_tx_id(port); + + TEST_EQ(prl_tx_get_state(port), PRL_TX_LAYER_RESET_FOR_TRANSMIT, "%u"); + + cycle_through_state_machine(port, 3, 10 * MSEC); + + TEST_EQ(pd_port[port].mock_got_soft_reset, 0, "%d"); + TEST_NE(pd_port[port].mock_pe_message_sent, 0, "%d"); + TEST_LE(pd_port[port].mock_pe_error, 0, "%d"); + + enable_prl(port, 0); + + return EC_SUCCESS; +} + +static int test_pe_execute_hard_reset_msg(void) +{ + int port = PORT0; + + enable_prl(port, 1); + + pd_port[port].mock_pe_hard_reset_sent = 0; + + /* + * TEST: Policy Engine initiated hard reset + */ + + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(40 * MSEC); + + TEST_EQ(prl_hr_get_state(port), PRL_HR_WAIT_FOR_REQUEST, "%u"); + + /* Simulate receiving hard reset from policy engine */ + prl_execute_hard_reset(port); + + TEST_EQ(prl_hr_get_state(port), PRL_HR_RESET_LAYER, "%u"); + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); + + cycle_through_state_machine(port, 1, 10 * MSEC); + + TEST_EQ(prl_hr_get_state(port), PRL_HR_WAIT_FOR_PHY_HARD_RESET_COMPLETE, + "%u"); + + cycle_through_state_machine(port, 2, PD_T_PS_HARD_RESET); + TEST_NE(pd_port[port].mock_pe_hard_reset_sent, 0, "%d"); + + TEST_EQ(prl_hr_get_state(port), PRL_HR_WAIT_FOR_PE_HARD_RESET_COMPLETE, + "%u"); + + /* Simulate policy engine indicating that it is done hard reset */ + prl_hard_reset_complete(port); + + cycle_through_state_machine(port, 1, 10 * MSEC); + + TEST_EQ(prl_hr_get_state(port), PRL_HR_WAIT_FOR_REQUEST, "%u"); + + enable_prl(port, 0); + + return EC_SUCCESS; +} + +static int test_phy_execute_hard_reset_msg(void) +{ + int port = PORT0; + + enable_prl(port, 1); + + /* + * TEST: Port partner initiated hard reset + */ + + pd_port[port].mock_pe_got_hard_reset = 0; + + task_wake(PD_PORT_TO_TASK_ID(port)); + task_wait_event(40 * MSEC); + + TEST_EQ(prl_hr_get_state(port), PRL_HR_WAIT_FOR_REQUEST, "%u"); + + /* Simulate receiving hard reset from port partner */ + pd_execute_hard_reset(port); + + TEST_EQ(prl_hr_get_state(port), PRL_HR_RESET_LAYER, "%u"); + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); + + cycle_through_state_machine(port, 1, 10 * MSEC); + + TEST_EQ(prl_hr_get_state(port), PRL_HR_WAIT_FOR_PE_HARD_RESET_COMPLETE, + "%u"); + + cycle_through_state_machine(port, 2, PD_T_PS_HARD_RESET); + TEST_NE(pd_port[port].mock_pe_got_hard_reset, 0, "%d"); + + TEST_EQ(prl_hr_get_state(port), PRL_HR_WAIT_FOR_PE_HARD_RESET_COMPLETE, + "%u"); + + /* Simulate policy engine indicating that it is done hard reset */ + prl_hard_reset_complete(port); + + cycle_through_state_machine(port, 1, 10 * MSEC); + + TEST_EQ(prl_hr_get_state(port), PRL_HR_WAIT_FOR_REQUEST, "%u"); + + enable_prl(port, 0); + + return EC_SUCCESS; +} + +/* Reset the state machine between each test */ +void before_test(void) +{ + /* This test relies on explicitly cycling through events manually */ + tc_pause_event_loop(PORT0); + + pd_port[PORT0].mock_pe_message_sent = 0; + pd_port[PORT0].mock_pe_error = -1; + pd_port[PORT0].mock_message_discard = 0; + pd_port[PORT0].mock_pe_hard_reset_sent = 0; + pd_port[PORT0].mock_pe_got_hard_reset = 0; + pd_port[PORT0].mock_pe_message_received = 0; + pd_port[PORT0].mock_got_soft_reset = 0; + pd_port[PORT0].pd_enable = false; + cycle_through_state_machine(PORT0, 10, MSEC); + pd_port[PORT0].pd_enable = true; + cycle_through_state_machine(PORT0, 10, MSEC); +} + +void run_test(int argc, const char **argv) +{ + test_reset(); + + /* Test PD 2.0 Protocol */ + init_port(PORT0, PD_REV20); + RUN_TEST(test_prl_reset); + RUN_TEST(test_send_ctrl_msg); + RUN_TEST(test_send_data_msg); + RUN_TEST(test_send_data_msg_to_much_data); + RUN_TEST(test_receive_control_msg); + RUN_TEST(test_receive_data_msg); + RUN_TEST(test_receive_soft_reset_msg); + RUN_TEST(test_send_soft_reset_msg); + RUN_TEST(test_pe_execute_hard_reset_msg); + RUN_TEST(test_phy_execute_hard_reset_msg); + + /* TODO(shurst): More PD 2.0 Tests */ + + ccprints("Starting PD 3.0 tests"); + + /* Test PD 3.0 Protocol */ + init_port(PORT0, PD_REV30); + RUN_TEST(test_prl_reset); + RUN_TEST(test_send_ctrl_msg); + RUN_TEST(test_send_data_msg); + RUN_TEST(test_send_data_msg_to_much_data); + RUN_TEST(test_send_extended_data_msg); + RUN_TEST(test_receive_control_msg); + RUN_TEST(test_receive_data_msg); + RUN_TEST(test_receive_extended_data_msg); + RUN_TEST(test_receive_soft_reset_msg); + RUN_TEST(test_send_soft_reset_msg); + RUN_TEST(test_pe_execute_hard_reset_msg); + RUN_TEST(test_phy_execute_hard_reset_msg); + + /* TODO(shurst): More PD 3.0 Tests */ + + /* Do basic state machine validity checks last. */ + RUN_TEST(test_prl_no_parent_cycles); + RUN_TEST(test_prl_all_states_named); + + test_print_result(); +} diff --git a/test/usb_prl_old.c b/test/usb_prl_old.c index a6ae6acb0e..956c0027f5 100644 --- a/test/usb_prl_old.c +++ b/test/usb_prl_old.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -79,25 +79,18 @@ enum usb_rch_state rch_get_state(const int port) } #endif - static uint32_t test_data[] = { - 0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f, - 0x10111213, 0x14151617, 0x1819a0b0, 0xc0d0e0f0, - 0x20212223, 0x24252627, 0x28292a2b, 0x2c2d2e2f, - 0x30313233, 0x34353637, 0x38393a3b, 0x3c3d3e3f, - 0x40414243, 0x44454647, 0x48494a4b, 0x4c4d4e4f, - 0x50515253, 0x54555657, 0x58595a5b, 0x5c5d5e5f, - 0x60616263, 0x64656667, 0x68696a6b, 0x6c6d6e6f, - 0x70717273, 0x74757677, 0x78797a7b, 0x7c7d7e7f, - 0x80818283, 0x84858687, 0x88898a8b, 0x8c8d8e8f, - 0x90919293, 0x94959697, 0x98999a9b, 0x9c9d9e9f, - 0xa0a1a2a3, 0xa4a5a6a7, 0xa8a9aaab, 0xacadaeaf, - 0xb0b1b2b3, 0xb4b5b6b7, 0xb8b9babb, 0xbcbdbebf, - 0xc0c1c2c3, 0xc4c5c6c7, 0xc8c9cacb, 0xcccdcecf, - 0xd0d1d2d3, 0xd4d5d6d7, 0xd8d9dadb, 0xdcdddedf, - 0xe0e1e2e3, 0xe4e5e6e7, 0xe8e9eaeb, 0xecedeeef, - 0xf0f1f2f3, 0xf4f5f6f7, 0xf8f9fafb, 0xfcfdfeff, - 0x11223344 + 0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f, 0x10111213, 0x14151617, + 0x1819a0b0, 0xc0d0e0f0, 0x20212223, 0x24252627, 0x28292a2b, 0x2c2d2e2f, + 0x30313233, 0x34353637, 0x38393a3b, 0x3c3d3e3f, 0x40414243, 0x44454647, + 0x48494a4b, 0x4c4d4e4f, 0x50515253, 0x54555657, 0x58595a5b, 0x5c5d5e5f, + 0x60616263, 0x64656667, 0x68696a6b, 0x6c6d6e6f, 0x70717273, 0x74757677, + 0x78797a7b, 0x7c7d7e7f, 0x80818283, 0x84858687, 0x88898a8b, 0x8c8d8e8f, + 0x90919293, 0x94959697, 0x98999a9b, 0x9c9d9e9f, 0xa0a1a2a3, 0xa4a5a6a7, + 0xa8a9aaab, 0xacadaeaf, 0xb0b1b2b3, 0xb4b5b6b7, 0xb8b9babb, 0xbcbdbebf, + 0xc0c1c2c3, 0xc4c5c6c7, 0xc8c9cacb, 0xcccdcecf, 0xd0d1d2d3, 0xd4d5d6d7, + 0xd8d9dadb, 0xdcdddedf, 0xe0e1e2e3, 0xe4e5e6e7, 0xe8e9eaeb, 0xecedeeef, + 0xf0f1f2f3, 0xf4f5f6f7, 0xf8f9fafb, 0xfcfdfeff, 0x11223344 }; void pd_set_suspend(int port, int suspend) @@ -161,14 +154,15 @@ void inc_rx_id(int port) static int verify_goodcrc(int port, int role, int id) { return pd_test_tx_msg_verify_sop(port) && - pd_test_tx_msg_verify_short(port, PD_HEADER(PD_CTRL_GOOD_CRC, - role, role, id, 0, 0, 0)) && - pd_test_tx_msg_verify_crc(port) && - pd_test_tx_msg_verify_eop(port); + pd_test_tx_msg_verify_short(port, + PD_HEADER(PD_CTRL_GOOD_CRC, role, + role, id, 0, 0, 0)) && + pd_test_tx_msg_verify_crc(port) && + pd_test_tx_msg_verify_eop(port); } static void simulate_rx_msg(int port, uint16_t header, int cnt, - const uint32_t *data) + const uint32_t *data) { int i; @@ -194,8 +188,10 @@ static void simulate_rx_msg(int port, uint16_t header, int cnt, static void simulate_goodcrc(int port, int role, int id) { - simulate_rx_msg(port, PD_HEADER(PD_CTRL_GOOD_CRC, role, role, id, 0, - pd_port[port].rev, 0), 0, NULL); + simulate_rx_msg(port, + PD_HEADER(PD_CTRL_GOOD_CRC, role, role, id, 0, + pd_port[port].rev, 0), + 0, NULL); } static void cycle_through_state_machine(int port, uint32_t num, uint32_t time) @@ -209,19 +205,19 @@ static void cycle_through_state_machine(int port, uint32_t num, uint32_t time) } static int simulate_request_chunk(int port, enum pd_ext_msg_type msg_type, - int chunk_num, int len) + int chunk_num, int len) { uint16_t header = PD_HEADER(msg_type, get_partner_power_role(port), - get_partner_data_role(port), - pd_port[port].msg_rx_id, - 1, pd_port[port].rev, 1); + get_partner_data_role(port), + pd_port[port].msg_rx_id, 1, + pd_port[port].rev, 1); uint32_t msg = PD_EXT_HEADER(chunk_num, 1, len); simulate_rx_msg(port, header, 1, (const uint32_t *)&msg); task_wait_event(30 * MSEC); if (!verify_goodcrc(port, pd_port[port].data_role, - pd_port[port].msg_rx_id)) + pd_port[port].msg_rx_id)) return 0; return 1; @@ -230,14 +226,15 @@ static int simulate_request_chunk(int port, enum pd_ext_msg_type msg_type, static int simulate_receive_ctrl_msg(int port, enum pd_ctrl_msg_type msg_type) { uint16_t header = PD_HEADER(msg_type, get_partner_power_role(port), - get_partner_data_role(port), pd_port[port].msg_rx_id, - 0, pd_port[port].rev, 0); + get_partner_data_role(port), + pd_port[port].msg_rx_id, 0, + pd_port[port].rev, 0); simulate_rx_msg(port, header, 0, NULL); task_wait_event(30 * MSEC); if (!verify_goodcrc(port, pd_port[port].data_role, - pd_port[port].msg_rx_id)) + pd_port[port].msg_rx_id)) return 0; return 1; @@ -265,7 +262,7 @@ static int verify_data_reception(int port, uint16_t header, int len) for (i = 0; i < cnt; i++) { if (i < len) { if (rx_emsg[port].buf[i] != - *((unsigned char *)test_data + i)) + *((unsigned char *)test_data + i)) return 0; } else { if (rx_emsg[port].buf[i] != 0) @@ -312,14 +309,15 @@ static int verify_chunk_data_reception(int port, uint16_t header, int len) } static int simulate_receive_data(int port, enum pd_data_msg_type msg_type, - int len) + int len) { int i; int nw = (len + 3) >> 2; uint8_t td[28]; uint16_t header = PD_HEADER(msg_type, get_partner_power_role(port), - get_partner_data_role(port), pd_port[port].msg_rx_id, - nw, pd_port[port].rev, 0); + get_partner_data_role(port), + pd_port[port].msg_rx_id, nw, + pd_port[port].rev, 0); pd_port[port].mock_pe_error = -1; pd_port[port].mock_pe_message_received = 0; @@ -338,7 +336,7 @@ static int simulate_receive_data(int port, enum pd_data_msg_type msg_type, task_wait_event(30 * MSEC); if (!verify_goodcrc(port, pd_port[port].data_role, - pd_port[port].msg_rx_id)) + pd_port[port].msg_rx_id)) return 0; inc_rx_id(port); @@ -347,7 +345,8 @@ static int simulate_receive_data(int port, enum pd_data_msg_type msg_type, } static int simulate_receive_extended_data(int port, - enum pd_data_msg_type msg_type, int len) + enum pd_data_msg_type msg_type, + int len) { int i; int j; @@ -385,24 +384,25 @@ static int simulate_receive_extended_data(int port, nw = (byte_len + 2 + 3) >> 2; header = PD_HEADER(msg_type, get_partner_power_role(port), - get_partner_data_role(port), pd_port[port].msg_rx_id, - nw, pd_port[port].rev, 1); + get_partner_data_role(port), + pd_port[port].msg_rx_id, nw, + pd_port[port].rev, 1); if (pd_port[port].mock_pe_error >= 0) { ccprintf("Mock pe error (%d) iteration (%d)\n", - pd_port[port].mock_pe_error, j); + pd_port[port].mock_pe_error, j); return 0; } if (IS_ENABLED(CONFIG_USB_PD_EXTENDED_MESSAGES) && - pd_port[port].mock_pe_message_received) { + pd_port[port].mock_pe_message_received) { ccprintf("Mock pe msg received iteration (%d)\n", j); return 0; } if (rx_emsg[port].len != 0) { ccprintf("emsg len (%d) != 0 iteration (%d)\n", - rx_emsg[port].len, j); + rx_emsg[port].len, j); return 0; } @@ -410,7 +410,7 @@ static int simulate_receive_extended_data(int port, cycle_through_state_machine(port, 1, MSEC); if (!verify_goodcrc(port, pd_port[port].data_role, - pd_port[port].msg_rx_id)) { + pd_port[port].msg_rx_id)) { ccprintf("Verify goodcrc bad iteration (%d)\n", j); return 0; } @@ -445,18 +445,17 @@ static int simulate_receive_extended_data(int port, return 0; } - if (!pd_test_tx_msg_verify_short(port, - PD_HEADER(msg_type, - pd_port[port].power_role, - pd_port[port].data_role, - pd_port[port].msg_tx_id, - 1, pd_port[port].rev, 1))) { + if (!pd_test_tx_msg_verify_short( + port, PD_HEADER(msg_type, pd_port[port].power_role, + pd_port[port].data_role, + pd_port[port].msg_tx_id, 1, + pd_port[port].rev, 1))) { ccprintf("Verify msg short bad iteration (%d)\n", j); return 0; } - if (!pd_test_tx_msg_verify_word(port, - PD_EXT_HEADER(chunk_num, 1, 0))) { + if (!pd_test_tx_msg_verify_word(port, PD_EXT_HEADER(chunk_num, + 1, 0))) { ccprintf("Verify msg word bad iteration (%d)\n", j); return 0; } @@ -475,7 +474,7 @@ static int simulate_receive_extended_data(int port, /* Request next chunk packet was good. Send GoodCRC */ simulate_goodcrc(port, get_partner_power_role(port), - pd_port[port].msg_tx_id); + pd_port[port].msg_tx_id); cycle_through_state_machine(port, 1, MSEC); @@ -488,15 +487,16 @@ static int simulate_receive_extended_data(int port, } static int verify_ctrl_msg_transmission(int port, - enum pd_ctrl_msg_type msg_type) + enum pd_ctrl_msg_type msg_type) { if (!pd_test_tx_msg_verify_sop(port)) return 0; - if (!pd_test_tx_msg_verify_short(port, - PD_HEADER(msg_type, pd_port[port].power_role, - pd_port[port].data_role, pd_port[port].msg_tx_id, 0, - pd_port[port].rev, 0))) + if (!pd_test_tx_msg_verify_short( + port, + PD_HEADER(msg_type, pd_port[port].power_role, + pd_port[port].data_role, pd_port[port].msg_tx_id, + 0, pd_port[port].rev, 0))) return 0; if (!pd_test_tx_msg_verify_crc(port)) @@ -508,8 +508,9 @@ static int verify_ctrl_msg_transmission(int port, return 1; } -static int simulate_send_ctrl_msg_request_from_pe(int port, - enum tcpci_msg_type type, enum pd_ctrl_msg_type msg_type) +static int +simulate_send_ctrl_msg_request_from_pe(int port, enum tcpci_msg_type type, + enum pd_ctrl_msg_type msg_type) { pd_port[port].mock_got_soft_reset = 0; pd_port[port].mock_pe_error = -1; @@ -521,7 +522,7 @@ static int simulate_send_ctrl_msg_request_from_pe(int port, } static int verify_data_msg_transmission(int port, - enum pd_data_msg_type msg_type, int len) + enum pd_data_msg_type msg_type, int len) { int i; int num_words = (len + 3) >> 2; @@ -531,10 +532,11 @@ static int verify_data_msg_transmission(int port, if (!pd_test_tx_msg_verify_sop(port)) return 0; - if (!pd_test_tx_msg_verify_short(port, - PD_HEADER(msg_type, pd_port[port].power_role, - pd_port[port].data_role, pd_port[port].msg_tx_id, - num_words, pd_port[port].rev, 0))) + if (!pd_test_tx_msg_verify_short( + port, + PD_HEADER(msg_type, pd_port[port].power_role, + pd_port[port].data_role, pd_port[port].msg_tx_id, + num_words, pd_port[port].rev, 0))) return 0; for (i = 0; i < num_words; i++) { @@ -567,8 +569,9 @@ static int verify_data_msg_transmission(int port, return 1; } -static int simulate_send_data_msg_request_from_pe(int port, - enum tcpci_msg_type type, enum pd_data_msg_type msg_type, int len) +static int +simulate_send_data_msg_request_from_pe(int port, enum tcpci_msg_type type, + enum pd_data_msg_type msg_type, int len) { int i; uint8_t *buf = tx_emsg[port].buf; @@ -590,7 +593,8 @@ static int simulate_send_data_msg_request_from_pe(int port, } static int verify_extended_data_msg_transmission(int port, - enum pd_ext_msg_type msg_type, int len) + enum pd_ext_msg_type msg_type, + int len) { int i; int j; @@ -616,11 +620,11 @@ static int verify_extended_data_msg_transmission(int port, return 0; } - if (!pd_test_tx_msg_verify_short(port, - PD_HEADER(msg_type, pd_port[port].power_role, - pd_port[port].data_role, - pd_port[port].msg_tx_id, - nw, pd_port[port].rev, 1))) { + if (!pd_test_tx_msg_verify_short( + port, PD_HEADER(msg_type, pd_port[port].power_role, + pd_port[port].data_role, + pd_port[port].msg_tx_id, nw, + pd_port[port].rev, 1))) { ccprintf("failed tx short\n"); return 0; } @@ -642,9 +646,9 @@ static int verify_extended_data_msg_transmission(int port, nw = (byte_len + 3) >> 2; for (i = 0; i < nw; i++) { td = *(expected_data + data_offset++) << 0; - td |= *(expected_data + data_offset++) << 8; - td |= *(expected_data + data_offset++) << 16; - td |= *(expected_data + data_offset++) << 24; + td |= *(expected_data + data_offset++) << 8; + td |= *(expected_data + data_offset++) << 16; + td |= *(expected_data + data_offset++) << 24; switch (byte_len) { case 3: @@ -678,7 +682,7 @@ static int verify_extended_data_msg_transmission(int port, /* Send GoodCRC */ simulate_goodcrc(port, get_partner_power_role(port), - pd_port[port].msg_tx_id); + pd_port[port].msg_tx_id); cycle_through_state_machine(port, 1, MSEC); inc_tx_id(port); @@ -690,7 +694,7 @@ static int verify_extended_data_msg_transmission(int port, /* Let state machine settle */ cycle_through_state_machine(port, 10, MSEC); if (!simulate_request_chunk(port, msg_type, - chunk_number_to_send, dsize)) { + chunk_number_to_send, dsize)) { ccprintf("failed request chunk\n"); return 0; } @@ -702,9 +706,9 @@ static int verify_extended_data_msg_transmission(int port, return 1; } -static int simulate_send_extended_data_msg(int port, - enum tcpci_msg_type type, enum pd_ext_msg_type msg_type, - int len) +static int simulate_send_extended_data_msg(int port, enum tcpci_msg_type type, + enum pd_ext_msg_type msg_type, + int len) { int i; uint8_t *buf = tx_emsg[port].buf; @@ -723,8 +727,7 @@ static int simulate_send_extended_data_msg(int port, prl_send_ext_data_msg(port, type, msg_type); cycle_through_state_machine(port, 1, MSEC); - return verify_extended_data_msg_transmission(port, msg_type, - len); + return verify_extended_data_msg_transmission(port, msg_type, len); } uint8_t tc_get_pd_enabled(int port) @@ -753,8 +756,8 @@ enum pd_power_role pd_get_power_role(int port) static enum pd_power_role get_partner_power_role(int port) { - return pd_port[port].power_role == PD_ROLE_SINK ? - PD_ROLE_SOURCE : PD_ROLE_SINK; + return pd_port[port].power_role == PD_ROLE_SINK ? PD_ROLE_SOURCE : + PD_ROLE_SINK; } enum pd_data_role pd_get_data_role(int port) @@ -764,8 +767,8 @@ enum pd_data_role pd_get_data_role(int port) static enum pd_data_role get_partner_data_role(int port) { - return pd_port[port].data_role == PD_ROLE_UFP ? - PD_ROLE_DFP : PD_ROLE_UFP; + return pd_port[port].data_role == PD_ROLE_UFP ? PD_ROLE_DFP : + PD_ROLE_UFP; } enum pd_cable_plug tc_get_cable_plug(int port) @@ -828,14 +831,12 @@ static int test_prl_reset(void) prl_reset_soft(port); - TEST_EQ(prl_tx_get_state(port), - PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); - TEST_EQ(rch_get_state(port), - RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, "%u"); - TEST_EQ(tch_get_state(port), - TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE, "%u"); - TEST_EQ(prl_hr_get_state(port), - PRL_HR_WAIT_FOR_REQUEST, "%u"); + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); + TEST_EQ(rch_get_state(port), RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, + "%u"); + TEST_EQ(tch_get_state(port), TCH_WAIT_FOR_MESSAGE_REQUEST_FROM_PE, + "%u"); + TEST_EQ(prl_hr_get_state(port), PRL_HR_WAIT_FOR_REQUEST, "%u"); enable_prl(port, 0); return EC_SUCCESS; @@ -855,16 +856,17 @@ static int test_send_ctrl_msg(void) task_wake(PD_PORT_TO_TASK_ID(port)); task_wait_event(40 * MSEC); - TEST_EQ(prl_tx_get_state(port), - PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, + "%u"); - TEST_NE(simulate_send_ctrl_msg_request_from_pe(port, - TCPCI_MSG_SOP, PD_CTRL_ACCEPT), 0, "%d"); + TEST_NE(simulate_send_ctrl_msg_request_from_pe( + port, TCPCI_MSG_SOP, PD_CTRL_ACCEPT), + 0, "%d"); cycle_through_state_machine(port, 1, MSEC); simulate_goodcrc(port, get_partner_power_role(port), - pd_port[port].msg_tx_id); + pd_port[port].msg_tx_id); inc_tx_id(port); /* Let statemachine settle */ @@ -893,16 +895,17 @@ static int test_send_data_msg(void) for (i = 1; i <= 28; i++) { cycle_through_state_machine(port, 1, MSEC); - TEST_EQ(prl_tx_get_state(port), - PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, + "%u"); - TEST_NE(simulate_send_data_msg_request_from_pe(port, - TCPCI_MSG_SOP, PD_DATA_SOURCE_CAP, i), 0, "%d"); + TEST_NE(simulate_send_data_msg_request_from_pe( + port, TCPCI_MSG_SOP, PD_DATA_SOURCE_CAP, i), + 0, "%d"); cycle_through_state_machine(port, 1, MSEC); simulate_goodcrc(port, get_partner_power_role(port), - pd_port[port].msg_tx_id); + pd_port[port].msg_tx_id); inc_tx_id(port); cycle_through_state_machine(port, 10, MSEC); @@ -929,12 +932,12 @@ static int test_send_data_msg_to_much_data(void) task_wake(PD_PORT_TO_TASK_ID(port)); task_wait_event(40 * MSEC); - TEST_EQ(prl_tx_get_state(port), - PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); /* Try to send 29-bytes */ - TEST_EQ(simulate_send_data_msg_request_from_pe(port, - TCPCI_MSG_SOP, PD_DATA_SOURCE_CAP, 29), 0, "%d"); + TEST_EQ(simulate_send_data_msg_request_from_pe(port, TCPCI_MSG_SOP, + PD_DATA_SOURCE_CAP, 29), + 0, "%d"); task_wake(PD_PORT_TO_TASK_ID(port)); task_wait_event(30 * MSEC); @@ -976,12 +979,13 @@ static int test_send_extended_data_msg(void) cycle_through_state_machine(port, 10, MSEC); - TEST_EQ(prl_tx_get_state(port), - PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%d"); + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, + "%d"); - TEST_NE(simulate_send_extended_data_msg(port, TCPCI_MSG_SOP, - PD_EXT_MANUFACTURER_INFO, i), - 0, "%d"); + TEST_NE(simulate_send_extended_data_msg( + port, TCPCI_MSG_SOP, PD_EXT_MANUFACTURER_INFO, + i), + 0, "%d"); cycle_through_state_machine(port, 10, MSEC); @@ -1007,8 +1011,8 @@ static int test_receive_soft_reset_msg(void) task_wake(PD_PORT_TO_TASK_ID(port)); task_wait_event(40 * MSEC); - TEST_EQ(rch_get_state(port), - RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, "%u"); + TEST_EQ(rch_get_state(port), RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, + "%u"); pd_port[port].mock_got_soft_reset = 0; pd_port[port].mock_pe_error = -1; @@ -1037,11 +1041,10 @@ static int test_receive_soft_reset_msg(void) static int test_receive_control_msg(void) { int port = PORT0; - int expected_header = PD_HEADER(PD_CTRL_DR_SWAP, - get_partner_power_role(port), - get_partner_data_role(port), - pd_port[port].msg_rx_id, - 0, pd_port[port].rev, 0); + int expected_header = + PD_HEADER(PD_CTRL_DR_SWAP, get_partner_power_role(port), + get_partner_data_role(port), pd_port[port].msg_rx_id, + 0, pd_port[port].rev, 0); enable_prl(port, 1); @@ -1052,8 +1055,8 @@ static int test_receive_control_msg(void) task_wake(PD_PORT_TO_TASK_ID(port)); task_wait_event(40 * MSEC); - TEST_EQ(rch_get_state(port), - RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, "%u"); + TEST_EQ(rch_get_state(port), RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, + "%u"); pd_port[port].mock_got_soft_reset = 0; pd_port[port].mock_pe_error = -1; @@ -1093,9 +1096,9 @@ static int test_receive_data_msg(void) task_wait_event(40 * MSEC); TEST_EQ(rch_get_state(port), - RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, "%u"); - TEST_NE(simulate_receive_data(port, - PD_DATA_BATTERY_STATUS, i), 0, "%d"); + RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, "%u"); + TEST_NE(simulate_receive_data(port, PD_DATA_BATTERY_STATUS, i), + 0, "%d"); } enable_prl(port, 0); @@ -1119,11 +1122,12 @@ static int test_receive_extended_data_msg(void) task_wait_event(40 * MSEC); TEST_EQ(rch_get_state(port), - RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, "%u"); + RCH_WAIT_FOR_MESSAGE_FROM_PROTOCOL_LAYER, "%u"); for (len = 29; len <= PD_MAX_EXTENDED_MSG_LEN; len++) { - TEST_NE(simulate_receive_extended_data(port, - PD_DATA_BATTERY_STATUS, len), 0, "%d"); + TEST_NE(simulate_receive_extended_data( + port, PD_DATA_BATTERY_STATUS, len), + 0, "%d"); } } else { /* @@ -1132,13 +1136,14 @@ static int test_receive_extended_data_msg(void) */ task_wake(PD_PORT_TO_TASK_ID(port)); task_wait_event(40 * MSEC); - TEST_NE(simulate_receive_extended_data(port, - PD_DATA_BATTERY_STATUS, 29), 0, "%d"); + TEST_NE(simulate_receive_extended_data( + port, PD_DATA_BATTERY_STATUS, 29), + 0, "%d"); task_wake(PD_PORT_TO_TASK_ID(port)); task_wait_event(40 * MSEC); - TEST_NE(simulate_receive_data(port, - PD_DATA_BATTERY_STATUS, 28), 0, "%d"); + TEST_NE(simulate_receive_data(port, PD_DATA_BATTERY_STATUS, 28), + 0, "%d"); } enable_prl(port, 0); @@ -1159,21 +1164,20 @@ static int test_send_soft_reset_msg(void) task_wake(PD_PORT_TO_TASK_ID(port)); task_wait_event(40 * MSEC); - TEST_EQ(prl_tx_get_state(port), - PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); - TEST_NE(simulate_send_ctrl_msg_request_from_pe(port, - TCPCI_MSG_SOP, PD_CTRL_SOFT_RESET), 0, "%d"); + TEST_NE(simulate_send_ctrl_msg_request_from_pe(port, TCPCI_MSG_SOP, + PD_CTRL_SOFT_RESET), + 0, "%d"); task_wake(PD_PORT_TO_TASK_ID(port)); task_wait_event(30 * MSEC); simulate_goodcrc(port, get_partner_power_role(port), - pd_port[port].msg_tx_id); + pd_port[port].msg_tx_id); inc_tx_id(port); - TEST_EQ(prl_tx_get_state(port), - PRL_TX_LAYER_RESET_FOR_TRANSMIT, "%u"); + TEST_EQ(prl_tx_get_state(port), PRL_TX_LAYER_RESET_FOR_TRANSMIT, "%u"); cycle_through_state_machine(port, 3, 10 * MSEC); @@ -1207,19 +1211,18 @@ static int test_pe_execute_hard_reset_msg(void) prl_execute_hard_reset(port); TEST_EQ(prl_hr_get_state(port), PRL_HR_RESET_LAYER, "%u"); - TEST_EQ(prl_tx_get_state(port), - PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); cycle_through_state_machine(port, 1, 10 * MSEC); - TEST_EQ(prl_hr_get_state(port), - PRL_HR_WAIT_FOR_PHY_HARD_RESET_COMPLETE, "%u"); + TEST_EQ(prl_hr_get_state(port), PRL_HR_WAIT_FOR_PHY_HARD_RESET_COMPLETE, + "%u"); cycle_through_state_machine(port, 2, PD_T_PS_HARD_RESET); TEST_NE(pd_port[port].mock_pe_hard_reset_sent, 0, "%d"); - TEST_EQ(prl_hr_get_state(port), - PRL_HR_WAIT_FOR_PE_HARD_RESET_COMPLETE, "%u"); + TEST_EQ(prl_hr_get_state(port), PRL_HR_WAIT_FOR_PE_HARD_RESET_COMPLETE, + "%u"); /* Simulate policy engine indicating that it is done hard reset */ prl_hard_reset_complete(port); @@ -1254,19 +1257,18 @@ static int test_phy_execute_hard_reset_msg(void) pd_execute_hard_reset(port); TEST_EQ(prl_hr_get_state(port), PRL_HR_RESET_LAYER, "%u"); - TEST_EQ(prl_tx_get_state(port), - PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); + TEST_EQ(prl_tx_get_state(port), PRL_TX_WAIT_FOR_MESSAGE_REQUEST, "%u"); cycle_through_state_machine(port, 1, 10 * MSEC); - TEST_EQ(prl_hr_get_state(port), - PRL_HR_WAIT_FOR_PE_HARD_RESET_COMPLETE, "%u"); + TEST_EQ(prl_hr_get_state(port), PRL_HR_WAIT_FOR_PE_HARD_RESET_COMPLETE, + "%u"); cycle_through_state_machine(port, 2, PD_T_PS_HARD_RESET); TEST_NE(pd_port[port].mock_pe_got_hard_reset, 0, "%d"); - TEST_EQ(prl_hr_get_state(port), - PRL_HR_WAIT_FOR_PE_HARD_RESET_COMPLETE, "%u"); + TEST_EQ(prl_hr_get_state(port), PRL_HR_WAIT_FOR_PE_HARD_RESET_COMPLETE, + "%u"); /* Simulate policy engine indicating that it is done hard reset */ prl_hard_reset_complete(port); @@ -1299,7 +1301,7 @@ void before_test(void) cycle_through_state_machine(PORT0, 10, MSEC); } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/usb_prl_old.tasklist b/test/usb_prl_old.tasklist index eb41326e3e..5c7f804157 100644 --- a/test/usb_prl_old.tasklist +++ b/test/usb_prl_old.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_sm_checks.c b/test/usb_sm_checks.c index 49b2dbae28..a8dbdad872 100644 --- a/test/usb_sm_checks.c +++ b/test/usb_sm_checks.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -39,7 +39,7 @@ const struct test_sm_data test_pe_sm_data[] = {}; const int test_pe_sm_data_size; #endif -test_static int test_no_parent_cycles(const struct test_sm_data * const sm_data) +test_static int test_no_parent_cycles(const struct test_sm_data *const sm_data) { int i; diff --git a/test/usb_sm_checks.h b/test/usb_sm_checks.h index d8e5f8ea06..1041afbaa4 100644 --- a/test/usb_sm_checks.h +++ b/test/usb_sm_checks.h @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -11,11 +11,9 @@ int test_tc_no_parent_cycles(void); int test_tc_all_states_named(void); - int test_prl_no_parent_cycles(void); int test_prl_all_states_named(void); - int test_pe_no_parent_cycles(void); int test_pe_all_states_named(void); diff --git a/test/usb_sm_framework_h3.c b/test/usb_sm_framework_h3.c index ba544a749a..20f9b706c6 100644 --- a/test/usb_sm_framework_h3.c +++ b/test/usb_sm_framework_h3.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -112,7 +112,7 @@ enum state_id { EXIT_C, }; -#define PORT0 0 +#define PORT0 0 struct sm_ { /* struct sm_obj must be first */ @@ -198,7 +198,6 @@ static void sm_test_super_A2_exit(const int port) sm[port].seq[sm[port].idx++] = EXIT_A2; } - static void sm_test_super_B2_entry(const int port) { sm[port].seq[sm[port].idx++] = ENTER_B2; @@ -269,7 +268,6 @@ static void sm_test_A4_exit(const int port) sm[port].seq[sm[port].idx++] = EXIT_A4; } - static void sm_test_A5_entry(const int port) { sm[port].sv_tmp = 0; @@ -291,7 +289,6 @@ static void sm_test_A5_exit(const int port) sm[port].seq[sm[port].idx++] = EXIT_A5; } - static void sm_test_A6_entry(const int port) { sm[port].sv_tmp = 0; @@ -355,7 +352,6 @@ static void sm_test_B4_exit(const int port) sm[port].seq[sm[port].idx++] = EXIT_B4; } - static void sm_test_B5_entry(const int port) { sm[port].sv_tmp = 0; @@ -377,7 +373,6 @@ static void sm_test_B5_exit(const int port) sm[port].seq[sm[port].idx++] = EXIT_B5; } - static void sm_test_B6_entry(const int port) { sm[port].sv_tmp = 0; @@ -440,63 +435,88 @@ test_static int test_hierarchy_0(void) set_state_sm(port, SM_TEST_A4); run_sm(); - TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); ++i; + TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A4, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_A4, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B4, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_A4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B4, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_B4, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_B4, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_B4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B5, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_B4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B5, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_B5, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_B5, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_B5, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B6, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_B5, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B6, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_B6, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_B6, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_B6, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_C, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_B6, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_C, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_C, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_C, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_C, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A7, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_C, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A7, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A7, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_A7, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A7, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A6, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_A7, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A6, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A6, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_A6, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A6, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A5, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_A6, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A5, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A5, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_A5, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A5, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_A5, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); + ++i; for (; i < SEQUENCE_SIZE; i++) TEST_EQ(sm[port].seq[i], 0, "%d"); @@ -512,71 +532,104 @@ test_static int test_hierarchy_1(void) set_state_sm(port, SM_TEST_A4); run_sm(); - TEST_EQ(sm[port].seq[i], ENTER_A3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); ++i; + TEST_EQ(sm[port].seq[i], ENTER_A3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A3, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_A4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A3, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_A3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B4, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_A4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_A3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B4, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_B4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_B3, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_B4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_B3, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_B4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_B3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B5, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_B4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_B3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B5, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_B5, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_B5, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_B5, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B6, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_B5, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B6, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_B6, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_B6, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_B6, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_C, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_B6, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_C, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_C, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_C, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_C, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A7, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_C, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A7, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A7, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_A7, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A7, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A6, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_A7, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A6, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A6, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_A6, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A6, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A5, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_A6, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A5, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A5, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A3, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_A5, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A3, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A5, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_A5, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); + ++i; for (i = 33; i < SEQUENCE_SIZE; i++) TEST_EQ(sm[port].seq[i], 0, "%d"); @@ -586,88 +639,130 @@ test_static int test_hierarchy_1(void) test_static int test_hierarchy_2(void) { - int port = PORT0; int i = 0; set_state_sm(port, SM_TEST_A4); run_sm(); - TEST_EQ(sm[port].seq[i], ENTER_A2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); ++i; + TEST_EQ(sm[port].seq[i], ENTER_A2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A2, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_A4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A2, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_A3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_A2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B4, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_A4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_A3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_A2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B4, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_B4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_B3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_B2, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_B4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_B3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_B2, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_B4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_B3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B5, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_B4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_B3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B5, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_B5, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_B2, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_B5, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_B2, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_B5, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_B2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B6, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_B5, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_B2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B6, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_B6, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_B6, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_B6, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_C, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_B6, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_C, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_C, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_C, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_C, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A7, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_C, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A7, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A7, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_A7, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A7, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A6, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_A7, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A6, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A6, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A2, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_A6, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A2, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A6, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A5, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_A6, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A5, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A5, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A2, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_A5, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A2, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A5, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_A5, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); + ++i; for (; i < SEQUENCE_SIZE; i++) TEST_EQ(sm[port].seq[i], 0, "%d"); @@ -677,100 +772,154 @@ test_static int test_hierarchy_2(void) test_static int test_hierarchy_3(void) { - int port = PORT0; int i = 0; set_state_sm(port, SM_TEST_A4); run_sm(); - TEST_EQ(sm[port].seq[i], ENTER_A1, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); ++i; - + TEST_EQ(sm[port].seq[i], ENTER_A1, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); + ++i; + + run_sm(); + TEST_EQ(sm[port].seq[i], RUN_A4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A1, "%d"); + ++i; + run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A1, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_A4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_A3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_A2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_A1, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B1, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B4, "%d"); + ++i; + + run_sm(); + TEST_EQ(sm[port].seq[i], RUN_B4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_B3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_B2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_B1, "%d"); + ++i; + + run_sm(); + TEST_EQ(sm[port].seq[i], EXIT_B4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_B3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B5, "%d"); + ++i; + + run_sm(); + TEST_EQ(sm[port].seq[i], RUN_B5, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_B2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_B1, "%d"); + ++i; + + run_sm(); + TEST_EQ(sm[port].seq[i], EXIT_B5, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_B2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B6, "%d"); + ++i; + + run_sm(); + TEST_EQ(sm[port].seq[i], RUN_B6, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_B1, "%d"); + ++i; + + run_sm(); + TEST_EQ(sm[port].seq[i], EXIT_B6, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_B1, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_C, "%d"); + ++i; + + run_sm(); + TEST_EQ(sm[port].seq[i], RUN_C, "%d"); + ++i; + + run_sm(); + TEST_EQ(sm[port].seq[i], EXIT_C, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A1, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A7, "%d"); + ++i; + + run_sm(); + TEST_EQ(sm[port].seq[i], RUN_A7, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A1, "%d"); + ++i; + + run_sm(); + TEST_EQ(sm[port].seq[i], EXIT_A7, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A6, "%d"); + ++i; + + run_sm(); + TEST_EQ(sm[port].seq[i], RUN_A6, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A1, "%d"); + ++i; - run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_A3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_A2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_A1, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B1, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B4, "%d"); ++i; - - run_sm(); - TEST_EQ(sm[port].seq[i], RUN_B4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_B3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_B2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_B1, "%d"); ++i; - - run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_B4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_B3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B5, "%d"); ++i; - - run_sm(); - TEST_EQ(sm[port].seq[i], RUN_B5, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_B2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_B1, "%d"); ++i; - - run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_B5, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_B2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B6, "%d"); ++i; - - run_sm(); - TEST_EQ(sm[port].seq[i], RUN_B6, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_B1, "%d"); ++i; - - run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_B6, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_B1, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_C, "%d"); ++i; - - run_sm(); - TEST_EQ(sm[port].seq[i], RUN_C, "%d"); ++i; - - run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_C, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A1, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A7, "%d"); ++i; - - run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A7, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A1, "%d"); ++i; - - run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A7, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A6, "%d"); ++i; - - run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A6, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A1, "%d"); ++i; - - run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A6, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A5, "%d"); ++i; + run_sm(); + TEST_EQ(sm[port].seq[i], EXIT_A6, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A5, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_A5, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_A1, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_A5, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_A1, "%d"); + ++i; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_A5, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_A5, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A4, "%d"); + ++i; for (; i < SEQUENCE_SIZE; i++) TEST_EQ(sm[port].seq[i], 0, "%d"); @@ -787,35 +936,53 @@ test_static int test_set_state_from_parents(void) test_control.a3_entry_to = &states[SM_TEST_B4]; run_sm(); set_state_sm(port, SM_TEST_A4); - TEST_EQ(sm[port].seq[i], ENTER_A1, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A3, "%d"); ++i; + TEST_EQ(sm[port].seq[i], ENTER_A1, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A3, "%d"); + ++i; /* Does not enter or exit A4 */ - TEST_EQ(sm[port].seq[i], EXIT_A3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_A2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_A1, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B1, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B4, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_A3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_A2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_A1, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B1, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B4, "%d"); + ++i; /* Ensure we didn't go further than above statements */ TEST_EQ(sm[port].seq[i], 0, "%d"); test_control.b3_run_to = &states[SM_TEST_B5]; run_sm(); - TEST_EQ(sm[port].seq[i], RUN_B4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_B3, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_B4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_B3, "%d"); + ++i; /* Does not run b2 or b1 */ - TEST_EQ(sm[port].seq[i], EXIT_B4, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_B3, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B5, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_B4, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_B3, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B5, "%d"); + ++i; /* Ensure we didn't go further than above statements */ TEST_EQ(sm[port].seq[i], 0, "%d"); run_sm(); - TEST_EQ(sm[port].seq[i], RUN_B5, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_B2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], RUN_B1, "%d"); ++i; + TEST_EQ(sm[port].seq[i], RUN_B5, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_B2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], RUN_B1, "%d"); + ++i; /* Ensure we didn't go further than above statements */ TEST_EQ(sm[port].seq[i], 0, "%d"); @@ -827,15 +994,24 @@ test_static int test_set_state_from_parents(void) test_control.c_entry_to = &states[SM_TEST_A7]; test_control.c_exit_to = &states[SM_TEST_A4]; run_sm(); - TEST_EQ(sm[port].seq[i], EXIT_B5, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_B2, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_B6, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_B6, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_B1, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_C, "%d"); ++i; - TEST_EQ(sm[port].seq[i], EXIT_C, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A1, "%d"); ++i; - TEST_EQ(sm[port].seq[i], ENTER_A7, "%d"); ++i; + TEST_EQ(sm[port].seq[i], EXIT_B5, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_B2, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_B6, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_B6, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_B1, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_C, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], EXIT_C, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A1, "%d"); + ++i; + TEST_EQ(sm[port].seq[i], ENTER_A7, "%d"); + ++i; /* Ensure we didn't go further than above statements */ TEST_EQ(sm[port].seq[i], 0, "%d"); @@ -985,7 +1161,7 @@ int test_task(void *u) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); #if defined(TEST_USB_SM_FRAMEWORK_H3) diff --git a/test/usb_sm_framework_h3.tasklist b/test/usb_sm_framework_h3.tasklist index 998998fd6c..9db4e49e5e 100644 --- a/test/usb_sm_framework_h3.tasklist +++ b/test/usb_sm_framework_h3.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_tcpmv2_compliance.c b/test/usb_tcpmv2_compliance.c index e0288feb18..2acd2c1660 100644 --- a/test/usb_tcpmv2_compliance.c +++ b/test/usb_tcpmv2_compliance.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -30,7 +30,7 @@ void before_test(void) tc_try_src_override(TRY_SRC_OVERRIDE_OFF); } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/usb_tcpmv2_compliance.h b/test/usb_tcpmv2_compliance.h index 331e3c5ee8..0ca4717173 100644 --- a/test/usb_tcpmv2_compliance.h +++ b/test/usb_tcpmv2_compliance.h @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -22,18 +22,16 @@ enum mock_connect_result { MOCK_CC_DUT_IS_SNK = 1, }; - extern uint32_t rdo; extern uint32_t pdo; extern const struct tcpc_config_t tcpc_config[]; -extern const struct usb_mux usb_muxes[]; - +extern const struct usb_mux_chain usb_muxes[]; -void mock_set_cc(enum mock_connect_result cr, - enum mock_cc_state cc1, enum mock_cc_state cc2); -void mock_set_role(int drp, enum tcpc_rp_value rp, - enum tcpc_cc_pull cc1, enum tcpc_cc_pull cc2); +void mock_set_cc(enum mock_connect_result cr, enum mock_cc_state cc1, + enum mock_cc_state cc2); +void mock_set_role(int drp, enum tcpc_rp_value rp, enum tcpc_cc_pull cc1, + enum tcpc_cc_pull cc2); void mock_set_alert(int alert); uint16_t tcpc_get_alert_status(void); bool vboot_allow_usb_pd(void); @@ -54,20 +52,15 @@ enum pd_rev_type partner_get_pd_rev(void); #define TCPCI_MSG_SOP_ALL -1 void partner_tx_msg_id_reset(int sop); -void partner_send_msg(enum tcpci_msg_type sop, - uint16_t type, - uint16_t cnt, - uint16_t ext, - uint32_t *payload); - +void partner_send_msg(enum tcpci_msg_type sop, uint16_t type, uint16_t cnt, + uint16_t ext, uint32_t *payload); int handle_attach_expected_msgs(enum pd_data_role data_role); - enum proc_pd_e1_attach { - INITIAL_ATTACH = BIT(0), - ALREADY_ATTACHED = BIT(1), - INITIAL_AND_ALREADY_ATTACHED = INITIAL_ATTACH | ALREADY_ATTACHED + INITIAL_ATTACH = BIT(0), + ALREADY_ATTACHED = BIT(1), + INITIAL_AND_ALREADY_ATTACHED = INITIAL_ATTACH | ALREADY_ATTACHED }; int proc_pd_e1(enum pd_data_role data_role, enum proc_pd_e1_attach attach); int proc_pd_e3(void); diff --git a/test/usb_tcpmv2_compliance.mocklist b/test/usb_tcpmv2_compliance.mocklist index f364fb1050..311397fe43 100644 --- a/test/usb_tcpmv2_compliance.mocklist +++ b/test/usb_tcpmv2_compliance.mocklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_tcpmv2_compliance.tasklist b/test/usb_tcpmv2_compliance.tasklist index 654e4eca2b..794669adbe 100644 --- a/test/usb_tcpmv2_compliance.tasklist +++ b/test/usb_tcpmv2_compliance.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_tcpmv2_compliance_common.c b/test/usb_tcpmv2_compliance_common.c index 6145f59388..9f839ecf1c 100644 --- a/test/usb_tcpmv2_compliance_common.c +++ b/test/usb_tcpmv2_compliance_common.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -15,9 +15,8 @@ uint32_t rdo = RDO_FIXED(1, 500, 500, 0); uint32_t pdo = PDO_FIXED(5000, 3000, - PDO_FIXED_DUAL_ROLE | - PDO_FIXED_DATA_SWAP | - PDO_FIXED_COMM_CAP); + PDO_FIXED_DUAL_ROLE | PDO_FIXED_DATA_SWAP | + PDO_FIXED_COMM_CAP); const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { { @@ -31,25 +30,25 @@ const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { }, }; -const struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { - { - .driver = &mock_usb_mux_driver, - } -}; - +const struct usb_mux_chain usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { { + .mux = + &(const struct usb_mux){ + .driver = &mock_usb_mux_driver, + }, +} }; -void mock_set_cc(enum mock_connect_result cr, - enum mock_cc_state cc1, enum mock_cc_state cc2) +void mock_set_cc(enum mock_connect_result cr, enum mock_cc_state cc1, + enum mock_cc_state cc2) { mock_tcpci_set_reg(TCPC_REG_CC_STATUS, - TCPC_REG_CC_STATUS_SET(cr, cc1, cc2)); + TCPC_REG_CC_STATUS_SET(cr, cc1, cc2)); } -void mock_set_role(int drp, enum tcpc_rp_value rp, - enum tcpc_cc_pull cc1, enum tcpc_cc_pull cc2) +void mock_set_role(int drp, enum tcpc_rp_value rp, enum tcpc_cc_pull cc1, + enum tcpc_cc_pull cc2) { mock_tcpci_set_reg(TCPC_REG_ROLE_CTRL, - TCPC_REG_ROLE_CTRL_SET(drp, rp, cc1, cc2)); + TCPC_REG_ROLE_CTRL_SET(drp, rp, cc1, cc2)); } static int mock_alert_count; @@ -80,7 +79,9 @@ int pd_check_vconn_swap(int port) return 1; } -void board_reset_pd_mcu(void) {} +void board_reset_pd_mcu(void) +{ +} /***************************************************************************** * Partner utility functions @@ -125,38 +126,31 @@ void partner_tx_msg_id_reset(int sop) partner_tx_id[sop] = 0; } -void partner_send_msg(enum tcpci_msg_type sop, - uint16_t type, - uint16_t cnt, - uint16_t ext, - uint32_t *payload) +void partner_send_msg(enum tcpci_msg_type sop, uint16_t type, uint16_t cnt, + uint16_t ext, uint32_t *payload) { uint16_t header; partner_tx_id[sop] &= 7; header = PD_HEADER(type, - sop == TCPCI_MSG_SOP ? partner_get_power_role() - : PD_PLUG_FROM_CABLE, - partner_get_data_role(), - partner_tx_id[sop], - cnt, - partner_get_pd_rev(), - ext); + sop == TCPCI_MSG_SOP ? partner_get_power_role() : + PD_PLUG_FROM_CABLE, + partner_get_data_role(), partner_tx_id[sop], cnt, + partner_get_pd_rev(), ext); mock_tcpci_receive(sop, header, payload); ++partner_tx_id[sop]; mock_set_alert(TCPC_REG_ALERT_RX_STATUS); } - /***************************************************************************** * TCPCI clean power up */ int tcpci_startup(void) { /* Should be in low power mode before AP boots. */ - TEST_EQ(mock_tcpci_get_reg(TCPC_REG_COMMAND), - TCPC_REG_COMMAND_I2CIDLE, "%d"); + TEST_EQ(mock_tcpci_get_reg(TCPC_REG_COMMAND), TCPC_REG_COMMAND_I2CIDLE, + "%d"); task_wait_event(10 * SECOND); hook_notify(HOOK_CHIPSET_STARTUP); @@ -165,12 +159,12 @@ int tcpci_startup(void) task_wait_event(10 * SECOND); /* Should be in low power mode and DRP auto-toggling with AP in S0. */ - TEST_EQ((mock_tcpci_get_reg(TCPC_REG_ROLE_CTRL) - & TCPC_REG_ROLE_CTRL_DRP_MASK), + TEST_EQ((mock_tcpci_get_reg(TCPC_REG_ROLE_CTRL) & + TCPC_REG_ROLE_CTRL_DRP_MASK), TCPC_REG_ROLE_CTRL_DRP_MASK, "%d"); /* TODO: check previous command was TCPC_REG_COMMAND_LOOK4CONNECTION */ - TEST_EQ(mock_tcpci_get_reg(TCPC_REG_COMMAND), - TCPC_REG_COMMAND_I2CIDLE, "%d"); + TEST_EQ(mock_tcpci_get_reg(TCPC_REG_COMMAND), TCPC_REG_COMMAND_I2CIDLE, + "%d"); /* TODO: this should be performed in TCPCI mock on startup but needs * more TCPCI functionality added before that can happen. So until @@ -198,13 +192,12 @@ int proc_pd_e1(enum pd_data_role data_role, enum proc_pd_e1_attach attach) TEST_EQ(pd_get_data_role(I2C_PORT_HOST_TCPC), PD_ROLE_DISCONNECTED, "%d"); - partner_set_data_role((data_role == PD_ROLE_UFP) - ? PD_ROLE_DFP - : PD_ROLE_UFP); + partner_set_data_role((data_role == PD_ROLE_UFP) ? PD_ROLE_DFP : + PD_ROLE_UFP); - partner_set_power_role((data_role == PD_ROLE_UFP) - ? PD_ROLE_SOURCE - : PD_ROLE_SINK); + partner_set_power_role((data_role == PD_ROLE_UFP) ? + PD_ROLE_SOURCE : + PD_ROLE_SINK); switch (partner_get_power_role()) { case PD_ROLE_SOURCE: @@ -212,11 +205,10 @@ int proc_pd_e1(enum pd_data_role data_role, enum proc_pd_e1_attach attach) * b) The tester applies Rp (PD3=1.5A, PD2=3A) and * waits for the UUT attachment. */ - mock_set_cc(MOCK_CC_DUT_IS_SNK, - MOCK_CC_SNK_OPEN, - (partner_get_pd_rev() == PD_REV30 - ? MOCK_CC_SNK_RP_1_5 - : MOCK_CC_SNK_RP_3_0)); + mock_set_cc(MOCK_CC_DUT_IS_SNK, MOCK_CC_SNK_OPEN, + (partner_get_pd_rev() == PD_REV30 ? + MOCK_CC_SNK_RP_1_5 : + MOCK_CC_SNK_RP_3_0)); mock_set_alert(TCPC_REG_ALERT_CC_STATUS); task_wait_event(5 * MSEC); @@ -227,11 +219,12 @@ int proc_pd_e1(enum pd_data_role data_role, enum proc_pd_e1_attach attach) /* * d) The tester applies Vbus and waits 50 ms. */ - mock_tcpci_set_reg_bits(TCPC_REG_POWER_STATUS, - TCPC_REG_POWER_STATUS_VBUS_PRES); + mock_tcpci_set_reg_bits( + TCPC_REG_POWER_STATUS, + TCPC_REG_POWER_STATUS_VBUS_PRES); mock_tcpci_clr_reg_bits(TCPC_REG_EXT_STATUS, - TCPC_REG_EXT_STATUS_SAFE0V); + TCPC_REG_EXT_STATUS_SAFE0V); mock_set_alert(TCPC_REG_ALERT_EXT_STATUS | TCPC_REG_ALERT_POWER_STATUS); task_wait_event(50 * MSEC); @@ -242,8 +235,7 @@ int proc_pd_e1(enum pd_data_role data_role, enum proc_pd_e1_attach attach) * b) The tester applies Rd and waits for Vbus for * tNoResponse max (5.5 s). */ - mock_set_cc(MOCK_CC_DUT_IS_SRC, - MOCK_CC_SRC_OPEN, + mock_set_cc(MOCK_CC_DUT_IS_SRC, MOCK_CC_SRC_OPEN, MOCK_CC_SRC_RD); mock_set_alert(TCPC_REG_ALERT_CC_STATUS); break; @@ -260,7 +252,7 @@ int proc_pd_e1(enum pd_data_role data_role, enum proc_pd_e1_attach attach) */ task_wait_event(1 * MSEC); partner_send_msg(TCPCI_MSG_SOP, PD_DATA_SOURCE_CAP, 1, - 0, &pdo); + 0, &pdo); /* * f) The tester waits for the Request from the UUT for @@ -324,8 +316,7 @@ int proc_pd_e1(enum pd_data_role data_role, enum proc_pd_e1_attach attach) TEST_EQ(tc_is_attached_src(PORT0), true, "%d"); break; } - TEST_EQ(pd_get_data_role(I2C_PORT_HOST_TCPC), - data_role, "%d"); + TEST_EQ(pd_get_data_role(I2C_PORT_HOST_TCPC), data_role, "%d"); } return EC_SUCCESS; @@ -390,13 +381,8 @@ int handle_attach_expected_msgs(enum pd_data_role data_role) possible[4].data_msg = 0; do { - rv = verify_tcpci_possible_tx(possible, - 5, - &found_index, - NULL, - 0, - NULL, - -1); + rv = verify_tcpci_possible_tx(possible, 5, &found_index, + NULL, 0, NULL, -1); TEST_NE(rv, EC_ERROR_UNKNOWN, "%d"); if (rv == EC_ERROR_TIMEOUT) @@ -406,30 +392,29 @@ int handle_attach_expected_msgs(enum pd_data_role data_role) task_wait_event(10 * MSEC); switch (found_index) { - case 0: /* TCPCI_MSG_SOP PD_CTRL_GET_SOURCE_CAP */ + case 0: /* TCPCI_MSG_SOP PD_CTRL_GET_SOURCE_CAP */ partner_send_msg(TCPCI_MSG_SOP, - PD_DATA_SOURCE_CAP, - 1, 0, &pdo); + PD_DATA_SOURCE_CAP, 1, 0, + &pdo); break; case 1: /* TCPCI_MSG_SOP PD_CTRL_GET_SINK_CAP */ partner_send_msg(TCPCI_MSG_SOP, - PD_DATA_SINK_CAP, - 1, 0, &pdo); + PD_DATA_SINK_CAP, 1, 0, &pdo); break; case 2: /* TCPCI_MSG_SOP_PRIME PD_DATA_VENDOR_DEF */ partner_send_msg(TCPCI_MSG_SOP_PRIME, - PD_CTRL_NOT_SUPPORTED, - 0, 0, NULL); + PD_CTRL_NOT_SUPPORTED, 0, 0, + NULL); break; case 3: /* TCPCI_MSG_SOP PD_DATA_VENDOR_DEF */ partner_send_msg(TCPCI_MSG_SOP, - PD_CTRL_NOT_SUPPORTED, - 0, 0, NULL); + PD_CTRL_NOT_SUPPORTED, 0, 0, + NULL); break; case 4: /* TCPCI_MSG_SOP PD_CTRL_GET_REVISION */ partner_send_msg(TCPCI_MSG_SOP, - PD_CTRL_NOT_SUPPORTED, - 0, 0, NULL); + PD_CTRL_NOT_SUPPORTED, 0, 0, + NULL); break; default: TEST_ASSERT(0); @@ -460,13 +445,8 @@ int handle_attach_expected_msgs(enum pd_data_role data_role) possible[4].data_msg = 0; do { - rv = verify_tcpci_possible_tx(possible, - 5, - &found_index, - NULL, - 0, - NULL, - -1); + rv = verify_tcpci_possible_tx(possible, 5, &found_index, + NULL, 0, NULL, -1); TEST_NE(rv, EC_ERROR_UNKNOWN, "%d"); if (rv == EC_ERROR_TIMEOUT) @@ -478,29 +458,25 @@ int handle_attach_expected_msgs(enum pd_data_role data_role) switch (found_index) { case 0: /* TCPCI_MSG_SOP PD_CTRL_GET_SINK_CAP */ partner_send_msg(TCPCI_MSG_SOP, - PD_DATA_SINK_CAP, - 1, 0, &pdo); + PD_DATA_SINK_CAP, 1, 0, &pdo); break; case 1: /* TCPCI_MSG_SOP PD_CTRL_DR_SWAP */ - partner_send_msg(TCPCI_MSG_SOP, - PD_CTRL_REJECT, + partner_send_msg(TCPCI_MSG_SOP, PD_CTRL_REJECT, 0, 0, NULL); break; - case 2: /* TCPCI_MSG_SOP PD_CTRL_PR_SWAP */ - partner_send_msg(TCPCI_MSG_SOP, - PD_CTRL_REJECT, + case 2: /* TCPCI_MSG_SOP PD_CTRL_PR_SWAP */ + partner_send_msg(TCPCI_MSG_SOP, PD_CTRL_REJECT, 0, 0, NULL); break; case 3: /* TCPCI_MSG_SOP PD_CTRL_VCONN_SWAP */ TEST_LT(vcs++, 4, "%d"); - partner_send_msg(TCPCI_MSG_SOP, - PD_CTRL_REJECT, + partner_send_msg(TCPCI_MSG_SOP, PD_CTRL_REJECT, 0, 0, NULL); break; case 4: /* TCPCI_MSG_SOP PD_CTRL_GET_REVISION */ partner_send_msg(TCPCI_MSG_SOP, - PD_CTRL_NOT_SUPPORTED, - 0, 0, NULL); + PD_CTRL_NOT_SUPPORTED, 0, 0, + NULL); break; default: TEST_ASSERT(0); diff --git a/test/usb_tcpmv2_td_pd_ll_e3.c b/test/usb_tcpmv2_td_pd_ll_e3.c index 46fbee393f..f239c87885 100644 --- a/test/usb_tcpmv2_td_pd_ll_e3.c +++ b/test/usb_tcpmv2_td_pd_ll_e3.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -29,8 +29,8 @@ static int td_pd_ll_e3(enum pd_data_role data_role) /* * a) Run PROC.PD.E1 Bring-up according to the UUT role. */ - TEST_EQ(proc_pd_e1(data_role, INITIAL_AND_ALREADY_ATTACHED), - EC_SUCCESS, "%d"); + TEST_EQ(proc_pd_e1(data_role, INITIAL_AND_ALREADY_ATTACHED), EC_SUCCESS, + "%d"); /* * Make sure we are idle. Reject everything that is pending @@ -42,13 +42,11 @@ static int td_pd_ll_e3(enum pd_data_role data_role) * and do not send GoodCrc for nRetryCount + 1 times * (nRetryCount equals 3 since PD 2.1). */ - partner_send_msg(TCPCI_MSG_SOP, - PD_CTRL_GET_SINK_CAP, - 0, 0, NULL); + partner_send_msg(TCPCI_MSG_SOP, PD_CTRL_GET_SINK_CAP, 0, 0, NULL); retries = (partner_get_pd_rev() == PD_REV30) ? 2 : 3; TEST_EQ(verify_tcpci_tx_retry_count(TCPCI_MSG_SOP, 0, PD_DATA_SINK_CAP, - retries), + retries), EC_SUCCESS, "%d"); mock_set_alert(TCPC_REG_ALERT_TX_FAILED); diff --git a/test/usb_tcpmv2_td_pd_ll_e4.c b/test/usb_tcpmv2_td_pd_ll_e4.c index cb6aa8e8b6..f315fc2a63 100644 --- a/test/usb_tcpmv2_td_pd_ll_e4.c +++ b/test/usb_tcpmv2_td_pd_ll_e4.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -31,8 +31,8 @@ static int td_pd_ll_e4(enum pd_data_role data_role) /* * a) Run PROC.PD.E1 Bring-up according to the UUT role. */ - TEST_EQ(proc_pd_e1(data_role, INITIAL_AND_ALREADY_ATTACHED), - EC_SUCCESS, "%d"); + TEST_EQ(proc_pd_e1(data_role, INITIAL_AND_ALREADY_ATTACHED), EC_SUCCESS, + "%d"); /* * Make sure we are idle. Reject everything that is pending @@ -44,13 +44,11 @@ static int td_pd_ll_e4(enum pd_data_role data_role) * and do not send GoodCrc for nRetryCount + 1 times * (nRetryCount equals 3 since PD 2.1). */ - partner_send_msg(TCPCI_MSG_SOP, - PD_CTRL_GET_SINK_CAP, - 0, 0, NULL); + partner_send_msg(TCPCI_MSG_SOP, PD_CTRL_GET_SINK_CAP, 0, 0, NULL); retries = 3; TEST_EQ(verify_tcpci_tx_retry_count(TCPCI_MSG_SOP, 0, PD_DATA_SINK_CAP, - retries), + retries), EC_SUCCESS, "%d"); mock_set_alert(TCPC_REG_ALERT_TX_FAILED); @@ -60,7 +58,7 @@ static int td_pd_ll_e4(enum pd_data_role data_role) */ retries = 3; TEST_EQ(verify_tcpci_tx_retry_count(TCPCI_MSG_SOP, PD_CTRL_SOFT_RESET, - 0, retries), + 0, retries), EC_SUCCESS, "%d"); mock_set_alert(TCPC_REG_ALERT_TX_FAILED); task_wait_event(1 * MSEC); @@ -68,8 +66,8 @@ static int td_pd_ll_e4(enum pd_data_role data_role) /* * d) Check that the UUT issues a Hard Reset. */ - TEST_EQ(mock_tcpci_get_reg(TCPC_REG_TRANSMIT), - TCPCI_MSG_TX_HARD_RESET, "%d"); + TEST_EQ(mock_tcpci_get_reg(TCPC_REG_TRANSMIT), TCPCI_MSG_TX_HARD_RESET, + "%d"); mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS | TCPC_REG_ALERT_TX_FAILED); mock_tcpci_set_reg(TCPC_REG_TRANSMIT, 0); task_wait_event(1 * MSEC); diff --git a/test/usb_tcpmv2_td_pd_ll_e5.c b/test/usb_tcpmv2_td_pd_ll_e5.c index ae6409eb20..7c7446a7b3 100644 --- a/test/usb_tcpmv2_td_pd_ll_e5.c +++ b/test/usb_tcpmv2_td_pd_ll_e5.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -26,8 +26,8 @@ static int td_pd_ll_e5(enum pd_data_role data_role) /* * a) Run PROC.PD.E1 Bring-up according to the UUT role. */ - TEST_EQ(proc_pd_e1(data_role, INITIAL_AND_ALREADY_ATTACHED), - EC_SUCCESS, "%d"); + TEST_EQ(proc_pd_e1(data_role, INITIAL_AND_ALREADY_ATTACHED), EC_SUCCESS, + "%d"); /* * Make sure we are idle. Reject everything that is pending diff --git a/test/usb_tcpmv2_td_pd_other.c b/test/usb_tcpmv2_td_pd_other.c index 1882480150..18477ac825 100644 --- a/test/usb_tcpmv2_td_pd_other.c +++ b/test/usb_tcpmv2_td_pd_other.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -57,7 +57,7 @@ int test_retry_count_sop(void) * The retry count for PD3 should be 2. */ TEST_EQ(verify_tcpci_tx_retry_count(TCPCI_MSG_SOP, 0, - PD_DATA_SOURCE_CAP, 2), + PD_DATA_SOURCE_CAP, 2), EC_SUCCESS, "%d"); return EC_SUCCESS; } diff --git a/test/usb_tcpmv2_td_pd_snk3_e12.c b/test/usb_tcpmv2_td_pd_snk3_e12.c index 0195d39dba..11aa51016e 100644 --- a/test/usb_tcpmv2_td_pd_snk3_e12.c +++ b/test/usb_tcpmv2_td_pd_snk3_e12.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -46,8 +46,8 @@ int test_td_pd_snk3_e12(void) * d) The Tester verifies that a Soft_Reset message is sent by the UUT * within tReceive max + tSoftReset max */ - TEST_EQ(verify_tcpci_tx_timeout( - TCPCI_MSG_SOP, PD_CTRL_SOFT_RESET, 0, 16 * MSEC), + TEST_EQ(verify_tcpci_tx_timeout(TCPCI_MSG_SOP, PD_CTRL_SOFT_RESET, 0, + 16 * MSEC), EC_SUCCESS, "%d"); mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); diff --git a/test/usb_tcpmv2_td_pd_src3_e1.c b/test/usb_tcpmv2_td_pd_src3_e1.c index 751e354b11..4f5637ccd2 100644 --- a/test/usb_tcpmv2_td_pd_src3_e1.c +++ b/test/usb_tcpmv2_td_pd_src3_e1.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -69,21 +69,17 @@ int test_td_pd_src3_e1(void) * 5. Message Type field = 00001b (Source Capabilities) * 6. Extended field = 0b */ - TEST_EQ(verify_tcpci_tx_with_data(TCPCI_MSG_SOP, - PD_DATA_SOURCE_CAP, - data, - sizeof(data), - &msg_len, - 0), + TEST_EQ(verify_tcpci_tx_with_data(TCPCI_MSG_SOP, PD_DATA_SOURCE_CAP, + data, sizeof(data), &msg_len, 0), EC_SUCCESS, "%d"); TEST_GE(msg_len, HEADER_BYTE_CNT, "%d"); header = UINT16_FROM_BYTE_ARRAY_LE(data, HEADER_BYTE_OFFSET); pd_cnt = PD_HEADER_CNT(header); TEST_NE(pd_cnt, 0, "%d"); - TEST_EQ(msg_len, HEADER_BYTE_OFFSET + - HEADER_BYTE_CNT + - (pd_cnt * PDO_BYTE_CNT), "%d"); + TEST_EQ(msg_len, + HEADER_BYTE_OFFSET + HEADER_BYTE_CNT + (pd_cnt * PDO_BYTE_CNT), + "%d"); TEST_EQ(PD_HEADER_PROLE(header), PD_ROLE_SOURCE, "%d"); TEST_EQ(PD_HEADER_REV(header), REVISION_3, "%d"); TEST_EQ(PD_HEADER_DROLE(header), PD_ROLE_DFP, "%d"); @@ -96,8 +92,8 @@ int test_td_pd_src3_e1(void) * 2. Voltage field = 100 (5 V) * 3. Bits 23..22 = 000b (Reserved) */ - pdo = UINT32_FROM_BYTE_ARRAY_LE(data, HEADER_BYTE_OFFSET + - HEADER_BYTE_CNT); + pdo = UINT32_FROM_BYTE_ARRAY_LE(data, + HEADER_BYTE_OFFSET + HEADER_BYTE_CNT); type = pdo & PDO_TYPE_MASK; TEST_EQ(type, PDO_TYPE_FIXED, "%d"); @@ -135,15 +131,14 @@ int test_td_pd_src3_e1(void) int offset; uint32_t voltage; - offset = HEADER_BYTE_OFFSET + - HEADER_BYTE_CNT + + offset = HEADER_BYTE_OFFSET + HEADER_BYTE_CNT + (i * PDO_BYTE_CNT); pdo = UINT32_FROM_BYTE_ARRAY_LE(data, offset); type = pdo & PDO_TYPE_MASK; if (type == PDO_TYPE_FIXED) { - TEST_EQ(pdo & (GENMASK(28, 26)|GENMASK(24, 22)), - 0, "%d"); + TEST_EQ(pdo & (GENMASK(28, 26) | GENMASK(24, 22)), 0, + "%d"); TEST_EQ(last_battery_voltage, 0, "%d"); TEST_EQ(last_variable_voltage, 0, "%d"); TEST_EQ(last_programmable_voltage, 0, "%d"); diff --git a/test/usb_tcpmv2_td_pd_src3_e26.c b/test/usb_tcpmv2_td_pd_src3_e26.c index f5f5bcd3c4..aef472884b 100644 --- a/test/usb_tcpmv2_td_pd_src3_e26.c +++ b/test/usb_tcpmv2_td_pd_src3_e26.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -47,8 +47,8 @@ int test_td_pd_src3_e26(void) * d) The Tester verifies that a Soft_Reset message is sent by the UUT * within tReceive max (1.1 ms) + tSoftReset max (15 ms). */ - TEST_EQ(verify_tcpci_tx_timeout( - TCPCI_MSG_SOP, PD_CTRL_SOFT_RESET, 0, 15 * MSEC), + TEST_EQ(verify_tcpci_tx_timeout(TCPCI_MSG_SOP, PD_CTRL_SOFT_RESET, 0, + 15 * MSEC), EC_SUCCESS, "%d"); mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); diff --git a/test/usb_tcpmv2_td_pd_src3_e32.c b/test/usb_tcpmv2_td_pd_src3_e32.c index 9ade7b83c8..395a251b22 100644 --- a/test/usb_tcpmv2_td_pd_src3_e32.c +++ b/test/usb_tcpmv2_td_pd_src3_e32.c @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -10,18 +10,17 @@ #include "timer.h" #include "usb_tcpmv2_compliance.h" -#define PD_T_CHUNK_RECEIVER_REQUEST_MAX (15 * MSEC) -#define PD_T_CHUNK_SENDER_RSP_MAX (30 * MSEC) -#define PD_T_CHUNKING_NOT_SUPPORTED_MIN (40 * MSEC) -#define PD_T_CHUNKING_NOT_SUPPORTED_MAX (50 * MSEC) +#define PD_T_CHUNK_RECEIVER_REQUEST_MAX (15 * MSEC) +#define PD_T_CHUNK_SENDER_RSP_MAX (30 * MSEC) +#define PD_T_CHUNKING_NOT_SUPPORTED_MIN (40 * MSEC) +#define PD_T_CHUNKING_NOT_SUPPORTED_MAX (50 * MSEC) static void setup_chunk_msg(int chunk, char *data) { int i; int base_msg_byte = chunk * PD_MAX_EXTENDED_MSG_CHUNK_LEN; - *(uint16_t *)data = PD_EXT_HEADER(chunk, 0, - PD_MAX_EXTENDED_MSG_LEN); + *(uint16_t *)data = PD_EXT_HEADER(chunk, 0, PD_MAX_EXTENDED_MSG_LEN); for (i = 0; i < PD_MAX_EXTENDED_MSG_CHUNK_LEN; ++i) { int val = (i + base_msg_byte) % 256; @@ -85,12 +84,8 @@ int test_td_pd_src3_e32(void) possible[1].ctrl_msg = 0; possible[1].data_msg = 0x1F; - TEST_EQ(verify_tcpci_possible_tx(possible, - 2, - &found_index, - data, - sizeof(data), - &msg_len, + TEST_EQ(verify_tcpci_possible_tx(possible, 2, &found_index, data, + sizeof(data), &msg_len, PD_T_CHUNKING_NOT_SUPPORTED_MAX), EC_SUCCESS, "%d"); mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); @@ -112,7 +107,7 @@ int test_td_pd_src3_e32(void) * tChunkReceiverRequest max (15ms), the test fails. */ TEST_ASSERT((get_time().val - start_time) <= - PD_T_CHUNK_RECEIVER_REQUEST_MAX); + PD_T_CHUNK_RECEIVER_REQUEST_MAX); while (chunk < 4) { int next_chunk; @@ -130,12 +125,9 @@ int test_td_pd_src3_e32(void) setup_chunk_msg(chunk, data); partner_send_msg(TCPCI_MSG_SOP, 0x1F, 7, 1, (uint32_t *)data); - TEST_EQ(verify_tcpci_tx_with_data(TCPCI_MSG_SOP, - 0x1F, - data, - sizeof(data), - &msg_len, - PD_T_CHUNK_RECEIVER_REQUEST_MAX), + TEST_EQ(verify_tcpci_tx_with_data( + TCPCI_MSG_SOP, 0x1F, data, sizeof(data), + &msg_len, PD_T_CHUNK_RECEIVER_REQUEST_MAX), EC_SUCCESS, "%d"); mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); @@ -159,12 +151,9 @@ int test_td_pd_src3_e32(void) * i) If a message is not received within tChunkReceiverRequest max, * the test fails. */ - TEST_EQ(verify_tcpci_tx_with_data(TCPCI_MSG_SOP, - 0x1F, - data, - sizeof(data), - &msg_len, - PD_T_CHUNK_RECEIVER_REQUEST_MAX), + TEST_EQ(verify_tcpci_tx_with_data(TCPCI_MSG_SOP, 0x1F, data, + sizeof(data), &msg_len, + PD_T_CHUNK_RECEIVER_REQUEST_MAX), EC_SUCCESS, "%d"); mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); @@ -207,9 +196,7 @@ int test_td_pd_src3_e32(void) * Number of Data Objects field */ header = *(uint32_t *)&data[1]; - TEST_EQ(msg_len - 3, - PD_HEADER_CNT(header) * 4, - "%d"); + TEST_EQ(msg_len - 3, PD_HEADER_CNT(header) * 4, "%d"); /* * 4. The last 2 bytes of the Data Object are 0 diff --git a/test/usb_tcpmv2_td_pd_src3_e7.c b/test/usb_tcpmv2_td_pd_src3_e7.c index fa2c68b64e..40f65f2b9a 100644 --- a/test/usb_tcpmv2_td_pd_src3_e7.c +++ b/test/usb_tcpmv2_td_pd_src3_e7.c @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -22,7 +22,6 @@ #define EXT_MSG_DATA_SIZE_1 1 #define GBSDB_FIXED_BATTERY_0 (0 << 16) - static int number_of_fixed_batteries(void) { return CONFIG_NUM_FIXED_BATTERIES; @@ -78,13 +77,8 @@ int test_td_pd_src3_e7(void) possible[1].ctrl_msg = 0; possible[1].data_msg = PD_DATA_SOURCE_CAP; - TEST_EQ(verify_tcpci_possible_tx(possible, - 2, - &found_index, - data, - sizeof(data), - &msg_len, - 0), + TEST_EQ(verify_tcpci_possible_tx(possible, 2, &found_index, data, + sizeof(data), &msg_len, 0), EC_SUCCESS, "%d"); if (found_index == 0) { mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); @@ -104,8 +98,7 @@ int test_td_pd_src3_e7(void) mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); task_wait_event(10 * MSEC); - if (data[HEADER_BYTE_OFFSET + - HEADER_BYTE_CNT + + if (data[HEADER_BYTE_OFFSET + HEADER_BYTE_CNT + SRC_CAP_EXT_NUM_BATTERY_OFFSET] == 0) return EC_SUCCESS; } @@ -114,11 +107,9 @@ int test_td_pd_src3_e7(void) * e) The Tester waits until it can start an AMS (Run PROC.PD.E3) and * sends a Get_Battery_Status message to the UUT */ - ext_msg = EXT_MSG_CHUNKED | - EXT_MSG_DATA_SIZE_1 | - GBSDB_FIXED_BATTERY_0; + ext_msg = EXT_MSG_CHUNKED | EXT_MSG_DATA_SIZE_1 | GBSDB_FIXED_BATTERY_0; partner_send_msg(TCPCI_MSG_SOP, PD_EXT_GET_BATTERY_STATUS, 1, 1, - &ext_msg); + &ext_msg); /* * f) If a Battery_Status message is not received within @@ -127,10 +118,8 @@ int test_td_pd_src3_e7(void) * been transmitted to the time the first bit of the Battery_Status * message preamble has been received. */ - TEST_EQ(verify_tcpci_tx_timeout(TCPCI_MSG_SOP, - 0, - PD_DATA_BATTERY_STATUS, - (15 * MSEC)), + TEST_EQ(verify_tcpci_tx_timeout(TCPCI_MSG_SOP, 0, + PD_DATA_BATTERY_STATUS, (15 * MSEC)), EC_SUCCESS, "%d"); mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); task_wait_event(10 * MSEC); diff --git a/test/usb_tcpmv2_td_pd_src3_e8.c b/test/usb_tcpmv2_td_pd_src3_e8.c index b884156d43..8686226a50 100644 --- a/test/usb_tcpmv2_td_pd_src3_e8.c +++ b/test/usb_tcpmv2_td_pd_src3_e8.c @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -24,10 +24,10 @@ #define SCEDB_NUM_BYTES 24 #define BSDO_NUM_BYTES 4 -#define BSDO_INV_BATTERY_REF(bsdo) (((bsdo) >> 8) & 1) -#define BSDO_BATTERY_PRESENT(bsdo) (((bsdo) >> 9) & 1) -#define BSDO_BATTERY_CHRG_STS(bsdo) (((bsdo) >> 10) & 3) -#define BSDO_BATTERY_INFO(bsdo) (((bsdo) >> 8) & 0xFF) +#define BSDO_INV_BATTERY_REF(bsdo) (((bsdo) >> 8) & 1) +#define BSDO_BATTERY_PRESENT(bsdo) (((bsdo) >> 9) & 1) +#define BSDO_BATTERY_CHRG_STS(bsdo) (((bsdo) >> 10) & 3) +#define BSDO_BATTERY_INFO(bsdo) (((bsdo) >> 8) & 0xFF) static int number_of_fixed_batteries(void) { @@ -88,33 +88,26 @@ int test_td_pd_src3_e8(void) possible[1].ctrl_msg = 0; possible[1].data_msg = PD_DATA_SOURCE_CAP; - TEST_EQ(verify_tcpci_possible_tx(possible, - 2, - &found_index, - data, - sizeof(data), - &msg_len, - 0), + TEST_EQ(verify_tcpci_possible_tx(possible, 2, &found_index, data, + sizeof(data), &msg_len, 0), EC_SUCCESS, "%d"); if (found_index == 1) { mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); task_wait_event(10 * MSEC); - TEST_EQ(msg_len, HEADER_BYTE_OFFSET + - HEADER_NUM_BYTES + - SCEDB_NUM_BYTES, + TEST_EQ(msg_len, + HEADER_BYTE_OFFSET + HEADER_NUM_BYTES + SCEDB_NUM_BYTES, "%d"); num_fixed_batteries = - data[HEADER_BYTE_OFFSET + - HEADER_NUM_BYTES + - SCEDB_NUM_BATTERY_OFFSET] & - 0x0F; + data[HEADER_BYTE_OFFSET + HEADER_NUM_BYTES + + SCEDB_NUM_BATTERY_OFFSET] & + 0x0F; num_swappable_battery_slots = - (data[HEADER_BYTE_OFFSET + - HEADER_NUM_BYTES + - SCEDB_NUM_BATTERY_OFFSET] >> 4) & - 0x0F; + (data[HEADER_BYTE_OFFSET + HEADER_NUM_BYTES + + SCEDB_NUM_BATTERY_OFFSET] >> + 4) & + 0x0F; } /* * If a Not_Supported message is received, the Tester reads the @@ -141,8 +134,7 @@ int test_td_pd_src3_e8(void) uint16_t header; uint32_t bsdo; - ext_msg = EXT_MSG_CHUNKED | EXT_MSG_DATA_SIZE_1 | - (ref << 16); + ext_msg = EXT_MSG_CHUNKED | EXT_MSG_DATA_SIZE_1 | (ref << 16); partner_send_msg(TCPCI_MSG_SOP, PD_EXT_GET_BATTERY_STATUS, 1, 1, &ext_msg); @@ -151,17 +143,13 @@ int test_td_pd_src3_e8(void) * verifies: */ TEST_EQ(verify_tcpci_tx_with_data(TCPCI_MSG_SOP, - PD_DATA_BATTERY_STATUS, - data, - sizeof(data), - &msg_len, - 0), + PD_DATA_BATTERY_STATUS, data, + sizeof(data), &msg_len, 0), EC_SUCCESS, "%d"); mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); task_wait_event(10 * MSEC); - TEST_EQ(msg_len, HEADER_BYTE_OFFSET + - HEADER_NUM_BYTES + - BSDO_NUM_BYTES, + TEST_EQ(msg_len, + HEADER_BYTE_OFFSET + HEADER_NUM_BYTES + BSDO_NUM_BYTES, "%d"); /* @@ -200,33 +188,26 @@ int test_td_pd_src3_e8(void) * 8. If Invalid Battery Reference field is 1, Battery is * present field shall be 0 */ - bsdo = UINT32_FROM_BYTE_ARRAY_LE(data, HEADER_BYTE_OFFSET + - HEADER_NUM_BYTES); + bsdo = UINT32_FROM_BYTE_ARRAY_LE( + data, HEADER_BYTE_OFFSET + HEADER_NUM_BYTES); /* FIXED BATTERY */ if (ref < 4) { if (ref < num_fixed_batteries) { - TEST_EQ(BSDO_INV_BATTERY_REF(bsdo), - 0, "%d"); - TEST_EQ(BSDO_BATTERY_PRESENT(bsdo), - 1, "%d"); + TEST_EQ(BSDO_INV_BATTERY_REF(bsdo), 0, "%d"); + TEST_EQ(BSDO_BATTERY_PRESENT(bsdo), 1, "%d"); } else { - TEST_EQ(BSDO_INV_BATTERY_REF(bsdo), - 1, "%d"); - TEST_EQ(BSDO_BATTERY_PRESENT(bsdo), - 0, "%d"); + TEST_EQ(BSDO_INV_BATTERY_REF(bsdo), 1, "%d"); + TEST_EQ(BSDO_BATTERY_PRESENT(bsdo), 0, "%d"); } } /* BATTERY SLOT */ else { if ((ref - 4) < num_swappable_battery_slots) { - TEST_EQ(BSDO_INV_BATTERY_REF(bsdo), - 0, "%d"); + TEST_EQ(BSDO_INV_BATTERY_REF(bsdo), 0, "%d"); } else { - TEST_EQ(BSDO_INV_BATTERY_REF(bsdo), - 1, "%d"); - TEST_EQ(BSDO_BATTERY_PRESENT(bsdo), - 0, "%d"); + TEST_EQ(BSDO_INV_BATTERY_REF(bsdo), 1, "%d"); + TEST_EQ(BSDO_BATTERY_PRESENT(bsdo), 0, "%d"); } } diff --git a/test/usb_tcpmv2_td_pd_src3_e9.c b/test/usb_tcpmv2_td_pd_src3_e9.c index 49b8209669..59b7a22d74 100644 --- a/test/usb_tcpmv2_td_pd_src3_e9.c +++ b/test/usb_tcpmv2_td_pd_src3_e9.c @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -23,8 +23,8 @@ #define SCEDB_NUM_BATTERY_OFFSET 22 #define SCEDB_NUM_BYTES 24 -#define BSDO_INV_BATTERY_REF(bsdo) (((bsdo) >> 8) & 1) -#define BSDO_BATTERY_INFO(bsdo) (((bsdo) >> 8) & 0xFF) +#define BSDO_INV_BATTERY_REF(bsdo) (((bsdo) >> 8) & 1) +#define BSDO_BATTERY_INFO(bsdo) (((bsdo) >> 8) & 0xFF) static int number_of_fixed_batteries(void) { @@ -84,33 +84,26 @@ int test_td_pd_src3_e9(void) possible[1].ctrl_msg = 0; possible[1].data_msg = PD_DATA_SOURCE_CAP; - TEST_EQ(verify_tcpci_possible_tx(possible, - 2, - &found_index, - data, - sizeof(data), - &msg_len, - 0), + TEST_EQ(verify_tcpci_possible_tx(possible, 2, &found_index, data, + sizeof(data), &msg_len, 0), EC_SUCCESS, "%d"); if (found_index == 1) { mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); task_wait_event(10 * MSEC); - TEST_EQ(msg_len, HEADER_BYTE_OFFSET + - HEADER_NUM_BYTES + - SCEDB_NUM_BYTES, + TEST_EQ(msg_len, + HEADER_BYTE_OFFSET + HEADER_NUM_BYTES + SCEDB_NUM_BYTES, "%d"); num_fixed_batteries = - data[HEADER_BYTE_OFFSET + - HEADER_NUM_BYTES + - SCEDB_NUM_BATTERY_OFFSET] & - 0x0F; + data[HEADER_BYTE_OFFSET + HEADER_NUM_BYTES + + SCEDB_NUM_BATTERY_OFFSET] & + 0x0F; num_swappable_battery_slots = - (data[HEADER_BYTE_OFFSET + - HEADER_NUM_BYTES + - SCEDB_NUM_BATTERY_OFFSET] >> 4) & - 0x0F; + (data[HEADER_BYTE_OFFSET + HEADER_NUM_BYTES + + SCEDB_NUM_BATTERY_OFFSET] >> + 4) & + 0x0F; } /* * If a Not_Supported message is received, the Tester reads the @@ -133,8 +126,7 @@ int test_td_pd_src3_e9(void) * to 8, to the UUT. */ ref = 8; - ext_msg = EXT_MSG_CHUNKED | EXT_MSG_DATA_SIZE_1 | - (ref << 16); + ext_msg = EXT_MSG_CHUNKED | EXT_MSG_DATA_SIZE_1 | (ref << 16); partner_send_msg(TCPCI_MSG_SOP, PD_EXT_GET_BATTERY_STATUS, 1, 1, &ext_msg); @@ -153,13 +145,8 @@ int test_td_pd_src3_e9(void) possible[1].ctrl_msg = 0; possible[1].data_msg = PD_DATA_BATTERY_STATUS; - TEST_EQ(verify_tcpci_possible_tx(possible, - 2, - &found_index, - data, - sizeof(data), - &msg_len, - 0), + TEST_EQ(verify_tcpci_possible_tx(possible, 2, &found_index, data, + sizeof(data), &msg_len, 0), EC_SUCCESS, "%d"); if (found_index == 0) { mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS); @@ -210,8 +197,8 @@ int test_td_pd_src3_e9(void) * 6. Invalid Battery Reference field (Bit 0) of the * Battery Info field in the BSDO is 1 */ - bsdo = UINT32_FROM_BYTE_ARRAY_LE(data, HEADER_BYTE_OFFSET + - HEADER_NUM_BYTES); + bsdo = UINT32_FROM_BYTE_ARRAY_LE( + data, HEADER_BYTE_OFFSET + HEADER_NUM_BYTES); TEST_EQ(BSDO_INV_BATTERY_REF(bsdo), 1, "%d"); /* diff --git a/test/usb_tcpmv2_td_pd_src_e1.c b/test/usb_tcpmv2_td_pd_src_e1.c index a617f90ca2..cfb62764b2 100644 --- a/test/usb_tcpmv2_td_pd_src_e1.c +++ b/test/usb_tcpmv2_td_pd_src_e1.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -38,8 +38,7 @@ int test_td_pd_src_e1(void) * is not received from the Provider within 250 ms (tFirstSourceCap * max) after VBus present. */ - TEST_EQ(verify_tcpci_tx_timeout(TCPCI_MSG_SOP, 0, - PD_DATA_SOURCE_CAP, + TEST_EQ(verify_tcpci_tx_timeout(TCPCI_MSG_SOP, 0, PD_DATA_SOURCE_CAP, 250 * MSEC), EC_SUCCESS, "%d"); diff --git a/test/usb_tcpmv2_td_pd_src_e2.c b/test/usb_tcpmv2_td_pd_src_e2.c index f0e1b64c7e..cabba40bb9 100644 --- a/test/usb_tcpmv2_td_pd_src_e2.c +++ b/test/usb_tcpmv2_td_pd_src_e2.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -63,12 +63,8 @@ int test_td_pd_src_e2(void) * Provider, if the Specification Revision field is 10b * (Rev 3.0), the test passes and stops here, */ - TEST_EQ(verify_tcpci_tx_with_data(TCPCI_MSG_SOP, - PD_DATA_SOURCE_CAP, - data, - sizeof(data), - &msg_len, - 0), + TEST_EQ(verify_tcpci_tx_with_data(TCPCI_MSG_SOP, PD_DATA_SOURCE_CAP, + data, sizeof(data), &msg_len, 0), EC_SUCCESS, "%d"); TEST_GE(msg_len, HEADER_BYTE_CNT, "%d"); @@ -95,7 +91,7 @@ int test_td_pd_src_e2(void) TEST_EQ(revision, REVISION_2, "%d"); TEST_EQ(PD_HEADER_DROLE(header), PD_ROLE_DFP, "%d"); TEST_EQ(PD_HEADER_TYPE(header), PD_DATA_SOURCE_CAP, "%d"); - TEST_EQ(header & (BIT(4)|BIT(15)), 0, "%d"); + TEST_EQ(header & (BIT(4) | BIT(15)), 0, "%d"); /* * c) For the first PDO, the Tester verifies: @@ -103,8 +99,8 @@ int test_td_pd_src_e2(void) * 2. Voltage field = 100 (5 V) * 3. Bits 24..22 = 000b (Reserved) */ - pdo = UINT32_FROM_BYTE_ARRAY_LE(data, HEADER_BYTE_OFFSET + - HEADER_BYTE_CNT); + pdo = UINT32_FROM_BYTE_ARRAY_LE(data, + HEADER_BYTE_OFFSET + HEADER_BYTE_CNT); type = pdo & PDO_TYPE_MASK; TEST_EQ(type, PDO_TYPE_FIXED, "%d"); @@ -132,8 +128,7 @@ int test_td_pd_src_e2(void) int offset; uint32_t voltage; - offset = HEADER_BYTE_OFFSET + - HEADER_BYTE_CNT + + offset = HEADER_BYTE_OFFSET + HEADER_BYTE_CNT + (i * PDO_BYTE_CNT); pdo = UINT32_FROM_BYTE_ARRAY_LE(data, offset); diff --git a/test/usb_tcpmv2_td_pd_src_e5.c b/test/usb_tcpmv2_td_pd_src_e5.c index eac1b93e8f..ef40ee75cf 100644 --- a/test/usb_tcpmv2_td_pd_src_e5.c +++ b/test/usb_tcpmv2_td_pd_src_e5.c @@ -1,4 +1,4 @@ -/* Copyright 2020 The Chromium OS Authors. All rights reserved. +/* Copyright 2020 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -71,12 +71,12 @@ int test_td_pd_src_e5(void) end_time += 6 * MSEC; while (get_time().val < end_time) { if (mock_tcpci_get_reg(TCPC_REG_TRANSMIT) == - TCPCI_MSG_TX_HARD_RESET) + TCPCI_MSG_TX_HARD_RESET) break; task_wait_event(1 * MSEC); } - TEST_EQ(mock_tcpci_get_reg(TCPC_REG_TRANSMIT), - TCPCI_MSG_TX_HARD_RESET, "%d"); + TEST_EQ(mock_tcpci_get_reg(TCPC_REG_TRANSMIT), TCPCI_MSG_TX_HARD_RESET, + "%d"); mock_set_alert(TCPC_REG_ALERT_TX_SUCCESS | TCPC_REG_ALERT_TX_FAILED); mock_tcpci_set_reg(TCPC_REG_TRANSMIT, 0); task_wait_event(1 * MSEC); diff --git a/test/usb_tcpmv2_td_pd_vndi3_e3.c b/test/usb_tcpmv2_td_pd_vndi3_e3.c index cbfc0d75e3..8157835328 100644 --- a/test/usb_tcpmv2_td_pd_vndi3_e3.c +++ b/test/usb_tcpmv2_td_pd_vndi3_e3.c @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -11,10 +11,8 @@ #include "usb_tcpmv2_compliance.h" #include "usb_tc_sm.h" -uint32_t vdo = VDO(USB_SID_PD, 1, - VDO_SVDM_VERS(VDM_VER20) | - CMD_DISCOVER_IDENT); - +uint32_t vdo = + VDO(USB_SID_PD, 1, VDO_SVDM_VERS(VDM_VER20) | CMD_DISCOVER_IDENT); /***************************************************************************** * TD.PD.VNDI3.E3.VDM Identity @@ -32,8 +30,8 @@ static int td_pd_vndi3_e3(enum pd_data_role data_role) /* * a) Run PROC.PD.E1 Bring-up according to the UUT role. */ - TEST_EQ(proc_pd_e1(data_role, INITIAL_AND_ALREADY_ATTACHED), - EC_SUCCESS, "%d"); + TEST_EQ(proc_pd_e1(data_role, INITIAL_AND_ALREADY_ATTACHED), EC_SUCCESS, + "%d"); /* * Make sure we are idle. Reject everything that is pending @@ -43,8 +41,7 @@ static int td_pd_vndi3_e3(enum pd_data_role data_role) /* * b) Tester executes a Discover Identity exchange */ - partner_send_msg(TCPCI_MSG_SOP, PD_DATA_VENDOR_DEF, - 1, 0, &vdo); + partner_send_msg(TCPCI_MSG_SOP, PD_DATA_VENDOR_DEF, 1, 0, &vdo); /* * c) If the UUT is not a cable and if Responds_To_Discov_SOP is set to diff --git a/test/usb_test/Makefile b/test/usb_test/Makefile index e18e4a7c3b..df21c7d331 100644 --- a/test/usb_test/Makefile +++ b/test/usb_test/Makefile @@ -1,4 +1,4 @@ -# Copyright 2015 The Chromium OS Authors. All rights reserved. +# Copyright 2015 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. diff --git a/test/usb_test/device_configuration.c b/test/usb_test/device_configuration.c index 69f889c2d3..06c71fefd9 100644 --- a/test/usb_test/device_configuration.c +++ b/test/usb_test/device_configuration.c @@ -1,5 +1,5 @@ /* - * Copyright 2016 The Chromium OS Authors. All rights reserved. + * Copyright 2016 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -13,8 +13,8 @@ #include <string.h> /* Options */ -static uint16_t vid = 0x18d1; /* Google */ -static uint16_t pid = 0x5014; /* Cr50 */ +static uint16_t vid = 0x18d1; /* Google */ +static uint16_t pid = 0x5014; /* Cr50 */ static char *progname; @@ -25,7 +25,8 @@ static void usage(int errs) "Set/Get the USB Device Configuration value\n" "\n" "The default vid:pid is %04x:%04x\n" - "\n", progname, vid, pid); + "\n", + progname, vid, pid); exit(!!errs); } @@ -49,14 +50,13 @@ static void stupid_usb(const char *format, ...) exit(1); } - int main(int argc, char *argv[]) { int r = 1; int errorcnt = 0; int do_set = 0; uint16_t setval = 0; - uint8_t buf[80]; /* Arbitrary size */ + uint8_t buf[80]; /* Arbitrary size */ int i; progname = strrchr(argv[0], '/'); @@ -65,13 +65,13 @@ int main(int argc, char *argv[]) else progname = argv[0]; - opterr = 0; /* quiet, you */ + opterr = 0; /* quiet, you */ while ((i = getopt(argc, argv, "")) != -1) { switch (i) { case 'h': usage(errorcnt); break; - case 0: /* auto-handled option */ + case 0: /* auto-handled option */ break; case '?': if (optopt) @@ -111,8 +111,8 @@ int main(int argc, char *argv[]) r = libusb_init(NULL); if (r) { - printf("libusb_init() returned 0x%x: %s\n", - r, libusb_error_name(r)); + printf("libusb_init() returned 0x%x: %s\n", r, + libusb_error_name(r)); return 1; } @@ -122,41 +122,36 @@ int main(int argc, char *argv[]) stupid_usb("Can't open device %04x:%04x\n", vid, pid); } - /* Set config*/ if (do_set) { printf("SetCfg %d\n", setval); - r = libusb_control_transfer( - devh, - 0x00, /* bmRequestType */ - 0x09, /* bRequest */ - setval, /* wValue */ - 0x0000, /* wIndex */ - NULL, /* data */ - 0x0000, /* wLength */ - 1000); /* timeout (ms) */ + r = libusb_control_transfer(devh, 0x00, /* bmRequestType */ + 0x09, /* bRequest */ + setval, /* wValue */ + 0x0000, /* wIndex */ + NULL, /* data */ + 0x0000, /* wLength */ + 1000); /* timeout (ms) */ if (r < 0) - printf("transfer returned 0x%x %s\n", - r, libusb_error_name(r)); + printf("transfer returned 0x%x %s\n", r, + libusb_error_name(r)); } /* Get config */ memset(buf, 0, sizeof(buf)); - r = libusb_control_transfer( - devh, - 0x80, /* bmRequestType */ - 0x08, /* bRequest */ - 0x0000, /* wValue */ - 0x0000, /* wIndex */ - buf, /* data */ - 0x0001, /* wLength */ - 1000); /* timeout (ms) */ + r = libusb_control_transfer(devh, 0x80, /* bmRequestType */ + 0x08, /* bRequest */ + 0x0000, /* wValue */ + 0x0000, /* wIndex */ + buf, /* data */ + 0x0001, /* wLength */ + 1000); /* timeout (ms) */ if (r <= 0) - stupid_usb("GetCfg transfer() returned 0x%x %s\n", - r, libusb_error_name(r)); + stupid_usb("GetCfg transfer() returned 0x%x %s\n", r, + libusb_error_name(r)); printf("GetCfg returned %d bytes:", r); for (i = 0; i < r; i++) diff --git a/test/usb_typec_ctvpd.c b/test/usb_typec_ctvpd.c index 583c529fca..71d543cec0 100644 --- a/test/usb_typec_ctvpd.c +++ b/test/usb_typec_ctvpd.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -18,12 +18,12 @@ #include "usb_sm_checks.h" #include "vpd_api.h" -#define PORT0 0 +#define PORT0 0 -enum cc_type {CC1, CC2}; -enum vbus_type {VBUS_0 = 0, VBUS_5 = 5000}; -enum vconn_type {VCONN_0 = 0, VCONN_3 = 3000, VCONN_5 = 5000}; -enum snk_con_voltage_type {SRC_CON_DEF, SRC_CON_1_5, SRC_CON_3_0}; +enum cc_type { CC1, CC2 }; +enum vbus_type { VBUS_0 = 0, VBUS_5 = 5000 }; +enum vconn_type { VCONN_0 = 0, VCONN_3 = 3000, VCONN_5 = 5000 }; +enum snk_con_voltage_type { SRC_CON_DEF, SRC_CON_1_5, SRC_CON_3_0 }; /* * These enum definitions are declared in usb_tc_*_sm and are private to that @@ -92,15 +92,15 @@ static int ct_connect_sink(enum cc_type cc, enum snk_con_voltage_type v) switch (v) { case SRC_CON_DEF: ret = (cc) ? mock_set_cc2_rp3a0_rd_l(PD_SRC_DEF_RD_THRESH_MV) : - mock_set_cc1_rp3a0_rd_l(PD_SRC_DEF_RD_THRESH_MV); + mock_set_cc1_rp3a0_rd_l(PD_SRC_DEF_RD_THRESH_MV); break; case SRC_CON_1_5: ret = (cc) ? mock_set_cc2_rp3a0_rd_l(PD_SRC_1_5_RD_THRESH_MV) : - mock_set_cc1_rp3a0_rd_l(PD_SRC_1_5_RD_THRESH_MV); + mock_set_cc1_rp3a0_rd_l(PD_SRC_1_5_RD_THRESH_MV); break; case SRC_CON_3_0: ret = (cc) ? mock_set_cc2_rp3a0_rd_l(PD_SRC_3_0_RD_THRESH_MV) : - mock_set_cc1_rp3a0_rd_l(PD_SRC_3_0_RD_THRESH_MV); + mock_set_cc1_rp3a0_rd_l(PD_SRC_3_0_RD_THRESH_MV); break; default: ret = 0; @@ -124,7 +124,7 @@ static int ct_connect_source(enum cc_type cc, enum vbus_type vbus) { mock_set_ct_vbus(vbus); return (cc) ? mock_set_cc2_rpusb_odh(PD_SNK_VA_MV) : - mock_set_cc1_rpusb_odh(PD_SNK_VA_MV); + mock_set_cc1_rpusb_odh(PD_SNK_VA_MV); } static int ct_disconnect_source(void) @@ -297,14 +297,15 @@ void inc_rx_id(int port) static int verify_goodcrc(int port, int role, int id) { return pd_test_tx_msg_verify_sop_prime(port) && - pd_test_tx_msg_verify_short(port, PD_HEADER(PD_CTRL_GOOD_CRC, - role, role, id, 0, 0, 0)) && - pd_test_tx_msg_verify_crc(port) && - pd_test_tx_msg_verify_eop(port); + pd_test_tx_msg_verify_short(port, + PD_HEADER(PD_CTRL_GOOD_CRC, role, + role, id, 0, 0, 0)) && + pd_test_tx_msg_verify_crc(port) && + pd_test_tx_msg_verify_eop(port); } static void simulate_rx_msg(int port, uint16_t header, int cnt, - const uint32_t *data) + const uint32_t *data) { int i; @@ -330,20 +331,20 @@ static void simulate_rx_msg(int port, uint16_t header, int cnt, static void simulate_goodcrc(int port, int role, int id) { - simulate_rx_msg(port, PD_HEADER(PD_CTRL_GOOD_CRC, role, role, id, 0, - pd_port[port].rev, 0), 0, NULL); + simulate_rx_msg(port, + PD_HEADER(PD_CTRL_GOOD_CRC, role, role, id, 0, + pd_port[port].rev, 0), + 0, NULL); } static void simulate_discovery_identity(int port) { - uint16_t header = PD_HEADER(PD_DATA_VENDOR_DEF, PD_ROLE_SOURCE, - 1, pd_port[port].msg_rx_id, - 1, pd_port[port].rev, 0); - uint32_t msg = VDO(USB_SID_PD, - 1, /* Structured VDM */ - VDO_SVDM_VERS(1) | - VDO_CMDT(CMDT_INIT) | - CMD_DISCOVER_IDENT); + uint16_t header = PD_HEADER(PD_DATA_VENDOR_DEF, PD_ROLE_SOURCE, 1, + pd_port[port].msg_rx_id, 1, + pd_port[port].rev, 0); + uint32_t msg = VDO(USB_SID_PD, 1, /* Structured VDM */ + VDO_SVDM_VERS(1) | VDO_CMDT(CMDT_INIT) | + CMD_DISCOVER_IDENT); simulate_rx_msg(port, header, 1, (const uint32_t *)&msg); } @@ -538,35 +539,27 @@ static int test_vpd_host_src_detection_vconn(void) static int test_vpd_host_src_detection_message_reception(void) { int port = PORT0; - uint32_t expected_vdm_header = VDO(USB_VID_GOOGLE, - 1, /* Structured VDM */ - VDO_SVDM_VERS(1) | - VDO_CMDT(CMDT_RSP_ACK) | - CMD_DISCOVER_IDENT); - uint32_t expected_vdo_id_header = VDO_IDH( - 0, /* Not a USB Host */ + uint32_t expected_vdm_header = VDO( + USB_VID_GOOGLE, 1, /* Structured VDM */ + VDO_SVDM_VERS(1) | VDO_CMDT(CMDT_RSP_ACK) | CMD_DISCOVER_IDENT); + uint32_t expected_vdo_id_header = + VDO_IDH(0, /* Not a USB Host */ 1, /* Capable of being enumerated as USB Device */ - IDH_PTYPE_VPD, - 0, /* Modal Operation Not Supported */ + IDH_PTYPE_VPD, 0, /* Modal Operation Not Supported */ USB_VID_GOOGLE); uint32_t expected_vdo_cert = 0; - uint32_t expected_vdo_product = VDO_PRODUCT( - CONFIG_USB_PID, - USB_BCD_DEVICE); + uint32_t expected_vdo_product = + VDO_PRODUCT(CONFIG_USB_PID, USB_BCD_DEVICE); uint32_t expected_vdo_vpd = VDO_VPD( - VPD_HW_VERSION, - VPD_FW_VERSION, - VPD_MAX_VBUS_20V, - IS_ENABLED(CONFIG_USB_CTVPD) ? VPD_CT_CURRENT - : 0, - IS_ENABLED(CONFIG_USB_CTVPD) ? VPD_VBUS_IMP( - VPD_VBUS_IMPEDANCE) - : 0, - IS_ENABLED(CONFIG_USB_CTVPD) ? VPD_GND_IMP( - VPD_GND_IMPEDANCE) - : 0, - IS_ENABLED(CONFIG_USB_CTVPD) ? VPD_CTS_SUPPORTED - : VPD_CTS_NOT_SUPPORTED); + VPD_HW_VERSION, VPD_FW_VERSION, VPD_MAX_VBUS_20V, + IS_ENABLED(CONFIG_USB_CTVPD) ? VPD_CT_CURRENT : 0, + IS_ENABLED(CONFIG_USB_CTVPD) ? + VPD_VBUS_IMP(VPD_VBUS_IMPEDANCE) : + 0, + IS_ENABLED(CONFIG_USB_CTVPD) ? VPD_GND_IMP(VPD_GND_IMPEDANCE) : + 0, + IS_ENABLED(CONFIG_USB_CTVPD) ? VPD_CTS_SUPPORTED : + VPD_CTS_NOT_SUPPORTED); mock_set_vconn(VCONN_0); host_disconnect_source(); @@ -608,8 +601,8 @@ static int test_vpd_host_src_detection_message_reception(void) simulate_discovery_identity(port); task_wait_event(30 * MSEC); - TEST_ASSERT(verify_goodcrc(port, - PD_ROLE_SINK, pd_port[port].msg_rx_id)); + TEST_ASSERT( + verify_goodcrc(port, PD_ROLE_SINK, pd_port[port].msg_rx_id)); task_wake(PD_PORT_TO_TASK_ID(port)); task_wait_event(30 * MSEC); @@ -617,9 +610,10 @@ static int test_vpd_host_src_detection_message_reception(void) /* Test Discover Identity Ack */ TEST_ASSERT(pd_test_tx_msg_verify_sop_prime(port)); - TEST_ASSERT(pd_test_tx_msg_verify_short(port, - PD_HEADER(PD_DATA_VENDOR_DEF, PD_PLUG_FROM_CABLE, 0, - pd_port[port].msg_tx_id, 5, pd_port[port].rev, 0))); + TEST_ASSERT(pd_test_tx_msg_verify_short( + port, + PD_HEADER(PD_DATA_VENDOR_DEF, PD_PLUG_FROM_CABLE, 0, + pd_port[port].msg_tx_id, 5, pd_port[port].rev, 0))); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_vdm_header)); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_vdo_id_header)); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_vdo_cert)); @@ -648,7 +642,6 @@ static int test_vpd_host_src_detection_message_reception(void) TEST_EQ(get_state_tc(port), TC_UNATTACHED_SNK, "%d"); - return EC_SUCCESS; } @@ -992,35 +985,27 @@ static int test_ctvpd_behavior_case3(void) static int test_ctvpd_behavior_case4(void) { int port = PORT0; - uint32_t expected_vdm_header = VDO(USB_VID_GOOGLE, - 1, /* Structured VDM */ - VDO_SVDM_VERS(1) | - VDO_CMDT(CMDT_RSP_ACK) | - CMD_DISCOVER_IDENT); - uint32_t expected_vdo_id_header = VDO_IDH( - 0, /* Not a USB Host */ + uint32_t expected_vdm_header = VDO( + USB_VID_GOOGLE, 1, /* Structured VDM */ + VDO_SVDM_VERS(1) | VDO_CMDT(CMDT_RSP_ACK) | CMD_DISCOVER_IDENT); + uint32_t expected_vdo_id_header = + VDO_IDH(0, /* Not a USB Host */ 1, /* Capable of being enumerated as USB Device */ - IDH_PTYPE_VPD, - 0, /* Modal Operation Not Supported */ + IDH_PTYPE_VPD, 0, /* Modal Operation Not Supported */ USB_VID_GOOGLE); uint32_t expected_vdo_cert = 0; - uint32_t expected_vdo_product = VDO_PRODUCT( - CONFIG_USB_PID, - USB_BCD_DEVICE); + uint32_t expected_vdo_product = + VDO_PRODUCT(CONFIG_USB_PID, USB_BCD_DEVICE); uint32_t expected_vdo_vpd = VDO_VPD( - VPD_HW_VERSION, - VPD_FW_VERSION, - VPD_MAX_VBUS_20V, - IS_ENABLED(CONFIG_USB_CTVPD) ? VPD_CT_CURRENT - : 0, - IS_ENABLED(CONFIG_USB_CTVPD) ? VPD_VBUS_IMP( - VPD_VBUS_IMPEDANCE) - : 0, - IS_ENABLED(CONFIG_USB_CTVPD) ? VPD_GND_IMP( - VPD_GND_IMPEDANCE) - : 0, - IS_ENABLED(CONFIG_USB_CTVPD) ? VPD_CTS_SUPPORTED - : VPD_CTS_NOT_SUPPORTED); + VPD_HW_VERSION, VPD_FW_VERSION, VPD_MAX_VBUS_20V, + IS_ENABLED(CONFIG_USB_CTVPD) ? VPD_CT_CURRENT : 0, + IS_ENABLED(CONFIG_USB_CTVPD) ? + VPD_VBUS_IMP(VPD_VBUS_IMPEDANCE) : + 0, + IS_ENABLED(CONFIG_USB_CTVPD) ? VPD_GND_IMP(VPD_GND_IMPEDANCE) : + 0, + IS_ENABLED(CONFIG_USB_CTVPD) ? VPD_CTS_SUPPORTED : + VPD_CTS_NOT_SUPPORTED); init_port(port); mock_set_vconn(VCONN_0); @@ -1107,8 +1092,8 @@ static int test_ctvpd_behavior_case4(void) simulate_discovery_identity(port); task_wait_event(40 * MSEC); - TEST_ASSERT(verify_goodcrc(port, - PD_ROLE_SINK, pd_port[port].msg_rx_id)); + TEST_ASSERT( + verify_goodcrc(port, PD_ROLE_SINK, pd_port[port].msg_rx_id)); task_wake(PD_PORT_TO_TASK_ID(port)); task_wait_event(40 * MSEC); @@ -1116,9 +1101,10 @@ static int test_ctvpd_behavior_case4(void) /* Test Discover Identity Ack */ TEST_ASSERT(pd_test_tx_msg_verify_sop_prime(port)); - TEST_ASSERT(pd_test_tx_msg_verify_short(port, - PD_HEADER(PD_DATA_VENDOR_DEF, PD_PLUG_FROM_CABLE, 0, - pd_port[port].msg_tx_id, 5, pd_port[port].rev, 0))); + TEST_ASSERT(pd_test_tx_msg_verify_short( + port, + PD_HEADER(PD_DATA_VENDOR_DEF, PD_PLUG_FROM_CABLE, 0, + pd_port[port].msg_tx_id, 5, pd_port[port].rev, 0))); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_vdm_header)); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_vdo_id_header)); TEST_ASSERT(pd_test_tx_msg_verify_word(port, expected_vdo_cert)); @@ -1268,8 +1254,8 @@ static int test_ctvpd_behavior_case5(void) * e. CTVPD connects VBUS from the Charge-Through side to the Host * side */ - wait_for_state_change(port, PD_T_TRY_CC_DEBOUNCE + - PD_T_DRP_TRY + 40 * MSEC); + wait_for_state_change(port, + PD_T_TRY_CC_DEBOUNCE + PD_T_DRP_TRY + 40 * MSEC); TEST_ASSERT(get_state_tc(port) == TC_TRY_WAIT_SRC); TEST_ASSERT(check_host_rpusb()); @@ -1502,7 +1488,7 @@ static int test_ctvpd_behavior_case6(void) } #endif -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/usb_typec_ctvpd.tasklist b/test/usb_typec_ctvpd.tasklist index eb41326e3e..5c7f804157 100644 --- a/test/usb_typec_ctvpd.tasklist +++ b/test/usb_typec_ctvpd.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_typec_drp_acc_trysrc.c b/test/usb_typec_drp_acc_trysrc.c index 106370db72..28da84e228 100644 --- a/test/usb_typec_drp_acc_trysrc.c +++ b/test/usb_typec_drp_acc_trysrc.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -34,11 +34,12 @@ const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { }, }; -const struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { - { - .driver = &mock_usb_mux_driver, - } -}; +const struct usb_mux_chain usb_muxes[CONFIG_USB_PD_PORT_MAX_COUNT] = { { + .mux = + &(const struct usb_mux){ + .driver = &mock_usb_mux_driver, + }, +} }; void charge_manager_set_ceil(int port, enum ceil_requestor requestor, int ceil) { @@ -732,8 +733,8 @@ __maybe_unused static int test_auto_toggle_delay_early_connect(void) /* Ensure the auto toggle enable was never called */ task_wait_event(SECOND); - TEST_EQ(mock_tcpc.first_call_to_enable_auto_toggle, - TIMER_DISABLED, "%" PRIu64); + TEST_EQ(mock_tcpc.first_call_to_enable_auto_toggle, TIMER_DISABLED, + "%" PRIu64); /* Ensure that the first CC set call was to Rd. */ TEST_GT(cc_pull_count, 0, "%d"); @@ -816,7 +817,7 @@ void before_test(void) mock_tcpc.should_print_call = true; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/usb_typec_drp_acc_trysrc.mocklist b/test/usb_typec_drp_acc_trysrc.mocklist index 71c2e2cee9..cbff5e73eb 100644 --- a/test/usb_typec_drp_acc_trysrc.mocklist +++ b/test/usb_typec_drp_acc_trysrc.mocklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/usb_typec_drp_acc_trysrc.tasklist b/test/usb_typec_drp_acc_trysrc.tasklist index eb41326e3e..5c7f804157 100644 --- a/test/usb_typec_drp_acc_trysrc.tasklist +++ b/test/usb_typec_drp_acc_trysrc.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/utils.c b/test/utils.c index 3fc70cdc75..fccfee0923 100644 --- a/test/utils.c +++ b/test/utils.c @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -14,171 +14,14 @@ #include "util.h" #include "watchdog.h" -static int test_memmove(void) -{ - int i; - timestamp_t t0, t1, t2, t3; - char *buf; - const int buf_size = 1000; - const int len = 400; - const int iteration = 1000; - - TEST_ASSERT(shared_mem_acquire(buf_size, &buf) == EC_SUCCESS); - - for (i = 0; i < len; ++i) - buf[i] = i & 0x7f; - for (i = len; i < buf_size; ++i) - buf[i] = 0; - - t0 = get_time(); - for (i = 0; i < iteration; ++i) - memmove(buf + 101, buf, len); /* unaligned */ - t1 = get_time(); - TEST_ASSERT_ARRAY_EQ(buf + 101, buf, len); - ccprintf(" (speed gain: %" PRId64 " ->", t1.val-t0.val); - - t2 = get_time(); - for (i = 0; i < iteration; ++i) - memmove(buf + 100, buf, len); /* aligned */ - t3 = get_time(); - ccprintf(" %" PRId64 " us) ", t3.val-t2.val); - TEST_ASSERT_ARRAY_EQ(buf + 100, buf, len); - - if (!IS_ENABLED(EMU_BUILD)) - TEST_ASSERT((t1.val - t0.val) > (t3.val - t2.val)); - - /* Test small moves */ - memmove(buf + 1, buf, 1); - TEST_ASSERT_ARRAY_EQ(buf + 1, buf, 1); - memmove(buf + 5, buf, 4); - memmove(buf + 1, buf, 4); - TEST_ASSERT_ARRAY_EQ(buf + 1, buf + 5, 4); - - shared_mem_release(buf); - return EC_SUCCESS; -} - -static int test_memcpy(void) -{ - int i; - timestamp_t t0, t1, t2, t3; - char *buf; - const int buf_size = 1000; - const int len = 400; - const int dest_offset = 500; - const int iteration = 1000; - - TEST_ASSERT(shared_mem_acquire(buf_size, &buf) == EC_SUCCESS); - - for (i = 0; i < len; ++i) - buf[i] = i & 0x7f; - for (i = len; i < buf_size; ++i) - buf[i] = 0; - - t0 = get_time(); - for (i = 0; i < iteration; ++i) - memcpy(buf + dest_offset + 1, buf, len); /* unaligned */ - t1 = get_time(); - TEST_ASSERT_ARRAY_EQ(buf + dest_offset + 1, buf, len); - ccprintf(" (speed gain: %" PRId64 " ->", t1.val-t0.val); - - t2 = get_time(); - for (i = 0; i < iteration; ++i) - memcpy(buf + dest_offset, buf, len); /* aligned */ - t3 = get_time(); - ccprintf(" %" PRId64 " us) ", t3.val-t2.val); - TEST_ASSERT_ARRAY_EQ(buf + dest_offset, buf, len); - - if (!IS_ENABLED(EMU_BUILD)) - TEST_ASSERT((t1.val - t0.val) > (t3.val - t2.val)); - - memcpy(buf + dest_offset + 1, buf + 1, len - 1); - TEST_ASSERT_ARRAY_EQ(buf + dest_offset + 1, buf + 1, len - 1); - - /* Test small copies */ - memcpy(buf + dest_offset, buf, 1); - TEST_ASSERT_ARRAY_EQ(buf + dest_offset, buf, 1); - memcpy(buf + dest_offset, buf, 4); - TEST_ASSERT_ARRAY_EQ(buf + dest_offset, buf, 4); - memcpy(buf + dest_offset + 1, buf, 1); - TEST_ASSERT_ARRAY_EQ(buf + dest_offset + 1, buf, 1); - memcpy(buf + dest_offset + 1, buf, 4); - TEST_ASSERT_ARRAY_EQ(buf + dest_offset + 1, buf, 4); - - shared_mem_release(buf); - return EC_SUCCESS; -} - -/* Plain memset, used as a reference to measure speed gain */ -static void *dumb_memset(void *dest, int c, int len) -{ - char *d = (char *)dest; - while (len > 0) { - *(d++) = c; - len--; - } - return dest; -} - -static int test_memset(void) -{ - int i; - timestamp_t t0, t1, t2, t3; - char *buf; - const int buf_size = 1000; - const int len = 400; - const int iteration = 1000; - - TEST_ASSERT(shared_mem_acquire(buf_size, &buf) == EC_SUCCESS); - - t0 = get_time(); - for (i = 0; i < iteration; ++i) - dumb_memset(buf, 1, len); - t1 = get_time(); - TEST_ASSERT_MEMSET(buf, (char)1, len); - ccprintf(" (speed gain: %" PRId64 " ->", t1.val-t0.val); - - t2 = get_time(); - for (i = 0; i < iteration; ++i) - memset(buf, 1, len); - t3 = get_time(); - TEST_ASSERT_MEMSET(buf, (char)1, len); - ccprintf(" %" PRId64 " us) ", t3.val-t2.val); - - if (!IS_ENABLED(EMU_BUILD)) - TEST_ASSERT((t1.val - t0.val) > (t3.val - t2.val)); - - memset(buf, 128, len); - TEST_ASSERT_MEMSET(buf, (char)128, len); - - memset(buf, -2, len); - TEST_ASSERT_MEMSET(buf, (char)-2, len); - - memset(buf + 1, 1, len - 2); - TEST_ASSERT_MEMSET(buf + 1, (char)1, len - 2); - - shared_mem_release(buf); - return EC_SUCCESS; -} - -static int test_memchr(void) -{ - char *buf = "1234"; - - TEST_ASSERT(memchr("123567890", '4', 8) == NULL); - TEST_ASSERT(memchr("123", '3', 2) == NULL); - TEST_ASSERT(memchr(buf, '3', 4) == buf + 2); - TEST_ASSERT(memchr(buf, '4', 4) == buf + 3); - return EC_SUCCESS; -} - static int test_uint64divmod_0(void) { uint64_t n = 8567106442584750ULL; int d = 54870071; int r = uint64divmod(&n, d); - TEST_CHECK(r == 5991285 && n == 156134415ULL); + TEST_ASSERT(r == 5991285 && n == 156134415ULL); + return EC_SUCCESS; } static int test_uint64divmod_1(void) @@ -187,7 +30,8 @@ static int test_uint64divmod_1(void) int d = 2; int r = uint64divmod(&n, d); - TEST_CHECK(r == 0 && n == 4283553221292375ULL); + TEST_ASSERT(r == 0 && n == 4283553221292375ULL); + return EC_SUCCESS; } static int test_uint64divmod_2(void) @@ -196,7 +40,8 @@ static int test_uint64divmod_2(void) int d = 0; int r = uint64divmod(&n, d); - TEST_CHECK(r == 0 && n == 0ULL); + TEST_ASSERT(r == 0 && n == 0ULL); + return EC_SUCCESS; } static int test_get_next_bit(void) @@ -361,25 +206,24 @@ static int test_mula32(void) } t1 = get_time(); - ccprintf("After %d iterations, r=%08x%08x, r2=%08x%08x (time: %d)\n", - i, (uint32_t)(r >> 32), (uint32_t)r, - (uint32_t)(r2 >> 32), (uint32_t)r2, t1.le.lo-t0.le.lo); - TEST_ASSERT(r == 0x9df59b9fb0ab9d96L); + ccprintf("After %d iterations, r=%08x%08x, r2=%08x%08x (time: %d)\n", i, + (uint32_t)(r >> 32), (uint32_t)r, (uint32_t)(r2 >> 32), + (uint32_t)r2, t1.le.lo - t0.le.lo); + TEST_ASSERT(r == 0x9df59b9fb0ab9d96L); TEST_ASSERT(r2 == 0x9df59b9fb0beabd6L); /* well okay then */ return EC_SUCCESS; } -#define SWAP_TEST_HARNESS(t, x, y) \ - do { \ - t a = x, b = y; \ - swap(a, b); \ +#define SWAP_TEST_HARNESS(t, x, y) \ + do { \ + t a = x, b = y; \ + swap(a, b); \ TEST_ASSERT(a == y); \ TEST_ASSERT(b == x); \ } while (0) - static int test_swap(void) { SWAP_TEST_HARNESS(uint8_t, UINT8_MAX, 0); @@ -455,15 +299,15 @@ test_static int test_alignment_log2(void) test_static int test_binary_first_base3_from_bits(void) { - int n0[] = {0, 0, 0}; /* LSB first */ - int n7[] = {1, 1, 1}; - int n8[] = {2, 0, 0}; - int n9[] = {2, 1, 0}; - int n10[] = {0, 2, 0}; - int n11[] = {1, 2, 0}; - int n18[] = {0, 0, 2}; - int n26[] = {2, 2, 2}; - int n38[] = {1, 2, 0, 1}; + int n0[] = { 0, 0, 0 }; /* LSB first */ + int n7[] = { 1, 1, 1 }; + int n8[] = { 2, 0, 0 }; + int n9[] = { 2, 1, 0 }; + int n10[] = { 0, 2, 0 }; + int n11[] = { 1, 2, 0 }; + int n18[] = { 0, 0, 2 }; + int n26[] = { 2, 2, 2 }; + int n38[] = { 1, 2, 0, 1 }; TEST_EQ(binary_first_base3_from_bits(n0, ARRAY_SIZE(n0)), 0, "%d"); TEST_EQ(binary_first_base3_from_bits(n7, ARRAY_SIZE(n7)), 7, "%d"); @@ -477,14 +321,68 @@ test_static int test_binary_first_base3_from_bits(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +test_static int test_parse_bool(void) +{ + int bool_val; + int rv; + + /* False cases. */ + + bool_val = 1; + rv = parse_bool("off", &bool_val); + TEST_EQ(rv, 1, "%d"); + TEST_EQ(bool_val, 0, "%d"); + + bool_val = 1; + rv = parse_bool("dis", &bool_val); + TEST_EQ(rv, 1, "%d"); + TEST_EQ(bool_val, 0, "%d"); + + bool_val = 1; + rv = parse_bool("f", &bool_val); + TEST_EQ(rv, 1, "%d"); + TEST_EQ(bool_val, 0, "%d"); + + bool_val = 1; + rv = parse_bool("n", &bool_val); + TEST_EQ(rv, 1, "%d"); + TEST_EQ(bool_val, 0, "%d"); + + /* True cases. */ + + bool_val = 0; + rv = parse_bool("on", &bool_val); + TEST_EQ(rv, 1, "%d"); + TEST_EQ(bool_val, 1, "%d"); + + bool_val = 0; + rv = parse_bool("ena", &bool_val); + TEST_EQ(rv, 1, "%d"); + TEST_EQ(bool_val, 1, "%d"); + + bool_val = 0; + rv = parse_bool("t", &bool_val); + TEST_EQ(rv, 1, "%d"); + TEST_EQ(bool_val, 1, "%d"); + + bool_val = 0; + rv = parse_bool("y", &bool_val); + TEST_EQ(rv, 1, "%d"); + TEST_EQ(bool_val, 1, "%d"); + + /* Error case. */ + bool_val = -1; + rv = parse_bool("a", &bool_val); + TEST_EQ(rv, 0, "%d"); + TEST_EQ(bool_val, -1, "%d"); + + return EC_SUCCESS; +} + +void run_test(int argc, const char **argv) { test_reset(); - RUN_TEST(test_memmove); - RUN_TEST(test_memcpy); - RUN_TEST(test_memset); - RUN_TEST(test_memchr); RUN_TEST(test_uint64divmod_0); RUN_TEST(test_uint64divmod_1); RUN_TEST(test_uint64divmod_2); @@ -499,6 +397,7 @@ void run_test(int argc, char **argv) RUN_TEST(test_safe_memcmp); RUN_TEST(test_alignment_log2); RUN_TEST(test_binary_first_base3_from_bits); + RUN_TEST(test_parse_bool); test_print_result(); } diff --git a/test/utils.tasklist b/test/utils.tasklist index da0ab6211a..100cb6b5bd 100644 --- a/test/utils.tasklist +++ b/test/utils.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2013 The Chromium OS Authors. All rights reserved. +/* Copyright 2013 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/utils_str.c b/test/utils_str.c index f184abffa6..36ad63989e 100644 --- a/test/utils_str.c +++ b/test/utils_str.c @@ -1,4 +1,4 @@ -/* Copyright 2017 The Chromium OS Authors. All rights reserved. +/* Copyright 2017 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -13,34 +13,6 @@ #include "timer.h" #include "util.h" -static int test_isalpha(void) -{ - TEST_CHECK(isalpha('a') && isalpha('z') && isalpha('A') && - isalpha('Z') && !isalpha('0') && !isalpha('~') && - !isalpha(' ') && !isalpha('\0') && !isalpha('\n')); -} - -static int test_isprint(void) -{ - TEST_CHECK(isprint('a') && isprint('z') && isprint('A') && - isprint('Z') && isprint('0') && isprint('~') && - isprint(' ') && !isprint('\0') && !isprint('\n')); -} - -static int test_strstr(void) -{ - const char s1[] = "abcde"; - - TEST_ASSERT(strstr(s1, "ab") == s1); - TEST_ASSERT(strstr(s1, "") == NULL); - TEST_ASSERT(strstr("", "ab") == NULL); - TEST_ASSERT(strstr("", "x") == NULL); - TEST_ASSERT(strstr(s1, "de") == &s1[3]); - TEST_ASSERT(strstr(s1, "def") == NULL); - - return EC_SUCCESS; -} - static int test_strtoi(void) { char *e; @@ -99,64 +71,6 @@ static int test_strtoi(void) return EC_SUCCESS; } -static int test_strtoull(void) -{ - char *e; - - TEST_ASSERT(strtoull("10", &e, 0) == 10); - TEST_ASSERT(e && (*e == '\0')); - TEST_ASSERT(strtoull("010", &e, 0) == 8); - TEST_ASSERT(e && (*e == '\0')); - TEST_ASSERT(strtoull("+010", &e, 0) == 8); - TEST_ASSERT(e && (*e == '\0')); - TEST_ASSERT(strtoull("-010", &e, 0) == 0); - TEST_ASSERT(e && (*e == '-')); - TEST_ASSERT(strtoull("0x1f z", &e, 0) == 31); - TEST_ASSERT(e && (*e == ' ')); - TEST_ASSERT(strtoull("0X1f z", &e, 0) == 31); - TEST_ASSERT(e && (*e == ' ')); - TEST_ASSERT(strtoull("10a", &e, 16) == 266); - TEST_ASSERT(e && (*e == '\0')); - TEST_ASSERT(strtoull("0x02C", &e, 16) == 44); - TEST_ASSERT(e && (*e == '\0')); - TEST_ASSERT(strtoull("+0x02C", &e, 16) == 44); - TEST_ASSERT(e && (*e == '\0')); - TEST_ASSERT(strtoull("-0x02C", &e, 16) == 0); - TEST_ASSERT(e && (*e == '-')); - TEST_ASSERT(strtoull("0x02C", &e, 0) == 44); - TEST_ASSERT(e && (*e == '\0')); - TEST_ASSERT(strtoull("+0x02C", &e, 0) == 44); - TEST_ASSERT(e && (*e == '\0')); - TEST_ASSERT(strtoull("-0x02C", &e, 0) == 0); - TEST_ASSERT(e && (*e == '-')); - TEST_ASSERT(strtoull("0X02C", &e, 16) == 44); - TEST_ASSERT(e && (*e == '\0')); - TEST_ASSERT(strtoull("+0X02C", &e, 16) == 44); - TEST_ASSERT(e && (*e == '\0')); - TEST_ASSERT(strtoull("-0X02C", &e, 16) == 0); - TEST_ASSERT(e && (*e == '-')); - TEST_ASSERT(strtoull("0X02C", &e, 0) == 44); - TEST_ASSERT(e && (*e == '\0')); - TEST_ASSERT(strtoull("+0X02C", &e, 0) == 44); - TEST_ASSERT(e && (*e == '\0')); - TEST_ASSERT(strtoull("-0X02C", &e, 0) == 0); - TEST_ASSERT(e && (*e == '-')); - TEST_ASSERT(strtoull(" -12", &e, 0) == 0); - TEST_ASSERT(e && (*e == '-')); - TEST_ASSERT(strtoull("!", &e, 0) == 0); - TEST_ASSERT(e && (*e == '!')); - TEST_ASSERT(strtoull("+!", &e, 0) == 0); - TEST_ASSERT(e && (*e == '!')); - TEST_ASSERT(strtoull("+0!", &e, 0) == 0); - TEST_ASSERT(e && (*e == '!')); - TEST_ASSERT(strtoull("+0x!", &e, 0) == 0); - TEST_ASSERT(e && (*e == '!')); - TEST_ASSERT(strtoull("+0X!", &e, 0) == 0); - TEST_ASSERT(e && (*e == '!')); - - return EC_SUCCESS; -} - static int test_parse_bool(void) { int v; @@ -190,123 +104,13 @@ static int test_strzcpy(void) return EC_SUCCESS; } -static int test_strncpy(void) -{ - char dest[10]; - - strncpy(dest, "test", 10); - TEST_ASSERT_ARRAY_EQ("test", dest, 5); - strncpy(dest, "12345", 6); - TEST_ASSERT_ARRAY_EQ("12345", dest, 6); - strncpy(dest, "testtesttest", 10); - TEST_ASSERT_ARRAY_EQ("testtestte", dest, 10); - - return EC_SUCCESS; -} - -static int test_strncmp(void) -{ - TEST_ASSERT(strncmp("123", "123", 8) == 0); - TEST_ASSERT(strncmp("789", "456", 8) > 0); - TEST_ASSERT(strncmp("abc", "abd", 4) < 0); - TEST_ASSERT(strncmp("abc", "abd", 2) == 0); - return EC_SUCCESS; -} - -static int test_strlen(void) -{ - TEST_CHECK(strlen("this is a string") == 16); -} - -static int test_strnlen(void) -{ - TEST_ASSERT(strnlen("this is a string", 17) == 16); - TEST_ASSERT(strnlen("this is a string", 16) == 16); - TEST_ASSERT(strnlen("this is a string", 5) == 5); - - return EC_SUCCESS; -} - -static int test_strcasecmp(void) -{ - TEST_CHECK((strcasecmp("test string", "TEST strIng") == 0) && - (strcasecmp("test123!@#", "TesT123!@#") == 0) && - (strcasecmp("lower", "UPPER") != 0)); -} - -static int test_strncasecmp(void) -{ - TEST_CHECK((strncasecmp("test string", "TEST str", 4) == 0) && - (strncasecmp("test string", "TEST str", 8) == 0) && - (strncasecmp("test123!@#", "TesT321!@#", 5) != 0) && - (strncasecmp("test123!@#", "TesT321!@#", 4) == 0) && - (strncasecmp("1test123!@#", "1TesT321!@#", 5) == 0) && - (strncasecmp("1test123", "teststr", 0) == 0)); -} - -static int test_atoi(void) -{ - TEST_CHECK((atoi(" 901") == 901) && - (atoi("-12c") == -12) && - (atoi(" 0 ") == 0) && - (atoi("\t111") == 111)); -} - -static int test_snprintf(void) -{ - char buffer[32]; - - TEST_CHECK(snprintf(buffer, sizeof(buffer), "%u", 1234) == 4); - TEST_CHECK(strncmp(buffer, "1234", sizeof(buffer))); -} - -static int test_strcspn(void) -{ - const char str1[] = "abc"; - const char str2[] = "This is a string\nwith newlines!"; - - TEST_EQ(strcspn(str1, "a"), (size_t)0, "%zu"); - TEST_EQ(strcspn(str1, "b"), (size_t)1, "%zu"); - TEST_EQ(strcspn(str1, "c"), (size_t)2, "%zu"); - TEST_EQ(strcspn(str1, "ccc"), (size_t)2, "%zu"); - TEST_EQ(strcspn(str1, "cba"), (size_t)0, "%zu"); - TEST_EQ(strcspn(str1, "cb"), (size_t)1, "%zu"); - TEST_EQ(strcspn(str1, "bc"), (size_t)1, "%zu"); - TEST_EQ(strcspn(str1, "cbc"), (size_t)1, "%zu"); - TEST_EQ(strcspn(str1, "z"), strlen(str1), "%zu"); - TEST_EQ(strcspn(str1, "xyz"), strlen(str1), "%zu"); - TEST_EQ(strcspn(str1, ""), strlen(str1), "%zu"); - - TEST_EQ(strcspn(str2, " "), (size_t)4, "%zu"); - TEST_EQ(strcspn(str2, "\n"), (size_t)16, "%zu"); - TEST_EQ(strcspn(str2, "\n "), (size_t)4, "%zu"); - TEST_EQ(strcspn(str2, "!"), strlen(str2) - 1, "%zu"); - TEST_EQ(strcspn(str2, "z"), strlen(str2), "%zu"); - TEST_EQ(strcspn(str2, "z!"), strlen(str2) - 1, "%zu"); - - return EC_SUCCESS; -} - -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); - RUN_TEST(test_isalpha); - RUN_TEST(test_isprint); - RUN_TEST(test_strstr); RUN_TEST(test_strtoi); - RUN_TEST(test_strtoull); RUN_TEST(test_parse_bool); RUN_TEST(test_strzcpy); - RUN_TEST(test_strncpy); - RUN_TEST(test_strncmp); - RUN_TEST(test_strlen); - RUN_TEST(test_strnlen); - RUN_TEST(test_strcasecmp); - RUN_TEST(test_strncasecmp); - RUN_TEST(test_atoi); - RUN_TEST(test_snprintf); - RUN_TEST(test_strcspn); test_print_result(); } diff --git a/test/utils_str.tasklist b/test/utils_str.tasklist index 7150f17cbd..6373a70ab1 100644 --- a/test/utils_str.tasklist +++ b/test/utils_str.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2017 The Chromium OS Authors. All rights reserved. +/* Copyright 2017 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/vboot.c b/test/vboot.c index 7dab08ac05..f75208de90 100644 --- a/test/vboot.c +++ b/test/vboot.c @@ -1,4 +1,4 @@ -/* Copyright 2017 The Chromium OS Authors. All rights reserved. +/* Copyright 2017 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -131,7 +131,7 @@ static int test_vboot(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { test_reset(); diff --git a/test/vboot.tasklist b/test/vboot.tasklist index 7150f17cbd..6373a70ab1 100644 --- a/test/vboot.tasklist +++ b/test/vboot.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2017 The Chromium OS Authors. All rights reserved. +/* Copyright 2017 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/version.c b/test/version.c index ad7571d5f6..9731863f29 100644 --- a/test/version.c +++ b/test/version.c @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. * @@ -139,7 +139,7 @@ static int test_image_unknown(void) return EC_SUCCESS; } -void run_test(int argc, char **argv) +void run_test(int argc, const char **argv) { RUN_TEST(test_version); RUN_TEST(test_fwid); diff --git a/test/version.tasklist b/test/version.tasklist index e54ea001bd..cd866d90e1 100644 --- a/test/version.tasklist +++ b/test/version.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2021 The Chromium OS Authors. All rights reserved. +/* Copyright 2021 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ diff --git a/test/vpd_api.c b/test/vpd_api.c index 65e86adb96..51a2e76cd6 100644 --- a/test/vpd_api.c +++ b/test/vpd_api.c @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -33,11 +33,11 @@ #endif #ifndef CC_RA -#define CC_RA(port, cc, sel) (cc < pd_src_rd_threshold[ct_cc_rp_value]) +#define CC_RA(port, cc, sel) (cc < pd_src_rd_threshold[ct_cc_rp_value]) #endif #define CC_RD(cc) ((cc >= PD_SRC_RD_THRESHOLD) && (cc < PD_SRC_VNC)) #ifndef CC_NC -#define CC_NC(port, cc, sel) (cc >= PD_SRC_VNC) +#define CC_NC(port, cc, sel) (cc >= PD_SRC_VNC) #endif /* @@ -54,7 +54,7 @@ #define PD_SNK_VA PD_SNK_VA_MV #endif -#define CC_RP(cc) (cc >= PD_SNK_VA) +#define CC_RP(cc) (cc >= PD_SNK_VA) /* Mock Board State */ static enum vpd_pwr mock_vconn_pwr_sel_odl; @@ -266,7 +266,7 @@ static int vpd_cc_voltage_to_status(int cc_volt, int cc_pull) return TYPEC_CC_VOLT_RA; else return TYPEC_CC_VOLT_RD; - /* If we have a pull-down, then we are sink, check for Rp. */ + /* If we have a pull-down, then we are sink, check for Rp. */ } else if (cc_pull == TYPEC_CC_RD || cc_pull == TYPEC_CC_RA_RD) { if (cc_volt >= TYPE_C_SRC_3000_THRESHOLD) return TYPEC_CC_VOLT_RP_3_0; diff --git a/test/vpd_api.h b/test/vpd_api.h index f848138172..62dab34377 100644 --- a/test/vpd_api.h +++ b/test/vpd_api.h @@ -1,4 +1,4 @@ -/* Copyright 2019 The Chromium OS Authors. All rights reserved. +/* Copyright 2019 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ @@ -16,39 +16,22 @@ * voltage (set by selecting the proper Rd resistor). Any voltage below * TYPE_C_SRC_DEFAULT_THRESHOLD will not be identified as a type C charger. */ -#define TYPE_C_SRC_DEFAULT_THRESHOLD 200 /* mV */ -#define TYPE_C_SRC_1500_THRESHOLD 660 /* mV */ -#define TYPE_C_SRC_3000_THRESHOLD 1230 /* mV */ +#define TYPE_C_SRC_DEFAULT_THRESHOLD 200 /* mV */ +#define TYPE_C_SRC_1500_THRESHOLD 660 /* mV */ +#define TYPE_C_SRC_3000_THRESHOLD 1230 /* mV */ +enum vpd_pin { PIN_ADC, PIN_CMP, PIN_GPO }; -enum vpd_pin { - PIN_ADC, - PIN_CMP, - PIN_GPO -}; - -enum vpd_gpo { - GPO_HZ, - GPO_HIGH, - GPO_LOW -}; +enum vpd_gpo { GPO_HZ, GPO_HIGH, GPO_LOW }; enum vpd_pwr { PWR_VCONN, PWR_VBUS, }; -enum vpd_cc { - CT_OPEN, - CT_CC1, - CT_CC2 -}; +enum vpd_cc { CT_OPEN, CT_CC1, CT_CC2 }; -enum vpd_billboard { - BB_NONE, - BB_SRC, - BB_SNK -}; +enum vpd_billboard { BB_NONE, BB_SRC, BB_SNK }; struct mock_pin { enum vpd_pin cfg; diff --git a/test/x25519.tasklist b/test/x25519.tasklist index 80072bb620..329f9a3d28 100644 --- a/test/x25519.tasklist +++ b/test/x25519.tasklist @@ -1,4 +1,4 @@ -/* Copyright 2017 The Chromium OS Authors. All rights reserved. +/* Copyright 2017 The ChromiumOS Authors * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ |