From ae55b0b4f8c816e28b258c9664a6c970e7d7f44d Mon Sep 17 00:00:00 2001 From: Andre Heber Date: Sat, 5 Mar 2016 23:57:18 +0100 Subject: [PATCH] Thread test works! --- .cproject | 44 + .project | 26 + Pipe/Pipe.vcxproj | 1 + Pipe/Pipe.vcxproj.filters | 3 + Pipe/buffer.txt | 0 Pipe/buffer1.txt | 100 ++ Pipe/buffer2.txt | 100 ++ Pipe/connector.h | 95 ++ Pipe/main.c | 67 +- Pipe/pipe.h | 78 +- Pipe/ringbuffer.h | 15 +- Pipe/thread1.txt | 2235 +++++++++++++++++++++++++++++ Pipe/thread2.txt | 2852 +++++++++++++++++++++++++++++++++++++ Pipe/threads.c | 355 +++-- 14 files changed, 5781 insertions(+), 190 deletions(-) create mode 100644 .cproject create mode 100644 .project create mode 100644 Pipe/buffer.txt create mode 100644 Pipe/buffer1.txt create mode 100644 Pipe/buffer2.txt create mode 100644 Pipe/connector.h create mode 100644 Pipe/thread1.txt create mode 100644 Pipe/thread2.txt diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..37b18ea --- /dev/null +++ b/.cproject @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..58934de --- /dev/null +++ b/.project @@ -0,0 +1,26 @@ + + + Pipe + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Pipe/Pipe.vcxproj b/Pipe/Pipe.vcxproj index 14739c2..df6dfbe 100644 --- a/Pipe/Pipe.vcxproj +++ b/Pipe/Pipe.vcxproj @@ -114,6 +114,7 @@ + diff --git a/Pipe/Pipe.vcxproj.filters b/Pipe/Pipe.vcxproj.filters index 228fb25..e85778a 100644 --- a/Pipe/Pipe.vcxproj.filters +++ b/Pipe/Pipe.vcxproj.filters @@ -29,5 +29,8 @@ Header Files + + Header Files + \ No newline at end of file diff --git a/Pipe/buffer.txt b/Pipe/buffer.txt new file mode 100644 index 0000000..e69de29 diff --git a/Pipe/buffer1.txt b/Pipe/buffer1.txt new file mode 100644 index 0000000..753910b --- /dev/null +++ b/Pipe/buffer1.txt @@ -0,0 +1,100 @@ +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/Pipe/buffer2.txt b/Pipe/buffer2.txt new file mode 100644 index 0000000..81a11cd --- /dev/null +++ b/Pipe/buffer2.txt @@ -0,0 +1,100 @@ +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +43 +44 +45 +46 +47 +48 +49 +50 +51 +52 +53 +54 +55 +56 +57 +58 +59 +60 +61 +62 +63 +64 +65 +66 +67 +68 +69 +70 +71 +72 +73 +74 +75 +76 +77 +78 +79 +80 +81 +82 +83 +84 +85 +86 +87 +88 +89 +90 +91 +92 +93 +94 +95 +96 +97 +98 +99 +100 +101 +102 +0 diff --git a/Pipe/connector.h b/Pipe/connector.h new file mode 100644 index 0000000..aa53edb --- /dev/null +++ b/Pipe/connector.h @@ -0,0 +1,95 @@ +#ifndef CONNECTION_H_ +#define CONNECTION_H_ + +#include +#include "ringbuffer.h" + +/* microsoft specific */ +#ifdef _MSC_VER +#define inline __inline +#endif + +/* A connection is an array of pointers, pointing to ringbuffers. */ +typedef struct +{ + ringbuffer_t ** connection; + uint32_t connection_count; + uint32_t connection_max; +} connector_t; + +static inline uint8_t Connector_IsFull(connector_t * const connector) +{ + for (uint32_t i = 0; i < connector->connection_count; i++) + { + if (RingBuffer_IsFull(connector->connection[i])) + return 1; + } + return 0; +} + +static inline uint8_t Connector_IsEmpty(connector_t * const connector) +{ + for (uint32_t i = 0; i < connector->connection_count; i++) + { + if (!RingBuffer_IsEmpty(connector->connection[i])) + return 0; + } + return 1; +} + +static inline uint8_t Connector_IsFilled(connector_t * const connector) +{ + return !Connector_IsEmpty(connector); +} + +static inline uint32_t Connector_Read(connector_t * const connector) +{ + uint32_t i = 0; + + while ( RingBuffer_IsEmpty(connector->connection[i]) && (i < connector->connection_count) ) + i++; + + if (i == connector->connection_count) + return 0; + return RingBuffer_Read(connector->connection[i]); +} + +static inline void Connector_Write(connector_t * const connector, uint32_t element) +{ + for (uint32_t i = 0; i < connector->connection_count; i++) + RingBuffer_Write(connector->connection[i], element); +} + +static inline void Connector_Insert(connector_t * const connector, uint32_t ring_buffer_index, uint32_t element) +{ + RingBuffer_Write(connector->connection[ring_buffer_index], element); +} + +static inline void Connector_Add(connector_t * const connector, ringbuffer_t * ring_buffer) +{ + if (connector->connection_count < connector->connection_max) + { + connector->connection[connector->connection_count] = ring_buffer; + connector->connection_count++; + } +} + +static inline void Connector_Init(connector_t * const connector, ringbuffer_t *buffer[], uint32_t buffer_size) +{ + connector->connection = &buffer[0]; + connector->connection_count = 0; + connector->connection_max = buffer_size; +} + +#define Concat2(a, b) a ## b +#define Concat(a, b) Concat2(a, b) + +/* +Macro for the creation of a connector. +*/ +#define Connector_Create(name, size) \ +ringbuffer_t *Concat(name, Concat(_buffer, __LINE__))[size]; \ +connector_t name; \ +Connector_Init(&name, Concat(name, Concat(_buffer, __LINE__)), size); \ + +#endif diff --git a/Pipe/main.c b/Pipe/main.c index 99fd2a3..c5c0784 100644 --- a/Pipe/main.c +++ b/Pipe/main.c @@ -4,6 +4,7 @@ #include #include "ringbuffer.h" +#include "connector.h" #include "pipe.h" #ifdef _MSC_VER @@ -13,7 +14,7 @@ /* Integrate every element of the signal. */ void increment(pipe_t * const p) { - while (Pipe_isFilled(p)) + while (Pipe_IsFilled(p)) { uint32_t item = Pipe_Read(p); item++; @@ -24,7 +25,7 @@ void increment(pipe_t * const p) /* Square every element of the signal. */ void square(pipe_t * const p) { - while (Pipe_isFilled(p)) + while (Pipe_IsFilled(p)) { uint32_t item = Pipe_Read(p); item = item * item; @@ -37,7 +38,7 @@ void integrate(pipe_t * const pipe) { uint32_t state = *((uint32_t*)pipe->state); - while (Pipe_isFilled(pipe)) + while (Pipe_IsFilled(pipe)) { uint32_t item = Pipe_Read(pipe); state = state + item; @@ -52,7 +53,7 @@ void sum(pipe_t * const pipe) { uint32_t sum = 0; - while (Pipe_isFilled(pipe)) + while (Pipe_IsFilled(pipe)) sum += Pipe_Read(pipe); Pipe_Write(pipe, sum); } @@ -64,7 +65,7 @@ void average(pipe_t * const pipe) uint32_t element_counter = 0; uint32_t average = 0; - while (Pipe_isFilled(pipe)) + while (Pipe_IsFilled(pipe)) { sum += Pipe_Read(pipe); element_counter++; @@ -77,27 +78,30 @@ void average(pipe_t * const pipe) void print(pipe_t * const pipe) { printf("\nOutput:\n"); - while (Pipe_isFilled(pipe)) + while (Pipe_IsFilled(pipe)) printf("%d\n", Pipe_Read(pipe)); } /* Logging function. Set by user. */ void log(pipe_t * const source, pipe_t * const target, uint32_t element) { - if (Pipe_isFull(target)) - printf("Error: Pipe %s is full!\n", target->name); + //if (Pipe_IsFull(target)) + // printf("Error: Pipe %s is full!\n", target->name); - if (source->state == NULL && target->state == NULL) - printf("%s -> %d -> %s\n", source->name, element, target->name); - else if (source->state != NULL && target->state != NULL) - printf("%s(%d) -> %d -> %s(%d)\n", source->name, *((uint32_t*)source->state), element, target->name, *((uint32_t*)target->state)); - else if (source->state != NULL) - printf("%s(%d) -> %d -> %s\n", source->name, *((uint32_t*)source->state), element, target->name); - else - printf("%s -> %d -> %s(%d)\n", source->name, element, target->name, *((uint32_t*)target->state)); + //if (source->state == NULL && target->state == NULL) + // printf("%s -> %d -> %s\n", source->name, element, target->name); + //else if (source->state != NULL && target->state != NULL) + // printf("%s(%d) -> %d -> %s(%d)\n", source->name, *((uint32_t*)source->state), element, target->name, *((uint32_t*)target->state)); + //else if (source->state != NULL) + // printf("%s(%d) -> %d -> %s\n", source->name, *((uint32_t*)source->state), element, target->name); + //else + // printf("%s -> %d -> %s(%d)\n", source->name, element, target->name, *((uint32_t*)target->state)); + + printf("%s: %d\n", source->name, element); } -extern void threads(void); +extern void threads(uint32_t loops); + int main(int argc, char *argv[]) { uint32_t counter = 0; @@ -105,19 +109,22 @@ int main(int argc, char *argv[]) if (argc == 1) { /* Create pipes and connect them */ - Pipe_Create(increment_pipe, 4, 1, NULL, log); - Pipe_Create(square_pipe, 4, 1, NULL, log); - Pipe_Create(integrate_pipe, 8, 2, &counter, log); - Pipe_Create(sum_pipe, 8, 2, NULL, log); - Pipe_Create(average_pipe, 8, 2, NULL, log); - Pipe_Create(print_pipe, 4, 2, NULL, log); + Pipe_Create(increment_pipe, 1, 1, NULL, log); + Pipe_Create(square_pipe, 1, 1, NULL, log); + Pipe_Create(integrate_pipe, 2, 2, &counter, log); + Pipe_Create(sum_pipe, 1, 1, NULL, log); + Pipe_Create(average_pipe, 1, 1, NULL, log); + Pipe_Create(print_pipe, 2, 1, NULL, log); - Pipe_Connect(&increment_pipe, &integrate_pipe); - Pipe_Connect(&square_pipe, &integrate_pipe); - Pipe_Connect(&integrate_pipe, &sum_pipe); - Pipe_Connect(&integrate_pipe, &average_pipe); - Pipe_Connect(&sum_pipe, &print_pipe); - Pipe_Connect(&average_pipe, &print_pipe); + Pipe_CreateInputBuffer(increment_pipe, 4); + Pipe_CreateInputBuffer(square_pipe, 4); + + Pipe_CreateConnection(increment_pipe, integrate_pipe, 4); + Pipe_CreateConnection(square_pipe, integrate_pipe, 4); + Pipe_CreateConnection(integrate_pipe, sum_pipe, 8); + Pipe_CreateConnection(integrate_pipe, average_pipe, 8); + Pipe_CreateConnection(sum_pipe, print_pipe, 4); + Pipe_CreateConnection(average_pipe, print_pipe, 4); /* Create Input */ Pipe_Insert(&increment_pipe, 1); @@ -140,7 +147,7 @@ int main(int argc, char *argv[]) } else { - threads(); + threads(atoi(argv[1])); } return 0; diff --git a/Pipe/pipe.h b/Pipe/pipe.h index c339fb9..fba80e8 100644 --- a/Pipe/pipe.h +++ b/Pipe/pipe.h @@ -3,6 +3,7 @@ #include #include "ringbuffer.h" +#include "connector.h" /* microsoft specific */ #ifdef _MSC_VER @@ -11,11 +12,9 @@ typedef struct pipe_tt { - ringbuffer_t * input; + connector_t * input_connector; + connector_t * output_connector; void * state; - struct pipe_tt ** connection; - uint32_t connection_count; - uint32_t connection_max; char * name; void(*log_function)(struct pipe_tt * from, struct pipe_tt * to, uint32_t elem); } pipe_t; @@ -31,7 +30,7 @@ So the signal can inserted to the pipe system. */ static inline void Pipe_Insert(pipe_t * const pipe, uint32_t element) { - RingBuffer_Write(pipe->input, element); + Connector_Insert(pipe->input_connector, 0, element); } /* @@ -40,7 +39,7 @@ Used inside functions of the pipe system. */ static inline uint32_t Pipe_Read(pipe_t * pipe) { - return RingBuffer_Read(pipe->input); + return Connector_Read(pipe->input_connector); } /* @@ -49,29 +48,26 @@ Used inside functions of the pipe system. */ static inline void Pipe_Write(pipe_t * pipe, uint32_t element) { - for (uint8_t i = 0; i < pipe->connection_count; i++) - { - pipe->log_function(pipe, pipe->connection[i], element); - RingBuffer_Write(pipe->connection[i]->input, element); - } + pipe->log_function(pipe, NULL, element); + Connector_Write(pipe->output_connector, element); } /* Check if the pipe contents elements. Used inside functions of the pipe system. */ -static inline uint8_t Pipe_isFilled(pipe_t * pipe) +static inline uint8_t Pipe_IsFilled(pipe_t * pipe) { - return RingBuffer_IsFilled(pipe->input); + return Connector_IsFilled(pipe->input_connector); } /* Check if the pipe has no place left for new elements. Usefull for the logging. */ -static inline uint8_t Pipe_isFull(const pipe_t * pipe) +static inline uint8_t Pipe_IsFull(const pipe_t * pipe) { - return RingBuffer_IsFull(pipe->input); + return Connector_IsFull(pipe->input_connector); } /* @@ -80,7 +76,7 @@ Shall be set by user. */ static inline void Pipe_Log(pipe_t * const source, pipe_t * const target, uint32_t element) { - if (Pipe_isFull(target)) + if (Pipe_IsFull(target)) printf("Error: Pipe %s is full!\n", target->name); if (source->state == NULL && target->state == NULL) @@ -100,7 +96,6 @@ static inline void Pipe_Log(pipe_t * const source, pipe_t * const target, uint32 #define Concat2(a, b) a ## b #define Concat(a, b) Concat2(a, b) -#define SizeOfArray(arg) ( sizeof(arg) / sizeof(arg[0]) ) /* Macro for the creation of a pipe. @@ -111,13 +106,11 @@ arg_conn_count is the number of outgoing connections. arg_state is the given state, which can be used in the function. arg_log is the log function, called when an element is sent. */ -#define Pipe_Create(arg_name, arg_size, arg_conn_count, arg_state, arg_log) \ -static uint32_t Concat(arg_name, Concat(_buffer, __LINE__))[arg_size]; \ -ringbuffer_t arg_name ## _rb; \ -RingBuffer_InitFromArray(&arg_name ## _rb, Concat(arg_name, Concat(_buffer, __LINE__)), arg_size); \ -pipe_t arg_name; \ -static pipe_t *Concat(arg_name, Concat(_connection_buffer, __LINE__))[arg_conn_count]; \ -Pipe_Init(&arg_name, &arg_name ## _rb, Concat(arg_name, Concat(_connection_buffer, __LINE__)), arg_conn_count, arg_state, #arg_name, arg_log) +#define Pipe_Create(name, input_connection_count, output_connection_count, state, log) \ +static Connector_Create(Concat(name, Concat(_input_connector, __LINE__)), input_connection_count); \ +static Connector_Create(Concat(name, Concat(_output_connector, __LINE__)), output_connection_count); \ +pipe_t name; \ +Pipe_Init(&name, &Concat(name, Concat(_input_connector, __LINE__)), &Concat(name, Concat(_output_connector, __LINE__)), state, #name, log) /* Initializes a pipe. @@ -127,23 +120,16 @@ A Name and a logging function are usefull to track the dataflow. */ static inline void Pipe_Init( pipe_t * const pipe, - ringbuffer_t * const input, - pipe_t ** pipe_connections, - uint32_t connection_max, + connector_t * input_connector, + connector_t * output_connector, void * state, char * const name, void(*log_function)(struct pipe_tt * source, struct pipe_tt * target, uint32_t element) ) { - pipe->input = input; + pipe->input_connector = input_connector; + pipe->output_connector = output_connector; pipe->state = state; - pipe->connection = pipe_connections; - - for (uint8_t i = 0; i < connection_max; i++) - pipe->connection[i] = NULL; - - pipe->connection_count = 0; - pipe->connection_max = connection_max; pipe->name = name; if (log_function == NULL) @@ -153,13 +139,23 @@ static inline void Pipe_Init( } /* Connect two pipes. Pipe a sends elements to pipe b. */ -static inline void Pipe_Connect(pipe_t * const source, pipe_t * const target) +static inline void Pipe_Connect(pipe_t * const source, pipe_t * const target, ringbuffer_t * ring_buffer) { - if (source->connection_count < source->connection_max) - { - source->connection[source->connection_count] = target; - source->connection_count++; - } + Connector_Add(source->output_connector, ring_buffer); + Connector_Add(target->input_connector, ring_buffer); } +#define Pipe_CreateConnection(source, target, size) \ +RingBuffer_Create(Concat(connector_ring_buffer, __LINE__), size); \ +Pipe_Connect(&source, &target, &Concat(connector_ring_buffer, __LINE__)) + +static inline void Pipe_AddInputBuffer(pipe_t * const pipe, ringbuffer_t * input_buffer) +{ + Connector_Add(pipe->input_connector, input_buffer); +} + +#define Pipe_CreateInputBuffer(pipe_name, size) \ +RingBuffer_Create(Concat(connector_ring_buffer, __LINE__), size); \ +Pipe_AddInputBuffer(&pipe_name, &Concat(connector_ring_buffer, __LINE__)) + #endif diff --git a/Pipe/ringbuffer.h b/Pipe/ringbuffer.h index 2635f17..faeefdf 100644 --- a/Pipe/ringbuffer.h +++ b/Pipe/ringbuffer.h @@ -15,10 +15,13 @@ typedef struct { } ringbuffer_t; /* Use Array as RingBuffer */ -static inline void RingBuffer_InitFromArray(ringbuffer_t * const ring_buffer, uint32_t * const array, uint32_t size) +static inline void RingBuffer_Init(ringbuffer_t * const ring_buffer, uint32_t * const array, uint32_t size) { ring_buffer->start = ring_buffer->reader = ring_buffer->writer = &array[0]; ring_buffer->end = &array[0] + size - 1; + + for (uint32_t i = 0; i < size; i++) + array[i] = 0; } static inline uint32_t * RingBuffer_NextAddress(ringbuffer_t * const ring_buffer, uint32_t * const pointer) @@ -66,11 +69,19 @@ static inline uint32_t RingBuffer_Read(ringbuffer_t * const ring_buffer) if (!RingBuffer_IsEmpty(ring_buffer)) { element = *(ring_buffer->reader); - *(ring_buffer->reader) = 5; + *(ring_buffer->reader) = 30; ring_buffer->reader = RingBuffer_NextAddress(ring_buffer, ring_buffer->reader); } return element; } +/* +Macro for the creation of a ring buffer. +*/ +#define RingBuffer_Create(name, size) \ +uint32_t Concat(name, Concat(_buffer, __LINE__))[size]; \ +ringbuffer_t name; \ +RingBuffer_Init(&name, Concat(name, Concat(_buffer, __LINE__)), size) \ + #endif diff --git a/Pipe/thread1.txt b/Pipe/thread1.txt new file mode 100644 index 0000000..2789d4c --- /dev/null +++ b/Pipe/thread1.txt @@ -0,0 +1,2235 @@ +-1243382387 +-1243382386 +-1243382385 +-1243371971 +-1243371970 +-1243371969 +-1243362682 +-1242199631 +-1242114954 +-1242047077 +-1242027231 +-1241971499 +-1241913031 +-1241881316 +-1241932977 +-1241857090 +-1241804263 +-1241762763 +-1241767803 +-1241719540 +-1241642981 +-1241573735 +-1241545558 +-1241488304 +-1241445755 +-1241388085 +-1241345281 +-1241297719 +-1241280464 +-1241317137 +-1241258024 +-1241224615 +-1241236443 +-1241236442 +-1241211942 +-1241179595 +-1241083724 +-1241083722 +-1241068464 +-1241023489 +-1240987051 +-1240987051 +-1240969712 +-1240948052 +-1240889053 +-1240909585 +-1240854972 +-1240845508 +-1240822421 +-1240796356 +-1240767403 +-1240854966 +-1240738591 +-1240731354 +-1240683154 +-1240680766 +-1240680764 +-1240666334 +-1240635617 +-1240635616 +-1240628293 +-1240601846 +-1240582063 +-1240589070 +-1240561112 +-1240561110 +-1240537811 +-1240487545 +-1240443345 +-1240487544 +-1240392908 +-1240428884 +-1240366031 +-1240353784 +-1240300523 +-1240300523 +-1240283662 +-1240255498 +-1240272027 +-1240228933 +-1240228933 +-1240196555 +-1240181406 +-1240181405 +-1240164790 +-1240141248 +-1240121020 +-1240121018 +-1240074041 +-1240050452 +-1240027580 +-1240000782 +-1240000781 +-1239990658 +-1239933386 +-1239919571 +-1239906517 +-1239919569 +-1239894663 +-1239871199 +-1239844970 +-1239844969 +-1239827254 +-1239799555 +-1239755332 +-1239730558 +-1239711768 +-1239730557 +-1239677265 +-1239667795 +-1239660593 +-1239625787 +-1239616186 +-1239506342 +-1239438193 +-1239428173 +-1239419978 +-1239404787 +-1239428171 +-1239392524 +-1239378141 +-1239329820 +-1239320423 +-1239320422 +-1239252580 +-1239240576 +-1239226063 +-1239226062 +-1239187012 +-1239170641 +-1239165496 +-1239117549 +-1239049406 +-1239049404 +-1239039841 +-1239017606 +-1239003450 +-1238989331 +-1238975135 +-1238961350 +-1238866867 +-1238840789 +-1238840788 +-1238830650 +-1238787261 +-1238777494 +-1238775164 +-1238741373 +-1238717691 +-1238698540 +-1238652574 +-1238627475 +-1238627469 +-1238607178 +-1238562353 +-1238584353 +-1238507894 +-1238493828 +-1238482097 +-1238482097 +-1238482096 +-1238348515 +-1238348513 +-1238316260 +-1238316259 +-1238280068 +-1238250077 +-1238235908 +-1238221398 +-1238172581 +-1238139894 +-1238156825 +-1238112089 +-1238112087 +-1238063664 +-1238031568 +-1238014620 +-1237985102 +-1237985100 +-1237958728 +-1237958727 +-1237937083 +-1237941765 +-1237907422 +-1237879051 +-1237857888 +-1237857888 +-1237818654 +-1237818654 +-1237807156 +-1237779021 +-1237767561 +-1237734889 +-1237704781 +-1237663027 +-1237610896 +-1237594883 +-1237561871 +-1237548795 +-1237532680 +-1237494610 +-1237475793 +-1237475793 +-1237440713 +-1237431022 +-1237440708 +-1237370635 +-1237360814 +-1237290684 +-1237290683 +-1237274004 +-1237274004 +-1237304811 +-1237250466 +-1237203444 +-1237158081 +-1237165616 +-1237121393 +-1237106401 +-1237061080 +-1237061079 +-1237019343 +-1237001106 +-1237038856 +-1236966303 +-1236966303 +-1236951191 +-1236910564 +-1236856945 +-1236806814 +-1236838191 +-1236791462 +-1236770421 +-1236738885 +-1236702686 +-1236692022 +-1236666767 +-1236659916 +-1236639251 +-1236612532 +-1236603135 +-1236591600 +-1236591598 +-1236587013 +-1236554086 +-1236539981 +-1236523358 +-1236500132 +-1236500131 +-1236453353 +-1236383402 +-1236395412 +-1236383401 +-1236346681 +-1236290371 +-1236251239 +-1236224126 +-1236224124 +-1236231170 +-1236187064 +-1236113413 +-1236102447 +-1236123134 +-1236078952 +-1236078952 +-1236060088 +-1236064777 +-1236038906 +-1236064776 +-1236006179 +-1235967736 +-1235939629 +-1235937322 +-1235918562 +-1235918560 +-1235932751 +-1235899745 +-1235888174 +-1235879028 +-1235876643 +-1235819722 +-1235819726 +-1235788740 +-1235788739 +-1235769216 +-1235759624 +-1235717605 +-1235708224 +-1235691870 +-1235675452 +-1235639047 +-1235578145 +-1235556246 +-1235537989 +-1235483164 +-1235473933 +-1235473932 +-1235444886 +-1235430185 +-1235390279 +-1235394887 +-1235390278 +-1235358436 +-1235358435 +-1235358430 +-1235241130 +-1235241129 +-1235226272 +-1235208542 +-1235228746 +-1235173060 +-1235145594 +-1235135142 +-1235109651 +-1235047090 +-1235047089 +-1235019131 +-1235007416 +-1234998229 +-1234973003 +-1234998228 +-1234948649 +-1234934530 +-1234948648 +-1234913450 +-1234875775 +-1234853061 +-1234777512 +-1234764959 +-1234746348 +-1234732261 +-1234720479 +-1234710311 +-1234710314 +-1234707878 +-1234632578 +-1234582910 +-1234592471 +-1234559853 +-1234545934 +-1234523506 +-1234523502 +-1234494071 +-1234480062 +-1234464862 +-1234420995 +-1234409169 +-1234387556 +-1234390064 +-1234366063 +-1234366058 +-1234330944 +-1234284259 +-1234270223 +-1234245776 +-1234245775 +-1234223013 +-1234242929 +-1234188419 +-1234188418 +-1234148165 +-1234098789 +-1234075586 +-1234047767 +-1234047765 +-1234084451 +-1234025778 +-1234005094 +-1234005091 +-1233995664 +-1233959639 +-1233910454 +-1233896461 +-1233881930 +-1233862288 +-1233862284 +-1233819849 +-1233810348 +-1233810347 +-1233793602 +-1233749736 +-1233734235 +-1233734235 +-1233711309 +-1233697191 +-1233687319 +-1233669912 +-1233653687 +-1233601463 +-1233589762 +-1233561561 +-1233549640 +-1233549640 +-1233501957 +-1233472972 +-1233444897 +-1233385414 +-1233369906 +-1233334978 +-1233323171 +-1233239237 +-1233236718 +-1233216908 +-1233182875 +-1233182874 +-1233165332 +-1233129302 +-1233085872 +-1233071815 +-1233036379 +-1232990027 +-1232947365 +-1232898609 +-1232896315 +-1232877042 +-1232860806 +-1232839620 +-1232839619 +-1232814840 +-1232794797 +-1232785345 +-1232754162 +-1232725883 +-1232716206 +-1232725882 +-1232716205 +-1232600686 +-1232563316 +-1232570353 +-1232510644 +-1232510640 +-1232477758 +-1232463504 +-1232510639 +-1232444746 +-1232432918 +-1232398225 +-1232391346 +-1232376400 +-1232381512 +-1232338207 +-1232286851 +-1232277468 +-1232263162 +-1232244057 +-1232229026 +-1232199588 +-1232224027 +-1232170989 +-1232170985 +-1232141173 +-1232098052 +-1232092921 +-1232036182 +-1232009208 +-1231979936 +-1231887961 +-1231887960 +-1231901672 +-1231871560 +-1231857208 +-1231845464 +-1231819099 +-1231864646 +-1231782029 +-1231803335 +-1231760330 +-1231731424 +-1231748053 +-1231697887 +-1231662706 +-1231649559 +-1231632210 +-1231592672 +-1231604468 +-1231561492 +-1231525228 +-1231525228 +-1231522550 +-1231491938 +-1231520176 +-1231418976 +-1231401926 +-1231401924 +-1231401920 +-1231401919 +-1231373519 +-1231363995 +-1231351721 +-1231326019 +-1231274519 +-1231240818 +-1231210846 +-1231210846 +-1231199175 +-1231175363 +-1231154100 +-1231120452 +-1231094346 +-1231065930 +-1231041226 +-1231041225 +-1230997483 +-1230997477 +-1230899722 +-1230879593 +-1230874924 +-1230841659 +-1230841657 +-1230812413 +-1230786319 +-1230774282 +-1230776864 +-1230703901 +-1230694178 +-1230667308 +-1230671948 +-1230657931 +-1230667303 +-1230610876 +-1230577867 +-1230481217 +-1230422183 +-1230397381 +-1230386830 +-1230377344 +-1230377341 +-1230344824 +-1230307066 +-1230279964 +-1230267774 +-1230231401 +-1230203525 +-1230175959 +-1230175957 +-1230145632 +-1230126639 +-1230119333 +-1230105226 +-1230093429 +-1230074980 +-1230093422 +-1230093422 +-1229978645 +-1229940232 +-1229883125 +-1229833629 +-1229800905 +-1229800905 +-1229776655 +-1229764825 +-1229748457 +-1229734577 +-1229734576 +-1229716016 +-1229682309 +-1229659807 +-1229650324 +-1229635080 +-1229616698 +-1229652654 +-1229521553 +-1229516432 +-1229483997 +-1229483991 +-1229461675 +-1229452548 +-1229403027 +-1229412303 +-1229386239 +-1229403026 +-1229364069 +-1229364065 +-1229351657 +-1229318983 +-1229318981 +-1229299367 +-1229255929 +-1229201625 +-1229174321 +-1229147412 +-1229147411 +-1229130257 +-1229132767 +-1229096405 +-1229079623 +-1229055973 +-1229043092 +-1229024270 +-1228951740 +-1228934455 +-1228905188 +-1228875809 +-1228840730 +-1228806906 +-1228783373 +-1228773950 +-1228802244 +-1228756648 +-1228756647 +-1228738886 +-1228701717 +-1228676359 +-1228654467 +-1228630590 +-1228616375 +-1228616374 +-1228606746 +-1228623576 +-1228606745 +-1228572531 +-1228548800 +-1228518474 +-1228494558 +-1228469848 +-1228423720 +-1228437038 +-1228423718 +-1228360323 +-1228395683 +-1228348598 +-1228348597 +-1228321821 +-1228302171 +-1228276568 +-1228231270 +-1228198343 +-1228153858 +-1228137503 +-1228120392 +-1228101951 +-1228137501 +-1228083455 +-1228066982 +-1228066982 +-1227995139 +-1227968980 +-1227968977 +-1227945087 +-1227925360 +-1227911106 +-1227911102 +-1227911102 +-1227862655 +-1227874395 +-1227826498 +-1227754620 +-1227754615 +-1227730800 +-1227716384 +-1227692005 +-1227681897 +-1227692003 +-1227645481 +-1227645481 +-1227624829 +-1227612959 +-1227624827 +-1227582908 +-1227558122 +-1227534668 +-1227523175 +-1227486695 +-1227486694 +-1227471932 +-1227471931 +-1227439490 +-1227428129 +-1227395287 +-1227364306 +-1227347863 +-1227313212 +-1227285448 +-1227256226 +-1227229782 +-1227229781 +-1227222977 +-1227222976 +-1227222975 +-1227162354 +-1227148876 +-1227120001 +-1227058612 +-1227034859 +-1227008055 +-1226987713 +-1226987711 +-1226966524 +-1226942930 +-1226927878 +-1226938137 +-1226901276 +-1226893487 +-1226872381 +-1226847341 +-1226805510 +-1226790917 +-1226790916 +-1226764268 +-1226764267 +-1226754832 +-1226716352 +-1226716350 +-1226693270 +-1226682970 +-1226669031 +-1226669031 +-1226643015 +-1226519482 +-1226509347 +-1226468421 +-1226445189 +-1226426387 +-1226400856 +-1226306281 +-1226331667 +-1226281555 +-1226272030 +-1226259216 +-1226259214 +-1226196964 +-1226182812 +-1226146935 +-1226146930 +-1226121462 +-1226089448 +-1226070575 +-1226068151 +-1226031419 +-1226012126 +-1225957471 +-1225940216 +-1225927769 +-1225915250 +-1225915250 +-1225874536 +-1225848798 +-1225799099 +-1225799098 +-1225776389 +-1225764220 +-1225722147 +-1225704628 +-1225743015 +-1225681572 +-1225671753 +-1225611180 +-1225588582 +-1225549371 +-1225555051 +-1225534203 +-1225497642 +-1225490431 +-1225463851 +-1225439589 +-1225425198 +-1225425197 +-1225415844 +-1225392616 +-1225408944 +-1225376099 +-1225352881 +-1225324097 +-1225314469 +-1225291845 +-1225276891 +-1225257367 +-1225257366 +-1225195388 +-1225173337 +-1225173337 +-1225154070 +-1225144862 +-1225111508 +-1225091958 +-1225057705 +-1225047270 +-1225035601 +-1225025775 +-1224963528 +-1224935530 +-1224914686 +-1224825957 +-1224802340 +-1224802339 +-1224783978 +-1224769719 +-1224711860 +-1224686362 +-1224686360 +-1224686359 +-1224676348 +-1224647559 +-1224609170 +-1224573987 +-1224573986 +-1224545068 +-1224489794 +-1224462067 +-1224426034 +-1224390611 +-1224390615 +-1224390614 +-1224353122 +-1224341185 +-1224313365 +-1224313364 +-1224334244 +-1224299241 +-1224299235 +-1224299239 +-1224256677 +-1224218700 +-1224177432 +-1224149356 +-1224075157 +-1224055617 +-1224038287 +-1224017892 +-1224017891 +-1223997204 +-1223997203 +-1223978330 +-1223968871 +-1223968870 +-1223968870 +-1223937443 +-1223862760 +-1223848770 +-1223809548 +-1223777416 +-1223750740 +-1223750739 +-1223760354 +-1223699398 +-1223656510 +-1223627568 +-1223572378 +-1223572373 +-1223549698 +-1223525377 +-1223508780 +-1223459347 +-1223445411 +-1223433758 +-1223406020 +-1223375805 +-1223380376 +-1223375805 +-1223354797 +-1223343098 +-1223290187 +-1223277865 +-1223258328 +-1223237385 +-1223258327 +-1223196178 +-1223193866 +-1223205384 +-1223173971 +-1223173970 +-1223205383 +-1223159139 +-1223092328 +-1223077429 +-1223075126 +-1223115045 +-1223014508 +-1222982481 +-1222969744 +-1222955581 +-1222941831 +-1222884030 +-1222872431 +-1222817076 +-1222750794 +-1222724595 +-1222724594 +-1222706906 +-1222706905 +-1222706905 +-1222737857 +-1222631808 +-1222631807 +-1222631802 +-1222609995 +-1222564397 +-1222564396 +-1222524642 +-1222524641 +-1222515295 +-1222515294 +-1222496261 +-1222472728 +-1222456468 +-1222421420 +-1222406907 +-1222390693 +-1222390691 +-1222326889 +-1222298316 +-1222289081 +-1222289080 +-1222271324 +-1222259582 +-1222208977 +-1222176262 +-1222176261 +-1222143130 +-1222079587 +-1221963765 +-1221963764 +-1221946626 +-1221946625 +-1221958568 +-1221934916 +-1221916243 +-1221923323 +-1221838574 +-1221838572 +-1221782938 +-1221807588 +-1221771203 +-1221771203 +-1221771200 +-1221736300 +-1221724798 +-1221715411 +-1221715410 +-1221635621 +-1221609885 +-1221546722 +-1221546720 +-1221525523 +-1221525522 +-1221500691 +-1221510451 +-1221470416 +-1221461142 +-1221458833 +-1221416480 +-1221402711 +-1221374249 +-1221348959 +-1221348959 +-1221316909 +-1221290476 +-1221262976 +-1221252386 +-1221233600 +-1221233596 +-1221152093 +-1221163861 +-1221138099 +-1221105717 +-1221105716 +-1221105715 +-1221082941 +-1220988188 +-1220988183 +-1220964527 +-1220964526 +-1220937406 +-1220917549 +-1220898912 +-1220885055 +-1220827977 +-1220827976 +-1220827976 +-1220813070 +-1220817784 +-1220786120 +-1220740898 +-1220706677 +-1220706676 +-1220683658 +-1220673321 +-1220628939 +-1220645014 +-1220593605 +-1220579407 +-1220551556 +-1220561008 +-1220535312 +-1220535312 +-1220516762 +-1220523801 +-1220456465 +-1220425363 +-1220425363 +-1220397628 +-1220390684 +-1220397627 +-1220379190 +-1220367690 +-1220320603 +-1220320599 +-1220296969 +-1220276436 +-1220276435 +-1220246214 +-1220217226 +-1220195460 +-1220190605 +-1220172764 +-1220150896 +-1220131738 +-1220105249 +-1220112409 +-1220066859 +-1220054680 +-1219988754 +-1219975059 +-1219922645 +-1219892983 +-1219925243 +-1219875793 +-1219831365 +-1219812783 +-1219801287 +-1219789500 +-1219738703 +-1219713157 +-1219648052 +-1219608103 +-1219515587 +-1219497428 +-1219523648 +-1219486496 +-1219450545 +-1219426553 +-1219426551 +-1219380645 +-1219351925 +-1219335347 +-1219300884 +-1219278854 +-1219251581 +-1219229108 +-1219182633 +-1219164186 +-1219154673 +-1219164183 +-1219103619 +-1219113654 +-1219087060 +-1219062947 +-1219036699 +-1219018296 +-1219022891 +-1218972431 +-1218927805 +-1218927803 +-1218927803 +-1218890332 +-1218890328 +-1218874049 +-1218890330 +-1218864787 +-1218864786 +-1218848327 +-1218774171 +-1218746406 +-1218722014 +-1218753265 +-1218712529 +-1218688630 +-1218669796 +-1218655006 +-1218643198 +-1218612283 +-1218588265 +-1218588264 +-1218567326 +-1218527038 +-1218510495 +-1218468336 +-1218447029 +-1218423200 +-1218398669 +-1218366269 +-1218366267 +-1218356853 +-1218386158 +-1218356852 +-1218386158 +-1218335852 +-1218335851 +-1218208066 +-1218166989 +-1218142395 +-1218120255 +-1218030836 +-1218018653 +-1218001278 +-1218001277 +-1218011193 +-1217954956 +-1217968979 +-1217916082 +-1217906448 +-1217869213 +-1217855221 +-1217855216 +-1217823902 +-1217780388 +-1217752827 +-1217738263 +-1217738262 +-1217695038 +-1217668932 +-1217653730 +-1217637252 +-1217612839 +-1217603334 +-1217603334 +-1217557357 +-1217543638 +-1217522663 +-1217492014 +-1217501742 +-1217455834 +-1217442072 +-1217442070 +-1217420961 +-1217403228 +-1217427971 +-1217363428 +-1217363426 +-1217337202 +-1217344275 +-1217313834 +-1217276582 +-1217247057 +-1217206492 +-1217182693 +-1217182691 +-1217159238 +-1217175750 +-1217149525 +-1217122776 +-1217080977 +-1217080975 +-1217037950 +-1217037948 +-1217014931 +-1216989142 +-1216989137 +-1216963238 +-1216942683 +-1216942682 +-1216907032 +-1216876955 +-1216876954 +-1216852931 +-1216852931 +-1216786397 +-1216752200 +-1216739964 +-1216723096 +-1216705533 +-1216710346 +-1216665850 +-1216635441 +-1216652901 +-1216635441 +-1216652899 +-1216598944 +-1216580018 +-1216536035 +-1216558179 +-1216494233 +-1216494228 +-1216462668 +-1216431077 +-1216410409 +-1216392329 +-1216360037 +-1216328464 +-1216309495 +-1216288000 +-1216275911 +-1216275910 +-1216248413 +-1216248412 +-1216248411 +-1216231351 +-1216219504 +-1216219502 +-1216191055 +-1216160780 +-1216125792 +-1216101519 +-1216101519 +-1216051382 +-1216001622 +-1216001621 +-1216001620 +-1215962152 +-1215939453 +-1215897821 +-1215892870 +-1215864073 +-1215851958 +-1215835634 +-1215835634 +-1215809165 +-1215798939 +-1215777537 +-1215721652 +-1215697097 +-1215691689 +-1215691688 +-1215659416 +-1215638387 +-1215624196 +-1215604345 +-1215580587 +-1215553894 +-1215553892 +-1215512142 +-1215499953 +-1215422999 +-1215368035 +-1215368034 +-1215289657 +-1215259231 +-1215249172 +-1215289657 +-1215234664 +-1215215483 +-1215215482 +-1215177905 +-1215168529 +-1215168529 +-1215150072 +-1215147772 +-1215130251 +-1215113281 +-1215085401 +-1215033281 +-1215006477 +-1214962179 +-1214904560 +-1214929245 +-1214871097 +-1214855236 +-1214855236 +-1214863449 +-1214816933 +-1214768245 +-1214778720 +-1214740358 +-1214756148 +-1214726045 +-1214682901 +-1214682901 +-1214653207 +-1214682899 +-1214614954 +-1214609322 +-1214594660 +-1214609321 +-1214561794 +-1214540991 +-1214511578 +-1214472285 +-1214427333 +-1214413178 +-1214397905 +-1214372468 +-1214343550 +-1214313493 +-1214271330 +-1214286850 +-1214252454 +-1214235804 +-1214216811 +-1214184591 +-1214173050 +-1214173049 +-1214151215 +-1214151214 +-1214130501 +-1214151210 +-1214078206 +-1214068801 +-1214022978 +-1214039977 +-1213990039 +-1213990038 +-1213990032 +-1213950074 +-1213926328 +-1213945383 +-1213863540 +-1213833801 +-1213802482 +-1213819395 +-1213802480 +-1213709651 +-1213714550 +-1213686456 +-1213686455 +-1213635150 +-1213613610 +-1213573386 +-1213573379 +-1213546806 +-1213546806 +-1213529703 +-1213503665 +-1213483622 +-1213449646 +-1213412962 +-1213382011 +-1213361705 +-1213351528 +-1213338273 +-1213338273 +-1213304926 +-1213285746 +-1213251660 +-1213251658 +-1213237659 +-1213206035 +-1213144877 +-1213156719 +-1213128812 +-1213128811 +-1213117233 +-1213117231 +-1213077482 +-1213068099 +-1213046869 +-1213020500 +-1213025151 +-1213004781 +-1212987607 +-1213004780 +-1212960809 +-1212916896 +-1212888958 +-1212842021 +-1212842019 +-1212863841 +-1212822284 +-1212789147 +-1212777536 +-1212777532 +-1212736188 +-1212714963 +-1212703336 +-1212703335 +-1212696549 +-1212691794 +-1212644122 +-1212651196 +-1212608847 +-1212515420 +-1212499874 +-1212499873 +-1212497467 +-1212481337 +-1212464713 +-1212467158 +-1212467157 +-1212424932 +-1212408582 +-1212376176 +-1212376176 +-1212355024 +-1212333792 +-1212324263 +-1212324262 +-1212302909 +-1212343220 +-1212253053 +-1212255548 +-1212255546 +-1212185613 +-1212146170 +-1212111695 +-1212097823 +-1212074074 +-1212067144 +-1212055240 +-1212031182 +-1212021697 +-1211961417 +-1211924785 +-1211908356 +-1211906036 +-1211828325 +-1211788409 +-1211766641 +-1211735367 +-1211718746 +-1211706875 +-1211742683 +-1211688817 +-1211688816 +-1211728272 +-1211642451 +-1211629627 +-1211587761 +-1211568846 +-1211537712 +-1211511544 +-1211492244 +-1211492243 +-1211463082 +-1211453600 +-1211416892 +-1211416891 +-1211382306 +-1211367926 +-1211346941 +-1211330353 +-1211330351 +-1211273021 +-1211273017 +-1211273016 +-1211263271 +-1211234020 +-1211224620 +-1211204398 +-1211204397 +-1211204391 +-1211187657 +-1211152283 +-1211119271 +-1211064436 +-1210996360 +-1210972823 +-1210962997 +-1210892710 +-1210920898 +-1210862747 +-1210839012 +-1210835682 +-1210806944 +-1210817592 +-1210779768 +-1210735164 +-1210735160 +-1210701556 +-1210669135 +-1210666758 +-1210606807 +-1210606805 +-1210597216 +-1210597214 +-1210582948 +-1210564217 +-1210554012 +-1210518776 +-1210518775 +-1210504641 +-1210487213 +-1210487212 +-1210457499 +-1210438096 +-1210423339 +-1210423334 +-1210388748 +-1210377109 +-1210377109 +-1210377108 +-1210367831 +-1210346734 +-1210323841 +-1210311959 +-1210321349 +-1210245810 +-1210229553 +-1210219461 +-1210245804 +-1210245803 +-1210164758 +-1210134169 +-1210120170 +-1210075117 +-1210064792 +-1210064790 +-1209965911 +-1209965911 +-1209904181 +-1209873112 +-1209853283 +-1209882986 +-1209843837 +-1209804413 +-1209756361 +-1209756358 +-1209722682 +-1209700737 +-1209700736 +-1209677552 +-1209649035 +-1209660962 +-1209628263 +-1209635097 +-1209597253 +-1209551097 +-1209551096 +-1209551095 +-1209500889 +-1209465902 +-1209449455 +-1209432007 +-1209407461 +-1209383632 +-1209383629 +-1209365808 +-1209317359 +-1209281625 +-1209319754 +-1209253097 +-1209236594 +-1209236593 +-1209217796 +-1209176532 +-1209154740 +-1209129289 +-1209129288 +-1209108170 +-1209115304 +-1209093865 +-1209069448 +-1209025428 +-1209037981 +-1208990775 +-1208961674 +-1208961673 +-1208952082 +-1208916961 +-1208838958 +-1208846222 +-1208801765 +-1208801765 +-1208778641 +-1208765991 +-1208756670 +-1208747039 +-1208747037 +-1208711773 +-1208648895 +-1208612783 +-1208612782 +-1208571005 +-1208571007 +-1208530580 +-1208530579 +-1208518869 +-1208509601 +-1208481235 +-1208420591 +-1208420590 +-1208420589 +-1208415704 +-1208400412 +-1208337204 +-1208303304 +-1208312509 +-1208288132 +-1208237739 +-1208226340 +-1208196151 +-1208198600 +-1208196146 +-1208172625 +-1208172623 +-1208155966 +-1208155965 +-1208129318 +-1208100017 +-1208109855 +-1208063365 +-1208044238 +-1208026489 +-1208012587 +-1207965378 +-1207907914 +-1207910420 +-1207858224 +-1207841922 +-1207858224 +-1207827733 +-1207827732 +-1207813596 +-1207804186 +-1207783187 +-1207756485 +-1207728283 +-1207728282 +-1207706158 +-1207686461 +-1207644215 +-1207629288 +-1207573758 +-1207564321 +-1207529984 +-1207501586 +-1207498902 +-1207475677 +-1207451794 +-1207439326 +-1207439325 +-1207404603 +-1207395091 +-1207354969 +-1207286495 +-1207286493 +-1207286499 +-1207242759 +-1207222506 +-1207202800 +-1207179109 +-1207161592 +-1207161590 +-1207142806 +-1207110965 +-1207081006 +-1207071875 +-1207048577 +-1207034437 +-1207006102 +-1206983685 +-1207006101 +-1206983683 +-1206952414 +-1206933255 +-1206909445 +-1206891870 +-1206875396 +-1206928619 +-1206856597 +-1206817673 +-1206817669 +-1206768847 +-1206756086 +-1206756080 +-1206746790 +-1206713299 +-1206694178 +-1206662939 +-1206662938 +-1206646742 +-1206612041 +-1206574304 +-1206542447 +-1206508830 +-1206492008 +-1206489675 +-1206461679 +-1206471113 +-1206423693 +-1206409500 +-1206409500 +-1206423693 +-1206371470 +-1206321893 +-1206272278 +-1206272278 +-1206257878 +-1206243260 +-1206243256 +-1206219796 +-1206219795 +-1206219795 +-1206231797 +-1206231796 +-1206152095 +-1206132980 +-1206120109 +-1206112893 +-1206055287 +-1206037464 +-1206027955 +-1206009569 +-1205988351 +-1205988346 +-1205960470 +-1205939021 +-1205924084 +-1205868618 +-1205868616 +-1205834177 +-1205782213 +-1205763667 +-1205763666 +-1205716114 +-1205706667 +-1205659594 +-1205659592 +-1205632631 +-1205603423 +-1205603420 +-1205584547 +-1205574902 +-1205565443 +-1205551255 +-1205505540 +-1205505539 +-1205496037 +-1205465344 +-1205465343 +-1205450202 +-1205402245 +-1205417952 +-1205388447 +-1205383942 +-1205353731 +-1205272149 +-1205272148 +-1205274634 +-1205272146 +-1205229543 +-1205167466 +-1205121069 +-1205121067 +-1205100917 +-1205075977 +-1205075976 +-1205062638 +-1205062637 +-1205051795 +-1205011706 +-1204997289 +-1204933338 +-1204884084 +-1204856792 +-1204828770 +-1204819348 +-1204799137 +-1204799136 +-1204743875 +-1204709830 +-1204707449 +-1204714462 +-1204678698 +-1204658283 +-1204646776 +-1204646775 +-1204631775 +-1204621828 +-1204585396 +-1204558751 +-1204539429 +-1204529848 +-1204529847 +-1204558753 +-1204486800 +-1204474982 +-1204474981 +-1204450271 +-1204432996 +-1204383915 +-1204383911 +-1204298822 +-1204283706 +-1204242243 +-1204242241 +-1204225558 +-1204216389 +-1204183448 +-1204181024 +-1204159168 +-1204142715 +-1204123844 +-1204113113 +-1204089859 +-1204066015 +-1204013345 +-1204013344 +-1204006267 +-1204001680 +-1203994625 +-1203994625 +-1203971039 +-1203982792 +-1203940167 +-1203928638 +-1203928633 +-1203892279 +-1203859513 +-1203838488 +-1203857156 +-1203822322 +-1203793988 +-1203755865 +-1203755863 +-1203680013 +-1203665346 +-1203634365 +-1203584403 +-1203576875 +-1203572268 +-1203564864 +-1203564863 +-1203541986 +-1203525593 +-1203510328 +-1203490766 +-1203463446 +-1203453762 +-1203453761 +-1203463442 +-1203403085 +-1203412547 +-1203358614 +-1203326121 +-1203347073 +-1203311510 +-1203303881 +-1203270244 +-1203270243 +-1203196192 +-1203196191 +-1203186979 +-1203196187 +-1203159431 +-1203175477 +-1203132201 +-1203132200 +-1203108504 +-1203092262 +-1203108503 +-1203053288 +-1203053288 +-1203017262 +-1202985250 +-1202954533 +-1202963353 +-1202910678 +-1202882892 +-1202859466 +-1202831364 +-1202854878 +-1202854877 +-1202831362 +-1202763489 +-1202763488 +-1202742541 +-1202723733 +-1202674871 +-1202618774 +-1202618772 +-1202598829 +-1202552307 +-1202552306 +-1202552305 +-1202542912 +-1202530138 +-1202500854 +-1202470217 +-1202444506 +-1202444504 +-1202416793 +-1202397912 +-1202388545 +-1202388544 +-1202371131 +-1202375904 +-1202361843 +-1202320829 +-1202261647 +-1202261646 +-1202219676 +-1202199291 +-1202184594 +-1202184593 +-1202165906 +-1202173552 +-1202129717 +-1202098964 +-1202098958 +-1202055988 +-1202055983 +-1202055987 +-1202029725 +-1202055986 +-1202019495 +-1201980849 +-1201966928 +-1201966927 +-1201931599 +-1201948068 +-1201891972 +-1201891971 +-1201844780 +-1201782644 +-1201743347 +-1201743347 +-1201724395 +-1201712654 +-1201724391 +-1201724389 +-1201679091 +-1201648732 +-1201609264 +-1201570604 +-1201535612 +-1201521627 +-1201495057 +-1201485532 +-1201485532 +-1201441119 +-1201411380 +-1201394866 +-1201369432 +-1201352116 +-1201352115 +-1201333594 +-1201333593 +-1201314919 +-1201300994 +-1201267832 +-1201239053 +-1201217600 +-1201217599 +-1201186042 +-1201157905 +-1201139421 +-1201115841 +-1201130198 +-1201084946 +-1201068742 +-1201068740 +-1201041608 +-1201023911 +-1200972234 +-1200972233 +-1200946996 +-1200918802 +-1200910779 +-1200873276 +-1200863625 +-1200868468 +-1200793619 +-1200782793 +-1200675385 +-1200675384 +-1200687392 +-1200665643 +-1200655391 +-1200610392 +-1200572125 +-1200555059 +-1200532135 +-1200494135 +-1200472692 +-1200460119 +-1200447462 +-1200431245 +-1200431244 +-1200431243 +-1200405071 +-1200374341 +-1200341615 +-1200329874 +-1200329877 +-1200303746 +-1200281164 +-1200257639 +-1200244461 +-1200182373 +-1200182372 +-1200172857 +-1200152861 +-1200118109 +-1200060439 +-1200096020 +-1200035511 +-1200003405 +-1199998804 +-1199965982 +-1199948890 +-1199917204 +-1199896471 +-1199903360 +-1199830650 +-1199843279 +-1199788653 +-1199784099 +-1199723030 +-1199691328 +-1199688968 +-1199662623 +-1199662621 +-1199648258 +-1199638749 +-1199648254 +-1199590467 +-1199615689 +-1199572336 +-1199548484 +-1199504394 +-1199504394 +-1199476517 +-1199499709 +-1199466913 +-1199403792 +-1199403790 +-1199351696 +-1199351695 +-1199337324 +-1199351696 +-1199317505 +-1199296059 +-1199268333 +-1199253931 +-1199230672 +-1199230670 +-1199209894 +-1199209886 +-1199025933 +-1198961922 +-1198961921 +-1198948048 +-1198948047 +-1198933789 +-1198837063 +-1198844612 +-1198837062 +-1198844612 +-1198802234 +-1198792806 +-1198760978 +-1198732888 +-1198703804 +-1198681105 +-1198666620 +-1198621136 +-1198613407 +-1198581510 +-1198568601 +-1198526499 +-1198517331 +-1198517329 +-1198501148 +-1198418316 +-1198418306 +-1198390268 +-1198408056 +-1198357870 +-1198325191 +-1198303252 +-1198283081 +-1198229576 +-1198207881 +-1198192757 +-1198183627 +-1198181270 +-1198147630 +-1198140356 +-1198100455 +-1198051336 +-1198030057 +-1198010160 +-1197994365 +-1197985542 +-1197958809 +-1197958808 +-1197922116 +-1197910233 +-1197893600 +-1197884039 +-1197884038 +-1197831668 +-1197783002 +-1197759535 +-1197733517 +-1197719372 +-1197719370 +-1197709865 +-1197689904 +-1197680474 +-1197689897 +-1197640560 +-1197612216 +-1197588676 +-1197542673 +-1197542672 +-1197529845 +-1197506114 +-1197513442 +-1197513442 +-1197446873 +-1197400022 +-1197390437 +-1197383222 +-1197358660 +-1197326433 +-1197313867 +-1197295959 +-1197262549 +-1197245497 +-1197245499 +-1197194871 +-1197157265 +-1197154897 +-1197134261 +-1197074548 +-1197074547 +-1197038200 +-1197050146 +-1197012804 +-1197012803 +-1196970054 +-1196995468 +-1196944551 +-1196936387 +-1196944549 +-1196884255 +-1196845239 +-1196845233 +-1196838245 +-1196810184 +-1196784034 +-1196771295 +-1196737811 +-1196737811 +-1196727551 +-1196705093 +-1196705091 +-1196688579 +-1196690942 +-1196679193 +-1196679193 +-1196650055 +-1196627422 +-1196606575 +-1196542380 +-1196451843 +-1196404570 +-1196392857 +-1196383442 +-1196361713 +-1196336894 +-1196336894 +-1196336893 +-1196309229 +-1196293013 +-1196248947 +-1196220671 +-1196220670 +-1196200576 +-1196121556 +-1196140444 +-1196106923 +-1196091337 +-1196076406 +-1196064371 +-1195994187 +-1195998981 +-1195939504 +-1195918117 +-1195918116 +-1195880758 +-1195847821 +-1195845434 +-1195815310 +-1195815309 +-1195805766 +-1195788606 +-1195684572 +-1195655750 +-1195653391 +-1195653390 +-1195633964 +-1195626925 +-1195612593 +-1195603246 +-1195593812 +-1195570707 +-1195579799 +-1195557723 +-1195532105 +-1195532104 +-1195513558 +-1195501976 +-1195445848 +-1195434044 +-1195389386 +-1195372381 +-1195317044 +-1195284854 +-1195284852 +-1195245583 +-1195198746 +-1195160759 +-1195140450 +-1195127748 +-1195107259 +-1195092643 +-1195080040 +-1195061284 +-1195007819 +-1194970306 +-1194922629 +-1194920306 +-1194899616 +-1194938882 +-1194891970 +-1194867040 +-1194837979 +-1194830789 +-1194819046 +-1194791166 +-1194805063 +-1194779382 +-1194669904 +-1194638080 +-1194621292 +-1194591690 +-1194577416 +-1194567577 +-1194577415 +-1194577414 +-1194526569 +-1194507976 +-1194496103 +-1194484310 +-1194460238 +-1194444909 +-1194428041 +-1194428039 +-1194470011 +-1194399318 +-1194371745 +-1194347258 +-1194232510 +-1194232506 diff --git a/Pipe/thread2.txt b/Pipe/thread2.txt new file mode 100644 index 0000000..6c4dad5 --- /dev/null +++ b/Pipe/thread2.txt @@ -0,0 +1,2852 @@ +-1243382387 +-1243382386 +-1243382385 +-1243371971 +-1243371970 +-1243371969 +-1243362682 +-1242245692 +-1242061123 +-1242047077 +-1242017492 +-1241971499 +-1241936563 +-1241881316 +-1241932977 +-1241857090 +-1241814160 +-1241767805 +-1241762763 +-1241767803 +-1241667278 +-1241642981 +-1241573735 +-1241549287 +-1241464037 +-1241445755 +-1241388083 +-1241393251 +-1241345282 +-1241317135 +-1241297718 +-1241280464 +-1241317137 +-1241258024 +-1241258024 +-1241243565 +-1241236443 +-1241211943 +-1241211943 +-1241170059 +-1241141426 +-1241083724 +-1241126182 +-1241074205 +-1241074204 +-1241058866 +-1241068463 +-1241039964 +-1241023489 +-1240999437 +-1240999433 +-1240987050 +-1240969712 +-1240948052 +-1240911941 +-1240854971 +-1240793904 +-1240767402 +-1240750258 +-1240738590 +-1240714337 +-1240683154 +-1240683153 +-1240680764 +-1240666334 +-1240653271 +-1240635617 +-1240628294 +-1240628293 +-1240601846 +-1240582063 +-1240582063 +-1240589070 +-1240561112 +-1240561111 +-1240586758 +-1240537811 +-1240472124 +-1240472123 +-1240443343 +-1240409982 +-1240392908 +-1240392907 +-1240366031 +-1240366030 +-1240353784 +-1240333883 +-1240309966 +-1240255498 +-1240245955 +-1240267448 +-1240217474 +-1240198965 +-1240198964 +-1240196555 +-1240181406 +-1240181405 +-1240217472 +-1240141248 +-1240121021 +-1240121019 +-1240105355 +-1240121017 +-1240059902 +-1240059902 +-1240000781 +-1239990658 +-1239933387 +-1239933386 +-1239945105 +-1239906515 +-1239871199 +-1239844970 +-1239844969 +-1239827254 +-1239799560 +-1239755332 +-1239737674 +-1239730558 +-1239711768 +-1239709381 +-1239635788 +-1239635787 +-1239625787 +-1239616188 +-1239616186 +-1239568082 +-1239561062 +-1239528143 +-1239520843 +-1239506342 +-1239484664 +-1239467701 +-1239467701 +-1239438194 +-1239438193 +-1239428173 +-1239404787 +-1239392525 +-1239392524 +-1239378141 +-1239368849 +-1239329820 +-1239329819 +-1239320423 +-1239320422 +-1239301942 +-1239301941 +-1239283091 +-1239273485 +-1239240576 +-1239218294 +-1239226062 +-1239187012 +-1239170640 +-1239165496 +-1239148489 +-1239049406 +-1239049404 +-1239039841 +-1239066670 +-1239017605 +-1239049403 +-1238989330 +-1238989325 +-1238855673 +-1238814962 +-1238787261 +-1238777494 +-1238741374 +-1238738987 +-1238717691 +-1238724978 +-1238698540 +-1238724976 +-1238652578 +-1238652574 +-1238574252 +-1238584353 +-1238525577 +-1238574249 +-1238507894 +-1238493828 +-1238482097 +-1238482097 +-1238482096 +-1238482101 +-1238385952 +-1238357708 +-1238357706 +-1238348513 +-1238316260 +-1238297998 +-1238280068 +-1238250076 +-1238235914 +-1238235914 +-1238221398 +-1238185075 +-1238156826 +-1238139894 +-1238123725 +-1238156825 +-1238080131 +-1238070583 +-1238051765 +-1238058663 +-1238031568 +-1238014620 +-1237999539 +-1237985100 +-1237958728 +-1237958727 +-1237958727 +-1237937083 +-1237941765 +-1237907422 +-1237895506 +-1237895505 +-1237879053 +-1237895499 +-1237879051 +-1237857888 +-1237833531 +-1237818655 +-1237807158 +-1237793021 +-1237734889 +-1237704783 +-1237663027 +-1237638626 +-1237610896 +-1237594883 +-1237548796 +-1237548795 +-1237548794 +-1237532680 +-1237517056 +-1237461759 +-1237440712 +-1237431022 +-1237431021 +-1237405727 +-1237440708 +-1237387005 +-1237360816 +-1237360814 +-1237290684 +-1237290683 +-1237274004 +-1237262217 +-1237250467 +-1237240907 +-1237212649 +-1237177959 +-1237158082 +-1237175058 +-1237138042 +-1237138041 +-1237121393 +-1237121392 +-1237106401 +-1237019343 +-1237001106 +-1237038856 +-1236966305 +-1236966303 +-1236966303 +-1236910566 +-1236806814 +-1236791463 +-1236781873 +-1236781872 +-1236770420 +-1236770420 +-1236756676 +-1236738886 +-1236738885 +-1236715755 +-1236702685 +-1236692022 +-1236666767 +-1236659916 +-1236648507 +-1236629690 +-1236603135 +-1236587014 +-1236591598 +-1236591598 +-1236587013 +-1236563329 +-1236554086 +-1236563328 +-1236523358 +-1236500136 +-1236500131 +-1236493187 +-1236476722 +-1236493186 +-1236453352 +-1236439268 +-1236383402 +-1236383401 +-1236383401 +-1236356358 +-1236346679 +-1236312652 +-1236273353 +-1236224125 +-1236202780 +-1236231170 +-1236187066 +-1236187064 +-1236187064 +-1236113413 +-1236113412 +-1236102447 +-1236123134 +-1236078953 +-1236088179 +-1236078952 +-1236060086 +-1236048311 +-1236064776 +-1236006179 +-1235992117 +-1236006175 +-1235939630 +-1235937322 +-1235918562 +-1235918561 +-1235909167 +-1235932751 +-1235899745 +-1235899745 +-1235888174 +-1235879028 +-1235876644 +-1235876643 +-1235879027 +-1235829338 +-1235798359 +-1235788740 +-1235798355 +-1235788739 +-1235759625 +-1235729247 +-1235708224 +-1235708224 +-1235691872 +-1235675458 +-1235675457 +-1235658075 +-1235606902 +-1235578145 +-1235556246 +-1235556245 +-1235537989 +-1235537986 +-1235503827 +-1235483163 +-1235473932 +-1235473931 +-1235444885 +-1235406719 +-1235406719 +-1235390279 +-1235390278 +-1235358436 +-1235358435 +-1235358430 +-1235332607 +-1235332607 +-1235346676 +-1235316308 +-1235293489 +-1235256265 +-1235256264 +-1235241130 +-1235241129 +-1235263577 +-1235226271 +-1235208542 +-1235228746 +-1235173060 +-1235173054 +-1235145594 +-1235135146 +-1235109652 +-1235109651 +-1235033094 +-1235047090 +-1235047089 +-1235033093 +-1235019130 +-1235007416 +-1234998229 +-1234973003 +-1234951029 +-1234948649 +-1234934530 +-1234948648 +-1234915832 +-1234913450 +-1234875775 +-1234860631 +-1234860631 +-1234777512 +-1234774608 +-1234746348 +-1234760267 +-1234720480 +-1234710315 +-1234710311 +-1234710314 +-1234710310 +-1234707878 +-1234632582 +-1234611342 +-1234582910 +-1234569883 +-1234545936 +-1234533205 +-1234523506 +-1234523502 +-1234523505 +-1234494071 +-1234480062 +-1234464862 +-1234432401 +-1234420994 +-1234420990 +-1234387556 +-1234387555 +-1234390064 +-1234366058 +-1234342449 +-1234330943 +-1234307530 +-1234252822 +-1234242932 +-1234242930 +-1234242929 +-1234202450 +-1234148165 +-1234084454 +-1234047766 +-1234047765 +-1234025779 +-1234025777 +-1234016895 +-1233983912 +-1233995664 +-1233959640 +-1233935356 +-1233881931 +-1233881929 +-1233862288 +-1233847750 +-1233819849 +-1233810347 +-1233793602 +-1233749736 +-1233734235 +-1233711309 +-1233697191 +-1233687319 +-1233653688 +-1233653686 +-1233617888 +-1233582934 +-1233589761 +-1233561564 +-1233549641 +-1233549640 +-1233549640 +-1233501958 +-1233501957 +-1233484692 +-1233472973 +-1233472971 +-1233420159 +-1233385414 +-1233369906 +-1233334978 +-1233323171 +-1233323170 +-1233334971 +-1233309081 +-1233306776 +-1233254423 +-1233254422 +-1233239237 +-1233236719 +-1233216908 +-1233182876 +-1233182875 +-1233182874 +-1233165333 +-1233146718 +-1233129302 +-1233099892 +-1233071815 +-1233052568 +-1233064695 +-1233014211 +-1232990026 +-1232990028 +-1232990027 +-1232959203 +-1232969071 +-1232898607 +-1232877043 +-1232896315 +-1232889275 +-1232884546 +-1232860805 +-1232830140 +-1232814840 +-1232785347 +-1232799669 +-1232747021 +-1232725883 +-1232716206 +-1232725882 +-1232716205 +-1232716204 +-1232695505 +-1232688247 +-1232693050 +-1232671823 +-1232657641 +-1232650205 +-1232600685 +-1232570354 +-1232538488 +-1232538488 +-1232501095 +-1232510640 +-1232477760 +-1232477758 +-1232463504 +-1232463502 +-1232444747 +-1232444746 +-1232432918 +-1232414435 +-1232398227 +-1232398225 +-1232391346 +-1232376400 +-1232389035 +-1232381512 +-1232303031 +-1232303030 +-1232286852 +-1232277470 +-1232263163 +-1232263162 +-1232244057 +-1232224027 +-1232224027 +-1232199588 +-1232199586 +-1232185034 +-1232185033 +-1232170988 +-1232161658 +-1232170983 +-1232083359 +-1232092921 +-1232036182 +-1232036184 +-1231979936 +-1231928452 +-1231901673 +-1231887960 +-1231901672 +-1231857208 +-1231864647 +-1231845464 +-1231819099 +-1231864646 +-1231782029 +-1231743187 +-1231731422 +-1231743183 +-1231662708 +-1231662706 +-1231649559 +-1231632210 +-1231592672 +-1231573107 +-1231554451 +-1231525228 +-1231525227 +-1231504016 +-1231522550 +-1231491938 +-1231520176 +-1231418976 +-1231401926 +-1231401924 +-1231401920 +-1231401919 +-1231401919 +-1231373519 +-1231363996 +-1231363995 +-1231363994 +-1231392634 +-1231326019 +-1231274519 +-1231240818 +-1231210846 +-1231204075 +-1231201658 +-1231175365 +-1231175363 +-1231163495 +-1231163488 +-1231065932 +-1231041225 +-1231026781 +-1231026780 +-1230997481 +-1230985495 +-1230997477 +-1230964283 +-1230879594 +-1230879592 +-1230874924 +-1230841659 +-1230841657 +-1230855410 +-1230831702 +-1230798187 +-1230786319 +-1230776865 +-1230734332 +-1230694179 +-1230694178 +-1230694178 +-1230667308 +-1230657932 +-1230657931 +-1230667303 +-1230610876 +-1230559997 +-1230553083 +-1230553083 +-1230559995 +-1230530509 +-1230520610 +-1230520609 +-1230422183 +-1230432446 +-1230397381 +-1230377345 +-1230377344 +-1230358734 +-1230344824 +-1230344824 +-1230358733 +-1230326341 +-1230333382 +-1230307067 +-1230307061 +-1230279964 +-1230279963 +-1230267774 +-1230248331 +-1230219727 +-1230208152 +-1230175959 +-1230175958 +6 +-1230145632 +-1230175960 +-1230119333 +-1230105226 +-1230093428 +-1230072611 +-1230055242 +-1230030509 +-1230006987 +-1230006986 +-1229978645 +-1229913546 +-1229894434 +-1229855422 +-1229800905 +-1229800904 +-1229776656 +-1229798559 +-1229764825 +-1229748457 +-1229734577 +-1229734577 +-1229704417 +-1229682308 +-1229659807 +-1229650324 +-1229635081 +-1229659803 +-1229616698 +-1229616696 +-1229652654 +-1229600031 +-1229600026 +-1229600025 +-1229566990 +-1229533708 +-1229521553 +-1229521547 +-1229521553 +-1229483996 +-1229452549 +-1229461675 +-1229452548 +-1229428715 +-1229403026 +-1229412303 +-1229388538 +-1229386239 +-1229403026 +-1229364069 +-1229351658 +-1229364065 +-1229351657 +-1229328359 +-1229337903 +-1229290017 +-1229299367 +-1229255929 +-1229204336 +-1229174322 +-1229147412 +-1229130257 +-1229132767 +-1229096405 +-1229079623 +-1229072614 +-1229065448 +-1229043093 +-1229055972 +-1229024269 +-1229005483 +-1228973335 +-1228949355 +-1228934454 +-1228944321 +-1228912877 +-1228895704 +-1228905188 +-1228875810 +-1228831427 +-1228831426 +-1228840730 +-1228773951 +-1228773949 +-1228756648 +-1228756647 +-1228723679 +-1228701718 +-1228701717 +-1228676359 +-1228670862 +-1228630591 +-1228630590 +-1228616374 +-1228616374 +-1228606746 +-1228623577 +-1228623576 +-1228581682 +-1228581676 +-1228529941 +-1228529939 +-1228494557 +-1228469848 +-1228439367 +-1228437038 +-1228407864 +-1228360323 +-1228360322 +-1228360321 +-1228395683 +-1228338240 +-1228338238 +-1228338238 +-1228348597 +-1228321821 +-1228302171 +-1228302170 +-1228302169 +-1228267006 +-1228238933 +-1228231270 +-1228228790 +-1228153859 +-1228120392 +-1228101952 +-1228101951 +-1228137501 +-1228089000 +-1228083455 +-1228066982 +-1228066982 +-1228050639 +-1228035174 +-1228035172 +-1228021084 +-1228018700 +-1227980749 +-1227957322 +-1227925360 +-1227911106 +-1227911102 +-1227874397 +-1227848854 +-1227777548 +-1227754620 +-1227754618 +-1227743165 +-1227730800 +-1227716384 +-1227716383 +-1227681897 +-1227692003 +-1227645482 +-1227645481 +-1227645477 +-1227624828 +-1227624827 +-1227582908 +-1227587566 +-1227558123 +-1227544222 +-1227534668 +-1227523175 +-1227486695 +-1227486694 +-1227471932 +-1227471931 +-1227439490 +-1227439489 +-1227428133 +-1227428129 +-1227406915 +-1227347862 +-1227325434 +-1227313213 +-1227325431 +-1227273451 +-1227285448 +-1227273450 +-1227256226 +-1227229782 +-1227229781 +-1227222977 +-1227211458 +-1227222976 +-1227222975 +-1227162354 +-1227148876 +-1227148876 +-1227132482 +-1227132481 +-1227120001 +-1227058612 +-1227034859 +-1227008055 +-1226987713 +-1226987711 +-1226966525 +-1226966524 +-1226942930 +-1226942928 +-1226927877 +-1226938137 +-1226901276 +-1226893487 +-1226881834 +-1226872381 +-1226847341 +-1226847335 +-1226812359 +-1226790917 +-1226790916 +-1226805508 +-1226788393 +-1226764268 +-1226769107 +-1226721165 +-1226716352 +-1226716350 +-1226693270 +-1226682971 +-1226682970 +-1226669032 +-1226669031 +-1226643015 +-1226630358 +-1226599858 +-1226578753 +-1226543866 +-1226529069 +-1226529065 +-1226509347 +-1226468421 +-1226445190 +-1226426388 +-1226400856 +-1226272030 +-1226259216 +-1226259215 +-1226241827 +-1226208427 +-1226196960 +-1226146930 +-1226123883 +-1226089449 +-1226097480 +-1226070574 +-1226065608 +-1226044042 +-1226026371 +-1226012125 +-1226012124 +-1225990169 +-1225990170 +-1225957471 +-1225957470 +-1225940216 +-1225927769 +-1225915250 +-1225915250 +-1225874536 +-1225848799 +-1225820567 +-1225799099 +-1225799099 +-1225776391 +-1225799099 +-1225764220 +-1225722148 +-1225722146 +-1225704628 +-1225743015 +-1225681577 +-1225671753 +-1225611180 +-1225588584 +-1225564728 +-1225549371 +-1225555051 +-1225549370 +-1225509038 +-1225490431 +-1225463851 +-1225439589 +-1225439588 +-1225461547 +-1225408943 +-1225392616 +-1225408944 +-1225369105 +-1225352881 +-1225314470 +-1225257367 +-1225257366 +-1225229983 +-1225195388 +-1225173337 +-1225173337 +-1225163632 +-1225154072 +-1225154071 +-1225144862 +-1225099191 +-1225091958 +-1225057705 +-1225047271 +-1225047270 +-1225035601 +-1225025775 +-1224973331 +-1224963527 +-1224935530 +-1224855785 +-1224825918 +-1224825957 +-1224825956 +-1224802339 +-1224793060 +-1224769718 +-1224711860 +-1224686362 +-1224686360 +-1224686359 +-1224711859 +-1224676349 +-1224667802 +-1224647558 +-1224609174 +-1224583985 +-1224609170 +-1224573987 +-1224562236 +-1224573986 +-1224545068 +-1224489796 +-1224476012 +-1224476011 +-1224430653 +-1224405585 +-1224426033 +-1224390610 +-1224390615 +-1224390614 +-1224353122 +-1224361430 +-1224341186 +-1224341185 +-1224313365 +-1224313364 +-1224334244 +-1224299241 +-1224299235 +-1224299240 +-1224299239 +-1224256677 +-1224218700 +-1224169775 +-1224149356 +-1224158594 +-1224132725 +-1224075162 +-1224075160 +-1224055616 +-1224048136 +-1223997203 +-1223978330 +-1223968871 +-1223968870 +-1223968870 +-1223862760 +-1223887222 +-1223848769 +-1223837339 +-1223835013 +-1223835012 +-1223809549 +-1223797536 +-1223797535 +-1223787757 +-1223760358 +-1223750740 +-1223750739 +-1223760354 +-1223728272 +-1223689901 +-1223668103 +-1223656511 +-1223656510 +-1223627568 +-1223627563 +-1223607719 +-1223607718 +-1223600824 +-1223572374 +-1223569868 +-1223549698 +-1223525377 +-1223508780 +-1223466825 +-1223459346 +-1223445410 +-1223433758 +-1223419961 +-1223406020 +-1223419960 +-1223375805 +-1223380376 +-1223375805 +-1223343098 +-1223320506 +-1223301505 +-1223277865 +-1223277864 +-1223237385 +-1223258327 +-1223220476 +-1223193867 +-1223193866 +-1223205384 +-1223173971 +-1223173970 +-1223159138 +-1223075125 +-1223057683 +-1223034196 +-1223014508 +-1223005076 +-1222982479 +-1222982476 +-1222955581 +-1222941831 +-1222884030 +-1222897270 +-1222872432 +-1222872431 +-1222897269 +-1222856084 +-1222856083 +-1222817078 +-1222789882 +-1222750794 +-1222724596 +-1222724595 +-1222724594 +-1222706906 +-1222706905 +-1222688609 +-1222688608 +-1222631808 +-1222631807 +-1222631802 +-1222609995 +-1222584381 +-1222619736 +-1222564397 +-1222571422 +-1222548184 +-1222524642 +-1222524641 +-1222515295 +-1222515295 +-1222515294 +-1222496263 +-1222496262 +-1222484478 +-1222461048 +-1222456468 +-1222421420 +-1222406907 +-1222406906 +-1222390693 +-1222373571 +-1222375909 +-1222352742 +-1222326890 +-1222333712 +-1222298316 +-1222289081 +-1222271325 +-1222271324 +-1222259582 +-1222208977 +-1222176263 +-1222176261 +-1222161294 +-1222185833 +-1222143130 +-1222104815 +-1222079587 +-1222046745 +6 +-1221963765 +-1221963764 +-1221976092 +-1221946626 +-1221934917 +-1221934916 +-1221934916 +-1221916243 +-1221923323 +-1221880662 +-1221848269 +-1221807589 +-1221782939 +-1221807588 +-1221771204 +-1221771203 +-1221771203 +-1221736300 +-1221724798 +-1221715411 +-1221685052 +-1221669513 +-1221635621 +-1221657261 +-1221623842 +-1221657260 +-1221609885 +-1221553731 +-1221553730 +-1221532870 +-1221525524 +-1221525523 +-1221500691 +-1221500690 +-1221470416 +-1221453726 +-1221458833 +-1221434198 +-1221405033 +-1221416479 +-1221374249 +-1221348959 +-1221348959 +-1221300119 +-1221314481 +-1221309657 +-1221252386 +-1221233600 +-1221233595 +-1221211783 +-1221152093 +-1221163861 +-1221152092 +-1221163861 +-1221152091 +-1221125015 +-1221105717 +-1221117118 +-1221082946 +-1220988188 +-1220964527 +-1220937406 +-1220929243 +-1220917549 +-1220898913 +-1220885055 +-1220885054 +-1220885054 +-1220842056 +-1220827976 +-1220861415 +-1220813071 +-1220813069 +-1220817784 +-1220781345 +-1220776741 +-1220750415 +-1220720996 +-1220709073 +-1220706676 +-1220691673 +-1220654470 +-1220617760 +-1220593605 +-1220593603 +-1220579407 +-1220551556 +-1220551555 +-1220561008 +-1220535312 +-1220535311 +-1220516762 +-1220472928 +-1220436882 +-1220425363 +-1220436881 +-1220436880 +-1220397628 +-1220390684 +-1220397627 +-1220379191 +-1220379190 +-1220367690 +-1220320599 +-1220296970 +-1220311298 +-1220276436 +-1220276435 +-1220246214 +-1220229295 +-1220217225 +-1220190606 +-1220190605 +-1220172764 +-1220172764 +-1220150897 +-1220150896 +-1220131738 +-1220150891 +-1220112410 +-1220112408 +-1220066859 +-1220054684 +-1219988753 +-1219988752 +-1219979631 +-1219975060 +-1219975059 +-1219945643 +-1219922645 +-1219892983 +-1219925243 +-1219875793 +-1219853315 +-1219831364 +-1219812783 +-1219801287 +-1219789501 +-1219713157 +-1219707555 +-1219738702 +-1219689471 +-1219679262 +-1219664922 +-1219648052 +-1219648050 +-1219633640 +-1219608104 +-1219608103 +-1219576214 +-1219547633 +-1219576207 +-1219515587 +-1219529682 +-1219497428 +-1219486496 +-1219486496 +-1219474470 +-1219426555 +-1219414872 +-1219397996 +-1219361532 +-1219351925 +-1219351925 +-1219335348 +-1219322651 +-1219290486 +-1219276488 +-1219182637 +-1219164187 +-1219164186 +-1219154673 +-1219125140 +-1219103620 +-1219103618 +-1219089366 +-1219062947 +-1219048290 +-1219036699 +-1219018295 +-1219022891 +-1218972431 +-1218955989 +-1218927805 +-1218913678 +-1218927803 +-1218923109 +-1218890328 +-1218890331 +-1218874049 +-1218890330 +-1218864787 +-1218864786 +-1218874048 +-1218848329 +-1218864786 +-1218848327 +-1218825055 +-1218774171 +-1218774167 +-1218760290 +-1218760289 +-1218722014 +-1218753265 +-1218712530 +-1218705121 +-1218688630 +-1218669796 +-1218702266 +-1218655006 +-1218643199 +-1218612285 +-1218612280 +-1218602955 +-1218602954 +-1218552473 +-1218527038 +-1218468333 +-1218432724 +-1218423200 +-1218398669 +-1218386160 +-1218366268 +-1218356853 +-1218386158 +-1218356852 +-1218386158 +-1218335852 +-1218335851 +-1218326242 +-1218335846 +-1218251973 +-1218262760 +-1218164616 +-1218142395 +-1218120256 +-1218136765 +-1218098325 +-1218098324 +-1218091444 +-1218074581 +-1218059629 +-1218030838 +-1218018655 +-1218018653 +-1218001278 +-1218001277 +-1218001277 +-1218011193 +-1217954956 +-1217968979 +-1217906449 +-1217916082 +-1217906448 +-1217881057 +-1217881055 +-1217869213 +-1217855221 +-1217855216 +-1217814226 +-1217780391 +-1217752827 +-1217765002 +-1217738262 +-1217702599 +-1217702599 +-1217702598 +-1217668931 +-1217653729 +-1217637252 +-1217612840 +-1217603335 +-1217603334 +-1217603334 +-1217571390 +-1217536764 +-1217522662 +-1217501744 +-1217501742 +-1217455834 +-1217442072 +-1217455830 +-1217420961 +-1217403228 +-1217427971 +-1217379894 +-1217363428 +-1217363426 +-1217344276 +-1217337202 +-1217313834 +-1217290542 +-1217264715 +-1217247057 +-1217206492 +-1217159238 +-1217159237 +-1217149525 +-1217122776 +-1217059391 +-1217037949 +-1217014931 +-1217001009 +-1216989141 +-1216989137 +-1216977446 +-1216942683 +-1216942677 +-1216926021 +-1216897574 +-1216852931 +-1216836231 +-1216836230 +-1216821617 +-1216836225 +-1216812105 +-1216786397 +-1216769458 +-1216752200 +-1216739964 +-1216723096 +-1216723096 +-1216705533 +-1216705532 +-1216682001 +-1216665850 +-1216635441 +-1216652901 +-1216635441 +-1216635440 +-1216613198 +-1216598949 +-1216513939 +-1216494232 +-1216494228 +-1216451782 +-1216428710 +-1216410410 +-1216410408 +-1216328461 +-1216328460 +-1216275911 +-1216275911 +-1216275910 +-1216248413 +-1216248412 +-1216248411 +-1216257826 +-1216231351 +-1216219504 +-1216219502 +-1216207758 +-1216191055 +-1216170112 +-1216135294 +-1216101520 +-1216101519 +-1216113714 +-1216111226 +-1216077676 +-1216101516 +-1216001623 +-1216001621 +-1216001620 +-1215962152 +-1215962152 +-1215939453 +-1215897821 +-1215892871 +-1215892870 +-1215864073 +-1215851960 +-1215859309 +-1215809165 +-1215809164 +-1215798940 +-1215777537 +-1215721652 +-1215697097 +-1215691689 +-1215691688 +-1215675910 +-1215638387 +-1215659414 +-1215624200 +-1215624196 +-1215604346 +-1215580592 +-1215580587 +-1215544558 +-1215520270 +-1215499953 +-1215520268 +-1215490631 +-1215435117 +-1215435115 +-1215447486 +-1215412927 +-1215380496 +-1215358179 +-1215340894 +-1215276365 +-1215276364 +-1215259230 +-1215249172 +-1215289657 +-1215234668 +-1215234667 +-1215215483 +-1215177905 +-1215168530 +-1215168529 +-1215150072 +-1215147772 +-1215147772 +-1215130251 +-1215113281 +-1215075966 +-1215033281 +-1215011621 +-1214962179 +-1214962178 +-1214919737 +-1214902214 +-1214873705 +-1214871097 +-1214855236 +-1214863450 +-1214816933 +-1214795170 +-1214768245 +-1214778720 +-1214743036 +-1214756148 +-1214696966 +-1214682900 +-1214653212 +-1214682899 +-1214614954 +-1214609322 +-1214594660 +-1214609321 +-1214609320 +-1214594660 +-1214578309 +-1214578305 +-1214561794 +-1214536350 +-1214511579 +-1214511579 +-1214540991 +-1214487132 +-1214472285 +-1214448504 +-1214448504 +-1214427332 +-1214413178 +-1214397905 +-1214386318 +-1214372467 +-1214352954 +-1214313493 +-1214271330 +-1214271329 +-1214252454 +-1214235806 +-1214235804 +-1214216811 +-1214184591 +-1214173050 +-1214173049 +-1214151215 +-1214151214 +-1214130501 +-1214115992 +-1214106458 +-1214092400 +-1214068801 +-1214022978 +-1214022977 +-1214037659 +-1213990039 +-1213990038 +-1213990038 +-1213980523 +-1213990032 +-1213950074 +-1213938334 +-1213926327 +-1213894750 +-1213875467 +-1213833801 +-1213831353 +-1213828983 +-1213826622 +-1213819395 +-1213819395 +-1213802480 +-1213780504 +-1213790416 +-1213790416 +-1213738415 +-1213686457 +-1213669932 +-1213658005 +-1213635150 +-1213628235 +-1213573386 +-1213573379 +-1213546806 +-1213529703 +-1213483622 +-1213513269 +-1213449646 +-1213440243 +-1213440243 +-1213396159 +-1213382010 +-1213382007 +-1213338273 +-1213285746 +-1213251659 +-1213237660 +-1213237659 +-1213237659 +-1213175154 +-1213144876 +-1213156719 +-1213128812 +-1213144875 +-1213117233 +-1213107996 +-1213077482 +-1213084589 +-1213068099 +-1213041481 +-1213025152 +-1213025151 +-1213020495 +-1213004781 +-1212987607 +-1212975716 +-1212916896 +-1212868780 +-1212842021 +-1212842019 +-1212842019 +-1212863841 +-1212822284 +-1212800906 +-1212777536 +-1212777532 +-1212777532 +-1212748500 +-1212736187 +-1212714963 +-1212703336 +-1212687103 +-1212661197 +-1212661196 +-1212633991 +-1212651196 +-1212608847 +-1212608846 +-1212587994 +-1212515420 +-1212515419 +-1212499874 +-1212499870 +-1212481339 +-1212481338 +-1212497467 +-1212481337 +-1212464713 +-1212467158 +-1212467157 +-1212429850 +-1212408582 +-1212324262 +-1212253053 +-1212213705 +-1212185614 +-1212185613 +-1212146170 +-1212136243 +-1212111694 +-1212088163 +-1212074074 +-1212074074 +-1212067143 +-1212055239 +-1212031182 +-1212031181 +-1212031180 +-1212036015 +-1212021697 +-1211961417 +-1211908355 +-1211906036 +-1211891806 +-1211871926 +-1211871926 +-1211845042 +-1211854477 +-1211828325 +-1211773897 +-1211718747 +-1211706875 +-1211706874 +-1211742683 +-1211688817 +-1211728273 +-1211661777 +-1211642450 +-1211620355 +-1211587761 +-1211568848 +-1211537713 +-1211537711 +-1211511543 +-1211492244 +-1211492243 +-1211492243 +-1211463082 +-1211453600 +-1211416892 +-1211402890 +-1211402889 +-1211389202 +-1211367927 +-1211367926 +-1211346942 +-1211346941 +-1211330353 +-1211330351 +-1211273020 +-1211273017 +-1211263271 +-1211243353 +-1211234019 +-1211224620 +-1211204398 +-1211204397 +-1211204392 +-1211187657 +-1211164189 +-1211152283 +-1211135693 +-1211135692 +-1211116936 +-1211090678 +-1211090677 +-1211064436 +-1211045564 +-1211025178 +-1211025177 +-1210996360 +-1210972823 +-1210962997 +-1210923326 +-1210920900 +-1210892709 +-1210835687 +-1210835682 +-1210835686 +-1210806944 +-1210817592 +-1210760666 +-1210735164 +-1210735160 +-1210694645 +-1210701556 +-1210669135 +-1210666758 +-1210606807 +-1210606806 +-1210606805 +-1210597216 +-1210597215 +-1210597214 +-1210582949 +-1210606801 +-1210573574 +-1210544499 +-1210530734 +-1210518776 +-1210518775 +-1210504641 +-1210482438 +-1210457501 +-1210487212 +-1210457499 +-1210438096 +-1210423339 +-1210423334 +-1210388748 +-1210377109 +-1210377109 +-1210377108 +-1210346735 +-1210346734 +-1210323841 +-1210311958 +-1210296680 +-1210321349 +-1210273353 +-1210273352 +-1210273351 +-1210245811 +-1210229553 +-1210219461 +-1210206780 +-1210245804 +-1210206779 +-1210245803 +-1210164758 +-1210183528 +-1210134169 +-1210120171 +-1210120170 +-1210091730 +-1210064792 +-1210064790 +-1209992731 +-1209992730 +-1209975162 +-1209970551 +-1209965911 +-1209919226 +-1209919225 +-1209897248 +-1209904181 +-1209882986 +-1209853283 +-1209882986 +-1209843837 +-1209826402 +-1209813750 +-1209804414 +-1209756362 +-1209756358 +-1209746945 +-1209722682 +-1209700738 +-1209710153 +-1209710152 +-1209700736 +-1209677552 +-1209670450 +-1209649035 +-1209635098 +-1209628263 +-1209597253 +-1209580712 +-1209568698 +-1209568697 +-1209568694 +-1209534303 +-1209519456 +-1209521946 +-1209500889 +-1209465902 +-1209481473 +-1209449454 +-1209416916 +-1209407460 +-1209383632 +-1209383629 +-1209383631 +-1209365808 +-1209298997 +-1209281625 +-1209319754 +-1209271927 +-1209253096 +-1209236594 +-1209236593 +-1209236592 +-1209227407 +-1209217796 +-1209217795 +-1209176532 +-1209147741 +-1209129288 +-1209108170 +-1209115305 +-1209115304 +-1209108170 +-1209093864 +-1209069449 +-1209037988 +-1209025426 +-1209037981 +-1208990775 +-1208990774 +-1208990778 +-1208961673 +-1208945339 +-1208945338 +-1208916962 +-1208916961 +-1208865747 +-1208858302 +-1208820481 +-1208801765 +-1208838955 +-1208778640 +-1208765991 +-1208756670 +-1208747039 +-1208747037 +-1208711773 +-1208648895 +-1208648893 +-1208601081 +-1208571005 +-1208571007 +-1208571007 +-1208530579 +-1208539684 +-1208535134 +-1208518868 +-1208481235 +-1208467336 +-1208420591 +-1208420590 +-1208420589 +-1208415704 +-1208400412 +-1208400411 +-1208415703 +-1208359909 +-1208303304 +-1208303304 +-1208312509 +-1208310176 +-1208237740 +-1208226341 +-1208226340 +-1208217135 +-1208196146 +-1208172625 +-1208170265 +-1208155965 +-1208167952 +-1208165586 +-1208155962 +-1208100018 +-1208109855 +-1208063366 +-1208063365 +-1208073278 +-1208034665 +-1208034664 +-1208012587 +-1207965378 +-1207907914 +-1207910420 +-1207858225 +-1207858224 +-1207858224 +-1207841923 +-1207841922 +-1207858224 +-1207827733 +-1207827732 +-1207813596 +-1207804186 +-1207783187 +-1207737736 +-1207703862 +-1207671119 +-1207644215 +-1207619867 +-1207595860 +-1207595860 +-1207573758 +-1207564322 +-1207573755 +-1207573753 +-1207501586 +-1207529987 +-1207475677 +-1207463680 +-1207463679 +-1207439326 +-1207439325 +-1207425536 +-1207395093 +-1207395091 +-1207383200 +-1207345535 +-1207322169 +-1207319564 +-1207286493 +-1207286499 +-1207242759 +-1207222506 +-1207202800 +-1207179109 +-1207198046 +-1207161592 +-1207161590 +-1207161590 +-1207142804 +-1207104078 +-1207081006 +-1207074190 +-1207071875 +-1207048577 +-1207048576 +-1207034436 +-1207027560 +-1207015598 +-1207006102 +-1207006101 +-1206963921 +-1206933255 +-1206909445 +-1206891871 +-1206891870 +-1206875396 +-1206875396 +-1206928619 +-1206875395 +-1206856598 +-1206856597 +-1206817673 +-1206801305 +-1206768847 +-1206788053 +-1206756081 +-1206756080 +-1206746790 +-1206725304 +-1206713298 +-1206694178 +-1206674872 +-1206662939 +-1206662938 +-1206646742 +-1206612043 +-1206574305 +-1206569488 +-1206530061 +-1206508830 +-1206492008 +-1206516776 +-1206471114 +-1206423693 +-1206421368 +-1206409500 +-1206409499 +-1206385680 +-1206338114 +-1206321893 +-1206319574 +-1206298520 +-1206298519 +-1206272278 +-1206272278 +-1206257878 +-1206243260 +-1206219796 +-1206219795 +-1206219795 +-1206202670 +-1206176938 +-1206100234 +-1206090207 +-1206112893 +-1206055287 +-1206037465 +-1206027956 +-1206027955 +-1206037461 +-1206004830 +-1205988352 +-1205978960 +-1205988347 +-1205988346 +-1205960469 +-1205939021 +-1205924084 +-1205868618 +-1205868616 +-1205847319 +-1205814773 +-1205782213 +-1205776500 +-1205745208 +-1205706669 +-1205720909 +-1205680835 +-1205716110 +-1205632631 +-1205603423 +-1205603420 +-1205584548 +-1205584546 +-1205574902 +-1205574901 +-1205565442 +-1205505540 +-1205505540 +-1205505539 +-1205505540 +-1205496036 +-1205482138 +-1205465343 +-1205450203 +-1205417953 +-1205402244 +-1205383942 +-1205367645 +-1205336229 +-1205326980 +-1205313344 +-1205289320 +-1205326978 +-1205289318 +-1205272148 +-1205272148 +-1205244450 +-1205272146 +-1205229543 +-1205167466 +-1205121067 +-1205100917 +-1205075977 +-1205075976 +-1205062639 +-1205062638 +-1205062637 +-1205044631 +-1205035130 +-1205051795 +-1205023434 +-1205011705 +-1204997289 +-1204987673 +-1204952730 +-1204909312 +-1204909311 +-1204933338 +-1204884084 +-1204845420 +-1204828770 +-1204819347 +-1204787368 +-1204766178 +-1204743869 +-1204709830 +-1204707449 +-1204678699 +-1204678699 +-1204665222 +-1204658283 +-1204658282 +-1204602895 +-1204529848 +-1204529847 +-1204514586 +-1204486800 +-1204474982 +-1204474981 +-1204474987 +-1204450273 +-1204432996 +-1204383915 +-1204383915 +-1204383911 +-1204364629 +-1204344522 +-1204322810 +-1204298821 +-1204298816 +-1204242243 +-1204242241 +-1204225558 +-1204216391 +-1204216389 +-1204225557 +-1204183447 +-1204159169 +-1204142716 +-1204142715 +-1204123844 +-1204123843 +-1204123839 +-1204066016 +-1204066015 +-1204041766 +-1204013344 +-1204006267 +-1203994626 +-1203994625 +-1203994625 +-1203982793 +-1203971040 +-1203971039 +-1203982792 +-1203940167 +-1203928639 +-1203928638 +-1203916615 +-1203916614 +-1203880787 +-1203850072 +-1203838488 +-1203857156 +-1203822323 +-1203822321 +-1203793988 +-1203773994 +-1203750753 +-1203755864 +-1203706144 +-1203665347 +-1203665345 +-1203634362 +-1203634365 +-1203584404 +-1203634365 +-1203576875 +-1203572268 +-1203572267 +-1203564863 +-1203541986 +-1203525593 +-1203516201 +-1203510328 +-1203478654 +-1203453762 +-1203453761 +-1203453761 +-1203463442 +-1203434773 +-1203403084 +-1203386405 +-1203377217 +-1203358614 +-1203347073 +-1203326120 +-1203303882 +-1203311510 +-1203286991 +-1203286990 +-1203286989 +-1203303881 +-1203270244 +-1203270243 +-1203196192 +-1203196192 +-1203196188 +-1203196187 +-1203156948 +-1203139291 +-1203139289 +-1203132200 +-1203120281 +-1203108503 +-1203063149 +-1203032279 +-1203017260 +-1202954533 +-1202963353 +-1202923043 +-1202910678 +-1202900526 +-1202910675 +-1202854878 +-1202831364 +-1202854878 +-1202831362 +-1202854877 +-1202810228 +-1202831362 +-1202797460 +-1202763489 +-1202763488 +-1202763485 +-1202742540 +-1202723732 +-1202691225 +-1202672569 +-1202674871 +-1202636022 +-1202618774 +-1202618773 +-1202636024 +-1202598829 +-1202552306 +-1202542913 +-1202552302 +-1202530138 +-1202552300 +-1202500854 +-1202470218 +-1202470217 +-1202444506 +-1202444505 +-1202419114 +-1202416793 +-1202388544 +-1202371130 +-1202375904 +-1202348954 +-1202320829 +-1202348953 +-1202250340 +-1202261646 +-1202219676 +-1202199291 +-1202199290 +-1202184593 +-1202173556 +-1202173553 +-1202138994 +-1202113017 +-1202098964 +-1202081926 +-1202081925 +-1202098958 +-1202055988 +-1202055983 +-1202055987 +-1202055982 +-1202029724 +-1202014363 +-1202019495 +-1202004106 +-1201966927 +-1201943417 +-1201943416 +-1201931599 +-1201931598 +-1201948068 +-1201903957 +-1201891972 +-1201891971 +-1201833110 +-1201802758 +-1201773019 +-1201743347 +-1201775432 +-1201724395 +-1201712654 +-1201724391 +-1201724390 +-1201724389 +-1201679091 +6 +-1201609264 +-1201570604 +-1201535613 +-1201521627 +-1201507448 +-1201495057 +-1201485532 +-1201471763 +-1201469439 +-1201441119 +-1201428634 +-1201428633 +-1201441116 +-1201411380 +-1201409028 +-1201394866 +-1201369431 +-1201394861 +-1201338340 +-1201248803 +-1201239053 +-1201217600 +-1201217599 +-1201217598 +-1201195640 +-1201186041 +-1201167330 +-1201181433 +-1201115842 +-1201094435 +-1201068740 +-1201051226 +-1201041609 +-1201023912 +-1200984305 +-1200994109 +-1200946997 +-1200946996 +-1200918803 +-1200898859 +-1200873276 +-1200863625 +-1200840916 +-1200840914 +-1200812807 +-1200782793 +-1200746334 +-1200746333 +-1200731853 +-1200675385 +-1200675384 +-1200687392 +-1200665643 +-1200687392 +-1200655393 +-1200655391 +-1200610392 +-1200598704 +-1200532135 +-1200539108 +-1200532135 +-1200494135 +-1200513050 +-1200477495 +-1200460118 +-1200447462 +-1200431245 +-1200416725 +-1200431244 +-1200431243 +-1200416724 +-1200416723 +-1200329875 +-1200329874 +-1200281164 +-1200267130 +-1200244463 +-1200244461 +-1200230260 +-1200182371 +-1200182368 +-1200118109 +-1200118108 +-1200084493 +-1200060439 +-1200096020 +-1200035511 +-1200005730 +-1199965983 +-1199965987 +-1199948890 +-1199917204 +-1199917203 +-1199896471 +-1199903360 +-1199852618 +-1199830650 +-1199830649 +-1199835745 +-1199784101 +-1199784099 +-1199784102 +-1199764012 +-1199764010 +-1199708191 +-1199703247 +-1199688966 +-1199688968 +-1199662623 +-1199648259 +-1199648257 +-1199648254 +-1199615689 +-1199572336 +-1199548485 +-1199538923 +-1199506714 +-1199504393 +-1199504394 +-1199476517 +-1199476516 +-1199476515 +-1199499709 +-1199466914 +-1199420798 +-1199388055 +-1199351697 +-1199351696 +-1199337325 +-1199337323 +-1199351696 +-1199317505 +-1199296059 +-1199300680 +-1199268333 +-1199230672 +-1199230670 +-1199237469 +-1199190306 +-1199154215 +-1199154214 +-1199165921 +-1199165920 +-1199132578 +-1199132578 +-1199139612 +-1199139611 +-1199103545 +-1199103544 +-1199058275 +-1199025933 +-1198961922 +-1198971402 +-1198961921 +-1198948048 +-1198948047 +-1198933789 +-1198933788 +-1198933784 +-1198871889 +-1198837063 +-1198844612 +-1198837062 +-1198817682 +-1198817681 +-1198802234 +-1198802228 +-1198780959 +-1198760978 +-1198732888 +-1198703804 +-1198681105 +-1198613407 +-1198593974 +-1198581510 +-1198581510 +-1198568601 +-1198526499 +-1198526498 +-1198517329 +-1198501148 +-1198512775 +-1198489442 +-1198489441 +-1198430341 +-1198418314 +-1198408057 +-1198390268 +-1198377003 +-1198357871 +-1198357870 +-1198325192 +-1198325191 +-1198303251 +-1198307982 +-1198273630 +-1198265215 +-1198217146 +-1198207883 +-1198192757 +-1198181272 +-1198181271 +-1198147630 +-1198128581 +-1198126256 +-1198100455 +-1198078043 +-1198051336 +-1198030056 +-1198010160 +-1197994365 +-1197985542 +-1197958810 +-1197958808 +-1197936061 +-1197910234 +-1197893600 +-1197884039 +-1197884038 +-1197884038 +-1197898346 +-1197893596 +-1197866720 +-1197818766 +-1197783002 +-1197759535 +-1197759535 +-1197733518 +-1197733517 +-1197719371 +-1197754718 +-1197747571 +-1197689903 +-1197689898 +-1197640560 +-1197612216 +-1197612215 +-1197626584 +-1197577080 +-1197555482 +-1197542673 +-1197542672 +-1197529845 +-1197542672 +-1197506114 +-1197513442 +-1197465797 +-1197446875 +-1197446873 +-1197400023 +-1197383222 +-1197358660 +-1197356346 +-1197326432 +-1197313867 +-1197295959 +-1197295959 +-1197245501 +-1197245497 +-1197211174 +-1197154897 +-1197150281 +-1197112009 +-1197131903 +-1197100270 +-1197088811 +-1197074548 +-1197022460 +-1196986001 +-1196995468 +-1196970053 +-1196970053 +-1196953935 +-1196944551 +-1196936387 +-1196944549 +-1196884255 +-1196857307 +-1196845239 +-1196824255 +-1196838245 +-1196810183 +-1196771296 +-1196793666 +-1196737811 +-1196737811 +-1196727551 +-1196705093 +-1196705092 +-1196688579 +-1196690942 +-1196679193 +-1196679193 +-1196650054 +-1196606576 +-1196576187 +-1196542380 +-1196493888 +-1196425952 +-1196392858 +-1196392857 +-1196361717 +-1196336898 +-1196336897 +-1196336894 +-1196336894 +-1196336893 +-1196327641 +-1196309229 +-1196304714 +-1196220671 +-1196220670 +-1196220670 +-1196200576 +-1196208054 +-1196129582 +-1196121555 +-1196076406 +-1196054978 +-1196076399 +-1196024275 +-1195998982 +-1195994187 +-1195998981 +-1195975723 +-1195930187 +-1195908843 +-1195908842 +-1195868580 +-1195880758 +-1195847821 +-1195845434 +-1195815310 +-1195815309 +-1195805766 +-1195788606 +-1195713133 +-1195684572 +-1195684571 +-1195655750 +-1195653391 +-1195653390 +-1195633964 +-1195626926 +-1195626925 +-1195603247 +-1195593812 +-1195579800 +-1195570707 +-1195579799 +-1195570705 +-1195532105 +-1195532104 +-1195513558 +-1195522746 +-1195501976 +-1195495171 +-1195485663 +-1195445848 +-1195445846 +-1195434044 +-1195402178 +-1195372382 +-1195372381 +-1195372381 +-1195350218 +-1195327080 +-1195319856 +-1195317044 +-1195280007 +-1195284852 +-1195280004 +-1195280005 +-1195245581 +-1195223183 +-1195179333 +-1195140451 +-1195140450 +-1195127748 +-1195107260 +-1195080041 +-1195080040 +-1195061284 +-1195007819 +-1194970306 +-1194922629 +-1194920306 +-1194917960 +-1194899617 +-1194938882 +-1194891970 +-1194873976 +-1194873975 +-1194837979 +-1194830789 +-1194805063 +-1194779382 +-1194779381 +-1194761880 +-1194761879 +-1194734315 +-1194724034 +-1194712169 +-1194684543 +-1194645257 +-1194621293 +-1194601257 +-1194591690 +-1194572482 +-1194567577 +-1194577415 +-1194551006 +-1194540740 +-1194496104 +-1194484312 +-1194484310 +-1194460238 +-1194428041 +-1194428039 +-1194470011 +-1194399319 +-1194389904 +-1194371745 +-1194371744 +-1194311855 +-1194266977 +-1194232510 +-1194232509 +-1194232507 +-1194217565 diff --git a/Pipe/threads.c b/Pipe/threads.c index 8ceeb6f..620528c 100644 --- a/Pipe/threads.c +++ b/Pipe/threads.c @@ -6,103 +6,32 @@ #include "ringbuffer.h" #include "pipe.h" +#define NUMBER_OF_ELEMENTS 1000 + /* Integrate every element of the signal. */ -static void increment(pipe_t * const p) +static void increment(pipe_t * const pipe) { - while (Pipe_isFilled(p)) + uint8_t check = 1; + while (Pipe_IsFilled(pipe)) { - uint32_t item = Pipe_Read(p); - item++; - Pipe_Write(p, item); + uint32_t item = Pipe_Read(pipe); + + // do something + + Pipe_Write(pipe, item); } } - -/* Print the signal. */ -static void write_to_file1(pipe_t * const pipe) -{ - HANDLE hFile; - char DataBuffer[128]; - DWORD dwBytesWritten = 0; - - hFile = CreateFile("thread1.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - - while (1) { - while (Pipe_isFilled(pipe)) - { - sprintf_s(DataBuffer, 128, "%d\r\n", Pipe_Read(pipe)); - WriteFile(hFile, DataBuffer, (DWORD)strlen(DataBuffer), &dwBytesWritten, NULL); - } - } -} - -static void write_to_file2(pipe_t * const pipe) -{ - HANDLE hFile; - char DataBuffer[128]; - DWORD dwBytesWritten = 0; - - hFile = CreateFile("thread2.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); - - while (1) { - while (Pipe_isFilled(pipe)) - { - sprintf_s(DataBuffer, 128, "%d\r\n", Pipe_Read(pipe)); - WriteFile(hFile, DataBuffer, (DWORD)strlen(DataBuffer), &dwBytesWritten, NULL); - } - } -} - -DWORD WINAPI incrementThread1(LPVOID lpParam) -{ - pipe_t * pipe = (pipe_t *)lpParam; - LARGE_INTEGER time; - - while (1) - { - /* Generate input */ - QueryPerformanceCounter(&time); - Pipe_Insert(pipe, (uint32_t)time.u.LowPart); - QueryPerformanceCounter(&time); - Pipe_Insert(pipe, (uint32_t)time.u.LowPart); - QueryPerformanceCounter(&time); - Pipe_Insert(pipe, (uint32_t)time.u.LowPart); - - increment(pipe); - } - - return 0; -} - -DWORD WINAPI incrementThread2(LPVOID lpParam) -{ - pipe_t * pipe = (pipe_t *)lpParam; - LARGE_INTEGER time; - - while (1) - { - /* Generate input */ - QueryPerformanceCounter(&time); - Pipe_Insert(pipe, (uint32_t)time.u.LowPart); - QueryPerformanceCounter(&time); - Pipe_Insert(pipe, (uint32_t)time.u.LowPart); - QueryPerformanceCounter(&time); - Pipe_Insert(pipe, (uint32_t)time.u.LowPart); - - increment(pipe); - } - - return 0; -} - -DWORD WINAPI incrementThread3(LPVOID lpParam) +DWORD WINAPI Thread1(LPVOID lpParam) { pipe_t * pipe = (pipe_t *)lpParam; - while (1) - { - increment(pipe); - } + /* Generate input */ + for (int i = 0; i < NUMBER_OF_ELEMENTS; i++) + Pipe_Insert(pipe, 42); + increment(pipe); + + Pipe_Write(pipe, UINT32_MAX); return 0; } @@ -110,50 +39,242 @@ DWORD WINAPI incrementThread3(LPVOID lpParam) DWORD WINAPI Thread2(LPVOID lpParam) { pipe_t * pipe = (pipe_t *)lpParam; - write_to_file2(pipe); + + /* Generate input */ + for (int i = 0; i < NUMBER_OF_ELEMENTS; i++) + Pipe_Insert(pipe, 23); + increment(pipe); + + Pipe_Write(pipe, UINT32_MAX); return 0; } -DWORD WINAPI Thread1(LPVOID lpParam) +DWORD WINAPI Thread3(LPVOID lpParam) { pipe_t * pipe = (pipe_t *)lpParam; - write_to_file1(pipe); + uint32_t item = 0; + uint8_t check = 1; + uint8_t symbol_counter = 0; + + while (symbol_counter < 2) + { + while (Pipe_IsFilled(pipe)) + { + item = Pipe_Read(pipe); + + if (item == UINT32_MAX) + { + symbol_counter++; + break; + } + + if (item != 42 && item != 23) + printf("failed\n"); + + Pipe_Write(pipe, item); + } + } + + Pipe_Write(pipe, UINT32_MAX); return 0; } -static void log(pipe_t * const source, pipe_t * const target, uint32_t element) {} - -void threads(void) +DWORD WINAPI Thread4(LPVOID lpParam) { - /* Create pipes and connect them */ - Pipe_Create(increment_pipe1, 4, 1, NULL, log); - Pipe_Create(increment_pipe2, 4, 1, NULL, log); - Pipe_Create(increment_pipe3, 8, 2, NULL, log); - Pipe_Create(write_to_file1_pipe, 8, 1, NULL, log); - Pipe_Create(write_to_file2_pipe, 8, 1, NULL, log); + pipe_t * pipe = (pipe_t *)lpParam; + uint32_t item = 0; + uint8_t check = 1; + + while (item != UINT32_MAX) + { + while (Pipe_IsFilled(pipe)) + { + item = Pipe_Read(pipe); - Pipe_Connect(&increment_pipe1, &increment_pipe3); - Pipe_Connect(&increment_pipe2, &increment_pipe3); - Pipe_Connect(&increment_pipe3, &write_to_file1_pipe); - Pipe_Connect(&increment_pipe3, &write_to_file2_pipe); + if (item == UINT32_MAX) + break; - /* Create Threads */ - CreateThread(NULL, 0, incrementThread1, &increment_pipe1, 0, NULL); - CreateThread(NULL, 0, incrementThread2, &increment_pipe2, 0, NULL); - CreateThread(NULL, 0, incrementThread3, &increment_pipe3, 0, NULL); + if (item != 42 && item != 23) + printf("failed\n"); - HANDLE thread1Handle, thread2Handle; + Pipe_Write(pipe, item); + } + } - thread1Handle = CreateThread(NULL, 0, Thread1, &write_to_file1_pipe, 0, NULL); - thread2Handle = CreateThread(NULL, 0, Thread2, &write_to_file2_pipe, 0, NULL); - - HANDLE threadHandles[] = { thread1Handle, thread2Handle }; - WaitForMultipleObjects(2, threadHandles, TRUE, INFINITE); - - CloseHandle(thread1Handle); - CloseHandle(thread2Handle); + Pipe_Write(pipe, UINT32_MAX); return 0; +} + +DWORD WINAPI Thread5(LPVOID lpParam) +{ + pipe_t * pipe = (pipe_t *)lpParam; + uint32_t item = 0; + uint8_t check = 1; + + while (item != UINT32_MAX) + { + while (Pipe_IsFilled(pipe)) + { + item = Pipe_Read(pipe); + if (item == 0 || item > 102) + { + check = 0; + } + + if (item == UINT32_MAX) + break; + + Pipe_Write(pipe, item); + } + } + + Pipe_Write(pipe, UINT32_MAX); + + return 0; +} + +void Run_Threads(pipe_t * pipe1, pipe_t * pipe2, pipe_t * pipe3, pipe_t * pipe4, pipe_t * pipe5) +{ + /* Create Threads */ + HANDLE threadHandles[5]; + + threadHandles[0] = CreateThread(NULL, 0, Thread1, pipe1, 0, NULL); + threadHandles[1] = CreateThread(NULL, 0, Thread2, pipe2, 0, NULL); + threadHandles[2] = CreateThread(NULL, 0, Thread3, pipe3, 0, NULL); + threadHandles[3] = CreateThread(NULL, 0, Thread4, pipe4, 0, NULL); + threadHandles[4] = CreateThread(NULL, 0, Thread5, pipe5, 0, NULL); + + WaitForMultipleObjects(5, threadHandles, TRUE, INFINITE); + + CloseHandle(threadHandles[0]); + CloseHandle(threadHandles[1]); + CloseHandle(threadHandles[2]); + CloseHandle(threadHandles[3]); + CloseHandle(threadHandles[4]); +} + +uint8_t ringbuffer_valid_and_equal(ringbuffer_t * rb1, ringbuffer_t * rb2) +{ + //char DataBuffer[128]; + //DWORD dwBytesWritten; + + uint32_t element1 = 0; + uint32_t element2 = 0; + uint32_t element_42_counter = 0; + uint32_t element_23_counter = 0; + + while (1) + { + element1 = RingBuffer_Read(rb1); + element2 = RingBuffer_Read(rb2); + + if (element1 != element2) + printf("Elements unequal!\n"); + + if (element1 == UINT32_MAX) + break; + + if (element1 == 42) + { + element_42_counter++; + //sprintf_s(DataBuffer, 128, "%u - %u\r\n", element1, element_42_counter); + } + + if (element1 == 23) + { + element_23_counter++; + //sprintf_s(DataBuffer, 128, "%u - %u\r\n", element1, element_23_counter); + } + + //WriteFile(h, DataBuffer, (DWORD)strlen(DataBuffer), &dwBytesWritten, NULL); + } + + if ((element_42_counter != element_23_counter) || (element_42_counter != NUMBER_OF_ELEMENTS)) + { + printf("error!\n"); + return 0; + } + return 1; +} + +static void log(pipe_t * const source, pipe_t * const target, uint32_t element) +{ + /*wchar_t text[64]; + swprintf_s(text, 64, L"%s: %d\n", source->name, element); + OutputDebugStringW(text);*/ +} + +void threads(uint32_t loops) +{ + /* Create pipes and connect them */ + Pipe_Create(increment_pipe1, 1, 1, NULL, log); + Pipe_Create(increment_pipe2, 1, 1, NULL, log); + Pipe_Create(increment_pipe3, 2, 2, NULL, log); + Pipe_Create(increment_pipe4, 1, 1, NULL, log); + Pipe_Create(increment_pipe5, 1, 1, NULL, log); + Pipe_Create(check_pipe1, 1, 1, NULL, log); + Pipe_Create(check_pipe2, 1, 1, NULL, log); + + Pipe_CreateInputBuffer(increment_pipe1, NUMBER_OF_ELEMENTS+2); + Pipe_CreateInputBuffer(increment_pipe2, NUMBER_OF_ELEMENTS+2); + + Pipe_CreateConnection(increment_pipe1, increment_pipe3, NUMBER_OF_ELEMENTS+2); + Pipe_CreateConnection(increment_pipe2, increment_pipe3, NUMBER_OF_ELEMENTS+2); + Pipe_CreateConnection(increment_pipe3, increment_pipe4, NUMBER_OF_ELEMENTS * 2 + 2); + Pipe_CreateConnection(increment_pipe3, increment_pipe5, NUMBER_OF_ELEMENTS * 2 + 2); + Pipe_CreateConnection(increment_pipe4, check_pipe1, NUMBER_OF_ELEMENTS * 2 + 2); + Pipe_CreateConnection(increment_pipe5, check_pipe2, NUMBER_OF_ELEMENTS * 2 + 2); + + //HANDLE hFile; + //hFile = CreateFile("buffer.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + + SYSTEMTIME local_time; + GetLocalTime(&local_time); + + printf("\n"); + printf("Starting Thread Test\n"); + printf("at %02d/%02d/%02d %02d:%02d:%02d\n", local_time.wYear, local_time.wMonth, local_time.wDay, local_time.wHour, local_time.wMinute, local_time.wSecond); + printf("\n"); + + LARGE_INTEGER Frequency; + LARGE_INTEGER StartingTime, EndingTime, ElapsedMicroseconds; + QueryPerformanceFrequency(&Frequency); + QueryPerformanceCounter(&StartingTime); + + uint32_t success_counter = 0; + for (int i = 0; i < loops; i++) + { + Run_Threads(&increment_pipe1, &increment_pipe2, &increment_pipe3, &increment_pipe4, &increment_pipe5); + + //if (ringbuffer_valid_and_equal(check_pipe1.input_connector->connection[0], check_pipe2.input_connector->connection[0], hFile)) + if (ringbuffer_valid_and_equal(check_pipe1.input_connector->connection[0], check_pipe2.input_connector->connection[0])) + success_counter++; + } + QueryPerformanceCounter(&EndingTime); + ElapsedMicroseconds.QuadPart = EndingTime.QuadPart - StartingTime.QuadPart; + ElapsedMicroseconds.QuadPart *= 1000000; + ElapsedMicroseconds.QuadPart /= Frequency.QuadPart; + int seconds = ElapsedMicroseconds.QuadPart / 1000000; + + int hours = seconds / 3600; + int minutes = (seconds - (hours * 3600)) / 60; + seconds = seconds - (minutes * 60); + + printf("Loops: %d\n", loops); + printf("Successfull: %d\n", success_counter); + printf("Failed: %d\n", loops - success_counter); + printf("Count of Concurrent Data Operations: %d\n", 2 * NUMBER_OF_ELEMENTS * loops); + + printf("\n"); + GetLocalTime(&local_time); + printf("Test finished\n"); + printf("at %02d/%02d/%02d %02d:%02d:%02d\n", local_time.wYear, local_time.wMonth, local_time.wDay, local_time.wHour, local_time.wMinute, local_time.wSecond); + printf("Elapsed time: %02d:%02d:%02d", hours, minutes, seconds); + printf("\n"); + + + //CloseHandle(hFile); } \ No newline at end of file