From c061fa77eba54399278226c5fcf8f4a389e655b1 Mon Sep 17 00:00:00 2001 From: Alex Perry Date: Tue, 12 Sep 2017 12:37:18 -0700 Subject: [PATCH 1/6] finish CPU implementation. --- src/main.cpp | 244 ++++++++++++++++----------------- stream_compaction/common.cu | 54 ++++---- stream_compaction/cpu.cu | 134 +++++++++++------- stream_compaction/efficient.cu | 83 +++++------ stream_compaction/naive.cu | 53 +++---- stream_compaction/thrust.cu | 60 ++++---- 6 files changed, 337 insertions(+), 291 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 7305641..9a538ac 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -18,126 +18,126 @@ const int NPOT = SIZE - 3; // Non-Power-Of-Two int a[SIZE], b[SIZE], c[SIZE]; int main(int argc, char* argv[]) { - // Scan tests - - printf("\n"); - printf("****************\n"); - printf("** SCAN TESTS **\n"); - printf("****************\n"); - - genArray(SIZE - 1, a, 50); // Leave a 0 at the end to test that edge case - a[SIZE - 1] = 0; - printArray(SIZE, a, true); - - // initialize b using StreamCompaction::CPU::scan you implement - // We use b for further comparison. Make sure your StreamCompaction::CPU::scan is correct. - // At first all cases passed because b && c are all zeroes. - zeroArray(SIZE, b); - printDesc("cpu scan, power-of-two"); - StreamCompaction::CPU::scan(SIZE, b, a); - printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); - printArray(SIZE, b, true); - - zeroArray(SIZE, c); - printDesc("cpu scan, non-power-of-two"); - StreamCompaction::CPU::scan(NPOT, c, a); - printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); - printArray(NPOT, b, true); - printCmpResult(NPOT, b, c); - - zeroArray(SIZE, c); - printDesc("naive scan, power-of-two"); - StreamCompaction::Naive::scan(SIZE, c, a); - printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); - printCmpResult(SIZE, b, c); - - zeroArray(SIZE, c); - printDesc("naive scan, non-power-of-two"); - StreamCompaction::Naive::scan(NPOT, c, a); - printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); - printCmpResult(NPOT, b, c); - - zeroArray(SIZE, c); - printDesc("work-efficient scan, power-of-two"); - StreamCompaction::Efficient::scan(SIZE, c, a); - printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); - printCmpResult(SIZE, b, c); - - zeroArray(SIZE, c); - printDesc("work-efficient scan, non-power-of-two"); - StreamCompaction::Efficient::scan(NPOT, c, a); - printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(NPOT, c, true); - printCmpResult(NPOT, b, c); - - zeroArray(SIZE, c); - printDesc("thrust scan, power-of-two"); - StreamCompaction::Thrust::scan(SIZE, c, a); - printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(SIZE, c, true); - printCmpResult(SIZE, b, c); - - zeroArray(SIZE, c); - printDesc("thrust scan, non-power-of-two"); - StreamCompaction::Thrust::scan(NPOT, c, a); - printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(NPOT, c, true); - printCmpResult(NPOT, b, c); - - printf("\n"); - printf("*****************************\n"); - printf("** STREAM COMPACTION TESTS **\n"); - printf("*****************************\n"); - - // Compaction tests - - genArray(SIZE - 1, a, 4); // Leave a 0 at the end to test that edge case - a[SIZE - 1] = 0; - printArray(SIZE, a, true); - - int count, expectedCount, expectedNPOT; - - // initialize b using StreamCompaction::CPU::compactWithoutScan you implement - // We use b for further comparison. Make sure your StreamCompaction::CPU::compactWithoutScan is correct. - zeroArray(SIZE, b); - printDesc("cpu compact without scan, power-of-two"); - count = StreamCompaction::CPU::compactWithoutScan(SIZE, b, a); - printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); - expectedCount = count; - printArray(count, b, true); - printCmpLenResult(count, expectedCount, b, b); - - zeroArray(SIZE, c); - printDesc("cpu compact without scan, non-power-of-two"); - count = StreamCompaction::CPU::compactWithoutScan(NPOT, c, a); - printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); - expectedNPOT = count; - printArray(count, c, true); - printCmpLenResult(count, expectedNPOT, b, c); - - zeroArray(SIZE, c); - printDesc("cpu compact with scan"); - count = StreamCompaction::CPU::compactWithScan(SIZE, c, a); - printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); - printArray(count, c, true); - printCmpLenResult(count, expectedCount, b, c); - - zeroArray(SIZE, c); - printDesc("work-efficient compact, power-of-two"); - count = StreamCompaction::Efficient::compact(SIZE, c, a); - printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(count, c, true); - printCmpLenResult(count, expectedCount, b, c); - - zeroArray(SIZE, c); - printDesc("work-efficient compact, non-power-of-two"); - count = StreamCompaction::Efficient::compact(NPOT, c, a); - printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); - //printArray(count, c, true); - printCmpLenResult(count, expectedNPOT, b, c); - - system("pause"); // stop Win32 console from closing on exit + // Scan tests + + printf("\n"); + printf("****************\n"); + printf("** SCAN TESTS **\n"); + printf("****************\n"); + + genArray(SIZE - 1, a, 50); // Leave a 0 at the end to test that edge case + a[SIZE - 1] = 0; + printArray(SIZE, a, true); + + // initialize b using StreamCompaction::CPU::scan you implement + // We use b for further comparison. Make sure your StreamCompaction::CPU::scan is correct. + // At first all cases passed because b && c are all zeroes. + zeroArray(SIZE, b); + printDesc("cpu scan, power-of-two"); + StreamCompaction::CPU::scan(SIZE, b, a); + printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); + printArray(SIZE, b, true); + + zeroArray(SIZE, c); + printDesc("cpu scan, non-power-of-two"); + StreamCompaction::CPU::scan(NPOT, c, a); + printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); + printArray(NPOT, b, true); + printCmpResult(NPOT, b, c); + + zeroArray(SIZE, c); + printDesc("naive scan, power-of-two"); + StreamCompaction::Naive::scan(SIZE, c, a); + printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + //printArray(SIZE, c, true); + printCmpResult(SIZE, b, c); + + zeroArray(SIZE, c); + printDesc("naive scan, non-power-of-two"); + StreamCompaction::Naive::scan(NPOT, c, a); + printElapsedTime(StreamCompaction::Naive::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + //printArray(SIZE, c, true); + printCmpResult(NPOT, b, c); + + zeroArray(SIZE, c); + printDesc("work-efficient scan, power-of-two"); + StreamCompaction::Efficient::scan(SIZE, c, a); + printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + //printArray(SIZE, c, true); + printCmpResult(SIZE, b, c); + + zeroArray(SIZE, c); + printDesc("work-efficient scan, non-power-of-two"); + StreamCompaction::Efficient::scan(NPOT, c, a); + printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + //printArray(NPOT, c, true); + printCmpResult(NPOT, b, c); + + zeroArray(SIZE, c); + printDesc("thrust scan, power-of-two"); + StreamCompaction::Thrust::scan(SIZE, c, a); + printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + //printArray(SIZE, c, true); + printCmpResult(SIZE, b, c); + + zeroArray(SIZE, c); + printDesc("thrust scan, non-power-of-two"); + StreamCompaction::Thrust::scan(NPOT, c, a); + printElapsedTime(StreamCompaction::Thrust::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + //printArray(NPOT, c, true); + printCmpResult(NPOT, b, c); + + printf("\n"); + printf("*****************************\n"); + printf("** STREAM COMPACTION TESTS **\n"); + printf("*****************************\n"); + + // Compaction tests + + genArray(SIZE - 1, a, 4); // Leave a 0 at the end to test that edge case + a[SIZE - 1] = 0; + printArray(SIZE, a, true); + + int count, expectedCount, expectedNPOT; + + // initialize b using StreamCompaction::CPU::compactWithoutScan you implement + // We use b for further comparison. Make sure your StreamCompaction::CPU::compactWithoutScan is correct. + zeroArray(SIZE, b); + printDesc("cpu compact without scan, power-of-two"); + count = StreamCompaction::CPU::compactWithoutScan(SIZE, b, a); + printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); + expectedCount = count; + printArray(count, b, true); + printCmpLenResult(count, expectedCount, b, b); + + zeroArray(SIZE, c); + printDesc("cpu compact without scan, non-power-of-two"); + count = StreamCompaction::CPU::compactWithoutScan(NPOT, c, a); + printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); + expectedNPOT = count; + printArray(count, c, true); + printCmpLenResult(count, expectedNPOT, b, c); + + zeroArray(SIZE, c); + printDesc("cpu compact with scan"); + count = StreamCompaction::CPU::compactWithScan(SIZE, c, a); + printElapsedTime(StreamCompaction::CPU::timer().getCpuElapsedTimeForPreviousOperation(), "(std::chrono Measured)"); + printArray(count, c, true); + printCmpLenResult(count, expectedCount, b, c); + + zeroArray(SIZE, c); + printDesc("work-efficient compact, power-of-two"); + count = StreamCompaction::Efficient::compact(SIZE, c, a); + printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + //printArray(count, c, true); + printCmpLenResult(count, expectedCount, b, c); + + zeroArray(SIZE, c); + printDesc("work-efficient compact, non-power-of-two"); + count = StreamCompaction::Efficient::compact(NPOT, c, a); + printElapsedTime(StreamCompaction::Efficient::timer().getGpuElapsedTimeForPreviousOperation(), "(CUDA Measured)"); + //printArray(count, c, true); + printCmpLenResult(count, expectedNPOT, b, c); + + system("pause"); // stop Win32 console from closing on exit } diff --git a/stream_compaction/common.cu b/stream_compaction/common.cu index 8fc0211..5e17f3c 100644 --- a/stream_compaction/common.cu +++ b/stream_compaction/common.cu @@ -1,39 +1,39 @@ #include "common.h" void checkCUDAErrorFn(const char *msg, const char *file, int line) { - cudaError_t err = cudaGetLastError(); - if (cudaSuccess == err) { - return; - } + cudaError_t err = cudaGetLastError(); + if (cudaSuccess == err) { + return; + } - fprintf(stderr, "CUDA error"); - if (file) { - fprintf(stderr, " (%s:%d)", file, line); - } - fprintf(stderr, ": %s: %s\n", msg, cudaGetErrorString(err)); - exit(EXIT_FAILURE); + fprintf(stderr, "CUDA error"); + if (file) { + fprintf(stderr, " (%s:%d)", file, line); + } + fprintf(stderr, ": %s: %s\n", msg, cudaGetErrorString(err)); + exit(EXIT_FAILURE); } namespace StreamCompaction { - namespace Common { +namespace Common { - /** - * Maps an array to an array of 0s and 1s for stream compaction. Elements - * which map to 0 will be removed, and elements which map to 1 will be kept. - */ - __global__ void kernMapToBoolean(int n, int *bools, const int *idata) { - // TODO - } +/** + * Maps an array to an array of 0s and 1s for stream compaction. Elements + * which map to 0 will be removed, and elements which map to 1 will be kept. + */ +__global__ void kernMapToBoolean(int n, int *bools, const int *idata) { + // TODO +} - /** - * Performs scatter on an array. That is, for each element in idata, - * if bools[idx] == 1, it copies idata[idx] to odata[indices[idx]]. - */ - __global__ void kernScatter(int n, int *odata, - const int *idata, const int *bools, const int *indices) { - // TODO - } +/** + * Performs scatter on an array. That is, for each element in idata, + * if bools[idx] == 1, it copies idata[idx] to odata[indices[idx]]. + */ +__global__ void kernScatter(int n, int *odata, + const int *idata, const int *bools, const int *indices) { + // TODO +} - } +} } diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index 05ce667..bfac3c0 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -1,50 +1,86 @@ -#include -#include "cpu.h" - +#include +#include "cpu.h" + #include "common.h" - -namespace StreamCompaction { - namespace CPU { - using StreamCompaction::Common::PerformanceTimer; - PerformanceTimer& timer() - { - static PerformanceTimer timer; - return timer; - } - - /** - * CPU scan (prefix sum). - * For performance analysis, this is supposed to be a simple for loop. - * (Optional) For better understanding before starting moving to GPU, you can simulate your GPU scan in this function first. - */ - void scan(int n, int *odata, const int *idata) { - timer().startCpuTimer(); - // TODO - timer().endCpuTimer(); - } - - /** - * CPU stream compaction without using the scan function. - * - * @returns the number of elements remaining after compaction. - */ - int compactWithoutScan(int n, int *odata, const int *idata) { - timer().startCpuTimer(); - // TODO - timer().endCpuTimer(); - return -1; - } - - /** - * CPU stream compaction using scan and scatter, like the parallel version. - * - * @returns the number of elements remaining after compaction. - */ - int compactWithScan(int n, int *odata, const int *idata) { - timer().startCpuTimer(); - // TODO - timer().endCpuTimer(); - return -1; - } - } -} + +namespace StreamCompaction { +namespace CPU { + +using StreamCompaction::Common::PerformanceTimer; + +PerformanceTimer& timer() +{ + static PerformanceTimer timer; + return timer; +} + +inline void scan_impl(int n, int *odata, const int *idata) { + int sum = 0; + for (int i = 0; i < n; ++i) { + *odata++ = sum; + sum += *idata++; + } +} + +/** + * CPU scan (prefix sum). + * For performance analysis, this is supposed to be a simple for loop. + * (Optional) For better understanding before starting moving to GPU, you can simulate your GPU scan in this function first. + */ +void scan(int n, int *odata, const int *idata) { + timer().startCpuTimer(); + scan_impl(n, odata, idata); + timer().endCpuTimer(); +} + +/** + * CPU stream compaction without using the scan function. + * + * @returns the number of elements remaining after compaction. + */ +int compactWithoutScan(int n, int *odata, const int *idata) { + timer().startCpuTimer(); + int count = 0; + for (int i = 0; i < n; ++i) { + int d = *idata++; + if (d) { + *odata++ = d; + ++count; + } + } + timer().endCpuTimer(); + return count; +} + +void scatter(int n, int *output, const int *map, const int *input) { + for (int i = 0; i < n; ++i) { + output[map[i]] = input[i]; + } +} + +/** + * CPU stream compaction using scan and scatter, like the parallel version. + * + * @returns the number of elements remaining after compaction. + */ +int compactWithScan(int n, int *odata, const int *idata) { + timer().startCpuTimer(); + int *temp = (int*)malloc(sizeof(int)*n); + int *temp2 = (int*)malloc(sizeof(int)*n); + int count = 0; + for (int i = 0; i < n; ++i) { + if (idata[i]) { + temp[i] = 1; + ++count; + } else { + temp[i] = 0; + } + } + scan_impl(n, temp2, temp); + scatter(n, odata, temp2, idata); + timer().endCpuTimer(); + return count; +} + +} // namespace CPU +} // namespace StreamCompaction diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index 36c5ef2..c0a6c0d 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -1,40 +1,43 @@ -#include -#include -#include "common.h" -#include "efficient.h" - -namespace StreamCompaction { - namespace Efficient { - using StreamCompaction::Common::PerformanceTimer; - PerformanceTimer& timer() - { - static PerformanceTimer timer; - return timer; - } - - /** - * Performs prefix-sum (aka scan) on idata, storing the result into odata. - */ - void scan(int n, int *odata, const int *idata) { - timer().startGpuTimer(); - // TODO - timer().endGpuTimer(); - } - - /** - * Performs stream compaction on idata, storing the result into odata. - * All zeroes are discarded. - * - * @param n The number of elements in idata. - * @param odata The array into which to store elements. - * @param idata The array of elements to compact. - * @returns The number of elements remaining after compaction. - */ - int compact(int n, int *odata, const int *idata) { - timer().startGpuTimer(); - // TODO - timer().endGpuTimer(); - return -1; - } - } -} +#include +#include +#include "common.h" +#include "efficient.h" + +namespace StreamCompaction { +namespace Efficient { + +using StreamCompaction::Common::PerformanceTimer; + +PerformanceTimer& timer() +{ + static PerformanceTimer timer; + return timer; +} + +/** + * Performs prefix-sum (aka scan) on idata, storing the result into odata. + */ +void scan(int n, int *odata, const int *idata) { + timer().startGpuTimer(); + // TODO + timer().endGpuTimer(); +} + +/** + * Performs stream compaction on idata, storing the result into odata. + * All zeroes are discarded. + * + * @param n The number of elements in idata. + * @param odata The array into which to store elements. + * @param idata The array of elements to compact. + * @returns The number of elements remaining after compaction. + */ +int compact(int n, int *odata, const int *idata) { + timer().startGpuTimer(); + // TODO + timer().endGpuTimer(); + return -1; +} + +} +} diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 9218f8e..1bd7540 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -1,25 +1,28 @@ -#include -#include -#include "common.h" -#include "naive.h" - -namespace StreamCompaction { - namespace Naive { - using StreamCompaction::Common::PerformanceTimer; - PerformanceTimer& timer() - { - static PerformanceTimer timer; - return timer; - } - // TODO: __global__ - - /** - * Performs prefix-sum (aka scan) on idata, storing the result into odata. - */ - void scan(int n, int *odata, const int *idata) { - timer().startGpuTimer(); - // TODO - timer().endGpuTimer(); - } - } -} +#include +#include +#include "common.h" +#include "naive.h" + +namespace StreamCompaction { +namespace Naive { + +using StreamCompaction::Common::PerformanceTimer; + +PerformanceTimer& timer() +{ + static PerformanceTimer timer; + return timer; +} +// TODO: __global__ + +/** + * Performs prefix-sum (aka scan) on idata, storing the result into odata. + */ +void scan(int n, int *odata, const int *idata) { + timer().startGpuTimer(); + // TODO + timer().endGpuTimer(); +} + +} // namespace Naive +} // namespace StreamCompaction diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index 36b732d..3203db8 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -1,28 +1,32 @@ -#include -#include -#include -#include -#include -#include "common.h" -#include "thrust.h" - -namespace StreamCompaction { - namespace Thrust { - using StreamCompaction::Common::PerformanceTimer; - PerformanceTimer& timer() - { - static PerformanceTimer timer; - return timer; - } - /** - * Performs prefix-sum (aka scan) on idata, storing the result into odata. - */ - void scan(int n, int *odata, const int *idata) { - timer().startGpuTimer(); - // TODO use `thrust::exclusive_scan` - // example: for device_vectors dv_in and dv_out: - // thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); - timer().endGpuTimer(); - } - } -} +#include +#include +#include +#include +#include +#include "common.h" +#include "thrust.h" + +namespace StreamCompaction { +namespace Thrust { + +using StreamCompaction::Common::PerformanceTimer; + +PerformanceTimer& timer() +{ + static PerformanceTimer timer; + return timer; +} + +/** + * Performs prefix-sum (aka scan) on idata, storing the result into odata. + */ +void scan(int n, int *odata, const int *idata) { + timer().startGpuTimer(); + // TODO use `thrust::exclusive_scan` + // example: for device_vectors dv_in and dv_out: + // thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); + timer().endGpuTimer(); +} + +} // namespace Thrust +} // namespace StreamCompaction From 91cba9eb26f5eb1f0da8fde63e1dcd5ea9415891 Mon Sep 17 00:00:00 2001 From: Alex Perry Date: Thu, 14 Sep 2017 19:51:37 -0700 Subject: [PATCH 2/6] Working naive implementation. --- stream_compaction/common.h | 68 +++++++++++++++++++------------------- stream_compaction/naive.cu | 44 +++++++++++++++++++++++- 2 files changed, 77 insertions(+), 35 deletions(-) diff --git a/stream_compaction/common.h b/stream_compaction/common.h index 55f1b38..30d7c28 100644 --- a/stream_compaction/common.h +++ b/stream_compaction/common.h @@ -1,5 +1,5 @@ -#pragma once - +#pragma once + #include #include @@ -7,36 +7,36 @@ #include #include #include -#include +#include #include - -#define FILENAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) -#define checkCUDAError(msg) checkCUDAErrorFn(msg, FILENAME, __LINE__) - -/** - * Check for CUDA errors; print and exit if there was a problem. - */ -void checkCUDAErrorFn(const char *msg, const char *file = NULL, int line = -1); - -inline int ilog2(int x) { - int lg = 0; - while (x >>= 1) { - ++lg; - } - return lg; -} - -inline int ilog2ceil(int x) { - return ilog2(x - 1) + 1; -} - -namespace StreamCompaction { - namespace Common { - __global__ void kernMapToBoolean(int n, int *bools, const int *idata); - - __global__ void kernScatter(int n, int *odata, - const int *idata, const int *bools, const int *indices); - + +#define FILENAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) +#define checkCUDAError(msg) checkCUDAErrorFn(msg, FILENAME, __LINE__) + +/** + * Check for CUDA errors; print and exit if there was a problem. + */ +void checkCUDAErrorFn(const char *msg, const char *file = NULL, int line = -1); + +inline int ilog2(int x) { + int lg = 0; + while (x >>= 1) { + ++lg; + } + return lg; +} + +inline int ilog2ceil(int x) { + return ilog2(x - 1) + 1; +} + +namespace StreamCompaction { + namespace Common { + __global__ void kernMapToBoolean(int n, int *bools, const int *idata); + + __global__ void kernScatter(int n, int *odata, + const int *idata, const int *bools, const int *indices); + /** * This class is used for timing the performance * Uncopyable and unmovable @@ -127,6 +127,6 @@ namespace StreamCompaction { float prev_elapsed_time_cpu_milliseconds = 0.f; float prev_elapsed_time_gpu_milliseconds = 0.f; - }; - } -} + }; + } +} diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 1bd7540..3440c23 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -2,6 +2,9 @@ #include #include "common.h" #include "naive.h" +#include + +#define BLOCK_SIZE 128 namespace StreamCompaction { namespace Naive { @@ -14,14 +17,53 @@ PerformanceTimer& timer() return timer; } // TODO: __global__ +__global__ void naive_scan_impl(int n, int offset, int *odata, const int *idata) { + int index = blockIdx.x*blockDim.x + threadIdx.x; + int out_index = index - offset; + if (out_index < 0) { + odata[index] = idata[index]; + } else if (index < n){ + odata[index] = idata[index] + idata[out_index]; + } +} + +__global__ void shift_impl(int n, int *odata, const int *idata) { + int index = blockIdx.x*blockDim.x + threadIdx.x; + if (index == 0) { + odata[0] = 0; + } + if (index < n - 1) { + odata[index + 1] = idata[index]; + } +} /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + dim3 fullBlocksPerGrid((n + BLOCK_SIZE - 1) / BLOCK_SIZE); + int *dev_array_A; + int *dev_array_B; + cudaMalloc((void**)&dev_array_A, n * sizeof(int)); + cudaMalloc((void**)&dev_array_B, n * sizeof(int)); + cudaMemcpy(dev_array_B, idata, sizeof(int) * n, cudaMemcpyHostToDevice); + bool direction = false; + int *temp = (int*)malloc(sizeof(int) * n); + timer().startGpuTimer(); - // TODO + shift_impl<<>>(n, dev_array_A, dev_array_B); + cudaMemcpy(dev_array_B, dev_array_A, sizeof(int), cudaMemcpyDeviceToDevice); + + for (int offset = 1; offset < n; offset *= 2) { + if (direction) { + naive_scan_impl<<>>(n, offset, dev_array_A, dev_array_B); + } else { + naive_scan_impl<<>>(n, offset, dev_array_B, dev_array_A); + } + direction = !direction; + } timer().endGpuTimer(); + cudaMemcpy(odata, (!direction ? dev_array_A : dev_array_B), sizeof(int) * n, cudaMemcpyDeviceToHost); } } // namespace Naive From 1bf72e988dca070b3e6a27751e4989104862b288 Mon Sep 17 00:00:00 2001 From: Alex Perry Date: Fri, 15 Sep 2017 18:19:05 -0700 Subject: [PATCH 3/6] Finished work-efficient part of code. --- src/main.cpp | 1 + stream_compaction/common.cu | 12 ++++- stream_compaction/efficient.cu | 93 ++++++++++++++++++++++++++++++++-- stream_compaction/naive.cu | 3 +- 4 files changed, 103 insertions(+), 6 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 9a538ac..eaa6e44 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,6 +14,7 @@ #include "testing_helpers.hpp" const int SIZE = 1 << 8; // feel free to change the size of array +//const int SIZE = 1 << 3; // feel free to change the size of array const int NPOT = SIZE - 3; // Non-Power-Of-Two int a[SIZE], b[SIZE], c[SIZE]; diff --git a/stream_compaction/common.cu b/stream_compaction/common.cu index 5e17f3c..6da332f 100644 --- a/stream_compaction/common.cu +++ b/stream_compaction/common.cu @@ -23,7 +23,10 @@ namespace Common { * which map to 0 will be removed, and elements which map to 1 will be kept. */ __global__ void kernMapToBoolean(int n, int *bools, const int *idata) { - // TODO + int index = threadIdx.x + blockDim.x * blockIdx.x; + if (index < n) { + bools[index] = idata[index] == 0 ? 0 : 1; + } } /** @@ -32,7 +35,12 @@ __global__ void kernMapToBoolean(int n, int *bools, const int *idata) { */ __global__ void kernScatter(int n, int *odata, const int *idata, const int *bools, const int *indices) { - // TODO + int index = threadIdx.x + blockDim.x * blockIdx.x; + if (index < n) { + if (bools[index]) { + odata[indices[index]] = idata[index]; + } + } } } diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index c0a6c0d..ca79cfd 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -2,6 +2,9 @@ #include #include "common.h" #include "efficient.h" +#include "iostream" + +#define BLOCK_SIZE 128 namespace StreamCompaction { namespace Efficient { @@ -14,13 +17,68 @@ PerformanceTimer& timer() return timer; } +__global__ void UpSweep(int n, int offset, int *data) { + int index = threadIdx.x + blockIdx.x * blockDim.x; + int first_index = offset*(index)*2 + offset - 1; + int end_index = first_index + offset; + if (end_index < n) { + data[end_index] += data[first_index]; + } +} + +__global__ void set_zero(int n, int *data) { + data[n - 1] = 0; +} + +__global__ void clear_array(int n, int*data) { + int index = threadIdx.x + blockIdx.x * blockDim.x; + if (index < n) { + data[index] = 0; + } +} + +__global__ void DownSweep(int n, int offset, int *data) { + int index = threadIdx.x + blockIdx.x * blockDim.x; + if (index < n) { + //int left_index = index + (offset >> 1) - 1; + //int right_index = index + offset - 1; + int left_index = offset*index*2 + offset - 1; + int right_index = left_index + offset; + if (left_index < n && right_index < n) { + int temp = data[left_index]; + data[left_index] = data[right_index]; + data[right_index] += temp; + } + } +} + +void scan_impl(int arr_length, int *dev_array) { + dim3 fullBlocksPerGrid((arr_length + BLOCK_SIZE - 1) / BLOCK_SIZE); + for (int offset = 1; offset < arr_length; offset *= 2) { + UpSweep<<>>(arr_length, offset, dev_array); + } + set_zero<<>>(arr_length, dev_array); + for(int offset = arr_length/2; offset >= 1; offset = offset >> 1) { + DownSweep<<>>(arr_length, offset, dev_array); + } +} + /** * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + dim3 fullBlocksPerGrid((n + BLOCK_SIZE - 1) / BLOCK_SIZE); + int arr_length = (1 << ilog2ceil(n)); + int *dev_array; + cudaMalloc((void**)&dev_array, arr_length * sizeof(int)); + clear_array<<>>(arr_length, dev_array); + cudaMemcpy(dev_array, idata, sizeof(int) * n, cudaMemcpyHostToDevice); + timer().startGpuTimer(); - // TODO + scan_impl(arr_length, dev_array); timer().endGpuTimer(); + cudaMemcpy(odata, dev_array, sizeof(int) * n, cudaMemcpyDeviceToHost); + cudaFree(dev_array); } /** @@ -33,10 +91,39 @@ void scan(int n, int *odata, const int *idata) { * @returns The number of elements remaining after compaction. */ int compact(int n, int *odata, const int *idata) { + dim3 fullBlocksPerGrid((n + BLOCK_SIZE - 1) / BLOCK_SIZE); + int arr_length = (1 << ilog2ceil(n)); + int *dev_array_data; + int *dev_array_bool; + int *dev_array_indices; + int *dev_array_out; + + cudaMalloc((void**)&dev_array_data, arr_length * sizeof(int)); + cudaMalloc((void**)&dev_array_bool, arr_length * sizeof(int)); + cudaMalloc((void**)&dev_array_indices, arr_length * sizeof(int)); + cudaMalloc((void**)&dev_array_out, arr_length * sizeof(int)); + + clear_array<<>>(n, dev_array_data); + cudaMemcpy(dev_array_data, idata, n * sizeof(int), cudaMemcpyHostToDevice); timer().startGpuTimer(); - // TODO + Common::kernMapToBoolean<<>>(n, dev_array_bool, dev_array_data); + cudaMemcpy(dev_array_indices, dev_array_bool, arr_length * sizeof(int), cudaMemcpyDeviceToDevice); + scan_impl(arr_length, dev_array_indices); + + // int *temp = (int*)malloc(n * sizeof(int)); + // cudaMemcpy(temp, dev_array_indices, n * sizeof(int), cudaMemcpyDeviceToHost); + // for (int i = 0; i < n; ++i) { + // std::cout << temp[i] << "\n"; + // } + + Common::kernScatter<<>>(n, dev_array_out, dev_array_data, dev_array_bool, dev_array_indices); timer().endGpuTimer(); - return -1; + cudaMemcpy(odata, dev_array_out, n*sizeof(int), cudaMemcpyDeviceToHost); + int ret; + int ret2; + cudaMemcpy(&ret, dev_array_bool + n - 1, sizeof(int), cudaMemcpyDeviceToHost); + cudaMemcpy(&ret2, dev_array_indices + n - 1, sizeof(int), cudaMemcpyDeviceToHost); + return ret + ret2; } } diff --git a/stream_compaction/naive.cu b/stream_compaction/naive.cu index 3440c23..d0d8ba5 100644 --- a/stream_compaction/naive.cu +++ b/stream_compaction/naive.cu @@ -48,7 +48,6 @@ void scan(int n, int *odata, const int *idata) { cudaMalloc((void**)&dev_array_B, n * sizeof(int)); cudaMemcpy(dev_array_B, idata, sizeof(int) * n, cudaMemcpyHostToDevice); bool direction = false; - int *temp = (int*)malloc(sizeof(int) * n); timer().startGpuTimer(); shift_impl<<>>(n, dev_array_A, dev_array_B); @@ -64,6 +63,8 @@ void scan(int n, int *odata, const int *idata) { } timer().endGpuTimer(); cudaMemcpy(odata, (!direction ? dev_array_A : dev_array_B), sizeof(int) * n, cudaMemcpyDeviceToHost); + cudaFree(dev_array_A); + cudaFree(dev_array_B); } } // namespace Naive From 05d24666886cd7a563b0baf970d34d8c133940be Mon Sep 17 00:00:00 2001 From: Alex Perry Date: Sun, 17 Sep 2017 11:44:00 -0700 Subject: [PATCH 4/6] finish thrust implementation. --- stream_compaction/efficient.cu | 7 ------- stream_compaction/thrust.cu | 8 +++++--- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/stream_compaction/efficient.cu b/stream_compaction/efficient.cu index ca79cfd..7d07494 100644 --- a/stream_compaction/efficient.cu +++ b/stream_compaction/efficient.cu @@ -109,13 +109,6 @@ int compact(int n, int *odata, const int *idata) { Common::kernMapToBoolean<<>>(n, dev_array_bool, dev_array_data); cudaMemcpy(dev_array_indices, dev_array_bool, arr_length * sizeof(int), cudaMemcpyDeviceToDevice); scan_impl(arr_length, dev_array_indices); - - // int *temp = (int*)malloc(n * sizeof(int)); - // cudaMemcpy(temp, dev_array_indices, n * sizeof(int), cudaMemcpyDeviceToHost); - // for (int i = 0; i < n; ++i) { - // std::cout << temp[i] << "\n"; - // } - Common::kernScatter<<>>(n, dev_array_out, dev_array_data, dev_array_bool, dev_array_indices); timer().endGpuTimer(); cudaMemcpy(odata, dev_array_out, n*sizeof(int), cudaMemcpyDeviceToHost); diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index 3203db8..22feded 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -3,6 +3,7 @@ #include #include #include +#include #include "common.h" #include "thrust.h" @@ -21,11 +22,12 @@ PerformanceTimer& timer() * Performs prefix-sum (aka scan) on idata, storing the result into odata. */ void scan(int n, int *odata, const int *idata) { + thrust::host_vector hv_in(idata, idata + n); + thrust::device_vector dv_in = hv_in; timer().startGpuTimer(); - // TODO use `thrust::exclusive_scan` - // example: for device_vectors dv_in and dv_out: - // thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); + thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_in.begin()); timer().endGpuTimer(); + thrust::copy(dv_in.begin(), dv_in.end(), odata); } } // namespace Thrust From 2a45e0b2f2ec50eee5f98fbb0bd5d1d906663918 Mon Sep 17 00:00:00 2001 From: Alex Perry Date: Tue, 19 Sep 2017 21:59:03 -0400 Subject: [PATCH 5/6] Add Readme. --- README.md | 22 +++++++++++++++++----- img/non_power_of_two.PNG | Bin 0 -> 45581 bytes img/non_power_of_two_release.PNG | Bin 0 -> 47426 bytes img/power_of_two.PNG | Bin 0 -> 46686 bytes img/power_of_two_release.PNG | Bin 0 -> 45435 bytes 5 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 img/non_power_of_two.PNG create mode 100644 img/non_power_of_two_release.PNG create mode 100644 img/power_of_two.PNG create mode 100644 img/power_of_two_release.PNG diff --git a/README.md b/README.md index b71c458..7cd36f5 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,23 @@ CUDA Stream Compaction **University of Pennsylvania, CIS 565: GPU Programming and Architecture, Project 2** -* (TODO) YOUR NAME HERE -* Tested on: (TODO) Windows 22, i7-2222 @ 2.22GHz 22GB, GTX 222 222MB (Moore 2222 Lab) +* Alexander Perry +* Tested on: Windows 10, i5-2410M @ 2.30GHz 8GB, NVS 4200M -### (TODO: Your README) +### Analysis +![](./img/power_of_two_release.PNG) -Include analysis, etc. (Remember, this is public, so don't put -anything here that you don't want to share with the world.) +![](./img/non_power_of_two_release.PNG) +The most obvious thing to note is that longer arrays take longer to sort. +Beyond that we can see that algorithms that are supposed to more efficient are generally less efficient as implemented. +The CPU algorithm is the fastest algorithm, followed by the thrust implementation and then by the naive GPU solution, with the work-efficient GPU solution. + +I was able to get occupancy of the GPU for all of my algorithm up to 100\%. There are a maximum of 8 blocks and 1536 threads on my GPU. This leads to an optimum number of threads per block of 192. This is also only 6 warps per block and 48 warps total. + +Based on the timeline, there are many back and forth copys from the GPU to main memory in the thrust implementation. +Even though the thrust implementation uses all of these copys, it is still faster than my GPU attempts. I suspect this is due to memory accesses. + +![](./img/power_of_two.PNG) +The previous graph is based on a debug build. +An interesting thing to note is that the thrust implementation is less optimal in a debug setting compared to the release build. diff --git a/img/non_power_of_two.PNG b/img/non_power_of_two.PNG new file mode 100644 index 0000000000000000000000000000000000000000..b5e37ddac5eeb36b51882338b2d9076cb1ffe5f3 GIT binary patch literal 45581 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 literal 0 HcmV?d00001 diff --git a/img/non_power_of_two_release.PNG b/img/non_power_of_two_release.PNG new file mode 100644 index 0000000000000000000000000000000000000000..58a069b83b6b20e2a95e0335ba79c37fd0d2ebc5 GIT binary patch literal 47426 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 ACIA2c literal 0 HcmV?d00001 diff --git a/img/power_of_two.PNG b/img/power_of_two.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d24e784c733ea380b0c9fd2206d26fde778ae61f GIT binary patch literal 46686 zcmce;XH-*L7cOi=nsk&7B3-0~E&&wjRX|0hgpPDVM*}Fm1d!fA0Ra`M(vjXvkRmnI zKqAsY4+O~Fob#6R-tqnVe%v1p2JVsUz1Ey-&iRy0Sl_T?2l(X7^C%;iXFzapb2KM8NN)Zt5>QE?uJa zy!dx{-j>7n(xvJ>4dsVVe9bn_h|*Z>YDy^xco@Fb=TH_SSH*X=&)POY8}#v`cA7;y z9U>%s#6k|bk(Qo5J2*I~y@_^dOixeGg$x^isX?Y}y7*`by%^43|FQfmS@V;DMuVgM z563gY?GS1u63&p{)ZD0xpVUg8)CtgwpCp|3N&4#kx=76yVr}x*#Ry6zknmp@m5Di- z82 z_T%+ZQEotcj{KV}t-l`prCwvN@5`6WCkN|xD=Q{ef5tx-fBDkh?2pHy;uP=PyEj;W zbKyfl!L^Ps3db3}z@7l-TS6~anpCnxl9Q9uL@lla;FgHtOybw~&_jkGVc5g&tm^^ykWlCZ_jpoVj{1(dA?Veu&qVU zz>w+Bp%`#V#ED8$AzMP$dt}!}?D0rS{yNPN_doIELWAR2n3=P*^y~&wgnlFI#oIeN zvTOf}MV2P85G$*E8oEibH-}DK??_2Wi;!kUMwq5l*E>uMc6aXFY41HK)XB`M&0_mI zl!(wC_ill}q*n1W_;40`TTSL!V82}^2pt~zd*WNBY>H{4wO~ub! z0)F^qefV&De0)4@FQO;a-uCn$dUpE9o7#GaR!!h34(fpqA|lt7EAutOLN~42Favwg z-uIlC1K7nef)sXGBTdKOAAKa*BTt3QYde1A*5^L%8g6msOcS?@rSTyf-d!EgJ60;% zhcfj<-4q;LJQFBP()7WekBp39@4*XT-za`ppYyRB$^HzhAwwTqIdWg zr07L7g*kE)c}OQ$9T8{C3Ol~oV=OccWJ$i09@{l-4I`YN*%JKpTm8NLb$r`;F^;(` zCWy0aF{?1ylu}HXAktMB^V%f$2({28FCft8l!+;!;0QM8_c{)ov>H69Q`lB}>ETir zj2}2#Iy+`Z`Snc345#6vNW8C&InK?OIO+`QumU3}f@I5KjCETY$5r0*MT9-Ko>sSaH zUcBQ?84x)O`JJR^ps#OXppEM?eg6E_N^CFz?VRK^DH3SJ=!XGCT~*0zYHAYTOWSQ# z=jaNFf1;pJJK*IT-x__Te>;8g1b!RDtZq?xB*?|pv7wktT&uz#fn?8*gDGflE}aRq zfUjpMPnkUMlUsdXyO%ai+gB`}y0;t}m@CvXog$*(!%mEs5${K+OW52K6dWj-%|Nx0 z@NN%GPTtaSNjzE=p-$x0afosg*NKQzIY#fHPgtZ~oM>egC|xmo1uOa_n?16#6>h}& zC$Mh<)u***8Ca7g+0IRFKE6yZKcugI8|o1!c(&quoczBJ16YAeEmmT-HdkEaRvi^g z7_8`bgCx~ZyZ-z*i)CwZy=QZ$x_o;WGw6|k;T3VgNmmRLH?x}{Hg_u`&dgQ`vTNxB zb>C84a(jYW9Ci*cB4Sctkvet}YhOsSqHm6NI%qWsGXNp;ZF*K}vi9F7h%f&FJGaI1 z8vJz9zkRAyWW5XBh`9YJL|;NP`fJF}Lel-H8=>dgSps%hH^ulVzZ#V(=(OWlnRHy6 z154eEk-S}v#l^jT>wV;xbb~&X>$mb3!EYE)n=ZK*nq!Z5{Ai6IFjcJVqNfJ@oQ6Y% zAW6OGp4bt`$=}|NvBay9!;$vlHBa2-V6jP>{V8WA0*CM~GcELP{$|B>ay5scVQe-E zlNGNJhnurQ9_Hf>$9py>L^g5p?ksp57U@j7g@C#=9($l2`%qmy%O155V>5Hm^5B7A z%R~;aZH}vVe@SJ%?~fLp+?x+*Zj$kqSLh5V1NjdoPdMeajAD=7jSttm_JYbHO?Sr+ zPQB)cU2+-xny4=t?kQ7lBGl&ydZy%}yN7?wTyGlCCvNcjKL6bzjw)HZ1gNp<++1p& znD@qWx?f;J&1)(__2u+2ZNbEuoBGB4oF=x>*Ew?A5hO)yvRCiE_(GYdbK5o^)hVBHwW{qCIJDjYx=`P%y&_`lnH1gzb~p z?($n#xpoR9hm%F;g4bs;v4Zee!w`X%n&&y2xVnxxSzR3SF1S2b+$MFz8r`&qTwDlY z0GGxSfSs@lVvvM6HLEu9FIKEntSZz43mdLI#v_t}jEQ$C?Z9-B8{nJD4WDdy;b49= zLz6*%EA(!7d8-!Ji{=}+8k7iiNrfN>U2QwZ=41>r$Yc}Yv&*(cLUrvIm7)iqORC96 z6uqn>wtC2ar<9Jy`PjO1fo+Ir&8a6W%duY2F0l+fYrnY@5fdZH@CXju#qIeSGCM!`-^L(v~Mvb#hb)Zy0iEi8$fkh1>mq2iDd20;+w^v{#sO_| zzYTK5ckuXh17ci9X_!|>1-=Daz%pW4m(DdVhAf;MLjl~Qad6Bg;BzCiMg%L~C&Sg4 zbbXT4MXKg;eLp7sLy4PzX^*oQLrQ|f0Do7xpYp^_xf6Tx(dk$U*-3XJ1TREeZ85+- zh!a?l(b^VRQ!$fVJBV7m6=dxCa{F*DDY zT!#)L{ol3Gv#9H9x;N8K zm7_@&Es;$y&q1AhR4Lm55B$z<(Q6-j)~#5Iid4h5&Y!__H89BqHME{#n7|;C*j=F~ zSYLZy*TQ-e`X(?ftQFIVL1&~q2t3)J$_8+j~MB&4USi)&$PsVVU7s%Fen8Ig@LBELvDDwo5Mwsc$ zUDUVfW(uykCaPQpu9ec^XnUQe2Uho^*N+Ftjn0EwJ(9OM0gTWNsb93tf=mJBz>}X( zE9IUT6MMO5#CND`F+|{OZTftTnNWcwkRTh;{LPAK;=^am@~^+kx*(0rL}%js6fSaQcBWF}z9UY9NUqIvrzg-eJWj|?L==xcGV3P1N$kO4l3=F(Qo?9f;xdPNS zH)HJ%^J{6t;S79s?I|Lv-vq#5TbPq3JHds0#0e+@+?g#hk0&z7nGAjF0!!_gq+pbA zg!oK91dNk`vl=4!>kfBhCV^=IVyqw)8ec|SJ2V+SI(eG+p&Eq18>$KvB844uXR%6) z+Oq4XnYE3&*5B=i>X#_zb9Wud<%x6UL|AbF(6a*+%(_W(wsr}hEQ#|ot1B#~c8ROq zsm2`lPDacwO8Gs+ysqE|P7IEVJrNqk5-6;g$olvR|IJcJp|C@5F>c<><_WST0x=eteFuC`tuO7BUvyC)}t!(!M(EEp2~`9J#%s$uktrrvGizsa?)yZruz3-5mk2#i(SF%o>(^3?l(tUF_MlGXcIg0MWLl{o*_sfgWscL{D@cZUZPYvQVqr zpW$EhO59^3qwp71w&~xKva(n)-}p4NwUy)8<>9aBjJpNKhBWl_q~rHhqHk$*`!oLi z8D(;TZzXC08m7^zX3%eYW7D7+ZZ;M8xNORq;1?kHa_Mc-?WeY&&kx1{viEKCrr$v%x%{ zw-aIo6XT_{um6P*%F6uyU4rho@IfxA?xK^ElLSE_6TVloHP>kM>&w#wD2FOY`1BUK z$Hvz7K4F)mZrHmt7wg~N-j006j`cb{IHQTco-X^L<9zqd^cSATEoM=}?@QehDGQ_< zE(sWcGfe)N=Pt}y@pa(YIs;vk4)Fc{6jh@aEau|Z;30_VPFb$%s}tO^&g$WklVeHb z)048~U|`^5IY~xvtG3dUYwwuc; zGAj-akQ!a;Qd+lXf&;}Nr;BaDyi}&3twwAgWgc7$U4XOo=?|e?^A|`>?qqJRmM@oLVhP}(opG|-ytxE1OK1kL!ou=$ z>a&xBj*aQ6In~qjy!P?i{gNNSRo^)c^}RP|en~u!52bssc^`F304NO}ltP5H2~H>h zxE>_z&q}QO%9AWIb^l(gwr#SKI$*BXn*L`09I!-RctVlFL+RUqH`CDQdSM z3O+n;4OCc@_Jws-F|yph9Dl6e`=wXa&pFg6Z_zHVAdiyC@0YETtroFLlcd0A5*j$^ zX(x;HR+GPF2s+2-J3SmU%*+lhRW?XTyHjmZOWh?(Qc~!=W!o1afE*J)UhV7aLl}qF z0(4{xaPXVnS)2G~JV@N>Z_q5!LB7?MYwp(B+wOcSejWnRYaS%Q4fC47-!LeKybBLc z>&swTP3Qk6@aPe$?{NFw0~M9f&yw?BjYRI5)cus$Tv}}LW8p#q4501YM6V3jvQy$h ztt-T^2n+&^MjSW!?PWNmR(a-Og@Jg~0%;))JcS+|3CL{raX6cOBer9HtIlf4zs?p7 zf%c6H!rywF`p<9TpsrLKnhU|>qZ0H+44Hof-rd-1n7$JD`{zg1oOCk~4CglXXI>K1 zC<#LJzBV&spZI2M$Lr_b$f_MV4cz}h^5=b?i}a6&le^w#V#q-&B|}xKsO;EOT7rYI zt)o3|a~mw!S$m_5-_k@`O7r$T($7=t+O#|G72g#d71nLn$Z*=~07EIyXLIW8AH72i z4LL)VGnEj%a-Wd%E)O5R>l0^S3;t)KnY;qAKcx<)X|uvkMcHACrloTXNLPKvO51^G zcjnP)(Ll1yc`ct!YF$w==VD?Ahz8_oc8Wch4h~zBIEe1a zHyXERN`9VQhKycLtnKa{L&}4dGrN@ELhgi=0Y~${cR%Mwl{i)236NBnJ|uF<31kq? zeN7P{d3>bWD!cV^pK4!Tf||IBGBYxbN0R5V5vfYV#Q%K0Sr|3AHlI*=b76DK;i*#k zfsqMl)tV=%Ww3erdx2eb(n?*GnHC%gX0~9W>HRvW<{bRT5NO~3Q(4M-W%lYHd31>4ev^PJPc_C8 z=BsJR256hB*W?GIUqnph$*eqCF()jY1stDKx2OKk35ZSEsmt?)Q)R;Kj9RQ;j#kn3 z5A&UOlgR9~5}C` zT$%-y4_GP*X;;T}4CJHX=$Mjzs{;8pjvNnmR`JcegCqQ*eOlTWfIb6;L zpC}!p23xX#oI$7@AJ<#8r)h-$dkTBPQvt$nzK;87Z`8>Cd z2C}^oBzJ2*&e86SB2~M-Nu!kj!q~!U@x)HL^HCwo$}2`Uzkm7vxc#OON|K^_D!qny z?&zT1UyEJg8*P6wPzK^^0%C2Tfje+!I0isZ3PsL<+ zzb}5n{010IA9pXXU%BZ8>8c%_(B&4-nPgx84mn;u@R!@y(^p>p;%B`Tdjx5=_ixw zzJ-jk15f`-?w|E&jFxG*Y_R7P6^-3O$GNQsz0oEfgy^1U)40XX-kOiz!oRUHI$`Ig z=lfXx1)G)pcm_DPgp2V+CsWD-=<>y%Wm{ygw2S{UJBQM(o4yy`_)0sGHx}#aRs`f% zm!YsDEmm>39*Ef=xK|`g7MyuW1W)cw{?J@6umzavZ6BzN{ zCnv8qts((^#PVc+4IKc~TA-SX09Eb3XSft(_S7i!o51W&M^3IbPmVuaI56;6||PnbnD+6>$}-5=9a*U*5@ zySp&6u*9dPh9i+C5)!`WMsy?Y{}Z|5Iudd3L8aVBS9LH0Er=gPEml1Ab^=QMIKlM= z<;N@9AsCfA`S-5g^lGM=PJ+L=-tP;{jw8S<=``Oo9r0Zd!-Z=10W#u0E$NDG@r?nB zo`}T}9A?+f?QFjVwYxT%Mw&*C1!R7H5A@4vSFnzpd)E7*c@h!6o1_P1{g)f zthzr063*3ibi9Ns-1tyDJUqO7uv6R)qx@@$pr9aXI=V6L-9b7?rFA6J>Cya;H)4Lf z)^q|sJlx!!PFzAlL#IO~dmZ6anO<|wM*mE6l{d6TNpCfl40o0rCbhL*KU1pEqA}>) zhMe%9aInMA(uw1rCji9*U%7uR4=$aQ`k`60%qD;F$%wN+(oVqH36oeMd^k-El?2{K zgLG+%xTyf;W_{wD_=qPujEV_VAh6v8OwsBWkPHw$swkprD8`J?!?|%59bq5q>ZVS0 z+A!YyJHS*gi3b6)MU`uw|3B*3_nT5v>2%^8uC6DoPvq-gqaoTWvxuuL_FLJ$KF4ZP z84YX|Dm#TdKcw$|{7(Fi7ZoZV#<}?o|NaCmFT~=C4Bp6{f8=btKB~cwO2PuO@r7om zz6VHinZkn^1GoyS9=K?DSXf?3$&J<3Rdr3x_P3X>miz8la{U^z$ts&I*3TCOWH!1p zUKJG;Te*vgkYV$pa{bfsRF%*d(GOzeN#AYbJn zLqkK+3fhWmBl*O6`S~$85lA!ZgX-_YXYvu zLr|#WX}3U2l6C(!AZo$g8V8t)M9WO-M+=HXC$sdo0iYn==i|Y|2k4ZxjTRObXy`=A z3o8TDv_qwL7?svI#q(D+UCuMX_=(e#%T6x$4VV&-BdduCP(*q!-+ZXiCnR_Su3h8NQL8xe~EFr zs5J6$xmp`xp1lnF3a6VOu@jcbp9rU9yRXwNJDs496)-GJV_tzf8J4Hx{iT@f_F>36 zC~tD;h*wlicAjO~@Yz(kMX;atWZOQIW+PBocf7lEz6}bFT_~1<2rSkOV=$5fRK|* zaQ15(LsF$!twOVR;VJU5W!~Q2y(gZmz2FGka>%XPi@l~gIG!$!j8;B~EWZ^uv# zhNa$kF0?C4>7z;L51lN<1SpkxZWfGgXNdbhPsyM_k4A;^l}mUNz2?|(9o5`2JH73a z_J*Z2W2eaQc^nq_EYZ`KzVJHD}(23R0Ox^-5$0~yzRDF^{` zow#M^ne|IAt-rm=MYq+unjY<)tI^H$V8x&5vg`SrvY1^5XOwhkRxlknowuXsS%xP5 zHq+7VZ^=+J#QrbSP zC7m#Y*I$v%(2@`-&Tt(LTL-O%4%9oJ=LTwZ&QkT&5!-)*GtkqgMba?~v7CN}Q&9e2 zOQ4~lS@KR7p$ha5{O+Z!s$yw~wbe$76J<;LbnOY6wat+emb7J$#f5X+{StjWP6Ph@ zsterW@(n!h`Q2hcZM&TneG~u8a$xD347K~ErT8Tmjv{&DVUZlWt(4;vZ1NFti()9& zh#SRT08pHQM(5)NBb9BVI$6HUF2HTK#E<6YKokosNihI*Q#%0j!>!}v(^=;?9y3ml^2vbY$x-=AC`5P>qb9*8I<^mUMMVEO%qM zK8fD+<2iQW=okyeFbs?P48Z(x{rHZp+X5kqKykR;&vbOJA7C8bR({NaF1)*`>HTTD zE2LZi2g6VL0w}1?f9XeI8)CaC`=uq;C^0bZO)5AXHSg`aef?Ya7224?wpG5TZItUt12mxytn62zgEj4?)7p z|A4H%_%_e@n7&N0JH9vO7fwmpUmofq8y49OE#I38nHuT}lQ+z8VulximMJFhe(TV7 zL(MvX-ayk(|B2~Jl>i^+Vu}Yg_upt{XD`3zBVxr-B*yri0x|LOs+a5X`KP$WZa<&J zIB^0T(&$-T5aMwKt+hV?VEgJ>1-Ca7r5%T)so3k``2Gby;4|xxz(lrnF&u=-CD>NVWO!y>LHBS5}q-Kw{UV{taJ9l$pv( zzDi^ZV3dc|CV$9dfw~UeP6*eDYy-$8_LeNq%CD;`bRv?8q6>4UG-2#)kp~(qPzgLE zz{$Ngjd!l$K>%~vKf>|uHmW|^Zz{QF*0Xx!`xy(kd6x-U|NF9`CHCl{QEq~}`x=nz zZ8n5X2D#?00<8ViQXS-#iwvz+!h6V5b6%II3BUq(r~KcueOo9mDkdgIonNzV~pf&c`z|hj* zx$-P9I?zo08(p<7*fcdXGk>hNcOi~(m6Lx^d-QSUA5U| zW)W2PK{p&}C(~(z`N*u|pXS6w&5&UxRNeq>?mrLd^kw~vzP{1B(HRiEQR;{C2I}MF z<3eq-XDYWw2S7U9()HX#q+O8_f>F|vC9iOJeOs11r%&zWqh&I26(iAZi^`C*3DmfiN0$=U`7saeW$%B>C7K zJ9BqmYThutu8^O7j4Ytb`AXduzSvhcDA+^W)WWP5mpFlAPkqA5`ZkC7WQi|a)Ms{b zY{jA023A=^*F3c^WVV162Acc_0Wn_yKdaU`A2<8Egt|EMI7K{P9uvg`Z73 z2h1dHJJkMx_#QOL~9DMM76;%LHg(Yj!yz^0Iaeb zx7<|3pVIv~%7=5dyc_zO0tN791LY!>!Pb!SK1MdsygKGmxLakq){*}YIKTJ&8CUb% z!PVxOU(+k>fz4-*u*ywxSW`8f!ql$7{M@P7{LKF4c_fY2ROcTcxTw}oD0+g+%ghiXISF-Bd;Y(ck+R#&0fI|_qGl>IEAf=H^_v%=g zr1Rpme?t9?GgC{pJ5PZ0!QC;{`4m@$EyJ&7tpLGp@oe8@V@T#Lwn^R2Xu$GQ)`i`4 zsXv}e4Gu@ItjM@l6qlBESK17e1B~|=_W>a4q}}(rYhYjim>4;_y1ITZw6xH;>$RSl zRXZg6{bgtaq?}>^fGx|Lw_egt6TR#>QPKu*=oQv|wBr*s;M)(FiXs36dJVut2;;L0 zCem0~g30a|sjAnWAh|XLCTWy@>{{r^YyT{N)feIAa{g2`g@9yQF!VgRe8N-4 z#LZI7R&7`f0Q}lFGNZ&e>9qHgKVRPn=-m(DIP~@*!5-l(F}1iU&gN~|kkm@85&s#^ z?}s0z3>*ZisAR2EXtmybYMQUYJ>)7$`Zddz=Rkh9E6G5U^HYR@QkfSC|6Yv1TYBAo zUX{eW-iEQ3Z0}_IcL>sVE$OdA1>$~#IIadfNMpuqe`8v-Y__v(7a*P92R`ffnIbR#6F4XRv& zkegX!^H6z;0V#Uyrs737TW}Z7C=y zc%}iip3JrNotw`*k1V3Fm4VEpR`jU`-A}HnItw`5 zx?4iw>Dtz&TGP_W{{`OW*AxNha?7N`jTF81>4u@@48=fc9k4)eascJSHA z(a#6_iV~eBA8yFsZ--WZ`gdN&NRGTId{v&%yMnbZ6wrB(I>=&@?18=$r#h3SY~TO+ z;yHaIy_S`cxytF?J+0P1Azsf@zqgstJL^tIW!pFEF*UuK$!;Eo&Tn+g!_THtp_lOD zRLc+0oF4jKy-?kXbEz>)oa0rInl#>yy_nB;PH*0k5J5sYZ@Dn9U`^nIaiB!Ld@@Vz zug8qx&-cJKy3$&t-M6|jA!5tXbmfxPER@~spct>TQbR)s3XBRZ1HxVUxL9C<-pL3s z2uE`Sp3(p&U`3t}hK7b#dCOMaa52l-TVNqn(k8q7YxA)}9l+qbk{N_}@JO4@-=zH&>vW;|l9DVm?;J#!_$ZHs#<>N;VlfHNz} zypTN2b@QhV@KphdcUh=2bVB`G@K%zxflbzYzirb~au_e{YK zIO+q}g}0qfs5xAY2P1?&)kHsf73gWAynp}a0?EBquP43F;Z)gh0m>JjiV-m{BDyLD z;8~?QNVll>21-Y=*OGSo$eGCaY!dyZ`FO;a>HFXg34^F24PK(LghA!R;X%;rB<;eV zqFq734Eg|}QCM+f%n`S)lwwsr;pMFoOEZe>2Pcvb!Q9PY6?iKPuXv4-#WLCw%JxDD z8%Z1fG9e#0*@k=*m8?pA@s~1CBBww#K!)??W@K}%v#k4resn+rWyzEQX5}WCWLJjl zFM8+peM+=Z9IGttqj1VDz$ZVn86v=RA;gb<(i-_`?tg1X3T;D7M3laH&#Y-GqFksE zDLkfF7%>i0t*B0~j+)4Cx8X4nV9!Ls0s)1R~ zMEcC^eAD1Mw%FF={Z_Euc9}P7z%#MpBb}%K>~5jTpv1^aU3%-+WMfZcKDw#R2pewu z0qi+lB#_`-Mq5Rl?DL<%_&#|?{Df30NzN@G8|M^BXcf%^h%(D{<)SJ zdCd1+qicmSPsX2SKyLCEC5@6xE=)me9)Y$L)w^fahti2gxW@12xIQ%-P!s&v1cGFY zSjrux+Y4yxO#_@%{D?*(FOvrEgXWBWEdZMM z_jDDXDqyUSq~mKyhHeeiIL{6`UoaZ9DD-0|frEV27|^Je23pE@sr=26OBGmFcDmOc zusjcj5~*ZcEj0V1Q!f>M!Mc{(ZF3M4bn3QYlu15judww{JTk?fa#yUr>`>+EQ6Tu(Tup?_sNrS0Xzc#{lJI>z}SF_ z&oTW04q_hsEyk0f@1h#qGC$p=?O-KjQz+rq&e=$65cGm5_%k{D`mkIxwU%Y7mCC7u zp?*igqN!@oFe8Pxx~SHG7}+2R7LjH;4)UI~PaqH@{ zg}L2|^{XFByyyf4CbTsyuBBqnw4rE%zz;yRckHKHsIrUGI5TG^T20*5;iMoZ7pEQW z6;nyk_ln}@8BH-QG~HNeS%5vGrJbceU-#Sw)eMB|2+f2W|qN%K^ z8j@{`zTy(jK!lX4?ctZ;NSw9m%m}VW!L&7n3Fy}V9nHY5ZN;PjtDC-_OLvrQC-$f=J-u*~fA*L+g%J|hPPMu~)-TaVKzlw-Y~ujRJ}DPA%p zWYWxazi3f9%P?ZC@e62+e->YP?m6NDxD4|=xP*c&b=nG_i0cH|3(yapoV@1xpuJ|U zE1r+krm%QP#FKo}h`$SdO*%Yp(DRmReC9xDj8Hes$tCqOGqR9k?8&n-Gv`tBjfeJj ze+H=(Pt6YpyqIc7K4~#X>9lgki@6JOGV%JT{(sk3^_Z55b=~n( z*dU%wbd@0HJ}a|L#n0g-4ubq(l+Dg{EBPJTs)_hG#?$!8%9RhJ`to{LM$iyFRpA#= z({==D(OZKE*^lqn_~2NONM@D}V|w(Ejkcp~D%?Z9U*S{o@wB%@#u^ixaZl>a<6VI^ zdjI(zuXOp!%F4mBVWaM0?!h5wGV~2g(}%?!hi1J@X;-Pw!gezkankG#l_AF@#N^Ai z`My4gwzcF@$9##rh^zgo&03`r^Ilz8{q>v?kcXi>ipewO0p`Y_R!B!R3-txhz zSE$$bn6^N{gJ^jhCritL6Jq{4oHdMe!8TeQsZFS~l|;W(m{7PxuXnhUOxTT)9&LmU``Qdpx0KjZ`K359&25&LsD+M z(~FsjHb>7>e!83uos6qh1^egysI^A6091e;7n9HEZ|a)yn2C@cn?PdQ^TDXQddEHz z_v+cY&Ro>G9aA}11;RrX&T~~e#}r@R;29{&AK`pz_ECbgcLs&Ky)d$?PmT6<`Bo;S za{1FMao5@E*JL00t2){DIyOz*mBefux_^)4$GFXi+62dYN8ROnCY5T+Vhoo}Prz1x z`U#p_ar$)noG7$%u*oxkcoqvy_i$eDZU(uex>^S`2_1$Utu}*R>Y3PN#r5@AbmlP7 zmEyZ3Zj;@2O$0>n>&U+Af-%4-G(1iy45`|Z%G@r8LGq;ox}7fnD{MNg1HPuR@5@Q1 z4ngHBdJ`dPn!Y~+KLkt%^Z!|WkDV-2-lYq4)5NLt;!f?8N-|>p&{@1H{yhbelP3yI z$Qv@T*Ol>1)*xF0UR%@2k!n<$3F`Oa?*Y_&; z$8%A6VlLQ)@x0klXs_nNEu!TytuCz5O>C^tbrV3t zcMyoUjo3b0k>-$pMU<`_gkVOFB)*H$yFyMN(Z+A5gbbe({Yg=H7vxea%YDksE$^b? z+dkK#jGiPY^)(z9$3`n#+2DWq9jfpT(L1YVZ8~t5mT%nVNvIz#eJq*|(T%TGNeVuw z*?i^aFn`bUe~F@pJrjoh;4fct&idWg{bkm!hl;$!dZUV1?5JZWym zeq&+TcM!B;nTfR->h-|5ek1~P@3CuHaPePUo}%Sj56#bQbP_>g1ov@af6C*9g;=*Fh=?fP%($){GZQlo+3!DZETY_zKjs0N2H~t6?Q);75x;t#+l?> z+R<0+09*bRH% z0HP2$hUjW|1kI_tg=HP9C1qLTnkCqPGXTqx(j;x&2Qu#3{fM$6C7@L zhQfh~n~fzwYH25VSfaW*5Y{Dr;kZdY#U5SdMxBRVnDNLpyT6jZMLldqW8QX6-e187 zKBrYc5gwsZj2??^bFIMqsYcBjZ;~Dny48J0^NsHK{4^?_s%5ISk9<{<8WPF;4a+Dz)6)Q7|1?cI&7R4NxvQsR-r~hM{_^as|QtO)uP_5d(j?^8o zBq2`6IhP0z{s`8lec|V&J>SoLFa3q(F4gt}(`R=PMVztJ475Nd?TPN5{Ryjuu8j-E zL@Y=UbW0*2G5PUoX9j@a{r62;5~2MbXkl}L5r5_pg9PFvlxNZDMa%LniLLF}(c79h zE_J^?&Ltm0e^iK~&(+DWsgeuoXfdB(DQz`T}Qoc zJyo^c5YoUzWO$OlJ7qS$YNOE}`YH^_0PbY3WX9K?+%7NN7y_i0EW_cDsNBON)h7X- zh8=)>^S7r9X4dT(^=@jqbt1LI``{sAECKt0@L*|~_;G~~e-vL}Y)M&;QvaUx?Q=x* zJ<`B4U3y)Ps4wr&ibZ;%F4`m`tiTt^j`oj^*yAU0s6oZdSGZ*H(jI``=)E`WUTOjG z2Y*{~hx>h1c&TM4rc2N7n*Rx`=FX~a_h}A3;X=_&9@!KG99~PvJ#$P9Df;2B7=?~~ z_;l*wIK!%(G;fFu9S|5pR)j)S;5UCFz;4zafs>Es=*$Q?;QuUZ8V2m=U+%CSStb$q zwIKXuM~*A#v-6dLLBG^=@J>TVqQ1mAxixG@!jhwfdB^7z3Ew~BP#p={DUOnXpN!tY zbcax5fP98sN#V_6sG=r3KS}#F5zyY{`(}(-CdrGj+U}L3$iEk&*DEtds64t%EO+(m z))iaA46R%2r$A^E&Fc?`kEzLe0wRI;xs`SkCnYs}`@`e%tfwWOsIaL#dJ*XntQ3&~ zv?ey)7tTx<+3+$2nsUJmw*QD$sftn zhx0Y&GZ8y`$+cX7wT${=1)8wMvo~kEXPhA-K#bYC56828 zU52!92T23)2t`1%9{bbWRN7wOJq@Tbe;H!CzkB1cgLw$4bM5W+A$_K zHqJ@ZO=7>Wjm1kNIhVE-;ho{awcMxYTJdw6Y)Q^$Q5m>b5)%_L(yus~wx0v0`Ev8N zD=Vw3vaU4e5!T3}SDvuSgKO@T_X*8d{^GmJM`u4SoVOXTaGwkbZ!Of+IGg#~>Qx8+ zvuqF07EZTM_8RNf^%B2U&iPcCYo`nMNFg}2MRNv;!jea;hfKXJyA-4I{?r$pL)~{d zIF+*z6V5-|a78k*XXLrjIuiXEpdWI97ve1rH>T~_YTmj|R}v|n?bBWG@kh5Vo-DOk z07ysL=YDe3V$8)~J%#H;W%L=NeWU|J27*eZ?wkW!LI&C0q?o@bGMXI1)gn?DdzAq-3vW^GnA7 zIR2}K=rs2EIs*f0=g!=YRQbks>psE8KeznF@JwLZb%mJEv--_8l<81tuKME-RU8}~#+(5~qqwZ> z2zXfFZ%_bY$A2ESq$s<5>Mmaw)z1$EhUfkwZm@=%YuHDC`$|m8^U9XV{sTi}Jm9}k z1(Z2M<0c`Xf&XPWAG2jD>-U1`UAt^-cI_5~3K%dE+wTeGybd{OOYgCB{0m?XS$~Cx ze^`7nNz+x^bDJprIvPG$ZmW(L@?HLRYLWtflXKyh1bl|7t(jH>z(e&^cwlrdc>9v! zK%-|bTS|?dJTX7sT}4YZo0-@hZO!S_?k$vxp4lw5hmue!GTpGI&(U{v$+QA^kzT-Z zG~i1}7q`m;OlP*(h0>#&7{G7f__!fmJYcag@l)YcnD4e-tlow)M)Ulku8r{h?X9SF z+d1>RrBuC^TUJWEw?A`F*Q;J=qkntcn{2WcNSCTH;4Hg#ZfgYm%Jq3QGL#r@$%& zlVcAqyEZ;yd#{x|E|MXNj?B#Yj!%YV5_bXyf*Jw6pD5~!9zj$V^6&OyUkyx{a=L?N ztqtL#zon_;h#!~fPjP|CDJL~NJw`If`EVwAkEN7iF9`l zAg$7!f;2-)cbC#3J-}Y0&u{m?``P#N;-34y;*9TcoN_8EGTz?aVWtQ`WPw}}16h&( z^a+IqDs40j3?jaKVXS0RA9Mq2@CvmEk4*5c&H=`@UsBu)ev#GlrTJg_ zt^8lU6n7jfsnBwI|E4kRN4@*;M*bB{z5zVDpr9aqwdtQP_znxLQ2W;X~Ir zf5V+B*IVBj|>r%xY)_~BIh19o=u`p}~wx~ndU+J@cUgnL{Gqb7ReFbRuPhdU! zD(34Oi#qKYARcOWmCDFRn2UX;`!6~ZlJEKG@{=SM&KP|VQk3bL;g(y?{n7Jv2Ut)>|tywfoD}UAu^kVz&o@IyA&s^2npGXA$~&+yJ6@*y2;cT3PN*whZ2Mm^1eT)I+*`gq%i>f-CRGP6RPL5ujMxoWoC zA>>s6rG%t=h+|&{Lo@`|@wn4O^GF*o8b4Q{0$1U9s|$UUAFTS6;d@|?LZo$T}};JGP$3m~vZ zs=$lMAK5E+9@Ltz0$ScP{#*8X<`?c%bS<`tozdRoqm^K+qh$_dPl3+E!*=e+TVab^G{3uaER^L|W0S_I?9#Y20trxHLYVcDX)BXatlOexPb$7+SQyDE_;_ z9faPXYGDbK?YQu|P2-N#VYA6s1ZhP@to{K3DUUBp4qUE8$r1duqvSHp(`I5kJVd}N zDL68cFOI8TwAQ$NW*MQhEOh$8`raDW=v%idz}u@d3OqEI^t z^?_W@DCcv{qoq=tFYWQc&*obGsK-&>9EY^DcF&4-`}RxHyEf7M_a$rsy{NJoK&W%) zu_1=ib?M;HuiHC(q5!q zATec=^v%t+s{dq1-dU}gV%#;tWa#BY6D_(pRJhL0o>Z_!Vn=VSyC0tZ3IdWAxKz83 z@UFrGK_T*TY3LxY(7k_m7Ic9~1|>_9yzQE{YzfP#*QcBoY}MKp+>QZf&mV!GdBm`d zkMpSkfu8GgaG!t@ksfo98^kW_QW~XJMIH?DD~jxnR_h!`DuoR#UAajm7hKC(ks)`g=Fe%L+7^x0uv`*THZ zs+W{Q4?omhZZGbn`zwPw4^T3wuT=lpH$m)cLFAO9C0f{<>ICJRptJ3$w0g^x&cn2# zTI$^z@AU24aYTjmzbt5_$ezG!&$#f9(G*AFbCKEcS*;R*$G4aQQ=O?*x~aikTMF^} z(;w$v8q(~hU&Yuj(k1$fK_lvmJvT|m^1D!Rnpu_s_(uhV6fYhwspfUx)5*iT==^b{ ziwNPdDs>Fd%(9NcPWNvl77NZ)u6shP+&~0`MxSy7yZgf}3<1T7TL{N*GiFJ<5yUlm(R1)lK3dJVy{Z7`JH<3o&I#v0{3^H!G%FMqQu3@_)og zpV$z)|6&{-l6;zc(^4!bl$PP(Srb{&@x9?8&Z9iW*@_2(USiT9Vy9W&GbF=Qy_sB$ z;op*7vw0h7k~Vpf;6DpKJyMV$PQ(60;E0f8n|iy?PcS@ukH~*nM}-k^h*SXG&%-~| zBcAgMU`Wgkrrrm{Ix=H0TpH6tkshA#O#Kq_Ba5=g5O*5Wv9oxhiA<%=DZw^!x&DI>`FUG}VK^c`Bu{y6dX?oI|zL1u#sIfs}w5%u+K`0(#wOgL0UUzgZ`L|!cY?MzG$-m||YNae<>k?jsHl2SjTEKx9 z7RAT4F?PFD7Ry-K8m-5TC@V&fpD5=xxe>1H*Y(J`%?RUt=6HV})CZk{FMr2vf;|WT z*u%%s>FE(j$=qeJ8no?o@|ZFDJnX$9X@!@V)t$nrR z52lsZs^{okN|$)K>@CFxr0DLX|IR7OpiE6ufTJwfjPGvv!{;gQre%r^8eQ%DgMx&UE^&h@a968w>{er$lF0B|?BMM>HPnShUgW5veh~JF`DE%dpKK$eu>o>BVtT){Wg4V9AAe-aH812$wPK5#@=8 zHiE0^FAXk+0YnB*c-}vJXJVqRsp%IROVFPww)h~_)p2WUtKUmPQWBqpBm@{pUdD${ z@=loC97+R?J9mDu$X|GV@6Y!yEDrbIt?6_V&x{YUmu2dTZ9BY+!y7zG`kT@2Khs$c zG1b+aNQddvuPPh0ul@*~RZ%IbYJB6Mbir>l*g4VB_naLCqoq=GH2GU>^P?UyGwETg zzI411Eb>g>olm+I?*f^WlW&%3~n!05wP4lC|KNb1m6a9E0Evj?Z?dLMStR}+L$rx zZml*udV_pTVLI-D9ILki{<$3$i^OH)uj`)M$z;VE(WcYzhuEf1Jaj^5w z?o4lzgcVwP%72$e6UFi-BjB1=bnkIE1v|c55Bo9WBfy}2^O)negUauX`C&_fa!Rg~;7rl=~97)R9tslqH6OBVw=K&grG?D`%_rbxgi z__Z=>X6iX(_odCY0_#60JJS!8T2hxo3m`~wB#nvY%HyV{JsiXbfO-bsn!rtTi0aYM z^U!T4?MUf#zl5elHB?8v5ku$JXx?Ju@sE&l)@{DJa)WksbUdS@>)hosd^%^o*Vt%E z+RV>Lc5y-B(_HJ~bbggn@qpL8TRp7;{bZQ?r+pP(*_EWxvEyJ!f=`8pLO$3s9gWb- z+n4Qa+XI^_1E*)|USIgXwH18c>fm~nw zj2juv#6E5O#)Lz6F+LkJTuSJWq%1qUY`{3A;MkIW{NzQ8TSmR!#&&zs0;R+`OYEWJ zk}?T9E31^gzJ6oGFG9{IHLgT^dWicsj%}UvVhF=9!%o=uWBV7Ub+cD6zIUq6mVds3 zl-%5LeksOnn26)ZCVi6V8uPSf@Y<`1Cpl>d;R#eS?o*CfbI(T)zQ3IQJk_AL(bt}~ zALUONBNsLmy0aw6_=4lXdSkQXKq5c6#I?Xy(tKbbx{uUqe^^mfE&bsQ|8a^2=jNNB zJBv}UN2S!x*ZgubTz5hm8B&JQ&!dZj9q&8n>+e`ZO~0jC{`HcUJvH#p%f)9W#|1He zb`0@-3bbN5PKR0Wui>M?PbP5GvHk2l&-gkr-Y=V*v)udtkrQoxe59VQnrYknXa*z# zDM=YgNt0|e^t%Gh`ezg+xR-^X6=*v{IlR9lj#dy@XK<^Z!^nbr!pZH+tDW;X@aruF z9k#9XLUUG6pNgvor7E6E^m!Lm!e_ zC=u<^I}<%hx*_bu-j}$T6U+IqVMh@=&)PC;3#&ZBwG!=ZWfNZ$80#LCbzb=pU$7@B zFGGvv@cmdfHZAef7*5|q;WdvA0mxOyv5zc5gjf$OaYM_zETyfWmFIoxPh9T1r;ymz zj=ueW37DMUCOy0fgdoVR7n>;nXC@)t3E#66cHQd$WhM2u-lrrNK;eE$-LNDex^Rk) zl-2~FgRJt$pPp%8i{MxS%}ADc>EY{Tc$fP|Y+EtW9d^}nS79Zc#T{=Q9HZjX_xoW` zzCn1o!fp91q(g4|`ygAqG6f4eYX0qh+{nOkomwsF=A7LCx8MjxaLPLyKSCBk$~@}r z@Ce5j(k7B3-&Fl`+lqy#<@83l6}_qMmFm+K3^4rA^j&Zv5$e*fpIL=} z`{s(-oAYWW@}<9P;dEYIF_YMdsLQWEsbPG?eiGWI zhnlTEx#Y3#8t|S8Y|tN>%>WGy{Hj@yI(Dg`Nf2$G>d(>L5SyI3eHM5wH} z_6&}qW9)m+ks$T*PL9mTY`n_ z6k&3f0f+lehUVQ0;CkqU>0DTW=A5urlljeDtOMVaF?#&ZR_*TIu@mt@DyuZ!a5a}E zBHmZ=$dV?J5}AJy<%0N@m20xui-A$K-r7Sk2M5m_CyxNLZ_D)VqiI0cexCAJF zilh(@1O?8`=NVLmFUaOkPddQm!9neP@yCku&o4RJL|Wm=gJ*P5@pDF_VcrSi)9~Bv zbB)`iamJo@WaxTePBNsVT-JM2J__l7wRB%tyLtQJRzW%i3&sAd?f`?fP@o0O5xcDO z@U7@U#Hxts$aJ|woEBbF|KYTT>r=2Cu$v?gA}I z<=PMbaQ5+>-}LaY`m5beav^V~f+CS=#$dw@1T`KBl7+I@yA3X9KY>&TW;D23J%XabL;Ez!}SN^Xo+%Ymb2~2NFSCIh`E=_1e4W#=9c| z-Ekb%xlW@5YZ2#nNeo|vt(o8KMDJ%d=4LfTWTO+RL5-|}^8P;mv|x<3@37+Nf#u@+ zImDql%}VK?kS^H3v_Qt29~U%rCxQq9Z&<><%h1iC2-ig67d< zq+Q445!a3zG1m{vnO648=@t~1rrmOxm&m>2snWGw_;E$2JEUq}fpFQwcF4S7!&P{} z4`(!W-IY7t8lP74C?JG{^-lCU1Sph zY$4Tbqj!e!HhLC$S!3reIF|4_4+Z9}G9x`)QA&!i#+EV-jhjPf#y~cu&YK>BSK57T zodLd(IXtGq=iR@e59>^ZuR%Jo&6Ko!B{Gj6OSYw-gZh=p#j~Eh`bc57hiq0$HWJ-( z_6$`IB(E=ndIi>#EvVpy#b-aWN)qLcud7E?xGy??ThLc}M{c=Kezwe$Y&!EqA>YOz z&os7S@Mxhs9#_gd&dfX|+ul;6cod#39Tz>ishRuz>=^-NLqEZRu)(O>#%Jc8J6mB# z>1ThuXjcm~7JmkR$M5{b%Z(Z3LkU9pi73Cr^(lcOk?5$MHe4(L%w@1Dyk#8ZL-F^4 zaIZ7?9B6++)w{c>zxQ|N@(dkzI-JWEMu@I|v^hER-m1G!b__r|zbyP<;j*RIqSwLS zs&k)M>+v!~(KEa|A%e!*IQ#*x{6k2glVdF1sFL=)X3xTu+gqE$Pa#N zt9$g@%~AY;E%d&CG@|}#Omeem-zznBh0wZ(G2vJES6p~YyULVHD}Qqfk3&Blr*}*W zmO_k{u58KdPld5{95W@!Z*Y=N#fk{tGnn1kRkKt_eu>6D0h*EiP89h-a$%*l8cjPF#HY!J+=T%MkS;OH$a-YFX-Ttq*H7j;v41*whGD_TB+=PCz?j^| z6F>Q{KePE-<_96=d9fCbsRU)bje+mhR4{I7;D|Qus<^JHi1rS=eR6dLI+R2u)3$%b zOmw|LYw}tLzn7vfpiT|^k-N?~&dC54h$?mKs;b&_b6mZeN^C$q!4bW=JN|1*Y$Kez z*If0fNzP}~#W!LJwSS3=&F5tO-_6EjioC?zsGoV(jq{jaZR2KnKhW{!E?WwX!>QWg zJXtJuCuXs&{g$$G+Y4R9*YqM^N%@56T|8%pfM?TuzNb_J!97t9CCdzDS#p196~!6JM{iN5{yd0wyNURO zJeR8E_yk^mN~hDk+;@u}N0<$DCn{AEuE&a@I z+(5rvnq=1Em0?aICG$$cT>8;(+Z3bswH6@c9$QI7Z|DliSV`)x>`xgp|P@oH1yIg)^AWvXa3{NQE` z|HZ?=EE|3g*X5o|(>g1a8(GQ$hvVg&i>M5oR6IpVt8HE*kTR~ND%jGm>BI+r>kF~4A?p^@gWS` zSdkyY=fs$KA{B$&ZjB#S-PnzCh+PymjCi=c5=Vz65?uOSOo>$C{3X%zCsD8kN>BpC zh(3>6OjnY0_p@L$%z})wz6yA&W5KvdtpwZ4`0vxkuOS{j`|!?m?z10tXpGoC)@4!#>Ns`JurH>4D` zg^a(x)Rg#1wbNa2S3YtVvdhb5H@J!Gwtv}i)oyIa3ui#)*$zR@eE9ph3?()SlJXAu zSwur*L7~@aUNuZn1(;|g=7Mb`WEJ6Vm5%h%h>()yCoNp<_dgU1y$`(ux)GB0TpJ%H z{SJ|O%lGH|emB7j7?(6Pj0^Q$==WK~%kCXDE$V%0*9aD-Ac(J?t#3<-2@lh5fA1tu z9$nuae{01|Rky2UG~bR}e$%KW!SPE>MWNP&hwE|xH?hd2%{e8tjp&iBU-5=+Z{-+O zY<2S}bu-N(Ww>P$pcFpIUl;Mj6Whrk3|ihN29A)K>Lu!0F!K6}$nQ%e9)3%`XDy^3 zT%t*EuvD7`4kiTRi8m}Yct93Q{nf^ma=t&{u%F1c6Fv$pfNiZH=HtA6~WtOy-{4e-X}cNcdq4y zIwY>H?8gTR-fqR6hw_p= zKWJe+=S;oQGuq#bEF?Nhmj>O&A0e%IA=;SAZ^xjbZFj+LScPD=UL@%yD5mDla;B1Q z%wbx)<4@gII~z`Pnd2PHNt$^}_GB46za&|hJm|g3DZk5$Im~FlP3$fyOtU)55c6lK zFfA{uDI~kzM6KM8&=LUWUL9Y7`Ci6rjj(z>hXZ)9&fH=Bc-PG^oAHxs9-JT(1$E6r zNAdfwXSBLln3?SlmR>5Q3q1l>sN(wz--nC!_>X;VM1UdG&TQ>a5ray>@ZsXx!87uH zA;=9y^s9AY)_3_@xPv@cm-{~gyNhSHSkhT^<+@O#ExRv_NjI#^94eJDTUE)qu0O59 z>W3^t+r#QNa2(BU3M!2UX?_g47Bjk!p%vb^cDZ!(wWs4as@%d6`eN-@%o(0OW5jEp zJtyA~DeZ(64VFGz4@i6HQ(#5f8^@SD1~fv6fVXl`tKui^i6H10rd zlY?ft*2m>RIs={2bruSd0Ik7&sL(F;YPcJafxQD3Jz$sxV^<_a7$`OxPgj^CE2I~< zh>K%R=!#S&Y#Zt&-K!czD1iEOl<_@(**>;nHlt>d3iLp@5Rpa*KSzI%mn=9nZJk`% zVR`6X7N&^Vs#i?DH%hu8KnoLGWU)i#6SGT~%#wuBp-tWq#3+J6C(!MHtRk%I8`i6* zvsT%2)89p9K;M9B`DPK88pw6P5?_?;+l#~%1wAyWp|RL6yP^tS8TB7IHO=tP=%!Ubsf)SP+7%_Lg8BLc0))Wqnfs?OLB}${-sD#SBUeky=(IE|>P>87HXe0{ z1yu>Q!TV|HWp}ZxxHYRj-4sZcWmIkn^N%TXu@hO6k957*sTxS+NhA1_uCH+arqeQ+ zd$%Q>d4UMJ;Z^GOGxkrrL0ZDY2O|4{f+c7b;rx7KIrMB;bcJR#cE4PE&i`Q2ikx=m z^TdNV3z=g{4a0`NOf{;5T@)hLcRu)CmeWI$x%mlUP@|A86BC{nSs)d*X1Q2Jhtd*} z1S}nJK3-lTF8d1+HnTNZMMeGY+tXhG)&$hS{nu_jRD;2i4H3EJ{p8#Hnr#C0d+*t4 z1NY;@ugHi@Mmfw=Bw@M|Wnl??Z6hC9_U}A?>-?de9CzZ_Z0{_;z*i&_g$mX8i8*HL z&iCB~j_w5U_`?R+gZONnoE`|2Um28Y5Eq7M`}rO7&#NI(b#( z0-K1$?hB*r`tUq`Z~FYPWbSu&Jc7N(wRoO**j>YHw+p9N0pKo^&pOV?E?%B>3zezp$pp+daa7-`kZB6ZH4aGh9m;{omu;Btl))nt(rR6w*bN@f5(bBnMVn^s2K99nx7YM7>#7n|>MpsTY_CwJj(@ zeP^zBF$a4H@8uU>K;sj&QO<`9*lsuvT?QPVIK)Ytm4L z17Z^Mw97{xM+dw9ZgcbS>8|Ec^*C@^j6qDs%hU4Dm_ z>ORT(=n3z_w>K5HiY$4MzLuh2e2y2y2CLCqVX9WKqdZg9v0oWjY%A&CR?Iz9ysxpO zTIRp>;n`W)NwRbEC|G*f>RsCv8tOG(kC2%4MlCzlMSTm^O=PCT>&EA?46Vh1h1p*^yu!!SZpP zUzdWl_WQfMZ1Ug6c}X0~0fe?pr}2B)tJ=(Al+dgmH%WIAX54+L<)WCLo8Ml!%}{=V zz4|Ey$@*>L$d;7ABXouMz!hgt-L6rGLQYd<`UMJ4@>);p>T;iESz3BwTNBO9c3H$R z64YHjm$5NSCLWXnuDQU|kzT}fQ>8np8C6(e(Aobz3xf)|tnJu`ASrJ+DvR;z9Y zm++lS#-|C;!~jSyZXW+E^ku(;cer>^l>L1NSC$0-VGEUHNYbb&zYf>HeLmq#K4M#$ zrcFTzEY2*Y`}>7qVi`9EtbR#}#rO}*x#hwwAO?3@71i=$-P4#h^0F~}k~W>=Q@Zdu zS+36?0RqbA6|m2CZ1+FEKa~T0=_Mse^|sR5LunHB(r?`js2AtP3MhNmBMS2MLx;C- zx#P;NK}JRnT7!R`Qpp!yl5;aPj@Gr= zB;g|jE~fo#*}rGH#Uc3QR=}Xfy~vHKJ*2#F?=GK+NnUnYzA#JTLDD^y42Yt;N^d_N zYA<=4w!!-lpF2x^6#(K5xDv;t*?Q=;eDZqwEPbl%kd^?35Vp1Kq z>H$=qy<6279=F;ZWpaM7j8qqE7wH%?7XqL5NdyHx{<6Mea1FF~=m7T0j1=A3A+gI5 zHq)}oUH5z&M8b^M4yKC z`pqf}wyw}=s&m+I9Lcyyt7NLioLq0`-xFZ@Oe^No&NOU?8yDD?{{mGg3&8S0b^DTD z=RFgBm#Ouf z)+$PiDo`D9upAi{WUD=Rayp3=gca_WYe;Pvni)W*E)JC|cBA)G0Q|cYTRULM?IBh@ zqLG}@R&%)X4*p?RFzDmTYUFDCdbIcA)%XwM!$51GT*%=Qe5|z`q*iWDqcAxrIot&8 z$(+Kdmu&gV#9r)%$=x2P=Qe*3j?HX%iixNHA=G}B23So-AB{W@_Beh^>vhBGaOq`x z)Y0c!3QpyykzuaEt`})hM4xA?q+T3UYjGp?*d_WG({PDD=dSci6aTf#jp`9F?j*|3 z2ScMWxkg4u>DICh>{(Vjc(7*B00c_4dfOMPjrE-6Q+$EY>!W8bnBp}C1qiOp)UQv& zB`9|Tjt2H~+{PWXnc=AzA5Hm%AeRb8e2RDY3L6KEk7|52-Ee&>C(IX4*@W#pf)y7| zKNNZ)nA~Txi>rdHd9+`r$_R~@X1S*sn!x`_A1MJ}cbT>-qJEb!5T) z4%2M|zI@c%fb&Kl_f+djbP>nzBN)F;)06UE$_u&nwH0lH{&d7Y7c3@D2>0#a9|-7IRR10?K+6CiXf1KW9(5@DF!Dif*?S z#R%hk(5aaJ*{Pjc^Q@5>(gMFI=~I!FtT&-F$X?j=^tqpz1$?3@xHbj-uPW8c>#n(3 z=++PS+c_QNNpZX5vnP}lLWTdnp&-mE_I^A{5VkkC?nfd=(gCocARG`5X)@vxRSA#b z_cS?U6ZHfqMg@Ei7g+_(=%RbcHx+EZxWaOj+>PT?Q2Jq(iNCQO=k^bxv=vWnO5X@h z0a;8UVmkC~NbgMR$KJ&SFstm>Ng{nv{k=#lViP==V^6O4q7spXUW4GhFazn z1a+?-mUU9ydWe>Hq@UF2_N5IUS1I>|y$Q>Wj_92|eW}l&s7=1$3;IO(q7@hw^rw_z|5vsM*s4{ z3(T@D}2jU#gI!&TY!6;mADnXT0C26V<$ zv4u7LO`PrUoeav3o@-@hr#NRYJy~r)>o>-Xe!H0gL-^Zn6VdAj_iU=vjuB5!f5Hr zP?u(#YFoTLbLoB(LGyLO$tIhLSzEeT=+HaW#G;T@2wWt8S9nxZN4-NSk^DT*!YS^s z(^1ajjFO)JN-2&G6qBC=f!RHH>0(5<%83C{@Rej60Ig8br^kH{KxPNo(&Z6kRuG z+&BC2MK`gD=7P(%1LIHtq$z@jFIjsR#tQe`3cc1VhR236)^KEk^>OWttmQ^&ZeiD3HFxE z)2bLx0#$LmjA&?nx{_|3FF!^{vJ+A0xz%+xeid6^Zei7HUq#@UXj3q63L_KBf^?$Lsxl7X#)yAXq-i`S^2ZbedxCz8V9)jj&@qKTQuNB0zP zEM{%=hp(qWkri*3X|;3RS*M%Jp>m&F@6G2DZufi=07s6Rh{DS5tdjUZl8!-9$UoVA0=QeJHCefY@l@A}`H))J zWtvp1wI>ND-p=QyLz3aKl+Wyvd37t^x1xG;MWX>+a3Ue;6?vf zy`(f#>VA;aDLvl-ii-ho>fv)hkoRqhBjMUt{9VECgE@aPk=FPauV=z2mkAn0Yv+|6L zjSLr1n5#c>?@-c#c$|zxgsE3JJPv&vF1!4PiZOX=GIr-CJ^Fgoqh|*Z8e*;adEk5r zKQ4#DXOdloa1Y4|!-sCh;~zj6z)8;&M@KOW`Je#*HqE%$ytM|A@4n%QukuE*u>w@6 zs$(9drC@ZIiEHTCt2qc$Yassj2+i}67H)md2D9146; z(zt?3{9;S^OWxzru5RLO>pD_XD z*DM2|VWkM0iT-?@w6Pda`#&1>;iI6LU$<(+?R6O;oJ_sSosFZr^8C~kW1#+or$gxn z>wMY6M;?3`FxHf`kgi^=&9|;dvuBGpEUP#X5dt5wiQ0(^R;KrmasD;PP{YGJvv=!z z`p=a9cWp;Wb=BI;n)Q-3km+|JGq+eMLw`%jH*qiH67CNarW(A-K?5OCMLcctp+$Mh zzfE;T`7(`DF@$Bzyv`~t-o@Q4_<>OpM?lv5`>-$ufXDL+)gqwGfhHei5U^$rr0>vz zmfME_obP(Y3E#W8>ww{H`Yo1&E)PU>qof(bHhd$-4GO#riurWO4T}fM4h4Vz0nI82 z?r=tgDurV5p`o{X~ez-wKWON;uTjOK~GFV5d;()Xv?}4r)%oIlt1&lInblK%P zBVO^Wi#CPX4CywPvN2Hb%9nqM#C@3;^45-vORpkucpI+$C-q{oWOy53@Eb`(X`sT! zzt3xWrK9X0M@hJMQLR_LVMLe))SUd=TptE{TrU}Jr8fB4sS9UkaounG<(e#}MNN`p zu430m)f>F=dtHiT0C`F;2AgLgftL2E@LSOC#?;Qo0C1qdA|(9vt4WjN7zqTA2s}4i z4cP-koA)CqKeYFi*ZqC}?->C~g=FW}^9_%XL?u}FY8o02GEAGhMV!q*rUyJMr{`30 zK7y*k>x$v2kAa~M++R6F&Y!)jEvXg~e>&rPly0ToU>x)4dj>x)`b$5Gw%Ji9Kc3-j z+x^sd+|f_z!`rX-#g80)Bu7kqq}r~NGPH#oEy{X>O$2l1ilp8tTzMUEa5cM4D1FSW z(_A{1ag}V1zstBH)zhh|)+WP;yUe~=c{f4UHH-O((UKrrY3zIRv+k;Ja~@GOq@{@? zAIYZPbJk{Zlf=B$fVb+%iU`OnafKt@^(tdv^X0^i|8`35*RoGo+d+;i8%U!-yM-4t zb4aTyQiMnAC-i*oO%Pd^8~d$>HIFo&q<02L%l65bC|Cck(Md`$dy~$+`-y^b`dvC# z-(I-V0LQRZejvvOkpo3qXLnR+rih7&e=b9*`-BCf}tSX}^3*?#ahI5zmwxEH=$co|Blr{OeFdbFeJu zFHk=7+#F1cijIERpUR63hBI^n-3_u@?*wK(h2KTJXSCK6VArZGtk3p~>JjTDr_bKCI-I0FYKkwE7!^aQ7IS-QO zXbTO^CJ3{_WPc^;_|Ck4@6!B+#1AF6ex-8KiC0=^ul~%${aw3ktJeLMG`aV^%otX) z_QCz;(R{xZPm`d`#Ya?u*>m$s^Y49fh6!WUOHNI-?0w?Uw$YowGGLSKI6;@XQ}obOxMD8N#BdI;RixK_)(a4qH?XOJvBNMlkl1C{G1QClQjhVUr3 z5DoIb!3Pea)lAgI>8R3bIsP-^d1|B;lPh~`1c5o1E7PP7WpI6^hjFCL?TU2V{8@(2 zSqXpm4lS40{R&}_>y{ReSbg`IkN4?Gf?DPo4TyE8?Sk7O7WfT^QW zCpN)$NZWY6-Z+_MJ*z3IR1vUdi!ZDPJd(eSSXaVpK^m%M00>f zY<5km5-lAb78xO~^@`(L8?MfXr+s0{uh*b33Tp4XD82L?@#-?3O!)w(NokeiV8E_W z7G%Ip{S%o%`E0wpcEG=_ztm7%rocS<22LpFaZ5Fd2rwW~=6$H515r82c}>cxQg=pB zJK|Z=`h|CYsEZpOxtk|YlLoMy{36PnNnKob^U754vYy#>;DHMrBjBZ<@?=kJ0=IIK zY$7&fl|?-6Ry!g`~uPySA)U4{)Bqs>hm#G!p}U%E4EmvONc zuC!ue83^~;Kx;PzBUS}4r5(Fkfn22NeZFn--1~ex zf!vgF!I6dL#jyfD93#d7RRcSRJVBB}>x&U{a#wwbJh$W5l)b}_YWj7*IC7>z3%hx% zHNm~&tC&BnIWjAiLM#x=nH75ACiQ1ny=fTC z{BWTj7xMD32MR|7C8MB8)zb$N0GdFz*9_vN5I{F<37zm(a+)dY|b^k zwFl=YpuWHvV=&4TGoat>xuC=hS>Sd|QrtqG{15EUO6U3x zb?@!BUpbJ?J+6h@9CM!Qcq)nV>%zP-r?e_XC2C$E`NJYDV)30d9=fmXrQfjbiv$-{1F_#2*oY@w}aefL`TS>6R zzL>R!RI;H>1C5LOz?uPfLN1fEi4O5v#9pLl{(B{7IqpK2eyH3rs1Upr8mOW(50#nT zFwOUPcd-zW?@!4RUKWeNKt^hzBD5U6Ar)8C8ptk_%F;(cj7xEw_n&Xej9*7TbN@_y zgewMR_W-3HZ@b}dvH23GkqZ{x={7qu)&Gx z9xi$C*4F7z`}c=N%mMhD(>ZEYMonKC2IT$ntTuB1p9o04fFqG@b*NEc$_x0$bC{B@ z7d1I=2xmT@i-GpHudmud>0ti9Lty6rQ&6}xu*S>qC9QV(hKulzS#SoFSn4#GT_)bM@Kw`UzCdtHUJp8`sY z?CRWgZIiu3Yfl~onk_Uxx9KMffk{#U4Qq3Mf1v{y=OAS?3VLQvL^Vz3slEBiX-cWR zAn7Rgx^e;X@OIW!AqfD@{x#(p)^NbGQs#{ZO?Ugn*MN3HH4IuQ_)Kdpsu3J&d8U;P zVox-_rzt;DfYSl8w&}XR;C8W|gq(DRIB3T+(_l!#97c{D1ER99N_Bu1t};E+sb|2u z-ppM(@zy5uz?JFRv>AB$VQ+eK5B%;vlDzP*UuCtavtO3blr~-Mis%^_aAtdilt2D; zvv7^q9$N)Ds+o098~^I+;g?De`fkPVIZ798OH*8%GyfzytDGd}&2A7#u6s^HB(efe zO1umFU)@lVxic^cQQD8+VYYsu|1m~!R4JuxR;)7hv`hnwW|`)3fw7f6RWGyN!h7Ut zZv<-kc$k>2Q{^VgsS3dMRD}eDW3sxsec9*|Fp!5M-HTd}{IU*Bb;?9A#L($hQugrk zokjGf#O9x)h$+ec*ioJqc&ry_+1*h5zt{g(ODh0)DI^DqDXHsLK;TS%)!p@x4{iQU z+jwCQXDVtf`AMzxCf!(pU}3X}(7W5b`{4A)lLr}@pLnm1V_;eVX6PDkz)2naBY)ns z>C2b^8q-AvL~G5uz?6j_9sgzffL70Q>SZ|J&?c8K9Fgw-zWMF9N3Zb-s&g59$?!p z{qVhygTuSMxxP-~Tac{Tk%Bk${-VZaR_TvE*Ph_N7k(WVdn802%GOyFF>NNX(LRWo zQtL$!{`yiT=d1|AI-L?mh^ub5|9`%D0|OgK4ba%@RGQ%cRhet=Qm#tLDmD=jk;^GkD|zOHJ#qrY17uG?`ZTl%z>G-=X#P^(i-CX&TBwp`4dz`|KoV$Uy+$ zP`mLHp>iBuMhSnD8t5uOb*yP6v4OhizY-V2z+t9KT0_Ai@zNsw_$@`$fBOMuryvuV z@(p-X6MKTItRS39GVr{gj9)}#zQ^I+yX@n~g%-oW#YXvCsBm&3m(>Jo9I>tB^o9%L zV#)tKwW)4j(?ST6XmS`y4s!2dr_S7u;I%u7NrP_7 zXsutLXI>T6aT8OYOEW)k;uuO7o_z3nMzM>;#vJlC$CO4$h!o7$vQ4@;S^^=={6B$G z4;&6{>`w{;4dgf6u_IySyYDmL7dK9?SobVaqe;RiuL5(rtDdmV#C}Td@T@&MOK3&j zFF@TR>bZWsd}&qv@J6N)EeGl)VG83h7){IwIAszGo|6cWCPcu<&t?zC|IZiFy01!wNI;fOL-m0SkX{A$ z%f&vW6ank-T8C&(V#4~pRv}9HV|6BAhdu!|5llnA+ql3U8}VvG!OB#>3iqFYNNw={ zYVW(EqD;DWF%5zWA~}nKhkZ1#f61oA&qDYpENRS*vf*xw);FOJv{P1$PZ)ph5Fd9)&8#_C{mh%%~ zLwK>>nb!ffGoH4ljA<#pv<%lG+Y1p4Ai}KpbG&#-loaVXGo8Dj ztWGN6c(B8kx;h1O5Tl(UK*tOhn-h!zWEL(MXcG;2>^*>Po^phCKa-Al_MBMaPKu35 zu6C>Wa*XBeoa`bZF;jVTo^ZZ;58Ez~Xz*FT&(gkr3&8*W=5`wMMUW4ec-|nnQrKR0 z1rcDX-ZpbMN$)}zM44qW-f%o?ez#{Va|`IK!OHUpXlN}DNZV%>%)i7K z+!sT^3PG`%%}KP_RN-c%Vw!>SjcQKHb?V1CNxeASNt|0mU^Ano8)w?%irp68mlEZ8 z>|FPjo2vg|)higW$N1SJNd?aE`xuB%P?MQGPye%#@f(sMF=n#LoTEWL6pkQGr5 zw6nOSZr|};tqU!zKcKB9L`CgJmS_hW%dVVZnCnlq`33pqr6A{6Lzg*T9ac8 zqS$Q(*N59~jEyfO#;*C+pKb6($B4<0FAyGgCh?R0rkj2P3z@3W@R zC)|si+C1p{EG0!q zbUR}ctQQeUV7fk8wYq9E^lF8va41RnjzpG%PW;1E1PBgTX0%lmYb{m(ka@B|u%{R+ zVq*I-jC!BUPE_aaScc)el)NfrX?_wWU3_Og=GLZ`_h#h8E|sXvDc)p)B&BYz=P3Bq zh#H+3!0Z{Sw@LnsSxSd`K3GjpGO2>4Rjm!%DgrMhAydJMxMH@uBFSv2E4IqiL-~CZ zaHImbl>`W;rCV1J$eXDSR}cck=nDs7FhU}*GkACzWM4tx&~lHkYMs0fd0nB4T! zJ?7I}zcNeq4JOBUzmRJ-{z4v7pbZPs$4+hq#>M0Bp7S4+w?StNS_Cng8f{p_48hoD zl@Jr=pipl8;7<<-4RV@JwQ&vwt7-nSYB&-qG@_j-X^Du;Bu1{>AR;D?-_au~H-%In zx1d{oEnGmo?JIze9+{pIo51ZquiIWh^h`c_=*Zgq>0Tksh)Z*)pR<~xf*TgM<(iRY6VUc+HTChOmU~gZeUR4 zl2jp0>zz)u`Ofwif@}LTC$TRqvtk{6CD$GbF}c3O>fp-Mu@~S4fxj9=7`Ey=75f^? zu!&Yf<9qRDxRtiFBB5~TZMa+2u2^Pp?Cldr#W#$*D^#~vX_1UM%!vd^WF8$gYf`^F z;Iq~6vjY38E*|7i$zZa1;1_i>)`26nXro=7(O`Fy?n}(B%A^&<+C4hT)HQq;Xt!86 z2v_jG>j7xMcXsxV_QO_IcrKAP=VNam?O~rPYUaC`Ai;@EIvtMMe`y)c}K`)36wV$PL6iSB*Y42@>mx1E}&b^3h{ig|{bRgowe zA`dLR14o8iYW!U-)%Qg<#;;?yIu`pm(*fxHSL!%PCfcs?p0>h2t{G7a)3ftwEi>j` zna-Zjs$A}m%VXURB)4(c^K;|+)~zh8wQ)j=rHx(Ob1@vQ_kU5jr*(+TXJtJD*a>>Q zsJ9ZX{7$zCrKxae9^}aIrxuYNd}B^UbQ|PXjAmVTTy)ub30vN{leC!JMbjADX)Y z{4R&TaP|c~>3ERjWndKfEX(D~Y4%2_&B=L-MV&Bns_1O)gp4%5`x_Z*>PV>K<8w7D zw|*a&WE|AukuS*xm;1kLxhTpmUVrE^e<>k;rfL_W1Im8hS-WvD97@+JzfL-F0RF31 zVyAM!Pt3tve29_bO?a8gz<_tb3P892xd~wMLrLj-=nW*k7Fwh$yoO(A1QDSFQHtEW50YgAmQA;C2@IzxSWO z#)dX#F6J|wqwOSh?xw~?PcId>(wF$VOtXx33zCNj)z_n_qGLgbER3Zy;ySzcafFV) z?Au7t1I3Gll|xML$^RlZ3=SD}Ra0NBz)ulhf5dY7mTf@qWb#9~J{IXwhugotMI z_Bn&HfvzZ>cEl_E4So-A@z+$ep@9eI9b8_sPuhv}CQtHii$?H}Y9=O6-V8d^y}xL^ zCXM{p+Hz;V2G;Emq0^dNt>tD4Ip~j?e}sEwueOIL*ohokCGgcwmMRZEt$y zt`v(h{xbFm-r<+ceml&@Qz&QT!?LCH#3WnpIr|4VteSG9`~_OzPkx^=*(QM1Y$(U> zOC+13hSoz@&I3*WMEgbXDjSo>7pewNhjR*YLswb1d_p^c*Fo;Jv5jK#{nz`YCX&NK zjRV+&iDJ942sd0V!Yi~aEpNOQmwo@~TGrn@AU`4Iz2RjOvS3o>rqAp7DU^Y~j{JxTVieo`jf@#?*4c3+DlWC*U7#V(`)tJt;0$L#U(~f2S$^c$9Gx zvJl#Bh!VD%RU<@g0|G_A1Y5U}mhqgak&TRv^$b{^g9euVBSL1p<1}rqVS4UTTt~5B z*=g4bMCN=HbM25wwKYySN(m!wVNl!)223F&m=O;v5kM(UJ>na%jagY4LB9xt4w8sKd5ayupw`4UtD5s;7zP%XhfdNx(eMJ9w&r;P{5GvpB zOUnC1UnWg@E0_7Bv6O~JEuv-@XBGC-Tl?H?E?p_?;bS4xc9EO}3Byr9{IrvSvYtF_ zFW-Vzeu?C2*ch+E#RIG7#E`xzq`Z#q*LKWqHLm#_TE&q{+nGLR*Q83)ncDnc=HZWe z@IaC5@gS2>?nqg(2Tp68Pwhcj3C*_x(^Zsrb%`uaTe1aJ++^S<)aD;i7|jV!Y$q58B% zi$Uy)BtOF^eG4#}$C)kk#3~jcj>7S+{1fhMOK)~(jDvM5+O$efx+-?ZnWkDzg)fg~ z3!(bK8B&y9)1gkaL%cL8EzRkNV+gL%lu+n|3hk=MpYv1#`+IcH#!7W`QldOcm5DOP zZMWvlI+E4CIxE)Te3FE8>80^4llDJ^M@*T~v%ghMz^xu1RP|AaXZbsN@s|*4l%uxY z!OtC)p$g*s*;_YklxjNF9YkIvbN!VZL_&1WqHOQsF@CSlqeVGb2PBIA@b&78^Zicq zkEQ!^+KDi4_PUi@%G?cZcoyL`6lb?}6$+EM2STFk=+=5IJtZnVC7C(yypXF{!&=xb zziQBKvB9i*S|DvyXv80vJ-cSfIkI0aI5KW;cuA30y(xpf%0gny!XSG!2ZiSSm$3D! zr3j96i;rn3=OeC1a5pF<)(hc7HAFf_p0i>P4uG1mE8tmM_KialIamw7zRDPfA|8?5 z@%|5%cc3RJxcLcny5pLYzauVLd~~Xnx}_+fjW(%KtkD-7sS`g@XK`gJbBcA%t>X09 zR(oFG3Iv)Nx@<9C3O_V~-urM^3>6PuJ z{K5bEcX6Wel)jbh8W-sL`DsnOQ&|Z>6TUxYmjp@>bj#&MCD^Fa8{HIBK zn}%o-8mU{oA)sd;Sx{mp7em#7*E`X*56b=h7v&Jn3A z6f$B%maQGLH5j$doveJ0fq{-{DI5yLPiy;{gI4I(IW{&ic=)Up6HayCh2-tHd7VsM zrnn=1y;`v*$z>zjQ5O0O=K@CiRvIwce7@S{!-`pEzGLNU48MqxTbW%^w7Ru|lmI5B zYTViUFVfplaK(h~TaowU`zm^{D_5B$zd*D68iO&B-14Wo{rRocwzC^ex0UCmEBR`z z5mMec-IA;}LqnV+<2We4pQ=8sKKwDb75m7L*-}60a~b_|YMmG@9N4E{IInwE0d~&r z^nlg2ecErI8XRTUqg2cGFeI@%&UZwq*e7X>fxn0;Eykjr0n zpjftW5RuR?v9G0HUJ+n#mr(>~s^X7;CB;pjf32|~Zk0&dVbQflWgC~nisPbQ&WU%WpY!kpXpEV`q#Lhz8I_PX z`&Nd)@ADopQ_?42I8}B$eX!j^pGMy#2SM2I3W--;;P2854OX7D3wC0GwnQEeD5m5M zPjzsNDb?HrqW8aPdA_^bz4LZ>O`l&VcD8WV$*uWJLXc@Fo_M(bHc|9za#Aq6tpKk0 z;l5d?n$(&iu{(gX@8M`v{^RHv?*mDfR$gCYvAglvtTSM<-W3)m#Y*x!3Bpm%; z%G#(8gW!aO$ou;GEZ_$6Y57){x;70BO-xdf_0YqJ2w7R#|HC@G&NfR(wZN7MoW1P13$lGy1bc{lk*!6wx>Cq6!nDnMiHL3x3`5@1uZ3I z=<;ZVS^FcF&;7Z?!1mTH(DxeT815GSR_3aw=Cvgy7vip{H#UZx(YkRXYUGw>W`_p>RRH=@u<7nwNR*e|H~J3DB z-YaeBv37H8y}BzkFcTM07nCJL3BC=9&IM}u_ENu>|KhlBIOBr@xB_PR%jf?)YI+{G zvM9`nhtV(L=bvoO{F3!Oms1VcTb)g~W2C58z`CSsMc0SW!de-lz+;q+la)`+B`;lS zoQa|YQaarGtaDE@$(+4KvIjcKsyXvXvLwi+{KrUbGREq)twPSl*)ke?QF zEVhYob-BW7eL+t>9j*P|9)~E-QSf^&%JyYc0(o+4u*^izG*8I)x>M0x^5I_X;nKqu(#z)WMv-e{~5{6IWlF-#5iSY@lmH zXJw_+FMopQAOILQesC)Mk}&zjfq={Zjy`@gKK?<(awOzFqNp%N{g2zpqy7>s7hKQ$ z66F2B<3AGm|IbvupV9vnT>sCi{6AY27GdEbM|1QZ4>kx2D(mCV1^Ne`yo7@w+`aq{ zlS_R_Ml1@ogzXIcD6RSki~m}0c6PR>9*h6?KVvrq8^B=7?%?vI!RKX9Gl`#uLppp0 zpQjH-7~wu;!-&A)eE(7&AL>@Vf0+>k&hGm!`u+e7{Qis27eQ&}P0x*@(P(YO+qW6O zYj}KyJ3!*j1#YLNWnyb3Hk9V=t%h*73^K94f5E1xk5McO)M+1{!Pt}(8e9HM{AZXc< zLY+vh*JjN{E8;+xk(r4?jMJ_~M$!{QnM4HCgWP$a z1-!BPJ+IQRm&|Mz_{~}pXPX|JYucFY+&ndVjE%6=vR4uAr%^rZNWi?LQMPWkoqC8t z&Wl!5fqjH(enN0Jo;+g8Kp_suh)B4tPu~B|{jROu?aC~^TB~&Z`URh_pYP$2+|8_` zq3aYi8{dm#rvViExvirXqZYI<0qWe` zHZRpJK|#TOKYj-QmFLpb&=4NY`Z#Lrl;Ll}?6fh{uIO^Bms9c3E5CQs&}*r7w8Als zBm=l5?tlZCyVF3f(hpemQDpo+?X5XQm^(4O3iBzR>2^dkzqiq8f53DgPrG`9cX$}Q zu?2J!UsosV^T=PrE=lwB5_e!C$T{ETYNquguts}%7>%$kFwlN90c_gM9|~?Q!S(tM zQxCD1O60jfar3NMs9@>2DM_3uNf%6#H779fXn(BOEOb}E<>A?NVU-)0v@nIykLxqe zQZ6%Lm?zp|A8e;yVvv;Q$Y^Cr9HEj|LBqP_av?Jm5QLFtmciPeF?YuiO5A!WhUK~m zEVcLV-%p-FSF9fofTFQE_pKK1*4Eugh!`bOrpEJvoOXp;CymfG^<1MiT6s_>|S zwKEr)m>RI^Yz^_ID$YtDHCk?#q+w5)%ylKH_dWzHVAS4vq*@tc{HdG^bfQjg(E4<> z-4v6qbrkf@6IF4}ihNa!T{W+!4%UTN3VS40OYBF5<2?Q_n6)G~rj&TqbRd-DZPKub zX&jwTk)U>L4_K@v&F}}8miB=0W0w%3EIgLtAiuqhAd@$0sB%xhx-&uB_v5#0^ZrNs zZmc)Ixon(8KWk@8@xQ%JC3vAN95G{5sGx-QIQ!TlSxLW#L2m)wU_t+RiPYF+Y59D-C5V>WH6Wr@BTX9ZQ;0@ zUbleCfZOP$S5~W-0-;gYam^G@*)m*W!}HHJ-_6Ak;Gz-qO=FzEZj>H3Kj6(OzXw5u^tsGa%tPMO0&|0vaOA zo7|4)h!0cx_^FE~#m&=XPyg8W6$Fme6+s}rxBthn=>Vq-=^%6sWny~xQ{K&H_MKwA zf)X8FhnP*1s;fMf;d)O_8&$jIkr;oU92#va;|?YVcM#HS;ytFQDY_&rEzJPf6?1Z_ zeOLBQpzgfoZ73?@DkvuOI$MDSUB)e(t8rDYpXOTQ<5l8R-!l|kRvfCim>y^h5pfu^>bcBd%b?1j zE&Mk9>4k%|!na@(yLtJsGM5|tZiQ9!)(8TaZ z2Pxhj|HiTK;Jcifa;<-=V}ZXiD1#fwoV+C(XNZ&S&`@ z9*jd3i6zjtttSLcO_};)cZy%$su>ct`^$t;CZG&PyW#C!b*sw7e3}anuZ5)L7$P3# zXlP)NBqSm-3Y9Lk-{`Wp&g*7uiU|lzzhqiyA)DU3^^#=-3NPbrE)%pWWz)u0I8KfL zF4QtqijiLa#31E^09`3cO=YN0kgdA!`z$_m?*X@D!e^>Fw_yKj&-c9acz0!j_=ql= zvBf;6N3eVZ~8#k=_ zb2YbB%3H|8pa9MUf~t-4T!eklc2)vQyEmz|NTNTu2Te>2C7JgOmpK<5iSN~wmi8A` zL3M87mr(n~fjnU-RtwalrlTu^1jt^Zu+%(M7y2{eU933|OK?^+SjgdkERSzIjo8;nX73uh*Az%#4qZ=UwC_Y<=!x zT<0@bue2ZrRl$~USY0au$O8XD3)@DEXBJ9Ll`UT-+>GrZY%3MA9rC)WpZEca28A8{ z`}{ZGr!U!X)zabNmEfDwU2Um!okxZm>b_D)H<-*My-Z$9{w|aAWpgW87DQCqvW5#%0=1MD(e5NMS{Oi8@H@Hz4IYw1-I{l|6Bp0(j}0FD#2>;8Rw4A}`` z(BtMc`cSsQ&E0)?tje`cg>gjZtAvo4PTgm`yI*9f@MA~@4$=uwKo_oY%0l-sIYKvy zh^+RN!rNA|7;+EYhkCSOh6*}j#HL0_Mj3~tp_iDw&#%P~JyqEkeeQ9LCh!`Uzkh%I z#q;MId?`FpOK2pL2nFrVGA*N{qui{ltxz;=0U545Zo@o$JOnXLgr9~d8x}J&Tqn=S z+#io4`1Cx&cEeIzJ1*2->mu^O`oTd!;h&S0&P`8vjU7ZBC%&$Wj_be3ZVvhugil=S zJ`33<>!!-v%mWyP=c^4sjE5c8*(ZL)Z`T z$3jMtB)$UMXUlT?H8)pal@WJmm-!9s*we`90zaS z+|_R-pZ;WOG>Cyx)YTLE(bYW!_l)d0l68DmC#33;EkXo3^TB3#c*7v(9}9E&o~N!t zZY5CnDf#tR7gSVLBSQz>fza%Z!XhYU0Hj3h9rBjgT762Dv$|5H|-p4~lD*U@ty48c41)KGQ*N@}9Ndu|6OQl}T w#l}_y$FwvPf**gw!^67(U;SVHFx@&M7MybH{-1?sVI(|d1r7NES(E$!1@_s9$^ZZW literal 0 HcmV?d00001 diff --git a/img/power_of_two_release.PNG b/img/power_of_two_release.PNG new file mode 100644 index 0000000000000000000000000000000000000000..cc4166b5c4e21da67db9c74241a82fb479547eaa GIT binary patch literal 45435 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 H^P&F*XspGx literal 0 HcmV?d00001 From f6a268e30d5740ce14c41bccd2b29bb9d7d86ce1 Mon Sep 17 00:00:00 2001 From: Alexander Perry Date: Tue, 19 Sep 2017 22:00:10 -0400 Subject: [PATCH 6/6] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7cd36f5..1e15a96 100644 --- a/README.md +++ b/README.md @@ -21,5 +21,6 @@ Based on the timeline, there are many back and forth copys from the GPU to main Even though the thrust implementation uses all of these copys, it is still faster than my GPU attempts. I suspect this is due to memory accesses. ![](./img/power_of_two.PNG) + The previous graph is based on a debug build. An interesting thing to note is that the thrust implementation is less optimal in a debug setting compared to the release build.