Skip to content

Commit 5f7ecea

Browse files
authored
Revert "MbedCRC and CRC HAL revisions"
1 parent 9bfcb95 commit 5f7ecea

File tree

32 files changed

+758
-841
lines changed

32 files changed

+758
-841
lines changed

TESTS/mbed_drivers/crc/main.cpp

Lines changed: 21 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -25,62 +25,32 @@ using namespace utest::v1;
2525

2626
void test_supported_polynomials()
2727
{
28-
const char test[] = "123456789";
28+
char test[] = "123456789";
2929
uint32_t crc;
3030

3131
{
3232
MbedCRC<POLY_7BIT_SD, 7> ct;
33-
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
34-
TEST_ASSERT_EQUAL(0x75, crc);
35-
}
36-
{
37-
MbedCRC<POLY_7BIT_SD, 7> ct(0x7F, 0, false, false);
38-
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
39-
TEST_ASSERT_EQUAL(0x50, crc);
40-
}
41-
{
42-
MbedCRC<POLY_7BIT_SD, 7> ct(0x2B, 0, false, false);
43-
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
44-
TEST_ASSERT_EQUAL(0x3A, crc);
45-
}
46-
{
47-
MbedCRC<POLY_7BIT_SD, 7> ct(0, 0x7F, false, false);
48-
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
49-
TEST_ASSERT_EQUAL(0x0A, crc);
50-
}
51-
{
52-
MbedCRC<POLY_7BIT_SD, 7> ct(0, 0x2B, false, false);
53-
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
54-
TEST_ASSERT_EQUAL(0x5E, crc);
55-
}
56-
{
57-
MbedCRC<POLY_7BIT_SD, 7> ct(0, 0, true, false);
58-
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
59-
TEST_ASSERT_EQUAL(0x52, crc);
60-
}
61-
{
62-
MbedCRC<POLY_7BIT_SD, 7> ct(0, 0, false, true);
63-
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
64-
TEST_ASSERT_EQUAL(0x57, crc);
33+
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
34+
TEST_ASSERT_EQUAL(0xEA, crc);
6535
}
6636
{
6737
MbedCRC<POLY_8BIT_CCITT, 8> ct;
68-
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
38+
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
6939
TEST_ASSERT_EQUAL(0xF4, crc);
7040
}
7141
{
7242
MbedCRC<POLY_16BIT_CCITT, 16> ct;
73-
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
43+
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
7444
TEST_ASSERT_EQUAL(0x29B1, crc);
7545
}
7646
{
7747
MbedCRC<POLY_16BIT_IBM, 16> ct;
78-
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
48+
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
7949
TEST_ASSERT_EQUAL(0xBB3D, crc);
8050
}
8151
{
8252
MbedCRC<POLY_32BIT_ANSI, 32> ct;
83-
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
53+
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
8454
TEST_ASSERT_EQUAL(0xCBF43926, crc);
8555
}
8656
}
@@ -92,8 +62,8 @@ void test_partial_crc()
9262
{
9363
MbedCRC<POLY_16BIT_CCITT, 16> ct;
9464
TEST_ASSERT_EQUAL(0, ct.compute_partial_start(&crc));
95-
TEST_ASSERT_EQUAL(0, ct.compute_partial(test, 4, &crc));
96-
TEST_ASSERT_EQUAL(0, ct.compute_partial(&test[4], 5, &crc));
65+
TEST_ASSERT_EQUAL(0, ct.compute_partial((void *)&test, 4, &crc));
66+
TEST_ASSERT_EQUAL(0, ct.compute_partial((void *)&test[4], 5, &crc));
9767
TEST_ASSERT_EQUAL(0, ct.compute_partial_stop(&crc));
9868

9969
TEST_ASSERT_EQUAL(0x29B1, crc);
@@ -111,31 +81,31 @@ void test_sd_crc()
11181
test[2] = 0x00;
11282
test[3] = 0x00;
11383
test[4] = 0x00;
114-
TEST_ASSERT_EQUAL(0, crc7.compute(test, 5, &crc));
115-
crc = (crc << 1) | 0x1;
84+
TEST_ASSERT_EQUAL(0, crc7.compute((void *)test, 5, &crc));
85+
crc = (crc | 0x1) & 0xFF;
11686
TEST_ASSERT_EQUAL(0x95, crc);
11787

11888
test[0] = 0x48;
11989
test[1] = 0x00;
12090
test[2] = 0x00;
12191
test[3] = 0x01;
12292
test[4] = 0xAA;
123-
TEST_ASSERT_EQUAL(0, crc7.compute(test, 5, &crc));
124-
crc = (crc << 1) | 0x1;
93+
TEST_ASSERT_EQUAL(0, crc7.compute((void *)test, 5, &crc));
94+
crc = (crc | 0x1) & 0xFF;
12595
TEST_ASSERT_EQUAL(0x87, crc);
12696

12797
test[0] = 0x51;
12898
test[1] = 0x00;
12999
test[2] = 0x00;
130100
test[3] = 0x00;
131101
test[4] = 0x00;
132-
TEST_ASSERT_EQUAL(0, crc7.compute(test, 5, &crc));
133-
crc = (crc << 1) | 0x1;
102+
TEST_ASSERT_EQUAL(0, crc7.compute((void *)test, 5, &crc));
103+
crc = (crc | 0x1) & 0xFF;
134104
TEST_ASSERT_EQUAL(0x55, crc);
135105

136106
MbedCRC<POLY_16BIT_CCITT, 16> crc16(0, 0, false, false);
137107
memset(test, 0xFF, 512);
138-
TEST_ASSERT_EQUAL(0, crc16.compute(test, 512, &crc));
108+
TEST_ASSERT_EQUAL(0, crc16.compute((void *)test, 512, &crc));
139109
TEST_ASSERT_EQUAL(0x7FA1, crc);
140110
}
141111

