-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from nhatdongdang/feature/base-program
Add base program implementation for neural network in C
- Loading branch information
Showing
58 changed files
with
390 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
BasedOnStyle: LLVM | ||
IndentWidth: 4 | ||
PointerAlignment: Left | ||
ColumnLimit: 120 | ||
AlwaysBreakTemplateDeclarations: true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
cmake_minimum_required(VERSION 3.10) | ||
|
||
# Set the project name | ||
project(ichida-algo) | ||
|
||
set(CMAKE_CXX_FLAGS "-O3 -Wall -Wextra") | ||
set(CMAKE_C_STANDARD 99) | ||
set(CMAKE_C_STANDARD_REQUIRED True) | ||
|
||
add_executable(speed_cpu src/main.c) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
#!/bin/bash | ||
|
||
if [ "$#" -ne 2 ]; then | ||
echo "Usage: speed_cpu <relative_path_to_weights_and_biases.txt> <relative_path_to_input_tensor_directory>" | ||
exit 1 | ||
fi | ||
|
||
weights_and_biases=$1 | ||
input_tensor_dir=$2 | ||
|
||
binary="speed_cpu" | ||
|
||
if [ ! -f "$binary" ]; then | ||
echo "Binary $binary not found!" | ||
exit 1 | ||
fi | ||
|
||
start_time=$(date +%s) | ||
./$binary "$weights_and_biases" "$input_tensor_dir" | ||
|
||
end_time=$(date +%s) | ||
execution_time=$((end_time - start_time)) | ||
|
||
if [ ! -f "results.csv" ]; then | ||
echo "Error: results.csv not found!" | ||
exit 1 | ||
else | ||
echo "results.csv found!" | ||
fi | ||
|
||
echo "Execution time: $execution_time seconds" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
#!/bin/bash | ||
|
||
if [ "$#" -ne 2 ]; then | ||
echo "Usage: speed_gpu <relative_path_to_weights_and_biases.txt> <relative_path_to_input_tensor_directory>" | ||
exit 1 | ||
fi | ||
|
||
weights_and_biases=$1 | ||
input_tensor_dir=$2 | ||
|
||
binary="speed_gpu" | ||
|
||
if [ ! -f "$binary" ]; then | ||
echo "Binary $binary not found!" | ||
exit 1 | ||
fi | ||
|
||
start_time=$(date +%s) | ||
./$binary "$weights_and_biases" "$input_tensor_dir" | ||
|
||
end_time=$(date +%s) | ||
execution_time=$((end_time - start_time)) | ||
|
||
if [ ! -f "results.csv" ]; then | ||
echo "Error: results.csv not found!" | ||
exit 1 | ||
else | ||
echo "results.csv found!" | ||
fi | ||
|
||
echo "Execution time: $execution_time seconds" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,233 @@ | ||
#include <math.h> | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <string.h> | ||
|
||
typedef struct { | ||
int rows; | ||
int cols; | ||
float** data; | ||
} matrix; | ||
|
||
matrix* weight[7]; | ||
matrix* biase[7]; | ||
|
||
matrix* createMatrix(int rows, int cols) { | ||
matrix* res = (matrix*)malloc(sizeof(matrix)); | ||
res->rows = rows; | ||
res->cols = cols; | ||
res->data = (float**)malloc(rows * sizeof(float*)); | ||
for (int i = 0; i < rows; i++) { | ||
res->data[i] = (float*)malloc(cols * sizeof(float)); | ||
} | ||
return res; | ||
} | ||
|
||
void multiplyMatrices(const matrix* a, const matrix* b, const matrix* result) { | ||
for (int i = 0; i < result->rows; i++) { | ||
for (int j = 0; j < result->cols; j++) { | ||
float sum = 0; | ||
for (int k = 0; k < a->cols; k++) { | ||
sum += (a->data)[i][k] * ((b->data)[k][j]); | ||
} | ||
(result->data)[i][j] = sum; | ||
} | ||
} | ||
} | ||
|
||
void addMatrix(matrix* a, const matrix* b) { | ||
for (int i = 0; i < a->rows; i++) { | ||
for (int j = 0; j < a->cols; j++) { | ||
(a->data)[i][j] += (b->data)[i][j]; | ||
} | ||
} | ||
} | ||
|
||
void ReLU(matrix* a) { | ||
for (int i = 0; i < a->rows; i++) { | ||
for (int j = 0; j < a->cols; j++) { | ||
if ((a->data)[i][j] < (float)0) | ||
(a->data)[i][j] = (float)0; | ||
} | ||
} | ||
} | ||
|
||
void softmax(matrix* a) { | ||
float res = (float)0; | ||
for (int i = 0; i < a->rows; i++) { | ||
for (int j = 0; j < a->cols; j++) { | ||
res += exp((a->data)[i][j]); | ||
} | ||
} | ||
for (int i = 0; i < a->rows; i++) { | ||
for (int j = 0; j < a->cols; j++) { | ||
(a->data)[i][j] /= res; | ||
} | ||
} | ||
} | ||
|
||
void processWeight(char* line, int layer) { | ||
char* token; | ||
float value; | ||
const char* delimiter = ","; | ||
|
||
token = strtok(line, delimiter); | ||
for (int i = 0; i < weight[layer]->rows; i++) { | ||
for (int j = 0; j < weight[layer]->cols; j++) { | ||
value = strtof(token, NULL); | ||
(weight[layer]->data)[i][j] = value; | ||
token = strtok(NULL, delimiter); | ||
} | ||
} | ||
} | ||
|
||
void processBiase(char* line, int layer) { | ||
char* token; | ||
float value; | ||
const char* delimiter = ","; | ||
|
||
token = strtok(line, delimiter); | ||
|
||
for (int i = 0; i < biase[layer]->rows; i++) { | ||
value = strtof(token, NULL); | ||
(biase[layer]->data)[i][0] = value; | ||
token = strtok(NULL, delimiter); | ||
} | ||
} | ||
|
||
void readModel() { | ||
FILE* file = fopen("../weights_and_biases.txt", "r"); | ||
|
||
char* line = NULL; | ||
size_t len = 0; | ||
int line_number = 0; | ||
int layer = 0; | ||
|
||
while ((getline(&line, &len, file)) != -1) { | ||
if ((line_number - 1) % 4 == 0) { | ||
processWeight(line, layer); | ||
} else if ((line_number - 3) % 4 == 0) { | ||
processBiase(line, layer); | ||
layer++; | ||
} | ||
line_number++; | ||
} | ||
|
||
free(line); | ||
fclose(file); | ||
} | ||
|
||
void readInput(matrix* a, char* fileName) { | ||
FILE* file = fopen(fileName, "r"); | ||
|
||
char* line = NULL; | ||
size_t len = 0; | ||
ssize_t read; | ||
int line_number = 0; | ||
|
||
getline(&line, &len, file); | ||
char* token; | ||
float value; | ||
const char* delimiter = ","; | ||
token = strtok(line, delimiter); | ||
int size = 0; | ||
for (int i = 0; i < 225; i++) { | ||
value = strtof(token, NULL); | ||
(a->data)[i][0] = value; | ||
token = strtok(NULL, delimiter); | ||
} | ||
free(line); | ||
fclose(file); | ||
} | ||
|
||
void propagateForward(const matrix* weight, const matrix* input, matrix* nextLayer, const matrix* biase) { | ||
multiplyMatrices(weight, input, nextLayer); | ||
addMatrix(nextLayer, biase); | ||
} | ||
|
||
int getResult(matrix* a) { | ||
int idx = 0; | ||
float res = INT32_MIN; | ||
for (int i = 0; i < a->rows; i++) { | ||
if (res < (a->data)[i][0]) { | ||
res = (a->data)[i][0]; | ||
idx = i; | ||
} | ||
} | ||
return idx; | ||
} | ||
|
||
int inference(matrix* input) { | ||
matrix* layer[7]; | ||
layer[0] = createMatrix(98, 1); | ||
layer[1] = createMatrix(65, 1); | ||
layer[2] = createMatrix(50, 1); | ||
layer[3] = createMatrix(30, 1); | ||
layer[4] = createMatrix(25, 1); | ||
layer[5] = createMatrix(40, 1); | ||
layer[6] = createMatrix(52, 1); | ||
|
||
propagateForward(weight[0], input, layer[0], biase[0]); | ||
ReLU(layer[0]); | ||
propagateForward(weight[1], layer[0], layer[1], biase[1]); | ||
ReLU(layer[1]); | ||
propagateForward(weight[2], layer[1], layer[2], biase[2]); | ||
ReLU(layer[2]); | ||
propagateForward(weight[3], layer[2], layer[3], biase[3]); | ||
ReLU(layer[3]); | ||
propagateForward(weight[4], layer[3], layer[4], biase[4]); | ||
ReLU(layer[4]); | ||
propagateForward(weight[5], layer[4], layer[5], biase[5]); | ||
ReLU(layer[5]); | ||
|
||
propagateForward(weight[6], layer[5], layer[6], biase[6]); | ||
softmax(layer[6]); | ||
return getResult(layer[6]); | ||
} | ||
|
||
int main() { | ||
|
||
// Load model (The memory of those code should be initialize during compile time to enchance the speed) | ||
weight[0] = createMatrix(98, 225); | ||
weight[1] = createMatrix(65, 98); | ||
weight[2] = createMatrix(50, 65); | ||
weight[3] = createMatrix(30, 50); | ||
weight[4] = createMatrix(25, 30); | ||
weight[5] = createMatrix(40, 25); | ||
weight[6] = createMatrix(52, 40); | ||
|
||
biase[0] = createMatrix(98, 1); | ||
biase[1] = createMatrix(65, 1); | ||
biase[2] = createMatrix(50, 1); | ||
biase[3] = createMatrix(30, 1); | ||
biase[4] = createMatrix(25, 1); | ||
biase[5] = createMatrix(40, 1); | ||
biase[6] = createMatrix(52, 1); | ||
|
||
readModel(); | ||
|
||
char str[10]; | ||
char fileName[100]; | ||
matrix* input = createMatrix(255, 1); | ||
|
||
for (int i = 1; i <= 52; i++) { | ||
if (i < 10) { | ||
sprintf(str, "0%d", i); | ||
} else { | ||
sprintf(str, "%d", i); | ||
} | ||
strcpy(fileName, "../tensors/"); | ||
strcat(fileName, str); | ||
strcat(fileName, "out.txt"); | ||
|
||
// Read txt file | ||
readInput(input, fileName); | ||
|
||
// Check result | ||
if (inference(input) + 1 == i) { | ||
printf("Test %d correct ✅\n", i); | ||
} else { | ||
printf("Test %d incorrect ❌\n", i); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,7.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,172.0,197.0,7.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,47.0,216.0,213.0,74.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,144.0,141.0,109.0,174.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,13.0,217.0,49.0,25.0,223.0,30.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,88.0,191.0,0.0,0.0,168.0,118.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,183.0,209.0,146.0,146.0,196.0,209.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,38.0,229.0,125.0,123.0,123.0,121.0,230.0,62.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,135.0,176.0,0.0,0.0,0.0,0.0,153.0,164.0,0.0,0.0,0.0,0.0,0.0,0.0,5.0,209.0,80.0,0.0,0.0,0.0,0.0,61.0,230.0,18.0,0.0,0.0,0.0,0.0,0.0,2.0,43.0,5.0,0.0,0.0,0.0,0.0,4.0,59.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,47.0,105.0,92.0,20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,85.0,228.0,144.0,167.0,204.0,20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,80.0,70.0,0.0,19.0,228.0,54.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,26.0,146.0,186.0,187.0,240.0,51.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,2.0,189.0,149.0,43.0,17.0,214.0,53.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,3.0,213.0,91.0,13.0,97.0,251.0,61.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,83.0,208.0,193.0,133.0,164.0,159.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,12.0,17.0,0.0,2.0,15.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,8.0,8.0,7.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,38.0,199.0,205.0,204.0,205.0,193.0,78.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,93.0,214.0,40.0,39.0,42.0,111.0,236.0,30.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,94.0,192.0,0.0,0.0,0.0,1.0,229.0,57.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.0,204.0,39.0,39.0,41.0,115.0,195.0,15.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,87.0,243.0,202.0,202.0,205.0,239.0,110.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,93.0,197.0,7.0,7.0,8.0,43.0,223.0,74.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,93.0,194.0,0.0,0.0,0.0,0.0,176.0,139.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,95.0,199.0,0.0,0.0,0.0,30.0,228.0,101.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,61.0,236.0,195.0,194.0,196.0,219.0,169.0,12.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,41.0,58.0,58.0,58.0,38.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,8.0,8.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,122.0,126.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,141.0,146.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,139.0,141.0,65.0,132.0,98.0,9.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,132.0,218.0,169.0,122.0,196.0,173.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,135.0,213.0,6.0,0.0,16.0,227.0,58.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,139.0,145.0,0.0,0.0,0.0,188.0,101.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,139.0,153.0,0.0,0.0,0.0,194.0,94.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,134.0,230.0,25.0,0.0,44.0,232.0,40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,127.0,197.0,186.0,166.0,219.0,126.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,21.0,17.0,36.0,88.0,52.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,16.0,26.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,21.0,158.0,218.0,216.0,209.0,104.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,9.0,195.0,186.0,49.0,24.0,82.0,242.0,101.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.0,229.0,14.0,0.0,0.0,0.0,99.0,127.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,167.0,155.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,190.0,124.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,178.0,141.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,120.0,208.0,0.0,0.0,0.0,0.0,70.0,151.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,27.0,233.0,127.0,6.0,0.0,28.0,217.0,143.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,62.0,215.0,209.0,188.0,222.0,166.0,11.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,13.0,70.0,89.0,51.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,31.0,119.0,129.0,53.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,40.0,220.0,151.0,129.0,227.0,75.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,158.0,157.0,0.0,0.0,92.0,99.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,202.0,83.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,200.0,88.0,0.0,0.0,0.0,6.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,142.0,176.0,0.0,0.0,121.0,140.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,24.0,197.0,184.0,167.0,218.0,58.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,10.0,74.0,86.0,27.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,7.0,7.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,38.0,199.0,209.0,209.0,205.0,162.0,41.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.0,220.0,47.0,46.0,61.0,152.0,230.0,40.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,93.0,198.0,0.0,0.0,0.0,0.0,172.0,167.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,93.0,200.0,0.0,0.0,0.0,0.0,77.0,223.0,8.0,0.0,0.0,0.0,0.0,0.0,0.0,93.0,200.0,0.0,0.0,0.0,0.0,54.0,231.0,18.0,0.0,0.0,0.0,0.0,0.0,0.0,93.0,200.0,0.0,0.0,0.0,0.0,71.0,225.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,93.0,199.0,0.0,0.0,0.0,0.0,151.0,183.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,95.0,205.0,3.0,3.0,13.0,97.0,244.0,64.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,61.0,239.0,206.0,205.0,215.0,215.0,88.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,41.0,57.0,58.0,47.0,10.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,13.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,13.0,191.0,31.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,14.0,220.0,38.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,38.0,124.0,120.0,44.0,212.0,37.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,46.0,225.0,149.0,130.0,188.0,227.0,35.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,163.0,151.0,0.0,0.0,73.0,245.0,34.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,203.0,80.0,0.0,0.0,15.0,217.0,37.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,199.0,86.0,0.0,0.0,19.0,223.0,36.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,143.0,176.0,0.0,0.0,106.0,251.0,34.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,26.0,204.0,185.0,169.0,180.0,214.0,33.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,14.0,79.0,78.0,11.0,31.0,4.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,7.0,7.0,7.0,7.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,38.0,199.0,210.0,210.0,210.0,210.0,127.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.0,218.0,49.0,47.0,47.0,48.0,26.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,94.0,195.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.0,203.0,27.0,27.0,27.0,25.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,87.0,246.0,211.0,211.0,212.0,201.0,29.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.0,202.0,19.0,19.0,20.0,17.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,93.0,196.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,95.0,202.0,3.0,3.0,3.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,61.0,238.0,206.0,204.0,204.0,205.0,144.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,41.0,57.0,58.0,58.0,57.0,38.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,32.0,118.0,126.0,46.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,41.0,211.0,130.0,117.0,213.0,64.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,158.0,133.0,0.0,0.0,101.0,188.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,197.0,203.0,183.0,183.0,195.0,192.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,196.0,103.0,36.0,37.0,32.0,20.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,139.0,162.0,0.0,0.0,82.0,154.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,22.0,192.0,177.0,156.0,219.0,82.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,9.0,72.0,88.0,33.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,7.0,7.0,7.0,7.0,5.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,38.0,200.0,210.0,210.0,210.0,210.0,169.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.0,220.0,49.0,47.0,47.0,48.0,36.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,94.0,198.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.0,206.0,27.0,27.0,27.0,26.0,4.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,87.0,246.0,211.0,211.0,211.0,207.0,43.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,92.0,205.0,19.0,19.0,20.0,18.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,93.0,199.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,94.0,202.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,88.0,192.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,12.0,30.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
1.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,15.0,24.0,3.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,75.0,215.0,211.0,64.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,183.0,119.0,14.0,8.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,12.0,95.0,218.0,153.0,92.0,10.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,18.0,142.0,229.0,188.0,142.0,18.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,188.0,83.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,191.0,90.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,191.0,90.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,193.0,91.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,183.0,85.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,29.0,12.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,0.0,2.0,0.0,0.0,0.0,0.0,0.0,0.0 |
Oops, something went wrong.