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