@@ -145,12 +115,12 @@ void test_any_polynomial()
145115
uint32_t crc;
146116
{
147117
MbedCRC<0x3D65, 16> ct(0x0, 0xFFFF, 0, 0);
148-
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
118+
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
149119
TEST_ASSERT_EQUAL(0xC2B7, crc);
150120
}
151121
{
152122
MbedCRC<0x1EDC6F41, 32> ct(0xFFFFFFFF, 0xFFFFFFFF, 1, 1);
153-
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
123+
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
154124
TEST_ASSERT_EQUAL(0xE3069283, crc);
155125
}
156126
}
@@ -160,7 +130,7 @@ void test_thread(void)
160130
char test[] = "123456789";
161131
uint32_t crc;
162132
MbedCRC<POLY_32BIT_ANSI, 32> ct;
163-
TEST_ASSERT_EQUAL(0, ct.compute(test, strlen(test), &crc));
133+
TEST_ASSERT_EQUAL(0, ct.compute((void *)test, strlen((const char *)test), &crc));
164134
TEST_ASSERT_EQUAL(0xCBF43926, crc);
165135
}
166136

@@ -173,11 +143,11 @@ void test_thread_safety()
173143
MbedCRC<POLY_16BIT_IBM, 16> ct;
174144

175145
TEST_ASSERT_EQUAL(0, ct.compute_partial_start(&crc));
176-
TEST_ASSERT_EQUAL(0, ct.compute_partial(test, 4, &crc));
146+
TEST_ASSERT_EQUAL(0, ct.compute_partial((void *)&test, 4, &crc));
177147

178148
Thread t1(osPriorityNormal1, 380);
179149
t1.start(callback(test_thread));
180-
TEST_ASSERT_EQUAL(0, ct.compute_partial(&test[4], 5, &crc));
150+
TEST_ASSERT_EQUAL(0, ct.compute_partial((void *)&test[4], 5, &crc));
181151
TEST_ASSERT_EQUAL(0, ct.compute_partial_stop(&crc));
182152
TEST_ASSERT_EQUAL(0xBB3D, crc);
183153

TESTS/mbed_hal/crc/main.cpp

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ void crc_is_supported_test()
5454
uint32_t num_of_supported_polynomials = 0;
5555

5656
for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) {
57-
if (HAL_CRC_IS_SUPPORTED(test_cases[i].config_data.polynomial, test_cases[i].config_data.width)) {
57+
if (hal_crc_is_supported(&test_cases[i].config_data) == true) {
5858

5959
num_of_supported_polynomials++;
6060
}
@@ -68,7 +68,7 @@ void crc_is_supported_test()
6868
void crc_calc_single_test()
6969
{
7070
for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) {
71-
if (HAL_CRC_IS_SUPPORTED(test_cases[i].config_data.polynomial, test_cases[i].config_data.width)) {
71+
if (hal_crc_is_supported(&test_cases[i].config_data) == true) {
7272

7373
hal_crc_compute_partial_start(&test_cases[i].config_data);
7474
hal_crc_compute_partial((uint8_t *) input_data, strlen((const char *) input_data));
@@ -84,7 +84,7 @@ void crc_calc_single_test()
8484
void crc_calc_multi_test()
8585
{
8686
for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) {
87-
if (HAL_CRC_IS_SUPPORTED(test_cases[i].config_data.polynomial, test_cases[i].config_data.width)) {
87+
if (hal_crc_is_supported(&test_cases[i].config_data) == true) {
8888

8989
const uint32_t first_part_bytes = 3;
9090
const uint32_t second_part_bytes = 1;
@@ -117,7 +117,7 @@ void crc_reconfigure_test()
117117
for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) {
118118

119119
/* Find two supported polynomials if possible. */
120-
if (HAL_CRC_IS_SUPPORTED(test_cases[i].config_data.polynomial, test_cases[i].config_data.width)) {
120+
if (hal_crc_is_supported(&test_cases[i].config_data) == true) {
121121
if (pol_cnt == 0) {
122122
pol_idx[pol_cnt] = i;
123123
pol_cnt++;
@@ -159,7 +159,7 @@ void crc_compute_partial_invalid_param_test()
159159

160160
/* At least one polynomial must be supported. */
161161
for (unsigned int i = 0; i < (test_cases_size / sizeof(TEST_CASE)); i++) {
162-
if (HAL_CRC_IS_SUPPORTED(test_cases[i].config_data.polynomial, test_cases[i].config_data.width)) {
162+
if (hal_crc_is_supported(&test_cases[i].config_data) == true) {
163163

164164
hal_crc_compute_partial_start(&test_cases[i].config_data);
165165

@@ -180,12 +180,19 @@ void crc_compute_partial_invalid_param_test()
180180
}
181181
}
182182

183+
/* Test that hal_crc_is_supported() returns false if pointer to the config structure is undefined. */
184+
void crc_is_supported_invalid_param_test()
185+
{
186+
TEST_ASSERT_EQUAL(false, hal_crc_is_supported(NULL));
187+
}
188+
183189
Case cases[] = {
184190
Case("test: supported polynomials.", crc_is_supported_test),
185191
Case("test: CRC calculation - single input.", crc_calc_single_test),
186192
Case("test: CRC calculation - multi input.", crc_calc_multi_test),
187193
Case("test: re-configure without getting the result.", crc_reconfigure_test),
188194
Case("test: hal_crc_compute_partial() - invalid parameters.", crc_compute_partial_invalid_param_test),
195+
Case("test: hal_crc_is_supported() - invalid parameter.", crc_is_supported_invalid_param_test),
189196
};
190197

191198
utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
@@ -201,12 +208,12 @@ int main()
201208
// *INDENT-OFF*
202209
TEST_CASE local_test_cases[] = {
203210
/* Predefined polynomials. */
204-
/* 00 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, false}, 0x75 },
205-
/* 01 */{ {POLY_7BIT_SD , 7, 0x0000007F, 0x00000000, false, false}, 0x50 },
206-
/* 02 */{ {POLY_7BIT_SD , 7, 0x0000002B, 0x00000000, false, false}, 0x3A },
207-
/* 03 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000007F, false, false}, 0x0A },
208-
/* 04 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000002B, false, false}, 0x5E },
209-
/* 05 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, true , false}, 0x52 },
211+
/* 00 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, false}, 0xEA },
212+
/* 01 */{ {POLY_7BIT_SD , 7, 0x0000007F, 0x00000000, false, false}, 0xA0 },
213+
/* 02 */{ {POLY_7BIT_SD , 7, 0x0000002B, 0x00000000, false, false}, 0x74 },
214+
/* 03 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000007F, false, false}, 0x95 },
215+
/* 04 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x0000002B, false, false}, 0xC1 },
216+
/* 05 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, true , false}, 0xA4 },
210217
/* 06 */{ {POLY_7BIT_SD , 7, 0x00000000, 0x00000000, false, true }, 0x57 },
211218

212219
/* 07 */{ {POLY_8BIT_CCITT , 8, 0x00000000, 0x00000000, false, false}, 0xF4 },

UNITTESTS/empty_baseline/unittest.cmake

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ set(unittest-test-sources
4848
empty_baseline/empty_baseline.cpp
4949
)
5050

51-
set(DEVICE_FLAGS "-DDEVICE_ANALOGIN -DDEVICE_ANALOGOUT -DDEVICE_CAN -DDEVICE_ETHERNET -DDEVICE_FLASH -DDEVICE_I2C -DDEVICE_I2CSLAVE -DDEVICE_I2C_ASYNCH -DDEVICE_INTERRUPTIN -DDEVICE_LPTICKER -DDEVICE_PORTIN -DDEVICE_PORTINOUT -DDEVICE_PORTOUT -DDEVICE_PWMOUT -DDEVICE_QSPI -DDEVICE_SERIAL -DDEVICE_SERIAL_ASYNCH -DDEVICE_SERIAL_FC -DDEVICE_SPI -DDEVICE_SPISLAVE -DDEVICE_SPI_ASYNCH -DDEVICE_FLASH -DCOMPONENT_FLASHIAP")
51+
set(DEVICE_FLAGS "-DDEVICE_ANALOGIN -DDEVICE_ANALOGOUT -DDEVICE_CAN -DDEVICE_CRC -DDEVICE_ETHERNET -DDEVICE_FLASH -DDEVICE_I2C -DDEVICE_I2CSLAVE -DDEVICE_I2C_ASYNCH -DDEVICE_INTERRUPTIN -DDEVICE_LPTICKER -DDEVICE_PORTIN -DDEVICE_PORTINOUT -DDEVICE_PORTOUT -DDEVICE_PWMOUT -DDEVICE_QSPI -DDEVICE_SERIAL -DDEVICE_SERIAL_ASYNCH -DDEVICE_SERIAL_FC -DDEVICE_SPI -DDEVICE_SPISLAVE -DDEVICE_SPI_ASYNCH -DDEVICE_FLASH -DCOMPONENT_FLASHIAP")
5252
set(CONF_FLAGS "-DMBED_CONF_PLATFORM_CTHUNK_COUNT_MAX=10 -DMBED_CONF_DATAFLASH_SPI_FREQ=1 -DMBED_CONF_FLASHIAP_BLOCK_DEVICE_BASE_ADDRESS=0 -DMBED_CONF_FLASHIAP_BLOCK_DEVICE_SIZE=0 -DMBED_CONF_QSPIF_QSPI_FREQ=1 -DMBED_CONF_QSPIF_QSPI_MIN_READ_SIZE=1 -DMBED_CONF_QSPIF_QSPI_MIN_PROG_SIZE=1 -DMBED_LFS_READ_SIZE=64 -DMBED_LFS_PROG_SIZE=64 -DMBED_LFS_BLOCK_SIZE=512 -DMBED_LFS_LOOKAHEAD=512 -DFLASHIAP_APP_ROM_END_ADDR=0x80000 -DMBED_CONF_STORAGE_TDB_INTERNAL_INTERNAL_SIZE=1024 -DMBED_CONF_STORAGE_TDB_INTERNAL_INTERNAL_BASE_ADDRESS=0x80000 -DMBED_CONF_STORAGE_STORAGE_TYPE=default")
5353
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${DEVICE_FLAGS} ${CONF_FLAGS}")
5454
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DEVICE_FLAGS} ${CONF_FLAGS}")

UNITTESTS/target_h/cmsis.h

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,3 @@
1414
* See the License for the specific language governing permissions and
1515
* limitations under the License.
1616
*/
17-
18-
#ifndef MBED_CMSIS_H
19-
#define MBED_CMSIS_H
20-
21-
#include <stdint.h>
22-
static inline uint32_t __RBIT(uint32_t x)
23-
{
24-
x = ((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1);
25-
x = ((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2);
26-
x = ((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4);
27-
x = ((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8);
28-
x = (x >> 16) | (x << 16);
29-
return x;
30-
}
31-
32-
#endif

components/storage/blockdevice/COMPONENT_SD/SDBlockDevice.cpp

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ const uint32_t SDBlockDevice::_block_size = BLOCK_SIZE_HC;
252252
#if MBED_CONF_SD_CRC_ENABLED
253253
SDBlockDevice::SDBlockDevice(PinName mosi, PinName miso, PinName sclk, PinName cs, uint64_t hz, bool crc_on)
254254
: _sectors(0), _spi(mosi, miso, sclk), _cs(cs), _is_initialized(0),
255-
_init_ref_count(0), _crc_on(crc_on)
255+
_init_ref_count(0), _crc_on(crc_on), _crc16(0, 0, false, false)
256256
#else
257257
SDBlockDevice::SDBlockDevice(PinName mosi, PinName miso, PinName sclk, PinName cs, uint64_t hz, bool crc_on)
258258
: _sectors(0), _spi(mosi, miso, sclk), _cs(cs), _is_initialized(0),
@@ -678,11 +678,10 @@ uint8_t SDBlockDevice::_cmd_spi(SDBlockDevice::cmdSupported cmd, uint32_t arg)
678678
cmdPacket[4] = (arg >> 0);
679679

680680
#if MBED_CONF_SD_CRC_ENABLED
681+
uint32_t crc;
681682
if (_crc_on) {
682-
MbedCRC<POLY_7BIT_SD, 7> crc7;
683-
uint32_t crc;
684-
crc7.compute(cmdPacket, 5, &crc);
685-
cmdPacket[5] = ((uint8_t) crc << 1) | 0x01;
683+
_crc7.compute((void *)cmdPacket, 5, &crc);
684+
cmdPacket[5] = (char)(crc | 0x01);
686685
} else
687686
#endif
688687
{
@@ -900,13 +899,12 @@ int SDBlockDevice::_read_bytes(uint8_t *buffer, uint32_t length)
900899

901900
#if MBED_CONF_SD_CRC_ENABLED
902901
if (_crc_on) {
903-
mbed::MbedCRC<POLY_16BIT_CCITT, 16> crc16(0, 0, false, false);
904902
uint32_t crc_result;
905903
// Compute and verify checksum
906-
crc16.compute(buffer, length, &crc_result);
907-
if (crc_result != crc) {
908-
debug_if(SD_DBG, "_read_bytes: Invalid CRC received 0x%" PRIx16 " result of computation 0x%" PRIx32 "\n",
909-
crc, crc_result);
904+
_crc16.compute((void *)buffer, length, &crc_result);
905+
if ((uint16_t)crc_result != crc) {
906+
debug_if(SD_DBG, "_read_bytes: Invalid CRC received 0x%" PRIx16 " result of computation 0x%" PRIx16 "\n",
907+
crc, (uint16_t)crc_result);
910908
_deselect();
911909
return SD_BLOCK_DEVICE_ERROR_CRC;
912910
}
@@ -936,10 +934,9 @@ int SDBlockDevice::_read(uint8_t *buffer, uint32_t length)
936934

937935
#if MBED_CONF_SD_CRC_ENABLED
938936
if (_crc_on) {
939-
mbed::MbedCRC<POLY_16BIT_CCITT, 16> crc16(0, 0, false, false);
940937
uint32_t crc_result;
941938
// Compute and verify checksum
942-
crc16.compute((void *)buffer, length, &crc_result);
939+
_crc16.compute((void *)buffer, length, &crc_result);
943940
if ((uint16_t)crc_result != crc) {
944941
debug_if(SD_DBG, "_read_bytes: Invalid CRC received 0x%" PRIx16 " result of computation 0x%" PRIx16 "\n",
945942
crc, (uint16_t)crc_result);
@@ -965,9 +962,8 @@ uint8_t SDBlockDevice::_write(const uint8_t *buffer, uint8_t token, uint32_t len
965962

966963
#if MBED_CONF_SD_CRC_ENABLED
967964
if (_crc_on) {
968-
mbed::MbedCRC<POLY_16BIT_CCITT, 16> crc16(0, 0, false, false);
969965
// Compute CRC
970-
crc16.compute(buffer, length, &crc);
966+
_crc16.compute((void *)buffer, length, &crc);
971967
}
972968
#endif
973969

components/storage/blockdevice/COMPONENT_SD/SDBlockDevice.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,8 @@ class SDBlockDevice : public mbed::BlockDevice {
256256

257257
#if MBED_CONF_SD_CRC_ENABLED
258258
bool _crc_on;
259+
mbed::MbedCRC<POLY_7BIT_SD, 7> _crc7;
260+
mbed::MbedCRC<POLY_16BIT_CCITT, 16> _crc16;
259261
#endif
260262
};
261263

0 commit comments

Comments
 (0)