Skip to content

Instantly share code, notes, and snippets.

@mkaczanowski
Created August 30, 2020 23:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mkaczanowski/117d6e011eea751865654687b190bd33 to your computer and use it in GitHub Desktop.
Save mkaczanowski/117d6e011eea751865654687b190bd33 to your computer and use it in GitHub Desktop.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 77b74e6..c561541 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -6,6 +6,16 @@ set( CMAKE_VERBOSE_MAKEFILE on )
# set(CMAKE_CXX_FLAGS "-fPIC")
+set(CMAKE_C_COMPILER /opt/adapteva/esdk/tools/e-gnu/bin/e-gcc)
+set(CMAKE_CXX_COMPILER /opt/adapteva/esdk/tools/e-gnu/bin/e-g++)
+
+# add epiphany libs
+include_directories( /opt/adapteva/esdk/tools/e-gnu.armv7l/epiphany-elf/include )
+find_library(E_LIB e-lib HINTS /opt/adapteva/esdk/tools/e-gnu.armv7l/epiphany-elf/lib)
+
+add_compile_options(-g -s -O2 -Wl,--strip-all -fpermissive)
+add_link_options(-g -s -O2 -Wl,--strip-all -T /opt/adapteva/esdk/bsps/current/legacy.ldf)
+
# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
@@ -14,7 +24,6 @@ include_directories(${PROJECT_SOURCE_DIR}/uTensor/loaders)
include_directories(${PROJECT_SOURCE_DIR}/uTensor/ops)
include_directories(${PROJECT_SOURCE_DIR}/uTensor/util)
-
file(GLOB SOURCES uTensor/*/*.cpp)
file(GLOB INCLUDES uTensor/*/*.hpp)
@@ -34,7 +43,7 @@ else()
endif()
# Build with code coverage
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage -ggdb")
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage -ggdb")
add_library(utensor STATIC ${SOURCES})
@@ -81,3 +90,4 @@ target_include_directories(utensor PUBLIC ${CMAKE_CURRENT_LIST_DIR}/uTensor/util
# Todo add install
set(UTENSOR_INCLUDES ${INCLUDES} PARENT_SCOPE)
+add_subdirectory(DigitRecognition)
diff --git a/DigitRecognition/CMakeLists.txt b/DigitRecognition/CMakeLists.txt
new file mode 100644
index 0000000..9264617
--- /dev/null
+++ b/DigitRecognition/CMakeLists.txt
@@ -0,0 +1,3 @@
+add_executable(DigitRecognition DigitRecognition.cpp deep_mlp.cpp deep_mlp_weight.hpp input_data.h)
+target_link_libraries(DigitRecognition PUBLIC utensor)
+#add_executable(DigitRecognition DigitRecognition.cpp)
diff --git a/DigitRecognition/DigitRecognition.cpp b/DigitRecognition/DigitRecognition.cpp
new file mode 100644
index 0000000..9d38ec0
--- /dev/null
+++ b/DigitRecognition/DigitRecognition.cpp
@@ -0,0 +1,29 @@
+#include <tensor.hpp>
+#include <stdio.h>
+
+#include "deep_mlp.hpp" //gernerated model file
+#include "input_data.h" //contains the first sample taken from the MNIST test set
+
+volatile unsigned long long *debug = (void *)0x7200;
+
+int main() {
+ (*debug) = 1;
+
+ Context ctx; //creating the context class, the stage where inferences take place
+ //wrapping the input data in a tensor class
+ Tensor* input_x = new WrappedRamTensor<float>({1, 784}, (float*) input_data);
+
+ (*debug) = 2;
+ get_deep_mlp_ctx(ctx, input_x); // pass the tensor to the context
+
+ (*debug) = 3;
+ S_TENSOR pred_tensor = ctx.get("y_pred:0"); // getting a reference to the output tensor
+ ctx.eval(); //trigger the inference
+
+ (*debug) = 4;
+ int pred_label = *(pred_tensor->read<int>(0, 0)); //getting the result back
+
+ *debug = pred_label;
+
+ return 0;
+}
diff --git a/DigitRecognition/deep_mlp.cpp b/DigitRecognition/deep_mlp.cpp
new file mode 100644
index 0000000..61a3763
--- /dev/null
+++ b/DigitRecognition/deep_mlp.cpp
@@ -0,0 +1,355 @@
+// Auto generated by utensor-cli
+
+#include "deep_mlp_weight.hpp"
+#include "../uTensor/ops/ArrayOps.hpp"
+#include "../uTensor/ops/MatrixOps.hpp"
+#include "deep_mlp.hpp"
+#include "../uTensor/ops/NnOps.hpp"
+#include "../uTensor/ops/MathOps.hpp"
+#include "../uTensor/core/tensor.hpp"
+#include "../uTensor/core/context.hpp"
+
+void get_deep_mlp_ctx(Context& ctx, Tensor* input_0) {
+
+
+{ // add tensor for placeholders
+ ctx.add(input_0, "x:0", 2);
+}
+{
+ ctx.add(new BinaryTensor<int>({1}, inline_MatMul_eightbit_x__port__0_reshape_dims_0),
+ "MatMul_eightbit/x__port__0/reshape_dims:0",
+ 1);
+}
+{
+ ctx.add(new RamTensor<float>(), "MatMul_eightbit/x__port__0/reshape:0", 2);
+ ctx.push(new ReshapeOp(),
+ { "x:0", "MatMul_eightbit/x__port__0/reshape_dims:0" },
+ { "MatMul_eightbit/x__port__0/reshape:0" });
+ ctx.eval();
+}
+{
+ ctx.add(new BinaryTensor<int>({1}, inline_MatMul_eightbit_x__port__0_reduction_dims_0),
+ "MatMul_eightbit/x__port__0/reduction_dims:0",
+ 2);
+}
+{
+ RamTensor<float>* out_tensor;
+ out_tensor = new RamTensor<float>({ 1 });
+ ctx.add(out_tensor, "MatMul_eightbit/x__port__0/min:0", 1);
+ ctx.push(new MinOp(),
+ { "MatMul_eightbit/x__port__0/reshape:0", "MatMul_eightbit/x__port__0/reduction_dims:0" },
+ { "MatMul_eightbit/x__port__0/min:0" });
+ ctx.eval();
+}
+{
+ RamTensor<float>* out_tensor;
+ out_tensor = new RamTensor<float>({ 1 });
+ ctx.add(out_tensor, "MatMul_eightbit/x__port__0/max:0", 1);
+ ctx.push(new MaxOp(),
+ { "MatMul_eightbit/x__port__0/reshape:0", "MatMul_eightbit/x__port__0/reduction_dims:0" },
+ { "MatMul_eightbit/x__port__0/max:0" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<uint8_t>(), "MatMul_eightbit/x__port__0/quantize:0", 1);
+ ctx.add(new RamTensor<float>({1}), "MatMul_eightbit/x__port__0/quantize:1", 1);
+ ctx.add(new RamTensor<float>({1}), "MatMul_eightbit/x__port__0/quantize:2", 1);
+ ctx.push(new QuantizeV2Op(),
+ { "x:0", "MatMul_eightbit/x__port__0/min:0", "MatMul_eightbit/x__port__0/max:0" },
+ { "MatMul_eightbit/x__port__0/quantize:0", "MatMul_eightbit/x__port__0/quantize:1", "MatMul_eightbit/x__port__0/quantize:2" });
+ ctx.eval();
+}
+{
+ ctx.add(new BinaryTensor<uint8_t>({784,32}, inline_Variable_quantized_const_0),
+ "Variable_quantized_const:0",
+ 1);
+}
+{
+ ctx.add(new BinaryTensor<float>({1}, inline_Variable_quantized_min_0),
+ "Variable_quantized_min:0",
+ 1);
+}
+{
+ ctx.add(new BinaryTensor<float>({1}, inline_Variable_quantized_max_0),
+ "Variable_quantized_max:0",
+ 1);
+}
+{
+ ctx.add(new RamTensor<int>(), "MatMul/eightbit:0", 2);
+ ctx.add(new RamTensor<float>({1}), "MatMul/eightbit:1", 2);
+ ctx.add(new RamTensor<float>({1}), "MatMul/eightbit:2", 2);
+ ctx.push(new QntMatMulOp<uint8_t, uint8_t, int>(),
+ { "MatMul_eightbit/x__port__0/quantize:0", "MatMul_eightbit/x__port__0/quantize:1", "MatMul_eightbit/x__port__0/quantize:2", "Variable_quantized_const:0", "Variable_quantized_min:0", "Variable_quantized_max:0" },
+ { "MatMul/eightbit:0", "MatMul/eightbit:1", "MatMul/eightbit:2" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<float>({1}), "MatMul/eightbit/requant_range:0", 1);
+ ctx.add(new RamTensor<float>({1}), "MatMul/eightbit/requant_range:1", 1);
+ ctx.push(new Requantization_RangeOp(),
+ { "MatMul/eightbit:0", "MatMul/eightbit:1", "MatMul/eightbit:2" },
+ { "MatMul/eightbit/requant_range:0", "MatMul/eightbit/requant_range:1" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<uint8_t>(), "MatMul/eightbit/requantize:0", 1);
+ ctx.add(new RamTensor<float>({1}), "MatMul/eightbit/requantize:1", 1);
+ ctx.add(new RamTensor<float>({1}), "MatMul/eightbit/requantize:2", 1);
+ ctx.push(new RequantizeOp(),
+ { "MatMul/eightbit:0", "MatMul/eightbit:1", "MatMul/eightbit:2", "MatMul/eightbit/requant_range:0", "MatMul/eightbit/requant_range:1" },
+ { "MatMul/eightbit/requantize:0", "MatMul/eightbit/requantize:1", "MatMul/eightbit/requantize:2" });
+ ctx.eval();
+}
+{
+ ctx.add(new BinaryTensor<float>({32}, inline_Variable_1_0),
+ "Variable_1:0",
+ 2);
+}
+{
+ ctx.add(new BinaryTensor<int>({1}, inline_zscore_eightbit_Variable_1__port__0_reshape_dims_0),
+ "zscore_eightbit/Variable_1__port__0/reshape_dims:0",
+ 1);
+}
+{
+ ctx.add(new RamTensor<float>(), "zscore_eightbit/Variable_1__port__0/reshape:0", 2);
+ ctx.push(new ReshapeOp(),
+ { "Variable_1:0", "zscore_eightbit/Variable_1__port__0/reshape_dims:0" },
+ { "zscore_eightbit/Variable_1__port__0/reshape:0" });
+ ctx.eval();
+}
+{
+ ctx.add(new BinaryTensor<int>({1}, inline_zscore_eightbit_Variable_1__port__0_reduction_dims_0),
+ "zscore_eightbit/Variable_1__port__0/reduction_dims:0",
+ 2);
+}
+{
+ RamTensor<float>* out_tensor;
+ out_tensor = new RamTensor<float>({ 1 });
+ ctx.add(out_tensor, "zscore_eightbit/Variable_1__port__0/min:0", 1);
+ ctx.push(new MinOp(),
+ { "zscore_eightbit/Variable_1__port__0/reshape:0", "zscore_eightbit/Variable_1__port__0/reduction_dims:0" },
+ { "zscore_eightbit/Variable_1__port__0/min:0" });
+ ctx.eval();
+}
+{
+ RamTensor<float>* out_tensor;
+ out_tensor = new RamTensor<float>({ 1 });
+ ctx.add(out_tensor, "zscore_eightbit/Variable_1__port__0/max:0", 1);
+ ctx.push(new MaxOp(),
+ { "zscore_eightbit/Variable_1__port__0/reshape:0", "zscore_eightbit/Variable_1__port__0/reduction_dims:0" },
+ { "zscore_eightbit/Variable_1__port__0/max:0" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<uint8_t>(), "zscore_eightbit/Variable_1__port__0/quantize:0", 1);
+ ctx.add(new RamTensor<float>({1}), "zscore_eightbit/Variable_1__port__0/quantize:1", 1);
+ ctx.add(new RamTensor<float>({1}), "zscore_eightbit/Variable_1__port__0/quantize:2", 1);
+ ctx.push(new QuantizeV2Op(),
+ { "Variable_1:0", "zscore_eightbit/Variable_1__port__0/min:0", "zscore_eightbit/Variable_1__port__0/max:0" },
+ { "zscore_eightbit/Variable_1__port__0/quantize:0", "zscore_eightbit/Variable_1__port__0/quantize:1", "zscore_eightbit/Variable_1__port__0/quantize:2" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<int>(), "zscore/eightbit:0", 2);
+ ctx.add(new RamTensor<float>({1}), "zscore/eightbit:1", 2);
+ ctx.add(new RamTensor<float>({1}), "zscore/eightbit:2", 2);
+ ctx.push(new QuantizedAddOp<uint8_t, uint8_t, int>(),
+ { "MatMul/eightbit/requantize:0", "MatMul/eightbit/requantize:1", "MatMul/eightbit/requantize:2", "zscore_eightbit/Variable_1__port__0/quantize:0", "zscore_eightbit/Variable_1__port__0/quantize:1", "zscore_eightbit/Variable_1__port__0/quantize:2" },
+ { "zscore/eightbit:0", "zscore/eightbit:1", "zscore/eightbit:2" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<float>({1}), "zscore/eightbit/requant_range:0", 1);
+ ctx.add(new RamTensor<float>({1}), "zscore/eightbit/requant_range:1", 1);
+ ctx.push(new Requantization_RangeOp(),
+ { "zscore/eightbit:0", "zscore/eightbit:1", "zscore/eightbit:2" },
+ { "zscore/eightbit/requant_range:0", "zscore/eightbit/requant_range:1" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<uint8_t>(), "zscore/eightbit/requantize:0", 1);
+ ctx.add(new RamTensor<float>({1}), "zscore/eightbit/requantize:1", 1);
+ ctx.add(new RamTensor<float>({1}), "zscore/eightbit/requantize:2", 1);
+ ctx.push(new RequantizeOp(),
+ { "zscore/eightbit:0", "zscore/eightbit:1", "zscore/eightbit:2", "zscore/eightbit/requant_range:0", "zscore/eightbit/requant_range:1" },
+ { "zscore/eightbit/requantize:0", "zscore/eightbit/requantize:1", "zscore/eightbit/requantize:2" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<uint8_t>(), "Relu/eightbit:0", 1);
+ ctx.add(new RamTensor<float>({1}), "Relu/eightbit:1", 1);
+ ctx.add(new RamTensor<float>({1}), "Relu/eightbit:2", 1);
+ ctx.push(new QuantizedReluOp<uint8_t, float, uint8_t>(),
+ { "zscore/eightbit/requantize:0", "zscore/eightbit/requantize:1", "zscore/eightbit/requantize:2" },
+ { "Relu/eightbit:0", "Relu/eightbit:1", "Relu/eightbit:2" });
+ ctx.eval();
+}
+{
+ ctx.add(new BinaryTensor<float>({32,10}, inline_Variable_2_0),
+ "Variable_2:0",
+ 2);
+}
+{
+ ctx.add(new BinaryTensor<int>({1}, inline_MatMul_1_eightbit_Variable_2__port__0_reshape_dims_0),
+ "MatMul_1_eightbit/Variable_2__port__0/reshape_dims:0",
+ 1);
+}
+{
+ ctx.add(new RamTensor<float>(), "MatMul_1_eightbit/Variable_2__port__0/reshape:0", 2);
+ ctx.push(new ReshapeOp(),
+ { "Variable_2:0", "MatMul_1_eightbit/Variable_2__port__0/reshape_dims:0" },
+ { "MatMul_1_eightbit/Variable_2__port__0/reshape:0" });
+ ctx.eval();
+}
+{
+ ctx.add(new BinaryTensor<int>({1}, inline_MatMul_1_eightbit_Variable_2__port__0_reduction_dims_0),
+ "MatMul_1_eightbit/Variable_2__port__0/reduction_dims:0",
+ 2);
+}
+{
+ RamTensor<float>* out_tensor;
+ out_tensor = new RamTensor<float>({ 1 });
+ ctx.add(out_tensor, "MatMul_1_eightbit/Variable_2__port__0/min:0", 1);
+ ctx.push(new MinOp(),
+ { "MatMul_1_eightbit/Variable_2__port__0/reshape:0", "MatMul_1_eightbit/Variable_2__port__0/reduction_dims:0" },
+ { "MatMul_1_eightbit/Variable_2__port__0/min:0" });
+ ctx.eval();
+}
+{
+ RamTensor<float>* out_tensor;
+ out_tensor = new RamTensor<float>({ 1 });
+ ctx.add(out_tensor, "MatMul_1_eightbit/Variable_2__port__0/max:0", 1);
+ ctx.push(new MaxOp(),
+ { "MatMul_1_eightbit/Variable_2__port__0/reshape:0", "MatMul_1_eightbit/Variable_2__port__0/reduction_dims:0" },
+ { "MatMul_1_eightbit/Variable_2__port__0/max:0" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<uint8_t>(), "MatMul_1_eightbit/Variable_2__port__0/quantize:0", 1);
+ ctx.add(new RamTensor<float>({1}), "MatMul_1_eightbit/Variable_2__port__0/quantize:1", 1);
+ ctx.add(new RamTensor<float>({1}), "MatMul_1_eightbit/Variable_2__port__0/quantize:2", 1);
+ ctx.push(new QuantizeV2Op(),
+ { "Variable_2:0", "MatMul_1_eightbit/Variable_2__port__0/min:0", "MatMul_1_eightbit/Variable_2__port__0/max:0" },
+ { "MatMul_1_eightbit/Variable_2__port__0/quantize:0", "MatMul_1_eightbit/Variable_2__port__0/quantize:1", "MatMul_1_eightbit/Variable_2__port__0/quantize:2" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<int>(), "MatMul_1/eightbit:0", 2);
+ ctx.add(new RamTensor<float>({1}), "MatMul_1/eightbit:1", 2);
+ ctx.add(new RamTensor<float>({1}), "MatMul_1/eightbit:2", 2);
+ ctx.push(new QntMatMulOp<uint8_t, uint8_t, int>(),
+ { "Relu/eightbit:0", "Relu/eightbit:1", "Relu/eightbit:2", "MatMul_1_eightbit/Variable_2__port__0/quantize:0", "MatMul_1_eightbit/Variable_2__port__0/quantize:1", "MatMul_1_eightbit/Variable_2__port__0/quantize:2" },
+ { "MatMul_1/eightbit:0", "MatMul_1/eightbit:1", "MatMul_1/eightbit:2" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<float>({1}), "MatMul_1/eightbit/requant_range:0", 1);
+ ctx.add(new RamTensor<float>({1}), "MatMul_1/eightbit/requant_range:1", 1);
+ ctx.push(new Requantization_RangeOp(),
+ { "MatMul_1/eightbit:0", "MatMul_1/eightbit:1", "MatMul_1/eightbit:2" },
+ { "MatMul_1/eightbit/requant_range:0", "MatMul_1/eightbit/requant_range:1" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<uint8_t>(), "MatMul_1/eightbit/requantize:0", 1);
+ ctx.add(new RamTensor<float>({1}), "MatMul_1/eightbit/requantize:1", 1);
+ ctx.add(new RamTensor<float>({1}), "MatMul_1/eightbit/requantize:2", 1);
+ ctx.push(new RequantizeOp(),
+ { "MatMul_1/eightbit:0", "MatMul_1/eightbit:1", "MatMul_1/eightbit:2", "MatMul_1/eightbit/requant_range:0", "MatMul_1/eightbit/requant_range:1" },
+ { "MatMul_1/eightbit/requantize:0", "MatMul_1/eightbit/requantize:1", "MatMul_1/eightbit/requantize:2" });
+ ctx.eval();
+}
+{
+ ctx.add(new BinaryTensor<float>({10}, inline_Variable_3_0),
+ "Variable_3:0",
+ 2);
+}
+{
+ ctx.add(new BinaryTensor<int>({1}, inline_logits_eightbit_Variable_3__port__0_reshape_dims_0),
+ "logits_eightbit/Variable_3__port__0/reshape_dims:0",
+ 1);
+}
+{
+ ctx.add(new RamTensor<float>(), "logits_eightbit/Variable_3__port__0/reshape:0", 2);
+ ctx.push(new ReshapeOp(),
+ { "Variable_3:0", "logits_eightbit/Variable_3__port__0/reshape_dims:0" },
+ { "logits_eightbit/Variable_3__port__0/reshape:0" });
+ ctx.eval();
+}
+{
+ ctx.add(new BinaryTensor<int>({1}, inline_logits_eightbit_Variable_3__port__0_reduction_dims_0),
+ "logits_eightbit/Variable_3__port__0/reduction_dims:0",
+ 2);
+}
+{
+ RamTensor<float>* out_tensor;
+ out_tensor = new RamTensor<float>({ 1 });
+ ctx.add(out_tensor, "logits_eightbit/Variable_3__port__0/min:0", 1);
+ ctx.push(new MinOp(),
+ { "logits_eightbit/Variable_3__port__0/reshape:0", "logits_eightbit/Variable_3__port__0/reduction_dims:0" },
+ { "logits_eightbit/Variable_3__port__0/min:0" });
+ ctx.eval();
+}
+{
+ RamTensor<float>* out_tensor;
+ out_tensor = new RamTensor<float>({ 1 });
+ ctx.add(out_tensor, "logits_eightbit/Variable_3__port__0/max:0", 1);
+ ctx.push(new MaxOp(),
+ { "logits_eightbit/Variable_3__port__0/reshape:0", "logits_eightbit/Variable_3__port__0/reduction_dims:0" },
+ { "logits_eightbit/Variable_3__port__0/max:0" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<uint8_t>(), "logits_eightbit/Variable_3__port__0/quantize:0", 1);
+ ctx.add(new RamTensor<float>({1}), "logits_eightbit/Variable_3__port__0/quantize:1", 1);
+ ctx.add(new RamTensor<float>({1}), "logits_eightbit/Variable_3__port__0/quantize:2", 1);
+ ctx.push(new QuantizeV2Op(),
+ { "Variable_3:0", "logits_eightbit/Variable_3__port__0/min:0", "logits_eightbit/Variable_3__port__0/max:0" },
+ { "logits_eightbit/Variable_3__port__0/quantize:0", "logits_eightbit/Variable_3__port__0/quantize:1", "logits_eightbit/Variable_3__port__0/quantize:2" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<int>(), "logits/eightbit:0", 2);
+ ctx.add(new RamTensor<float>({1}), "logits/eightbit:1", 2);
+ ctx.add(new RamTensor<float>({1}), "logits/eightbit:2", 2);
+ ctx.push(new QuantizedAddOp<uint8_t, uint8_t, int>(),
+ { "MatMul_1/eightbit/requantize:0", "MatMul_1/eightbit/requantize:1", "MatMul_1/eightbit/requantize:2", "logits_eightbit/Variable_3__port__0/quantize:0", "logits_eightbit/Variable_3__port__0/quantize:1", "logits_eightbit/Variable_3__port__0/quantize:2" },
+ { "logits/eightbit:0", "logits/eightbit:1", "logits/eightbit:2" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<float>({1}), "logits/eightbit/requant_range:0", 1);
+ ctx.add(new RamTensor<float>({1}), "logits/eightbit/requant_range:1", 1);
+ ctx.push(new Requantization_RangeOp(),
+ { "logits/eightbit:0", "logits/eightbit:1", "logits/eightbit:2" },
+ { "logits/eightbit/requant_range:0", "logits/eightbit/requant_range:1" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<uint8_t>(), "logits/eightbit/requantize:0", 1);
+ ctx.add(new RamTensor<float>({1}), "logits/eightbit/requantize:1", 1);
+ ctx.add(new RamTensor<float>({1}), "logits/eightbit/requantize:2", 1);
+ ctx.push(new RequantizeOp(),
+ { "logits/eightbit:0", "logits/eightbit:1", "logits/eightbit:2", "logits/eightbit/requant_range:0", "logits/eightbit/requant_range:1" },
+ { "logits/eightbit/requantize:0", "logits/eightbit/requantize:1", "logits/eightbit/requantize:2" });
+ ctx.eval();
+}
+{
+ ctx.add(new RamTensor<float>(), "logits:0", 1);
+ ctx.push(new DequantizeOp(),
+ { "logits/eightbit/requantize:0", "logits/eightbit/requantize:1", "logits/eightbit/requantize:2" },
+ { "logits:0" });
+ ctx.eval();
+}
+{
+ ctx.add(new BinaryTensor<int>({1}, inline_y_pred_dimension_0),
+ "y_pred/dimension:0",
+ 1);
+}
+{
+ ctx.add(new RamTensor<int>(), "y_pred:0");
+ ctx.push(new ArgMaxOp<float, int>(),
+ { "logits:0", "y_pred/dimension:0" },
+ { "y_pred:0" });
+}
+}
diff --git a/DigitRecognition/deep_mlp.hpp b/DigitRecognition/deep_mlp.hpp
new file mode 100644
index 0000000..7e0ec9d
--- /dev/null
+++ b/DigitRecognition/deep_mlp.hpp
@@ -0,0 +1,7 @@
+// Auto generated by utensor-cli
+
+#ifndef __MODELS_DEEP_MLP_H
+#define __MODELS_DEEP_MLP_H
+#include "../uTensor/core/context.hpp"
+void get_deep_mlp_ctx(Context& ctx, Tensor* input_0);
+#endif // __MODELS_DEEP_MLP_H
diff --git a/DigitRecognition/deep_mlp.pb b/DigitRecognition/deep_mlp.pb
new file mode 100644
index 0000000..f99487f
Binary files /dev/null and b/DigitRecognition/deep_mlp.pb differ
diff --git a/DigitRecognition/deep_mlp.py b/DigitRecognition/deep_mlp.py
new file mode 100644
index 0000000..cb50f85
--- /dev/null
+++ b/DigitRecognition/deep_mlp.py
@@ -0,0 +1,139 @@
+#!/usr/bin/python
+# -*- coding: utf8 -*-
+"""
+# This script is based on:
+# https://www.tensorflow.org/get_started/mnist/pros
+"""
+from __future__ import print_function
+import argparse
+import sys
+import tensorflow as tf
+from tensorflow.examples.tutorials.mnist import input_data
+from tensorflow.python.framework import graph_util as gu
+from tensorflow.tools.graph_transforms import TransformGraph
+
+FLAGS = None
+
+
+# helper functions
+def weight_variable(shape, name):
+ """weight_variable generates a weight variable of a given shape."""
+ initial = tf.truncated_normal(shape, stddev=0.1)
+ return tf.Variable(initial, name)
+
+
+def bias_variable(shape, name):
+ """bias_variable generates a bias variable of a given shape."""
+ initial = tf.constant(0.1, shape=shape)
+ return tf.Variable(initial, name)
+
+
+# Fully connected 2 layer NN
+def deepnn(x):
+ W_fc1 = weight_variable([784, 32], name='W_fc1')
+ b_fc1 = bias_variable([32], name='b_fc1')
+ a_fc1 = tf.add(tf.matmul(x, W_fc1), b_fc1, name="zscore")
+ h_fc1 = tf.nn.relu(a_fc1)
+ layer1 = tf.nn.dropout(h_fc1, 0.50)
+
+ W_fc2 = weight_variable([32, 10], name='W_fc3')
+ b_fc2 = bias_variable([10], name='b_fc3')
+ logits = tf.add(tf.matmul(layer1, W_fc2), b_fc2, name="logits")
+ y_pred = tf.argmax(logits, 1, name='y_pred')
+
+ return y_pred, logits
+
+
+def main(_):
+ # Import data
+ mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True)
+
+ # Specify inputs, outputs, and a cost function
+ # placeholders
+ x = tf.placeholder(tf.float32, [None, 784], name="x")
+ y_ = tf.placeholder(tf.float32, [None, 10], name="y")
+
+ # Build the graph for the deep net
+ y_pred, logits = deepnn(x)
+
+ with tf.name_scope("Loss"):
+ cross_entropy = tf.nn.softmax_cross_entropy_with_logits_v2(labels=y_,
+ logits=logits)
+ loss = tf.reduce_mean(cross_entropy, name="cross_entropy_loss")
+ train_step = tf.train.AdamOptimizer(1e-4).minimize(loss, name="train_step")
+
+ with tf.name_scope("Prediction"):
+ correct_prediction = tf.equal(y_pred,
+ tf.argmax(y_, 1))
+ accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32), name="accuracy")
+
+ # Start training session
+ with tf.Session() as sess:
+ sess.run(tf.global_variables_initializer())
+ saver = tf.train.Saver()
+
+ # SGD
+ for i in range(1, FLAGS.num_iter + 1):
+ batch_images, batch_labels = mnist.train.next_batch(FLAGS.batch_size)
+ feed_dict = {x: batch_images, y_: batch_labels}
+ train_step.run(feed_dict=feed_dict)
+ if i % FLAGS.log_iter == 0:
+ train_accuracy = accuracy.eval(feed_dict=feed_dict)
+ print('step %d, training accuracy %g' % (i, train_accuracy))
+
+ print('test accuracy %g' % accuracy.eval(feed_dict={x: mnist.test.images,
+ y_: mnist.test.labels}))
+ # Saving checkpoint and serialize the graph
+ ckpt_path = saver.save(sess, FLAGS.chkp)
+ print('saving checkpoint: %s' % ckpt_path)
+ out_nodes = [y_pred.op.name]
+ # Freeze graph and remove training nodes
+ sub_graph_def = gu.remove_training_nodes(sess.graph_def)
+ sub_graph_def = gu.convert_variables_to_constants(sess, sub_graph_def, out_nodes)
+ if FLAGS.no_quant:
+ graph_path = tf.train.write_graph(sub_graph_def,
+ FLAGS.output_dir,
+ FLAGS.pb_fname,
+ as_text=False)
+ else:
+ # # quantize the graph
+ # quant_graph_def = TransformGraph(sub_graph_def,
+ # [],
+ # out_nodes,
+ # ["quantize_weights", "quantize_nodes"])
+ graph_path = tf.train.write_graph(sub_graph_def,
+ FLAGS.output_dir,
+ FLAGS.pb_fname,
+ as_text=False)
+ print('written graph to: %s' % graph_path)
+ print('the output nodes: {!s}'.format(out_nodes))
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser()
+ parser.add_argument('--data_dir', type=str,
+ default='mnist_data',
+ help='Directory for storing input data (default: %(default)s)')
+ parser.add_argument('--chkp', default='chkps/mnist_model',
+ help='session check point (default: %(default)s)')
+ parser.add_argument('-n', '--num-iteration', type=int,
+ dest='num_iter',
+ default=100000,
+ help='number of iterations (default: %(default)s)')
+ parser.add_argument('--batch-size', dest='batch_size',
+ default=150, type=int,
+ help='batch size (default: %(default)s)')
+ parser.add_argument('--log-every-iters', type=int,
+ dest='log_iter', default=1000,
+ help='logging the training accuracy per numbers of iteration %(default)s')
+ parser.add_argument('--output-dir', default='mnist_model',
+ dest='output_dir',
+ help='output directory directory (default: %(default)s)')
+ parser.add_argument('--no-quantization', action='store_true',
+ dest='no_quant',
+ help='save the output graph pb file without quantization')
+ parser.add_argument('-o', '--output', default='deep_mlp.pb',
+ dest='pb_fname',
+ help='output pb file (default: %(default)s)')
+ FLAGS, unparsed = parser.parse_known_args()
+ tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)
diff --git a/DigitRecognition/deep_mlp_weight.hpp b/DigitRecognition/deep_mlp_weight.hpp
new file mode 100644
index 0000000..1491259
--- /dev/null
+++ b/DigitRecognition/deep_mlp_weight.hpp
@@ -0,0 +1,47 @@
+// Auto generated by utensor-cli
+
+#include <stdint.h>
+
+const int inline_MatMul_eightbit_x__port__0_reshape_dims_0 [ 1 ] = { -1, };
+#include <stdint.h>
+
+const int inline_MatMul_eightbit_x__port__0_reduction_dims_0 [ 1 ] = { 0, };
+#include <stdint.h>
+
+const uint8_t inline_Variable_quantized_const_0 [ 25088 ] = { 122, 139, 125, 121, 142, 136, 129, 113, 121, 140, 132, 112, 132, 119, 136, 133, 131, 132, 130, 133, 128, 124, 125, 135, 126, 130, 125, 138, 131, 128, 127, 127, 126, 121, 140, 121, 110, 123, 128, 121, 131, 139, 130, 142, 134, 138, 121, 122, 128, 130, 133, 121, 132, 118, 126, 124, 137, 125, 112, 135, 127, 124, 114, 125, 139, 129, 141, 116, 129, 134, 131, 129, 115, 121, 120, 120, 133, 131, 129, 111, 116, 123, 132, 127, 116, 129, 124, 134, 124, 142, 134, 133, 125, 120, 125, 138, 127, 129, 128, 120, 126, 121, 133, 125, 118, 119, 127, 126, 127, 138, 126, 131, 128, 111, 114, 124, 130, 138, 113, 129, 122, 126, 118, 131, 122, 132, 131, 129, 142, 129, 133, 140, 133, 138, 135, 133, 118, 129, 126, 129, 113, 127, 122, 126, 120, 135, 138, 126, 136, 139, 119, 137, 114, 137, 125, 124, 113, 127, 143, 130, 127, 140, 133, 130, 132, 120, 124, 122, 131, 120, 120, 127, 137, 132, 127, 123, 126, 136, 117, 135, 116, 127, 129, 111, 137, 122, 126, 127, 141, 138, 128, 122, 110, 127, 132, 128, 122, 141, 120, 139, 118, 131, 120, 120, 125, 129, 116, 111, 131, 134, 131, 117, 116, 127, 138, 129, 127, 127, 132, 117, 124, 131, 117, 119, 110, 121, 121, 126, 127, 127, 120, 131, 137, 130, 118, 138, 116, 124, 134, 126, 120, 124, 126, 134, 120, 118, 122, 123, 127, 131, 124, 128, 130, 138, 118, 135, 114, 132, 117, 117, 128, 121, 126, 122, 134, 132, 129, 128, 118, 137, 125, 122, 139, 134, 112, 117, 117, 120, 130, 118, 137, 124, 117, 124, 123, 123, 122, 122, 128, 136, 119, 122, 126, 136, 117, 133, 132, 132, 119, 125, 128, 135, 121, 117, 128, 132, 133, 133, 139, 121, 119, 137, 126, 128, 112, 126, 142, 110, 131, 119, 133, 133, 115, 132, 118, 131, 134, 131, 136, 124, 114, 134, 123, 123, 134, 140, 131, 119, 140, 142, 121, 130, 129, 126, 118, 133, 138, 135, 126, 144, 120, 135, 136, 132, 128, 124, 128, 127, 121, 131, 128, 134, 137, 128, 128, 120, 143, 127, 127, 128, 134, 128, 127, 136, 123, 128, 137, 122, 126, 137, 132, 123, 124, 128, 124, 136, 151, 137, 120, 132, 118, 117, 133, 132, 115, 118, 120, 116, 152, 136, 135, 139, 131, 138, 124, 122, 150, 142, 138, 123, 148, 119, 123, 131, 130, 126, 116, 142, 160, 126, 132, 125, 134, 115, 128, 116, 124, 143, 117, 117, 130, 133, 140, 145, 139, 140, 133, 128, 151, 137, 144, 138, 132, 125, 123, 131, 110, 126, 122, 128, 126, 124, 126, 138, 143, 120, 134, 138, 125, 138, 131, 120, 124, 135, 140, 125, 125, 115, 119, 124, 126, 111, 134, 124, 133, 119, 138, 143, 128, 126, 122, 136, 128, 126, 140, 131, 148, 116, 149, 144, 126, 131, 130, 122, 121, 112, 142, 113, 128, 126, 120, 134, 116, 120, 123, 129, 135, 121, 128, 141, 124, 136, 133, 116, 125, 132, 123, 131, 129, 133, 122, 135, 132, 130, 143, 134, 131, 116, 123, 135, 134, 119, 129, 128, 134, 120, 138, 126, 128, 122, 111, 125, 125, 142, 114, 143, 130, 136, 122, 128, 128, 124, 123, 126, 129, 116, 121, 122, 131, 137, 130, 114, 134, 120, 140, 127, 114, 143, 123, 130, 121, 125, 132, 116, 139, 141, 121, 122, 111, 128, 123, 125, 112, 119, 137, 134, 121, 141, 117, 132, 138, 135, 133, 126, 127, 120, 123, 121, 131, 120, 116, 141, 120, 123, 127, 128, 138, 126, 121, 124, 123, 122, 133, 130, 128, 120, 120, 123, 134, 133, 131, 127, 121, 135, 126, 138, 131, 127, 127, 135, 122, 133, 121, 131, 123, 122, 133, 121, 122, 115, 111, 139, 115, 126, 124, 117, 124, 118, 115, 139, 128, 116, 129, 134, 131, 136, 130, 129, 129, 127, 135, 121, 133, 139, 131, 119, 135, 125, 112, 139, 124, 139, 119, 137, 121, 129, 115, 110, 131, 124, 136, 116, 142, 131, 128, 125, 132, 132, 121, 116, 111, 121, 128, 127, 128, 142, 133, 126, 127, 132, 130, 125, 139, 112, 135, 125, 122, 123, 123, 123, 137, 128, 135, 133, 143, 127, 134, 119, 132, 135, 129, 140, 129, 129, 122, 126, 120, 131, 133, 134, 126, 132, 126, 113, 132, 129, 119, 136, 135, 127, 133, 119, 130, 139, 140, 114, 120, 127, 123, 126, 136, 136, 119, 122, 127, 132, 143, 125, 121, 142, 129, 130, 124, 127, 120, 137, 135, 138, 127, 134, 122, 120, 133, 125, 127, 131, 129, 117, 123, 136, 133, 113, 122, 119, 125, 127, 131, 141, 116, 124, 112, 125, 113, 118, 140, 117, 125, 133, 136, 133, 114, 122, 124, 117, 138, 115, 127, 114, 121, 125, 143, 120, 139, 136, 112, 119, 120, 127, 122, 141, 124, 124, 130, 110, 139, 122, 132, 139, 136, 137, 131, 133, 129, 128, 117, 142, 117, 139, 127, 129, 125, 136, 132, 120, 122, 129, 133, 127, 135, 137, 128, 127, 117, 125, 143, 128, 116, 125, 123, 138, 124, 125, 120, 135, 140, 125, 128, 115, 119, 132, 135, 132, 133, 113, 130, 116, 124, 115, 128, 116, 120, 120, 123, 124, 130, 138, 135, 123, 136, 129, 128, 138, 122, 133, 120, 136, 125, 123, 142, 137, 123, 127, 121, 129, 128, 127, 140, 130, 137, 128, 136, 129, 139, 117, 135, 121, 120, 129, 130, 125, 135, 130, 119, 136, 142, 128, 124, 123, 137, 129, 118, 137, 132, 115, 131, 132, 133, 122, 125, 134, 123, 129, 132, 131, 122, 128, 128, 129, 125, 133, 129, 141, 130, 133, 133, 125, 117, 136, 133, 130, 138, 131, 110, 132, 118, 120, 124, 138, 114, 127, 128, 133, 124, 118, 123, 116, 111, 123, 122, 124, 113, 121, 131, 124, 129, 121, 125, 133, 122, 133, 118, 121, 141, 126, 140, 121, 132, 125, 119, 122, 121, 132, 138, 142, 123, 122, 139, 115, 119, 136, 132, 123, 119, 141, 129, 110, 129, 115, 114, 121, 134, 136, 118, 115, 129, 145, 128, 137, 127, 129, 128, 125, 113, 121, 131, 129, 126, 124, 146, 125, 140, 131, 138, 124, 120, 125, 148, 135, 113, 133, 141, 139, 134, 110, 118, 136, 127, 142, 156, 151, 128, 128, 109, 130, 131, 124, 130, 135, 139, 121, 144, 111, 130, 135, 137, 133, 118, 126, 146, 154, 126, 128, 138, 112, 131, 123, 133, 132, 135, 152, 155, 163, 123, 102, 126, 108, 128, 129, 133, 136, 114, 127, 154, 118, 131, 142, 145, 139, 113, 125, 170, 151, 114, 119, 148, 118, 103, 129, 131, 107, 114, 173, 162, 174, 119, 102, 98, 110, 123, 126, 115, 140, 136, 133, 158, 137, 128, 137, 160, 172, 125, 132, 172, 155, 117, 123, 152, 126, 106, 125, 123, 109, 117, 158, 154, 147, 125, 104, 110, 109, 129, 136, 119, 147, 129, 112, 155, 134, 127, 123, 170, 153, 110, 115, 157, 160, 133, 135, 149, 143, 106, 125, 122, 102, 119, 156, 178, 146, 132, 118, 109, 117, 131, 139, 109, 127, 132, 124, 174, 116, 126, 164, 168, 154, 119, 117, 172, 152, 122, 138, 167, 137, 106, 122, 124, 108, 109, 158, 178, 176, 123, 105, 123, 123, 130, 117, 122, 134, 141, 112, 188, 117, 123, 164, 176, 172, 109, 112, 183, 180, 131, 135, 166, 120, 98, 125, 133, 123, 115, 196, 177, 176, 139, 109, 114, 115, 117, 131, 115, 169, 129, 114, 201, 125, 146, 191, 189, 136, 91, 100, 120, 108, 135, 127, 155, 130, 81, 111, 118, 115, 116, 196, 180, 180, 136, 111, 90, 128, 108, 149, 113, 191, 140, 127, 206, 120, 111, 184, 166, 117, 115, 114, 110, 98, 141, 130, 162, 132, 80, 144, 125, 111, 123, 161, 168, 184, 117, 113, 116, 112, 130, 149, 108, 175, 126, 117, 182, 133, 120, 192, 184, 126, 116, 107, 130, 105, 137, 128, 175, 143, 78, 133, 121, 115, 131, 130, 116, 127, 122, 131, 122, 127, 139, 136, 101, 166, 121, 126, 141, 143, 135, 152, 139, 122, 131, 126, 103, 116, 141, 133, 140, 138, 123, 115, 120, 139, 104, 182, 128, 134, 116, 119, 106, 116, 122, 149, 127, 153, 109, 103, 134, 123, 139, 134, 162, 123, 128, 119, 91, 89, 149, 135, 151, 139, 105, 105, 111, 126, 108, 178, 187, 168, 130, 122, 111, 113, 151, 141, 119, 156, 134, 130, 172, 118, 151, 97, 177, 97, 152, 105, 109, 87, 138, 125, 143, 126, 97, 110, 120, 124, 109, 191, 186, 177, 118, 119, 113, 115, 139, 146, 137, 142, 126, 132, 186, 112, 147, 118, 195, 117, 129, 93, 115, 95, 125, 140, 146, 111, 107, 133, 115, 127, 123, 179, 184, 183, 128, 117, 115, 109, 126, 133, 127, 148, 143, 131, 191, 122, 120, 167, 197, 178, 111, 112, 183, 185, 128, 135, 168, 121, 107, 128, 120, 128, 114, 162, 168, 158, 129, 126, 109, 114, 107, 136, 126, 163, 143, 123, 189, 111, 107, 182, 181, 193, 107, 125, 165, 178, 122, 129, 152, 134, 99, 120, 129, 117, 99, 174, 175, 177, 138, 112, 120, 128, 107, 134, 121, 155, 131, 104, 174, 106, 134, 185, 173, 169, 111, 133, 177, 174, 133, 124, 165, 121, 89, 125, 132, 128, 99, 163, 165, 148, 120, 129, 109, 123, 116, 140, 134, 137, 122, 100, 152, 108, 116, 149, 161, 148, 106, 138, 164, 165, 125, 138, 139, 126, 101, 117, 133, 118, 99, 135, 136, 160, 117, 123, 111, 109, 120, 134, 135, 147, 127, 125, 151, 95, 133, 150, 156, 150, 129, 113, 154, 143, 117, 133, 136, 115, 94, 130, 126, 136, 114, 143, 141, 142, 137, 125, 132, 116, 124, 123, 116, 135, 129, 121, 152, 115, 134, 143, 144, 159, 126, 110, 142, 141, 112, 119, 155, 114, 91, 141, 121, 133, 112, 128, 133, 140, 136, 130, 129, 113, 124, 116, 120, 110, 116, 134, 122, 124, 129, 137, 120, 125, 121, 122, 128, 129, 125, 132, 127, 123, 125, 118, 110, 123, 128, 126, 132, 127, 127, 124, 131, 132, 120, 140, 144, 117, 134, 139, 117, 120, 134, 142, 126, 132, 134, 126, 142, 131, 135, 118, 128, 138, 128, 128, 125, 128, 132, 139, 129, 117, 125, 126, 116, 125, 120, 126, 122, 113, 139, 125, 128, 143, 129, 132, 132, 130, 141, 118, 130, 125, 132, 126, 129, 126, 132, 120, 122, 131, 118, 123, 118, 122, 143, 122, 128, 112, 132, 132, 116, 132, 127, 122, 126, 119, 132, 121, 121, 128, 129, 126, 118, 135, 123, 128, 127, 131, 124, 126, 131, 129, 120, 130, 126, 128, 136, 134, 129, 128, 132, 127, 128, 121, 138, 117, 130, 128, 126, 120, 120, 120, 115, 116, 144, 139, 129, 131, 125, 116, 122, 123, 139, 115, 119, 116, 130, 128, 131, 118, 132, 134, 122, 142, 132, 136, 127, 122, 120, 132, 132, 140, 128, 139, 130, 137, 117, 135, 124, 130, 141, 121, 132, 142, 125, 132, 123, 144, 147, 128, 124, 111, 128, 129, 140, 141, 119, 120, 125, 123, 153, 132, 129, 140, 136, 145, 131, 125, 145, 142, 140, 121, 138, 128, 128, 117, 124, 124, 121, 135, 143, 158, 137, 140, 122, 137, 128, 144, 117, 145, 131, 114, 156, 106, 130, 139, 122, 156, 116, 127, 90, 104, 161, 130, 135, 124, 96, 118, 125, 122, 118, 143, 156, 157, 132, 123, 141, 118, 146, 149, 122, 148, 116, 120, 168, 118, 131, 155, 145, 153, 136, 137, 102, 113, 159, 147, 144, 132, 106, 129, 113, 132, 126, 145, 154, 168, 123, 135, 142, 125, 116, 127, 113, 147, 122, 109, 173, 121, 136, 152, 157, 142, 119, 125, 170, 176, 121, 124, 144, 121, 113, 128, 119, 132, 140, 179, 157, 189, 125, 109, 113, 121, 111, 129, 118, 140, 118, 123, 178, 139, 147, 158, 168, 149, 133, 130, 175, 177, 119, 125, 157, 137, 98, 120, 109, 107, 125, 187, 181, 189, 126, 96, 97, 116, 112, 156, 94, 165, 123, 105, 194, 119, 145, 152, 201, 141, 129, 131, 197, 178, 122, 144, 161, 130, 112, 131, 85, 97, 120, 215, 200, 198, 125, 89, 109, 94, 114, 134, 116, 144, 139, 96, 182, 106, 143, 112, 226, 144, 132, 118, 198, 183, 128, 121, 126, 103, 85, 128, 110, 110, 101, 214, 230, 159, 115, 116, 130, 88, 127, 120, 119, 122, 151, 97, 200, 93, 139, 95, 229, 125, 121, 136, 200, 162, 136, 109, 108, 120, 85, 106, 80, 130, 115, 198, 218, 186, 117, 78, 115, 84, 119, 122, 110, 132, 116, 93, 183, 97, 139, 137, 216, 146, 132, 132, 191, 166, 123, 121, 124, 110, 68, 116, 86, 110, 106, 197, 255, 184, 98, 99, 111, 86, 124, 117, 115, 122, 141, 75, 186, 87, 146, 146, 189, 124, 126, 113, 160, 148, 112, 107, 139, 109, 72, 128, 74, 115, 102, 204, 202, 179, 114, 109, 113, 77, 117, 136, 97, 110, 124, 66, 153, 86, 126, 171, 171, 147, 121, 123, 140, 160, 114, 88, 146, 112, 65, 104, 55, 105, 110, 203, 155, 169, 120, 102, 112, 76, 117, 108, 91, 136, 114, 86, 124, 131, 117, 146, 127, 156, 113, 125, 107, 131, 124, 85, 124, 115, 64, 93, 63, 112, 116, 176, 148, 142, 103, 118, 112, 90, 127, 119, 91, 150, 95, 95, 148, 120, 122, 132, 148, 166, 135, 115, 134, 142, 127, 99, 143, 115, 68, 92, 76, 119, 92, 194, 152, 152, 136, 135, 134, 94, 105, 116, 82, 140, 88, 110, 120, 103, 161, 149, 128, 145, 142, 136, 106, 126, 96, 91, 127, 139, 75, 101, 90, 152, 88, 198, 177, 161, 128, 130, 120, 103, 115, 121, 99, 137, 91, 112, 134, 94, 166, 141, 141, 150, 123, 85, 114, 142, 93, 103, 142, 135, 67, 129, 89, 139, 100, 163, 198, 158, 129, 133, 108, 120, 126, 112, 103, 129, 104, 132, 141, 116, 145, 121, 187, 141, 117, 102, 129, 135, 105, 109, 152, 109, 111, 138, 114, 120, 124, 175, 245, 174, 133, 123, 111, 140, 111, 118, 111, 123, 126, 122, 131, 104, 139, 137, 184, 127, 109, 111, 115, 123, 88, 121, 149, 109, 108, 160, 119, 91, 93, 179, 181, 152, 148, 100, 106, 134, 84, 131, 113, 164, 96, 93, 125, 90, 119, 162, 177, 139, 99, 109, 119, 135, 96, 136, 163, 109, 96, 150, 140, 106, 101, 176, 204, 183, 130, 94, 120, 141, 104, 121, 116, 151, 95, 120, 142, 78, 127, 164, 196, 158, 104, 128, 152, 143, 88, 115, 151, 113, 106, 156, 126, 145, 109, 158, 206, 179, 137, 88, 111, 104, 107, 128, 108, 160, 124, 101, 152, 113, 114, 160, 207, 136, 109, 122, 149, 150, 136, 115, 146, 117, 134, 140, 116, 135, 105, 163, 179, 169, 116, 95, 98, 117, 89, 137, 119, 176, 133, 113, 140, 107, 116, 208, 188, 143, 104, 116, 158, 146, 115, 119, 164, 135, 125, 151, 108, 124, 82, 146, 182, 164, 124, 104, 112, 104, 101, 145, 122, 152, 112, 109, 153, 93, 108, 160, 179, 157, 112, 134, 174, 130, 117, 123, 175, 129, 91, 151, 113, 126, 120, 136, 169, 131, 114, 115, 138, 114, 120, 137, 132, 114, 125, 123, 159, 107, 145, 112, 142, 170, 120, 126, 166, 178, 131, 107, 144, 131, 108, 131, 127, 120, 125, 117, 163, 112, 114, 126, 147, 129, 133, 118, 125, 140, 123, 121, 122, 116, 137, 105, 131, 144, 123, 129, 143, 157, 123, 123, 144, 116, 125, 117, 131, 118, 135, 112, 134, 131, 124, 135, 134, 120, 133, 119, 139, 132, 125, 121, 119, 133, 116, 131, 121, 118, 116, 128, 136, 126, 116, 131, 126, 140, 132, 124, 114, 128, 124, 128, 127, 130, 131, 126, 131, 125, 133, 135, 118, 136, 137, 121, 134, 127, 111, 119, 132, 131, 134, 129, 136, 132, 122, 118, 134, 113, 120, 143, 135, 138, 130, 121, 121, 118, 137, 117, 125, 111, 128, 121, 122, 128, 128, 130, 135, 134, 124, 122, 139, 133, 137, 140, 130, 125, 143, 131, 135, 120, 132, 132, 120, 135, 129, 136, 115, 124, 128, 131, 125, 123, 120, 130, 122, 137, 120, 134, 135, 126, 130, 125, 131, 132, 119, 125, 142, 120, 133, 136, 127, 124, 120, 119, 134, 139, 122, 132, 102, 103, 154, 130, 147, 129, 123, 136, 118, 131, 131, 138, 139, 121, 148, 162, 123, 151, 147, 141, 140, 117, 133, 131, 120, 148, 130, 124, 136, 154, 107, 160, 137, 156, 153, 145, 155, 137, 132, 144, 119, 145, 119, 150, 141, 97, 147, 152, 129, 137, 157, 146, 108, 96, 147, 145, 144, 138, 104, 139, 118, 145, 108, 145, 126, 123, 155, 115, 149, 123, 112, 110, 141, 133, 127, 125, 125, 112, 119, 145, 143, 113, 142, 133, 108, 102, 136, 130, 158, 109, 99, 138, 114, 147, 106, 125, 146, 103, 152, 118, 132, 151, 120, 105, 145, 122, 121, 109, 119, 111, 118, 145, 98, 151, 142, 122, 159, 158, 144, 148, 130, 143, 117, 133, 113, 153, 91, 154, 167, 138, 144, 98, 138, 107, 114, 108, 125, 162, 126, 98, 116, 93, 127, 137, 111, 135, 151, 117, 160, 165, 103, 124, 132, 135, 78, 121, 106, 147, 95, 135, 156, 137, 136, 119, 130, 94, 136, 113, 125, 166, 116, 83, 122, 84, 120, 158, 128, 147, 134, 97, 141, 148, 131, 129, 141, 134, 66, 135, 70, 136, 75, 133, 176, 148, 122, 86, 135, 85, 125, 94, 131, 149, 125, 91, 109, 68, 130, 110, 119, 158, 125, 110, 137, 143, 128, 126, 130, 123, 54, 131, 76, 127, 85, 161, 175, 155, 131, 106, 134, 58, 135, 78, 129, 123, 128, 90, 147, 70, 140, 98, 143, 134, 138, 130, 154, 140, 136, 107, 105, 106, 55, 126, 95, 133, 89, 155, 190, 138, 121, 114, 114, 74, 124, 103, 142, 126, 129, 87, 112, 54, 136, 119, 135, 140, 137, 127, 126, 158, 134, 95, 125, 94, 62, 130, 90, 135, 78, 127, 178, 141, 136, 112, 143, 71, 137, 110, 112, 128, 141, 86, 123, 45, 117, 110, 120, 139, 143, 72, 145, 150, 124, 117, 115, 131, 70, 119, 92, 148, 54, 131, 181, 139, 127, 122, 129, 57, 139, 97, 130, 125, 158, 82, 119, 33, 130, 127, 111, 135, 144, 88, 129, 149, 125, 115, 130, 128, 38, 113, 66, 158, 35, 138, 143, 145, 135, 119, 136, 57, 148, 92, 115, 119, 139, 72, 130, 25, 135, 111, 115, 114, 124, 98, 114, 156, 124, 103, 115, 143, 37, 114, 79, 130, 38, 120, 155, 133, 127, 118, 134, 85, 141, 99, 125, 124, 136, 76, 112, 32, 98, 115, 109, 124, 103, 80, 130, 151, 119, 106, 124, 131, 38, 125, 84, 137, 47, 123, 154, 146, 122, 118, 128, 106, 123, 123, 107, 128, 133, 105, 127, 26, 111, 100, 111, 128, 110, 82, 139, 151, 133, 98, 118, 139, 41, 146, 90, 128, 94, 135, 154, 147, 109, 128, 144, 96, 133, 122, 100, 118, 122, 116, 108, 59, 110, 115, 112, 138, 94, 98, 125, 148, 131, 96, 127, 137, 74, 127, 69, 136, 103, 142, 149, 160, 113, 110, 133, 118, 138, 110, 92, 115, 125, 109, 115, 78, 105, 123, 115, 132, 87, 121, 128, 136, 132, 108, 128, 116, 110, 136, 91, 137, 106, 143, 162, 149, 125, 128, 115, 145, 116, 115, 80, 118, 124, 114, 107, 106, 101, 126, 135, 134, 87, 123, 115, 128, 149, 100, 140, 113, 108, 153, 115, 122, 118, 143, 151, 143, 97, 119, 117, 116, 116, 111, 93, 117, 132, 114, 118, 117, 110, 134, 122, 133, 93, 97, 136, 152, 136, 128, 147, 97, 110, 148, 111, 93, 115, 121, 149, 146, 120, 109, 107, 126, 114, 112, 104, 138, 109, 102, 112, 96, 105, 141, 134, 146, 83, 94, 133, 150, 145, 130, 160, 111, 97, 153, 100, 90, 125, 133, 154, 164, 143, 92, 104, 124, 121, 123, 114, 139, 96, 108, 125, 130, 112, 128, 157, 131, 96, 82, 130, 149, 133, 124, 155, 116, 114, 150, 104, 89, 139, 128, 143, 142, 135, 93, 91, 125, 115, 118, 107, 138, 88, 107, 140, 122, 135, 162, 138, 133, 99, 101, 130, 148, 112, 120, 158, 80, 132, 129, 103, 90, 92, 126, 170, 164, 135, 86, 88, 137, 75, 101, 101, 123, 84, 116, 136, 122, 125, 173, 156, 150, 125, 117, 142, 146, 102, 107, 162, 101, 126, 104, 88, 105, 92, 121, 194, 138, 120, 80, 114, 131, 94, 113, 110, 143, 103, 103, 137, 115, 120, 129, 183, 147, 132, 124, 168, 143, 98, 124, 180, 102, 124, 128, 96, 96, 128, 108, 157, 103, 122, 106, 143, 118, 108, 139, 119, 158, 125, 113, 115, 117, 129, 108, 121, 145, 147, 131, 154, 131, 133, 131, 152, 140, 151, 121, 101, 127, 116, 148, 153, 103, 128, 102, 115, 121, 129, 138, 143, 123, 148, 105, 107, 138, 118, 137, 143, 148, 126, 123, 129, 148, 138, 150, 152, 151, 111, 138, 99, 124, 130, 118, 118, 114, 130, 124, 130, 121, 123, 132, 113, 116, 134, 118, 129, 134, 121, 130, 137, 118, 118, 143, 128, 121, 121, 129, 119, 122, 134, 113, 143, 123, 123, 138, 120, 129, 124, 134, 128, 137, 136, 118, 124, 129, 127, 144, 128, 122, 133, 142, 131, 127, 122, 124, 129, 126, 121, 134, 122, 131, 120, 127, 130, 128, 117, 118, 128, 126, 117, 117, 121, 121, 134, 126, 128, 124, 130, 136, 137, 115, 143, 127, 113, 133, 116, 121, 117, 131, 130, 135, 121, 143, 131, 130, 117, 127, 118, 162, 114, 95, 144, 151, 149, 139, 129, 129, 139, 137, 145, 141, 132, 151, 135, 146, 107, 160, 153, 156, 125, 121, 131, 138, 128, 145, 118, 150, 137, 162, 118, 132, 121, 106, 152, 142, 157, 163, 133, 158, 165, 137, 160, 137, 102, 116, 121, 147, 109, 131, 137, 153, 118, 115, 151, 136, 148, 143, 140, 129, 141, 166, 138, 133, 134, 147, 142, 125, 138, 115, 129, 134, 150, 107, 128, 146, 143, 121, 120, 104, 105, 130, 135, 144, 110, 139, 170, 152, 124, 131, 112, 121, 152, 169, 109, 126, 120, 103, 143, 122, 125, 122, 126, 117, 129, 98, 153, 119, 112, 119, 121, 115, 96, 178, 137, 126, 112, 128, 133, 133, 124, 152, 144, 113, 135, 140, 119, 120, 119, 130, 150, 110, 156, 123, 164, 119, 133, 68, 139, 112, 124, 130, 128, 118, 114, 147, 146, 157, 132, 159, 134, 140, 123, 128, 110, 141, 125, 140, 132, 110, 131, 133, 126, 126, 146, 119, 165, 102, 152, 103, 124, 108, 131, 117, 110, 99, 114, 128, 126, 106, 159, 155, 167, 139, 137, 126, 98, 147, 125, 150, 110, 116, 143, 120, 125, 143, 133, 100, 151, 113, 133, 116, 131, 123, 129, 88, 114, 65, 111, 126, 155, 92, 147, 127, 158, 122, 117, 131, 76, 128, 121, 146, 86, 137, 121, 115, 121, 140, 137, 117, 154, 111, 146, 111, 141, 121, 128, 89, 134, 117, 124, 135, 132, 88, 129, 129, 154, 135, 117, 119, 74, 126, 109, 141, 80, 126, 147, 126, 116, 139, 151, 114, 157, 100, 146, 123, 149, 131, 119, 97, 127, 120, 110, 124, 132, 86, 145, 143, 163, 140, 123, 140, 92, 133, 113, 140, 109, 121, 153, 121, 130, 131, 143, 141, 160, 120, 155, 125, 148, 136, 116, 134, 137, 108, 122, 122, 129, 126, 140, 143, 157, 158, 126, 133, 96, 137, 131, 136, 109, 118, 147, 121, 132, 139, 119, 124, 136, 110, 127, 125, 138, 136, 119, 129, 139, 120, 146, 133, 142, 150, 146, 144, 157, 138, 133, 139, 118, 129, 120, 145, 112, 135, 144, 128, 117, 143, 125, 121, 139, 130, 140, 116, 134, 133, 124, 124, 119, 123, 124, 133, 132, 149, 133, 133, 147, 132, 125, 131, 85, 133, 126, 141, 119, 134, 136, 130, 130, 145, 131, 132, 132, 147, 120, 128, 133, 138, 116, 120, 132, 120, 137, 136, 139, 140, 129, 128, 127, 127, 125, 124, 60, 117, 122, 134, 127, 115, 135, 124, 138, 132, 122, 139, 150, 134, 133, 126, 143, 127, 113, 125, 138, 122, 132, 116, 135, 132, 105, 123, 140, 130, 130, 136, 81, 136, 138, 120, 116, 136, 140, 112, 129, 144, 127, 125, 127, 132, 125, 117, 137, 137, 117, 120, 146, 124, 148, 118, 127, 140, 133, 131, 123, 117, 130, 122, 121, 125, 139, 142, 124, 142, 140, 118, 118, 122, 127, 135, 132, 123, 133, 129, 132, 121, 114, 123, 139, 129, 140, 120, 127, 141, 128, 142, 128, 119, 124, 130, 96, 128, 124, 123, 123, 118, 139, 119, 147, 130, 132, 146, 134, 135, 143, 122, 138, 119, 118, 119, 130, 113, 118, 118, 109, 118, 131, 128, 135, 126, 131, 138, 107, 138, 138, 129, 109, 128, 122, 120, 116, 118, 133, 145, 124, 130, 118, 122, 126, 131, 116, 119, 118, 127, 124, 133, 125, 142, 122, 136, 132, 100, 126, 138, 120, 126, 131, 130, 108, 117, 116, 123, 117, 133, 129, 125, 126, 145, 104, 125, 111, 127, 114, 115, 139, 126, 100, 138, 132, 133, 121, 143, 134, 97, 122, 107, 133, 111, 103, 106, 106, 117, 114, 113, 118, 112, 132, 153, 120, 139, 118, 151, 110, 118, 116, 133, 125, 119, 117, 120, 116, 134, 116, 142, 111, 112, 141, 122, 141, 153, 113, 73, 97, 99, 99, 120, 117, 93, 125, 143, 128, 140, 139, 139, 125, 110, 112, 113, 98, 122, 87, 111, 108, 122, 105, 139, 123, 115, 141, 123, 137, 139, 105, 76, 130, 78, 103, 101, 110, 83, 105, 147, 101, 114, 123, 147, 125, 129, 111, 126, 111, 171, 109, 126, 101, 85, 114, 144, 92, 106, 142, 95, 145, 131, 120, 106, 128, 93, 116, 76, 132, 68, 103, 149, 112, 93, 162, 127, 110, 102, 84, 163, 116, 149, 118, 121, 103, 125, 125, 144, 85, 112, 147, 135, 111, 145, 143, 115, 119, 99, 119, 84, 129, 105, 126, 152, 124, 107, 161, 127, 117, 112, 89, 155, 141, 122, 119, 90, 119, 140, 135, 142, 101, 139, 171, 122, 111, 147, 148, 116, 119, 155, 161, 121, 140, 122, 119, 152, 122, 114, 137, 110, 138, 124, 93, 134, 147, 152, 103, 115, 153, 132, 121, 129, 140, 157, 156, 154, 121, 137, 132, 130, 88, 166, 132, 139, 128, 109, 112, 120, 113, 142, 134, 121, 131, 105, 131, 128, 109, 162, 149, 136, 113, 125, 124, 117, 125, 136, 151, 126, 119, 123, 101, 121, 133, 139, 115, 127, 131, 119, 123, 119, 129, 132, 131, 127, 111, 121, 121, 125, 131, 128, 127, 119, 137, 132, 123, 116, 125, 122, 131, 124, 132, 129, 143, 130, 125, 117, 115, 129, 126, 122, 131, 132, 118, 122, 134, 129, 122, 126, 124, 118, 123, 124, 142, 137, 123, 123, 122, 116, 130, 142, 120, 122, 119, 126, 120, 130, 99, 144, 146, 128, 129, 157, 159, 143, 132, 131, 140, 136, 151, 151, 152, 98, 124, 165, 152, 147, 132, 149, 152, 138, 150, 122, 153, 138, 124, 126, 132, 167, 127, 128, 143, 111, 123, 161, 135, 128, 147, 140, 147, 124, 162, 147, 112, 110, 117, 120, 108, 114, 132, 141, 116, 113, 119, 125, 152, 154, 128, 137, 126, 145, 129, 132, 153, 129, 143, 131, 152, 110, 134, 127, 148, 96, 144, 165, 109, 118, 120, 101, 119, 158, 130, 134, 137, 146, 120, 154, 115, 122, 106, 139, 154, 169, 139, 108, 103, 101, 124, 123, 147, 111, 114, 146, 139, 77, 134, 129, 100, 117, 111, 116, 84, 146, 148, 120, 110, 111, 144, 128, 127, 142, 128, 127, 132, 135, 131, 97, 105, 100, 153, 130, 135, 142, 145, 122, 140, 81, 140, 128, 116, 128, 117, 76, 128, 137, 133, 126, 125, 139, 159, 136, 116, 138, 133, 131, 158, 130, 115, 119, 144, 122, 140, 134, 117, 139, 148, 93, 138, 121, 138, 135, 139, 121, 107, 80, 141, 125, 154, 105, 147, 143, 141, 130, 130, 107, 122, 124, 132, 136, 114, 131, 135, 117, 116, 116, 130, 140, 137, 112, 140, 124, 129, 114, 126, 130, 129, 106, 130, 130, 133, 110, 141, 151, 136, 136, 122, 125, 123, 127, 126, 130, 122, 122, 134, 116, 135, 120, 118, 123, 139, 124, 126, 122, 137, 143, 123, 137, 123, 124, 127, 139, 132, 92, 149, 132, 135, 123, 123, 124, 140, 118, 127, 131, 128, 118, 136, 132, 110, 108, 123, 134, 144, 106, 145, 135, 127, 117, 122, 132, 125, 123, 127, 120, 133, 85, 126, 141, 126, 127, 124, 125, 111, 129, 122, 135, 134, 111, 127, 127, 133, 114, 127, 143, 143, 98, 140, 125, 134, 131, 136, 131, 134, 122, 132, 128, 124, 93, 124, 107, 155, 129, 132, 133, 128, 148, 142, 142, 130, 134, 132, 127, 123, 133, 130, 131, 144, 115, 139, 119, 119, 138, 114, 136, 138, 116, 120, 124, 135, 123, 128, 134, 150, 148, 126, 116, 119, 130, 137, 145, 126, 113, 119, 135, 138, 130, 137, 132, 138, 114, 128, 119, 133, 134, 120, 133, 133, 121, 123, 123, 142, 97, 115, 114, 162, 126, 123, 125, 105, 122, 134, 121, 130, 133, 131, 124, 116, 127, 121, 122, 126, 129, 127, 125, 126, 137, 143, 138, 126, 120, 118, 112, 135, 92, 131, 122, 151, 135, 128, 125, 111, 123, 117, 132, 114, 114, 124, 118, 134, 137, 131, 113, 132, 138, 111, 100, 125, 129, 122, 133, 142, 112, 131, 131, 128, 95, 128, 118, 143, 121, 123, 126, 116, 134, 119, 136, 111, 124, 140, 127, 130, 140, 127, 126, 145, 119, 128, 119, 134, 128, 139, 124, 131, 115, 137, 117, 129, 97, 112, 113, 137, 120, 136, 127, 117, 134, 123, 112, 131, 125, 154, 140, 127, 133, 133, 130, 129, 124, 133, 123, 136, 130, 132, 139, 127, 123, 124, 123, 130, 98, 132, 115, 125, 133, 133, 124, 115, 128, 131, 113, 116, 112, 137, 127, 131, 120, 118, 123, 135, 123, 136, 137, 134, 126, 130, 134, 136, 126, 129, 116, 130, 110, 139, 129, 127, 133, 136, 126, 119, 130, 113, 124, 114, 121, 140, 139, 128, 130, 127, 129, 125, 121, 124, 145, 132, 125, 124, 132, 128, 132, 129, 122, 138, 120, 110, 127, 130, 126, 135, 128, 113, 131, 117, 124, 120, 132, 147, 113, 142, 124, 124, 125, 131, 133, 138, 130, 137, 125, 125, 119, 119, 136, 132, 109, 118, 122, 122, 140, 115, 148, 136, 121, 112, 118, 133, 124, 132, 127, 132, 126, 125, 138, 128, 120, 117, 132, 130, 137, 135, 131, 121, 126, 164, 142, 136, 119, 131, 140, 127, 125, 119, 105, 125, 122, 124, 138, 133, 90, 130, 108, 131, 110, 123, 120, 137, 134, 129, 136, 131, 142, 141, 128, 110, 118, 146, 132, 126, 125, 126, 90, 104, 121, 110, 124, 131, 118, 126, 141, 137, 79, 107, 112, 108, 93, 120, 111, 128, 120, 108, 110, 166, 136, 128, 125, 119, 113, 124, 137, 132, 128, 106, 86, 127, 149, 106, 106, 151, 111, 140, 147, 134, 111, 105, 99, 116, 89, 128, 82, 113, 150, 113, 89, 162, 143, 129, 109, 88, 105, 120, 150, 148, 117, 112, 91, 125, 147, 111, 100, 150, 117, 133, 141, 119, 102, 117, 105, 137, 106, 124, 116, 103, 157, 109, 83, 140, 131, 139, 132, 102, 140, 142, 152, 164, 91, 131, 126, 132, 140, 151, 156, 137, 129, 118, 142, 156, 103, 118, 137, 152, 138, 157, 129, 114, 154, 122, 102, 143, 113, 143, 123, 113, 126, 144, 188, 146, 118, 132, 137, 119, 108, 132, 173, 135, 160, 104, 151, 149, 129, 107, 155, 165, 148, 109, 114, 122, 126, 132, 118, 123, 99, 124, 102, 120, 129, 118, 159, 148, 137, 125, 136, 125, 121, 138, 124, 153, 134, 116, 118, 110, 123, 141, 131, 125, 123, 141, 141, 126, 120, 125, 119, 134, 133, 131, 132, 137, 135, 131, 115, 119, 123, 120, 141, 125, 121, 117, 136, 124, 129, 133, 134, 121, 136, 108, 133, 145, 111, 135, 141, 146, 133, 155, 127, 140, 126, 136, 131, 128, 115, 123, 125, 127, 138, 134, 117, 112, 135, 148, 138, 133, 136, 115, 146, 122, 148, 152, 126, 116, 123, 144, 119, 156, 144, 149, 114, 160, 132, 148, 118, 137, 135, 116, 140, 132, 128, 110, 112, 141, 134, 128, 105, 135, 133, 132, 158, 146, 147, 115, 120, 121, 121, 118, 152, 150, 113, 167, 143, 188, 125, 167, 107, 108, 101, 112, 114, 143, 150, 152, 154, 102, 104, 144, 102, 119, 145, 132, 139, 106, 182, 141, 136, 125, 103, 120, 145, 155, 128, 144, 159, 149, 141, 166, 129, 132, 123, 132, 120, 149, 166, 133, 142, 135, 143, 138, 102, 132, 130, 122, 150, 131, 156, 155, 105, 96, 105, 145, 141, 142, 150, 136, 142, 130, 105, 159, 121, 107, 140, 124, 119, 127, 126, 117, 123, 124, 136, 147, 112, 141, 127, 144, 127, 156, 128, 127, 107, 105, 115, 132, 126, 141, 132, 138, 125, 137, 87, 140, 114, 121, 144, 104, 80, 119, 123, 132, 132, 126, 116, 134, 109, 119, 129, 141, 127, 143, 149, 118, 140, 129, 128, 124, 126, 117, 129, 126, 138, 129, 115, 150, 117, 131, 114, 125, 103, 130, 124, 130, 126, 128, 119, 108, 123, 123, 119, 142, 133, 125, 134, 118, 128, 131, 125, 134, 126, 119, 147, 124, 129, 149, 130, 145, 125, 102, 130, 133, 99, 131, 123, 126, 124, 121, 128, 132, 121, 127, 126, 149, 133, 125, 141, 124, 112, 133, 106, 104, 132, 146, 151, 140, 109, 141, 128, 138, 125, 117, 136, 126, 115, 125, 142, 121, 119, 116, 120, 140, 125, 128, 126, 135, 131, 120, 134, 131, 117, 121, 118, 130, 132, 150, 132, 134, 120, 141, 116, 154, 113, 124, 121, 131, 113, 114, 123, 139, 116, 112, 106, 137, 127, 126, 113, 126, 129, 120, 138, 124, 122, 129, 120, 133, 122, 134, 123, 129, 129, 130, 117, 136, 126, 119, 134, 119, 117, 121, 118, 143, 126, 116, 127, 141, 135, 129, 131, 125, 121, 119, 131, 143, 117, 128, 132, 135, 114, 130, 146, 129, 106, 136, 120, 129, 123, 124, 134, 129, 124, 115, 127, 136, 131, 127, 127, 139, 126, 135, 133, 136, 134, 132, 140, 115, 119, 126, 137, 125, 116, 136, 125, 152, 132, 138, 119, 130, 123, 116, 131, 129, 118, 112, 112, 139, 137, 125, 126, 151, 150, 123, 140, 124, 133, 121, 138, 128, 121, 124, 134, 135, 124, 129, 126, 142, 143, 157, 120, 124, 125, 127, 125, 118, 118, 104, 117, 142, 140, 114, 119, 147, 138, 137, 120, 132, 139, 135, 131, 124, 124, 138, 148, 130, 118, 123, 133, 132, 134, 134, 104, 130, 134, 125, 132, 130, 122, 103, 121, 141, 136, 124, 124, 146, 153, 126, 131, 116, 122, 127, 136, 129, 121, 124, 154, 131, 124, 138, 130, 123, 131, 135, 104, 133, 144, 119, 140, 121, 118, 106, 118, 135, 139, 139, 125, 144, 154, 136, 120, 134, 126, 127, 129, 127, 111, 130, 128, 131, 119, 112, 125, 131, 124, 145, 129, 135, 120, 133, 133, 123, 117, 117, 111, 149, 136, 129, 139, 148, 151, 135, 130, 135, 134, 132, 137, 128, 108, 128, 130, 119, 122, 129, 129, 130, 130, 137, 122, 132, 135, 119, 127, 125, 127, 99, 118, 125, 145, 113, 121, 148, 142, 129, 140, 127, 129, 127, 139, 139, 121, 130, 138, 131, 136, 122, 127, 123, 131, 127, 131, 130, 120, 127, 133, 127, 134, 114, 120, 130, 133, 112, 123, 131, 135, 138, 113, 132, 121, 142, 120, 140, 105, 123, 128, 123, 134, 120, 133, 111, 123, 134, 124, 125, 129, 113, 131, 126, 131, 111, 116, 121, 125, 114, 117, 122, 134, 126, 127, 116, 126, 133, 122, 142, 122, 131, 114, 117, 137, 120, 132, 133, 135, 147, 135, 138, 122, 117, 130, 131, 118, 111, 129, 128, 134, 113, 126, 139, 121, 130, 128, 148, 134, 126, 90, 149, 128, 140, 124, 128, 118, 118, 121, 130, 123, 126, 150, 121, 121, 126, 136, 130, 122, 126, 123, 114, 110, 121, 140, 121, 134, 135, 136, 125, 131, 125, 74, 138, 131, 125, 111, 131, 101, 120, 128, 121, 107, 122, 141, 134, 139, 111, 137, 145, 133, 140, 110, 115, 98, 115, 119, 102, 130, 122, 130, 118, 135, 148, 94, 123, 105, 133, 100, 147, 74, 120, 140, 96, 79, 149, 136, 142, 118, 90, 131, 148, 168, 152, 99, 135, 88, 124, 136, 111, 120, 159, 135, 125, 142, 147, 98, 136, 125, 149, 140, 160, 110, 81, 149, 122, 77, 153, 148, 158, 145, 90, 144, 128, 164, 178, 99, 148, 108, 129, 139, 154, 167, 168, 139, 123, 143, 156, 107, 166, 117, 128, 108, 166, 137, 114, 168, 135, 92, 146, 128, 134, 165, 84, 157, 141, 181, 164, 89, 131, 120, 147, 139, 128, 147, 147, 149, 130, 125, 183, 141, 143, 103, 147, 116, 168, 131, 128, 122, 147, 123, 147, 138, 145, 115, 124, 118, 132, 160, 151, 103, 110, 116, 123, 123, 121, 137, 165, 154, 122, 141, 125, 124, 125, 120, 124, 131, 116, 116, 127, 115, 132, 141, 121, 132, 135, 122, 133, 136, 120, 133, 123, 111, 117, 110, 116, 128, 135, 126, 125, 124, 127, 121, 117, 131, 105, 132, 139, 115, 119, 131, 143, 133, 158, 153, 146, 144, 142, 111, 119, 125, 127, 113, 130, 144, 158, 136, 120, 128, 160, 154, 149, 167, 132, 147, 121, 156, 132, 119, 139, 113, 123, 126, 175, 159, 112, 114, 176, 133, 160, 98, 159, 159, 125, 109, 138, 128, 144, 134, 154, 123, 137, 112, 120, 149, 157, 145, 136, 162, 147, 85, 126, 131, 95, 148, 165, 142, 174, 159, 154, 151, 186, 107, 114, 140, 101, 107, 127, 132, 158, 149, 111, 111, 175, 107, 108, 137, 169, 131, 107, 164, 118, 132, 142, 128, 109, 181, 168, 118, 162, 119, 134, 112, 129, 129, 147, 123, 105, 112, 123, 158, 145, 136, 145, 147, 142, 127, 121, 141, 121, 128, 127, 153, 133, 122, 122, 125, 148, 141, 140, 137, 155, 114, 135, 121, 135, 119, 116, 129, 88, 93, 121, 156, 109, 112, 122, 124, 146, 135, 138, 128, 115, 129, 138, 131, 126, 123, 118, 121, 119, 134, 129, 117, 141, 131, 134, 137, 138, 103, 129, 127, 119, 82, 118, 146, 136, 122, 113, 101, 137, 126, 121, 136, 125, 121, 137, 143, 133, 123, 127, 113, 142, 134, 123, 125, 139, 147, 121, 145, 137, 109, 134, 129, 132, 110, 143, 143, 121, 115, 110, 107, 112, 132, 128, 128, 129, 117, 124, 127, 128, 109, 138, 119, 125, 127, 127, 145, 135, 128, 131, 137, 133, 130, 108, 148, 137, 127, 135, 124, 126, 114, 120, 115, 133, 126, 119, 116, 132, 125, 132, 126, 131, 117, 123, 137, 120, 136, 124, 134, 131, 147, 134, 138, 148, 111, 127, 128, 108, 121, 125, 122, 136, 128, 119, 118, 130, 123, 134, 129, 132, 118, 136, 129, 139, 126, 121, 132, 128, 134, 127, 143, 135, 136, 131, 134, 126, 110, 122, 133, 128, 130, 116, 139, 126, 134, 115, 112, 137, 128, 118, 124, 132, 128, 124, 124, 136, 132, 136, 131, 119, 118, 140, 131, 145, 120, 144, 125, 147, 124, 133, 126, 128, 126, 125, 122, 116, 125, 124, 114, 128, 125, 123, 126, 131, 130, 129, 125, 131, 119, 128, 123, 131, 121, 128, 122, 139, 134, 147, 125, 136, 117, 117, 122, 122, 118, 107, 117, 133, 146, 117, 126, 140, 134, 122, 129, 127, 129, 123, 142, 131, 117, 122, 123, 118, 128, 131, 141, 148, 134, 140, 118, 136, 136, 117, 121, 131, 115, 129, 124, 125, 155, 125, 122, 141, 130, 123, 122, 123, 134, 133, 148, 123, 117, 130, 129, 139, 126, 138, 120, 142, 122, 150, 117, 135, 120, 113, 126, 127, 132, 109, 125, 132, 156, 126, 139, 144, 153, 142, 145, 127, 134, 122, 133, 128, 119, 127, 151, 129, 120, 122, 135, 123, 126, 143, 98, 121, 140, 134, 132, 112, 119, 108, 121, 144, 140, 132, 129, 158, 160, 125, 115, 114, 142, 129, 130, 133, 111, 122, 150, 126, 117, 131, 135, 136, 137, 136, 103, 123, 128, 123, 128, 124, 117, 109, 113, 126, 141, 123, 125, 149, 151, 134, 134, 129, 128, 136, 142, 138, 119, 117, 134, 132, 128, 130, 129, 127, 139, 138, 127, 126, 133, 119, 132, 119, 135, 113, 135, 138, 146, 119, 127, 140, 135, 130, 137, 137, 136, 114, 128, 143, 123, 126, 138, 136, 126, 120, 133, 132, 127, 140, 130, 137, 120, 123, 143, 129, 115, 123, 122, 138, 131, 116, 122, 123, 136, 135, 123, 130, 127, 126, 128, 128, 119, 122, 117, 124, 127, 133, 133, 135, 136, 137, 138, 141, 136, 117, 128, 129, 133, 121, 106, 122, 131, 131, 120, 127, 126, 140, 140, 122, 138, 131, 120, 140, 128, 124, 124, 133, 123, 136, 126, 128, 130, 133, 125, 124, 127, 113, 135, 134, 136, 108, 129, 136, 138, 130, 125, 127, 123, 133, 126, 125, 133, 125, 109, 132, 125, 133, 131, 131, 135, 118, 118, 127, 124, 133, 111, 126, 115, 122, 134, 131, 138, 133, 113, 129, 128, 119, 109, 125, 126, 135, 117, 120, 115, 129, 107, 147, 131, 139, 127, 129, 121, 133, 131, 138, 147, 126, 128, 135, 125, 133, 148, 144, 135, 133, 124, 120, 122, 143, 143, 125, 132, 137, 146, 131, 129, 122, 78, 137, 121, 121, 105, 131, 60, 99, 136, 112, 134, 109, 134, 114, 119, 100, 144, 134, 139, 132, 94, 123, 112, 115, 115, 108, 126, 146, 140, 144, 128, 132, 91, 136, 120, 164, 109, 135, 45, 129, 143, 112, 97, 140, 128, 121, 106, 87, 133, 154, 120, 140, 90, 108, 97, 128, 125, 109, 129, 161, 123, 126, 135, 130, 97, 133, 88, 137, 104, 185, 76, 117, 170, 116, 86, 156, 155, 156, 120, 91, 127, 142, 142, 165, 89, 118, 101, 130, 132, 143, 136, 182, 156, 114, 148, 156, 89, 127, 123, 100, 94, 146, 139, 141, 139, 130, 92, 158, 134, 166, 155, 97, 118, 119, 203, 167, 112, 145, 138, 149, 151, 152, 113, 185, 150, 138, 127, 156, 122, 137, 110, 166, 119, 161, 137, 135, 135, 146, 142, 154, 146, 150, 104, 95, 152, 159, 169, 138, 97, 132, 120, 133, 122, 138, 163, 173, 158, 135, 143, 139, 118, 110, 127, 124, 141, 123, 127, 122, 130, 135, 157, 125, 138, 137, 108, 144, 97, 132, 111, 164, 128, 98, 105, 98, 98, 139, 118, 112, 117, 109, 121, 140, 95, 111, 145, 133, 115, 102, 140, 149, 154, 127, 161, 166, 170, 177, 70, 140, 127, 143, 86, 137, 122, 171, 147, 135, 108, 164, 138, 128, 151, 143, 131, 97, 170, 159, 129, 111, 120, 99, 122, 171, 158, 139, 144, 136, 156, 168, 119, 145, 155, 136, 113, 137, 130, 140, 131, 162, 111, 114, 119, 117, 115, 159, 133, 134, 129, 134, 112, 114, 125, 116, 169, 170, 152, 165, 152, 118, 167, 148, 118, 124, 131, 115, 104, 106, 143, 135, 141, 121, 107, 141, 135, 127, 136, 146, 111, 112, 144, 123, 137, 128, 101, 113, 182, 164, 134, 150, 113, 135, 121, 129, 135, 125, 130, 120, 117, 137, 156, 157, 122, 121, 116, 127, 131, 130, 122, 123, 120, 148, 151, 142, 125, 104, 115, 144, 143, 143, 134, 152, 126, 122, 121, 133, 117, 116, 131, 96, 96, 115, 126, 133, 122, 122, 123, 113, 136, 129, 122, 136, 128, 128, 140, 127, 142, 127, 125, 121, 142, 142, 128, 159, 128, 138, 131, 132, 139, 113, 145, 138, 99, 116, 128, 117, 129, 118, 114, 137, 127, 115, 127, 124, 132, 133, 124, 139, 138, 119, 103, 122, 153, 128, 136, 147, 132, 120, 127, 116, 131, 118, 132, 126, 110, 130, 137, 125, 132, 93, 107, 135, 119, 121, 119, 140, 118, 129, 119, 138, 124, 119, 114, 128, 127, 144, 137, 150, 131, 146, 138, 141, 116, 123, 146, 131, 130, 123, 117, 127, 120, 103, 115, 142, 124, 118, 115, 129, 132, 137, 122, 142, 114, 131, 131, 130, 139, 125, 139, 136, 133, 125, 136, 125, 127, 114, 153, 128, 131, 136, 113, 118, 123, 128, 115, 128, 123, 132, 114, 139, 125, 125, 123, 121, 124, 145, 123, 125, 140, 143, 128, 135, 117, 138, 139, 138, 111, 127, 138, 127, 119, 132, 118, 129, 133, 113, 114, 132, 139, 125, 123, 137, 132, 138, 136, 142, 116, 120, 127, 125, 132, 131, 131, 120, 127, 139, 136, 133, 111, 125, 150, 120, 120, 122, 117, 137, 128, 122, 119, 122, 126, 128, 127, 134, 119, 121, 116, 137, 138, 128, 130, 129, 139, 140, 131, 142, 119, 146, 114, 136, 113, 131, 137, 127, 127, 116, 117, 133, 127, 106, 107, 132, 135, 122, 124, 120, 131, 117, 133, 118, 137, 133, 132, 132, 131, 136, 140, 122, 129, 136, 128, 132, 130, 118, 134, 119, 131, 112, 115, 157, 137, 128, 132, 142, 130, 122, 135, 132, 128, 130, 141, 119, 126, 123, 121, 124, 111, 139, 121, 148, 140, 146, 106, 139, 119, 124, 122, 131, 117, 109, 119, 150, 150, 116, 122, 158, 129, 123, 134, 121, 131, 122, 146, 154, 118, 123, 134, 146, 121, 123, 122, 151, 151, 151, 117, 134, 131, 132, 121, 133, 122, 117, 125, 134, 139, 125, 118, 154, 120, 124, 137, 109, 130, 134, 138, 130, 120, 133, 146, 141, 120, 122, 119, 132, 139, 139, 109, 141, 128, 128, 144, 115, 113, 122, 121, 121, 140, 103, 118, 159, 136, 133, 125, 123, 135, 147, 126, 124, 119, 126, 129, 126, 138, 131, 121, 144, 150, 145, 132, 140, 121, 130, 127, 131, 128, 122, 118, 122, 137, 110, 120, 139, 128, 130, 143, 130, 121, 133, 137, 143, 112, 118, 114, 124, 138, 129, 135, 131, 143, 137, 127, 134, 140, 113, 140, 126, 130, 113, 124, 118, 139, 107, 114, 128, 131, 141, 125, 124, 134, 130, 129, 130, 113, 124, 117, 129, 157, 126, 119, 133, 138, 119, 118, 131, 128, 125, 134, 136, 135, 128, 129, 133, 127, 120, 111, 146, 133, 144, 125, 130, 128, 124, 141, 137, 112, 127, 113, 130, 143, 123, 126, 137, 138, 120, 130, 131, 127, 129, 137, 128, 126, 116, 125, 137, 120, 120, 122, 140, 132, 163, 151, 138, 127, 122, 117, 135, 114, 113, 118, 122, 138, 119, 129, 119, 121, 133, 135, 128, 135, 125, 130, 121, 133, 129, 123, 123, 128, 114, 124, 138, 142, 169, 117, 124, 133, 133, 101, 131, 124, 133, 124, 122, 126, 135, 137, 143, 128, 113, 127, 129, 144, 111, 139, 133, 137, 116, 121, 143, 132, 115, 113, 136, 136, 166, 125, 132, 134, 133, 104, 159, 137, 137, 109, 109, 24, 122, 125, 126, 127, 99, 133, 133, 107, 125, 145, 136, 134, 135, 56, 138, 118, 105, 95, 111, 122, 177, 124, 124, 132, 113, 67, 174, 107, 143, 106, 151, 44, 83, 165, 103, 118, 105, 127, 121, 123, 84, 160, 136, 151, 131, 55, 116, 109, 103, 105, 100, 125, 195, 144, 115, 143, 137, 79, 175, 114, 140, 103, 181, 93, 125, 197, 104, 107, 138, 136, 128, 112, 59, 139, 119, 203, 144, 98, 132, 79, 111, 106, 144, 136, 192, 147, 120, 176, 172, 106, 125, 135, 140, 110, 185, 113, 141, 142, 129, 101, 158, 128, 133, 148, 77, 119, 171, 213, 150, 111, 168, 147, 139, 121, 156, 132, 178, 127, 114, 146, 150, 122, 126, 114, 161, 114, 145, 135, 122, 126, 122, 130, 146, 142, 133, 143, 112, 152, 156, 140, 114, 121, 135, 131, 126, 122, 167, 149, 141, 140, 122, 148, 150, 115, 137, 134, 113, 123, 130, 140, 141, 139, 116, 141, 140, 161, 145, 128, 132, 142, 135, 123, 131, 134, 162, 142, 121, 121, 134, 121, 132, 127, 154, 133, 131, 144, 137, 117, 118, 109, 108, 141, 141, 157, 125, 177, 174, 173, 161, 101, 129, 157, 125, 130, 128, 150, 163, 176, 120, 123, 145, 120, 136, 139, 169, 136, 96, 170, 122, 142, 116, 112, 103, 155, 177, 145, 156, 152, 130, 161, 171, 137, 135, 135, 122, 112, 155, 133, 144, 116, 140, 97, 120, 125, 92, 110, 134, 99, 151, 150, 127, 128, 124, 108, 99, 148, 159, 152, 142, 145, 136, 150, 139, 109, 114, 129, 131, 107, 121, 126, 151, 121, 137, 117, 158, 126, 120, 129, 135, 114, 114, 151, 114, 120, 141, 101, 126, 163, 166, 131, 144, 122, 145, 140, 138, 112, 119, 106, 135, 94, 118, 139, 162, 125, 101, 112, 137, 123, 125, 117, 134, 138, 130, 175, 156, 123, 112, 116, 127, 158, 150, 136, 122, 139, 138, 123, 129, 112, 121, 125, 133, 71, 127, 132, 133, 117, 104, 110, 143, 118, 114, 112, 138, 131, 123, 138, 131, 117, 125, 137, 148, 148, 147, 141, 123, 128, 120, 132, 126, 122, 121, 136, 129, 105, 105, 105, 135, 136, 115, 114, 128, 121, 127, 136, 141, 122, 136, 128, 115, 123, 133, 125, 122, 142, 150, 136, 127, 140, 126, 126, 133, 117, 114, 130, 131, 115, 127, 118, 134, 130, 125, 118, 140, 118, 128, 122, 129, 122, 131, 125, 126, 137, 129, 137, 133, 142, 150, 144, 106, 129, 125, 133, 115, 132, 128, 128, 124, 113, 114, 111, 126, 127, 114, 109, 130, 128, 133, 135, 135, 133, 132, 116, 129, 134, 128, 117, 127, 132, 148, 141, 112, 135, 139, 137, 128, 123, 118, 138, 133, 130, 131, 102, 137, 121, 119, 131, 124, 133, 116, 119, 131, 116, 135, 119, 135, 128, 123, 127, 132, 115, 137, 134, 96, 130, 135, 137, 112, 125, 120, 133, 128, 129, 131, 92, 140, 136, 123, 115, 147, 130, 120, 128, 133, 133, 126, 123, 130, 120, 129, 131, 131, 121, 144, 118, 97, 126, 139, 152, 130, 118, 107, 133, 130, 131, 125, 97, 122, 125, 112, 123, 126, 132, 123, 118, 135, 127, 121, 121, 145, 118, 123, 139, 112, 122, 138, 123, 87, 114, 140, 131, 129, 112, 125, 148, 128, 130, 123, 104, 137, 129, 121, 118, 131, 131, 133, 113, 135, 130, 122, 121, 112, 113, 120, 143, 133, 110, 123, 106, 100, 135, 144, 124, 139, 127, 120, 142, 126, 120, 112, 112, 141, 136, 125, 119, 124, 116, 109, 128, 136, 133, 119, 120, 115, 132, 121, 118, 108, 106, 123, 137, 124, 140, 152, 109, 135, 104, 121, 114, 133, 98, 111, 115, 136, 146, 135, 122, 124, 107, 113, 130, 115, 121, 108, 151, 127, 117, 112, 98, 126, 129, 141, 132, 136, 157, 155, 100, 142, 127, 116, 124, 115, 116, 110, 113, 141, 141, 121, 126, 146, 113, 104, 139, 124, 127, 119, 160, 134, 109, 125, 128, 112, 143, 138, 130, 149, 143, 142, 126, 147, 125, 129, 132, 138, 121, 121, 124, 143, 135, 116, 115, 137, 119, 104, 134, 128, 125, 126, 153, 146, 127, 110, 123, 131, 138, 130, 132, 134, 134, 135, 133, 128, 143, 119, 139, 138, 110, 127, 132, 131, 135, 108, 107, 164, 124, 109, 120, 129, 130, 128, 143, 131, 107, 125, 116, 126, 129, 128, 125, 144, 142, 136, 132, 144, 148, 129, 138, 125, 124, 114, 135, 138, 118, 125, 114, 148, 125, 111, 111, 141, 122, 120, 139, 138, 114, 120, 122, 123, 137, 122, 122, 133, 126, 143, 125, 144, 132, 125, 132, 119, 115, 121, 113, 122, 128, 107, 114, 140, 135, 117, 125, 123, 117, 134, 132, 131, 123, 132, 125, 127, 142, 116, 153, 125, 136, 117, 127, 133, 118, 118, 146, 124, 119, 139, 126, 124, 121, 121, 109, 133, 149, 136, 133, 124, 128, 135, 133, 127, 120, 124, 123, 126, 136, 125, 160, 126, 126, 124, 119, 127, 128, 127, 133, 136, 148, 135, 129, 122, 118, 114, 114, 132, 130, 132, 123, 123, 137, 142, 106, 134, 134, 139, 117, 151, 109, 135, 158, 120, 119, 121, 128, 131, 117, 118, 140, 138, 131, 138, 109, 129, 120, 114, 104, 148, 135, 140, 129, 122, 154, 141, 98, 131, 139, 146, 129, 156, 33, 131, 152, 128, 139, 112, 140, 146, 106, 108, 141, 145, 146, 139, 79, 125, 104, 104, 106, 117, 160, 141, 138, 129, 155, 135, 50, 166, 111, 164, 127, 164, 32, 98, 146, 109, 125, 111, 137, 153, 85, 82, 133, 155, 173, 143, 50, 116, 110, 99, 87, 95, 158, 162, 163, 112, 186, 140, 48, 193, 117, 185, 103, 190, 94, 114, 196, 104, 81, 123, 159, 164, 95, 40, 139, 169, 204, 172, 74, 150, 113, 95, 107, 143, 178, 165, 155, 109, 190, 164, 96, 145, 138, 127, 90, 161, 132, 112, 146, 129, 70, 98, 133, 113, 125, 71, 131, 180, 161, 115, 88, 173, 142, 118, 104, 155, 150, 135, 151, 72, 152, 161, 127, 142, 96, 107, 96, 94, 128, 143, 158, 131, 114, 139, 146, 150, 133, 94, 139, 99, 107, 118, 98, 152, 140, 127, 118, 130, 116, 158, 138, 123, 135, 106, 123, 153, 120, 139, 140, 129, 132, 145, 131, 122, 148, 128, 148, 143, 134, 111, 147, 122, 124, 120, 135, 145, 137, 128, 123, 133, 135, 113, 135, 148, 119, 109, 148, 141, 140, 121, 108, 128, 120, 171, 146, 118, 176, 167, 171, 157, 110, 113, 156, 126, 114, 138, 143, 157, 167, 119, 120, 147, 117, 112, 128, 177, 130, 121, 172, 149, 131, 113, 127, 102, 139, 151, 146, 153, 168, 130, 170, 179, 107, 123, 143, 114, 112, 122, 127, 135, 140, 126, 83, 128, 131, 100, 113, 156, 130, 104, 142, 114, 113, 140, 117, 140, 151, 160, 151, 129, 134, 161, 151, 155, 102, 136, 118, 122, 95, 161, 124, 151, 118, 126, 102, 159, 138, 124, 130, 126, 134, 119, 171, 122, 121, 125, 105, 143, 156, 143, 141, 101, 127, 117, 152, 125, 124, 112, 129, 137, 86, 136, 124, 144, 102, 108, 102, 111, 118, 109, 133, 116, 127, 134, 149, 136, 116, 138, 124, 108, 135, 139, 121, 95, 128, 146, 128, 137, 109, 140, 141, 135, 67, 128, 117, 135, 131, 143, 104, 135, 139, 112, 125, 134, 108, 120, 138, 135, 147, 143, 145, 109, 140, 156, 134, 77, 120, 150, 125, 114, 132, 129, 121, 143, 85, 136, 104, 143, 138, 122, 123, 135, 131, 123, 108, 134, 123, 131, 117, 134, 130, 119, 114, 120, 124, 137, 123, 65, 134, 131, 136, 114, 129, 105, 137, 134, 126, 130, 93, 126, 131, 120, 133, 120, 127, 121, 122, 116, 124, 127, 110, 129, 133, 127, 121, 141, 115, 157, 122, 52, 135, 135, 137, 117, 131, 111, 137, 142, 134, 132, 97, 136, 132, 117, 131, 127, 143, 122, 122, 121, 130, 136, 123, 142, 131, 132, 135, 118, 116, 145, 132, 63, 144, 134, 141, 123, 118, 139, 145, 130, 147, 118, 99, 126, 130, 119, 126, 108, 147, 121, 118, 139, 126, 139, 107, 148, 133, 122, 134, 134, 120, 135, 129, 61, 114, 133, 148, 126, 124, 124, 148, 153, 140, 131, 110, 126, 130, 130, 128, 118, 135, 118, 109, 125, 125, 129, 121, 145, 128, 130, 127, 135, 97, 106, 133, 82, 137, 139, 149, 121, 120, 118, 131, 142, 139, 123, 115, 132, 124, 131, 121, 120, 133, 120, 123, 122, 121, 128, 112, 141, 114, 124, 129, 137, 102, 92, 118, 80, 106, 120, 139, 115, 132, 126, 137, 137, 124, 123, 110, 121, 125, 129, 121, 108, 129, 115, 123, 154, 123, 114, 100, 111, 124, 124, 134, 126, 118, 88, 110, 100, 127, 135, 133, 138, 106, 118, 131, 129, 128, 117, 120, 137, 139, 118, 126, 116, 122, 118, 131, 117, 125, 96, 127, 110, 118, 120, 120, 122, 110, 96, 110, 105, 138, 132, 107, 131, 113, 102, 117, 136, 108, 111, 131, 141, 143, 98, 99, 119, 117, 119, 132, 119, 124, 94, 140, 130, 117, 99, 84, 123, 141, 112, 131, 106, 151, 124, 111, 136, 111, 105, 109, 127, 88, 116, 134, 124, 141, 105, 101, 108, 104, 102, 141, 134, 116, 109, 144, 140, 107, 112, 102, 120, 125, 129, 131, 134, 149, 145, 134, 141, 132, 125, 124, 121, 97, 124, 136, 127, 141, 115, 109, 142, 117, 100, 116, 134, 121, 121, 143, 130, 127, 115, 115, 130, 144, 133, 120, 134, 145, 125, 128, 137, 132, 134, 136, 127, 104, 134, 130, 133, 133, 131, 111, 140, 124, 87, 140, 121, 124, 131, 146, 138, 121, 121, 138, 118, 140, 126, 140, 136, 138, 117, 127, 136, 133, 125, 144, 129, 99, 125, 129, 132, 136, 123, 127, 158, 132, 73, 126, 129, 129, 129, 132, 140, 117, 131, 131, 120, 155, 123, 146, 128, 134, 121, 118, 128, 141, 121, 136, 128, 110, 127, 124, 131, 126, 132, 117, 138, 127, 49, 130, 131, 129, 131, 138, 134, 119, 134, 125, 131, 127, 137, 144, 143, 143, 134, 141, 140, 135, 131, 134, 129, 94, 131, 123, 140, 138, 110, 126, 150, 137, 54, 139, 123, 118, 127, 136, 131, 126, 130, 123, 126, 132, 116, 125, 144, 139, 131, 137, 128, 131, 120, 129, 123, 117, 119, 100, 140, 130, 109, 106, 132, 141, 41, 137, 120, 111, 120, 129, 128, 118, 116, 108, 160, 102, 132, 144, 132, 148, 125, 126, 135, 136, 114, 154, 121, 130, 130, 91, 143, 129, 122, 121, 161, 142, 34, 129, 108, 112, 140, 106, 128, 124, 156, 159, 161, 38, 107, 118, 132, 133, 127, 111, 118, 96, 132, 137, 141, 156, 123, 116, 140, 95, 95, 97, 136, 164, 41, 134, 109, 124, 125, 81, 149, 115, 170, 117, 179, 29, 81, 150, 101, 97, 114, 147, 147, 52, 84, 145, 155, 180, 153, 60, 130, 116, 102, 88, 97, 162, 61, 175, 115, 138, 137, 66, 151, 82, 159, 52, 187, 116, 135, 173, 99, 81, 118, 170, 160, 95, 39, 110, 169, 187, 133, 89, 110, 114, 111, 120, 109, 150, 112, 184, 137, 158, 174, 135, 149, 108, 158, 87, 179, 131, 122, 140, 129, 78, 137, 139, 186, 140, 72, 124, 172, 150, 121, 122, 116, 123, 98, 93, 109, 162, 168, 179, 102, 162, 140, 125, 149, 114, 127, 96, 108, 146, 129, 155, 108, 134, 120, 142, 148, 139, 118, 158, 123, 113, 98, 114, 127, 138, 113, 100, 97, 106, 165, 127, 135, 149, 109, 136, 140, 126, 111, 129, 122, 129, 140, 153, 120, 144, 142, 152, 152, 113, 122, 143, 136, 127, 126, 135, 151, 146, 128, 120, 143, 120, 129, 128, 163, 128, 129, 150, 151, 134, 124, 115, 106, 118, 147, 121, 128, 177, 170, 157, 169, 100, 150, 148, 139, 138, 152, 120, 130, 132, 89, 91, 155, 107, 106, 136, 134, 126, 111, 132, 154, 134, 108, 99, 107, 136, 143, 176, 112, 182, 137, 164, 175, 77, 126, 136, 116, 137, 107, 118, 157, 147, 112, 82, 127, 115, 113, 103, 149, 116, 79, 167, 136, 111, 143, 115, 125, 146, 120, 148, 106, 143, 161, 136, 148, 96, 132, 119, 110, 77, 133, 120, 145, 116, 129, 80, 112, 111, 109, 126, 148, 134, 108, 161, 116, 128, 133, 103, 93, 108, 107, 140, 71, 129, 127, 139, 123, 112, 123, 119, 140, 86, 115, 118, 141, 137, 110, 108, 109, 110, 118, 128, 112, 134, 114, 118, 106, 144, 125, 120, 126, 104, 126, 122, 38, 121, 125, 127, 114, 132, 129, 121, 161, 111, 114, 98, 136, 129, 137, 123, 125, 116, 108, 105, 134, 122, 132, 121, 143, 124, 124, 139, 117, 99, 126, 127, 40, 117, 127, 130, 101, 119, 122, 137, 152, 98, 114, 99, 144, 114, 132, 140, 120, 128, 121, 107, 121, 129, 131, 123, 140, 153, 131, 137, 124, 111, 119, 141, 30, 128, 131, 133, 109, 117, 122, 151, 146, 142, 119, 95, 142, 143, 129, 136, 121, 135, 119, 129, 134, 129, 130, 120, 150, 135, 115, 145, 135, 85, 100, 128, 67, 122, 134, 128, 107, 126, 125, 155, 136, 133, 124, 122, 138, 135, 132, 129, 134, 129, 114, 123, 130, 128, 124, 111, 139, 148, 131, 128, 129, 104, 88, 161, 74, 122, 119, 137, 115, 125, 122, 151, 136, 146, 133, 122, 140, 136, 138, 126, 115, 112, 130, 106, 138, 128, 143, 116, 140, 124, 130, 120, 117, 97, 55, 139, 95, 140, 114, 131, 109, 124, 123, 151, 120, 129, 121, 127, 136, 129, 125, 121, 119, 125, 124, 125, 128, 129, 132, 125, 164, 129, 139, 118, 120, 125, 62, 142, 117, 137, 119, 152, 117, 123, 118, 142, 142, 137, 130, 125, 140, 142, 113, 131, 129, 137, 122, 127, 143, 133, 129, 122, 151, 119, 125, 129, 127, 124, 78, 149, 120, 106, 121, 153, 123, 119, 130, 132, 123, 148, 122, 132, 109, 117, 114, 120, 109, 132, 133, 122, 135, 127, 149, 120, 114, 126, 131, 121, 132, 124, 94, 117, 114, 121, 133, 118, 118, 110, 109, 137, 122, 133, 79, 126, 93, 137, 110, 90, 123, 148, 140, 139, 96, 149, 118, 115, 110, 126, 130, 115, 145, 151, 107, 132, 112, 136, 103, 86, 95, 136, 106, 137, 125, 134, 80, 144, 127, 162, 90, 94, 107, 140, 118, 139, 117, 128, 110, 126, 113, 116, 110, 89, 141, 134, 120, 131, 112, 131, 118, 101, 103, 137, 99, 120, 115, 117, 102, 132, 129, 140, 90, 113, 110, 116, 135, 123, 138, 127, 122, 138, 134, 105, 108, 98, 125, 136, 122, 138, 120, 121, 115, 122, 121, 147, 124, 116, 119, 112, 125, 125, 124, 135, 125, 127, 113, 133, 127, 118, 156, 131, 117, 131, 133, 102, 116, 121, 128, 127, 118, 130, 133, 127, 135, 129, 121, 137, 117, 132, 114, 98, 109, 129, 116, 140, 120, 124, 134, 136, 122, 106, 143, 118, 129, 134, 130, 121, 119, 128, 133, 134, 126, 126, 129, 135, 128, 127, 128, 134, 117, 130, 128, 108, 117, 123, 147, 137, 128, 126, 131, 123, 96, 109, 148, 126, 118, 133, 116, 126, 116, 140, 129, 133, 126, 128, 137, 141, 131, 132, 115, 153, 141, 132, 121, 104, 131, 128, 132, 141, 136, 126, 142, 128, 66, 124, 134, 115, 122, 145, 133, 134, 107, 140, 134, 134, 124, 130, 137, 142, 129, 111, 121, 159, 133, 130, 110, 98, 117, 104, 154, 139, 126, 141, 150, 124, 28, 127, 124, 115, 123, 145, 129, 132, 117, 153, 113, 113, 124, 113, 130, 126, 125, 127, 123, 144, 116, 135, 130, 93, 126, 107, 130, 153, 123, 122, 158, 123, 20, 123, 136, 69, 122, 121, 132, 132, 113, 139, 123, 98, 118, 137, 139, 137, 136, 113, 113, 114, 124, 147, 133, 85, 114, 105, 159, 150, 118, 112, 147, 115, 15, 115, 124, 67, 129, 101, 125, 140, 134, 158, 124, 61, 102, 117, 133, 126, 145, 122, 105, 82, 115, 125, 135, 129, 126, 119, 144, 122, 107, 103, 144, 141, 23, 131, 86, 78, 139, 93, 126, 133, 164, 158, 150, 109, 116, 126, 121, 101, 123, 110, 98, 51, 92, 113, 141, 144, 124, 95, 128, 109, 81, 81, 114, 183, 48, 125, 96, 69, 145, 92, 122, 105, 188, 89, 219, 126, 139, 157, 115, 70, 113, 116, 134, 105, 53, 107, 131, 185, 132, 61, 114, 93, 114, 93, 113, 157, 93, 153, 103, 120, 174, 127, 162, 114, 185, 101, 187, 151, 120, 124, 119, 93, 173, 163, 166, 157, 71, 140, 164, 185, 109, 138, 116, 93, 83, 100, 116, 154, 150, 156, 110, 118, 174, 119, 129, 127, 108, 131, 134, 131, 109, 144, 126, 130, 106, 153, 117, 122, 135, 123, 150, 116, 124, 143, 98, 133, 117, 97, 97, 113, 136, 160, 126, 120, 107, 141, 128, 131, 132, 129, 125, 124, 140, 119, 119, 134, 149, 124, 134, 126, 125, 134, 127, 119, 142, 132, 152, 137, 116, 124, 130, 136, 121, 140, 147, 129, 114, 136, 150, 142, 119, 123, 117, 112, 156, 158, 153, 185, 162, 195, 165, 91, 147, 173, 146, 119, 118, 105, 171, 154, 94, 115, 158, 98, 120, 133, 172, 119, 105, 176, 172, 120, 105, 120, 120, 133, 126, 180, 131, 178, 138, 159, 165, 86, 136, 172, 119, 102, 135, 108, 158, 151, 124, 102, 118, 98, 113, 103, 185, 106, 107, 161, 140, 167, 132, 130, 110, 120, 108, 128, 95, 157, 134, 147, 123, 96, 127, 146, 137, 125, 127, 102, 155, 140, 111, 76, 105, 126, 106, 108, 126, 113, 68, 148, 110, 134, 119, 103, 93, 96, 80, 144, 39, 124, 132, 125, 102, 100, 114, 120, 145, 90, 89, 91, 142, 154, 105, 99, 106, 110, 128, 119, 120, 130, 90, 128, 147, 129, 111, 126, 113, 77, 83, 131, 55, 122, 124, 135, 106, 132, 106, 134, 154, 95, 121, 121, 137, 140, 120, 120, 118, 115, 113, 115, 115, 125, 116, 115, 137, 131, 120, 137, 116, 62, 50, 139, 59, 129, 143, 126, 107, 143, 130, 135, 146, 127, 119, 136, 140, 128, 128, 129, 106, 131, 135, 133, 126, 107, 137, 103, 152, 135, 123, 137, 118, 88, 42, 147, 80, 142, 126, 130, 112, 134, 118, 145, 147, 143, 135, 141, 131, 132, 127, 129, 119, 124, 123, 126, 148, 119, 134, 111, 152, 140, 127, 127, 128, 97, 23, 136, 119, 128, 126, 129, 119, 125, 122, 137, 129, 128, 134, 141, 122, 125, 120, 134, 106, 132, 122, 128, 139, 125, 121, 133, 129, 122, 121, 145, 129, 118, 0, 135, 119, 129, 117, 126, 127, 138, 119, 124, 125, 124, 111, 124, 124, 126, 117, 137, 115, 133, 125, 125, 116, 126, 134, 122, 136, 118, 118, 131, 136, 123, 51, 151, 142, 129, 131, 135, 131, 127, 128, 134, 126, 139, 139, 138, 122, 110, 133, 139, 117, 127, 125, 146, 140, 130, 144, 113, 138, 120, 128, 139, 140, 119, 87, 152, 134, 130, 123, 164, 117, 125, 125, 132, 113, 137, 146, 128, 99, 121, 126, 137, 99, 141, 135, 140, 135, 125, 136, 124, 161, 116, 138, 121, 138, 132, 108, 125, 132, 118, 109, 152, 126, 131, 129, 138, 108, 150, 139, 139, 86, 91, 122, 136, 116, 134, 128, 137, 126, 129, 147, 117, 134, 122, 136, 130, 146, 127, 122, 135, 122, 120, 110, 96, 103, 121, 110, 133, 110, 151, 113, 140, 86, 104, 104, 129, 123, 144, 139, 134, 105, 136, 164, 117, 90, 131, 115, 115, 159, 128, 125, 119, 114, 125, 113, 81, 84, 157, 104, 121, 122, 146, 78, 137, 135, 140, 127, 135, 120, 138, 126, 146, 125, 146, 137, 145, 117, 122, 121, 100, 126, 136, 130, 135, 111, 123, 120, 108, 96, 153, 91, 118, 105, 133, 100, 133, 120, 132, 122, 125, 124, 121, 131, 121, 147, 136, 122, 127, 123, 123, 119, 114, 124, 131, 125, 137, 121, 126, 130, 129, 107, 129, 115, 127, 102, 120, 130, 125, 139, 133, 135, 138, 123, 115, 124, 124, 146, 126, 127, 130, 124, 125, 120, 125, 130, 136, 126, 158, 117, 110, 136, 122, 117, 146, 119, 138, 108, 139, 112, 130, 128, 135, 129, 114, 133, 125, 125, 111, 139, 126, 131, 136, 139, 131, 114, 123, 144, 133, 122, 128, 119, 119, 136, 121, 122, 146, 123, 137, 106, 129, 123, 126, 130, 135, 122, 137, 124, 131, 140, 112, 146, 129, 133, 133, 121, 128, 127, 143, 124, 126, 119, 121, 126, 113, 127, 115, 102, 160, 122, 141, 124, 112, 111, 114, 130, 141, 142, 129, 137, 123, 121, 111, 125, 119, 130, 131, 135, 128, 119, 127, 128, 110, 126, 127, 131, 126, 123, 119, 127, 136, 127, 130, 118, 123, 106, 121, 138, 135, 127, 125, 145, 123, 104, 124, 131, 133, 150, 139, 128, 127, 108, 153, 109, 103, 118, 121, 134, 132, 119, 108, 112, 130, 136, 136, 138, 102, 121, 139, 117, 131, 143, 137, 127, 129, 50, 98, 135, 111, 135, 96, 128, 137, 106, 149, 66, 90, 104, 104, 117, 133, 126, 102, 115, 106, 144, 135, 108, 95, 125, 128, 127, 140, 135, 127, 136, 114, 25, 100, 118, 60, 129, 97, 114, 137, 116, 159, 91, 97, 120, 121, 120, 134, 138, 123, 112, 88, 126, 122, 117, 104, 118, 152, 124, 137, 110, 113, 121, 147, 43, 108, 76, 58, 135, 75, 90, 159, 147, 148, 84, 151, 129, 126, 125, 123, 119, 132, 105, 122, 120, 113, 99, 107, 163, 127, 122, 96, 103, 110, 124, 143, 57, 95, 78, 72, 134, 113, 122, 126, 190, 97, 135, 156, 155, 147, 138, 77, 126, 90, 104, 117, 62, 120, 110, 94, 135, 84, 126, 106, 120, 75, 132, 134, 101, 125, 118, 97, 160, 144, 142, 92, 158, 70, 168, 160, 144, 141, 120, 88, 116, 123, 128, 118, 68, 152, 159, 94, 111, 104, 130, 113, 91, 103, 127, 149, 135, 152, 120, 119, 132, 146, 131, 121, 122, 128, 105, 151, 150, 131, 130, 130, 119, 106, 107, 127, 130, 137, 127, 81, 140, 112, 145, 142, 108, 101, 136, 115, 133, 152, 122, 122, 104, 131, 141, 133, 140, 137, 130, 132, 121, 132, 130, 136, 127, 117, 127, 142, 129, 113, 125, 145, 111, 128, 141, 136, 129, 131, 134, 124, 125, 125, 111, 128, 123, 119, 163, 146, 121, 141, 131, 129, 148, 136, 161, 165, 158, 171, 158, 114, 153, 151, 130, 125, 127, 102, 154, 132, 98, 111, 162, 115, 104, 127, 156, 123, 102, 143, 198, 131, 116, 114, 129, 131, 154, 175, 126, 186, 148, 163, 172, 97, 125, 209, 147, 84, 130, 108, 162, 168, 126, 111, 127, 91, 122, 105, 193, 116, 97, 167, 124, 157, 143, 147, 96, 111, 87, 120, 99, 142, 111, 126, 116, 99, 136, 122, 121, 139, 129, 118, 135, 134, 113, 61, 113, 135, 117, 135, 144, 118, 78, 134, 138, 128, 82, 129, 110, 77, 49, 147, 68, 118, 118, 100, 101, 122, 119, 145, 122, 89, 104, 101, 129, 153, 122, 111, 120, 115, 138, 116, 136, 131, 110, 114, 142, 108, 91, 123, 113, 80, 25, 144, 74, 130, 118, 130, 101, 127, 115, 132, 104, 97, 117, 123, 120, 134, 124, 139, 108, 123, 148, 130, 138, 152, 137, 110, 122, 103, 113, 136, 119, 94, 12, 120, 114, 150, 125, 133, 134, 123, 135, 123, 100, 126, 114, 147, 109, 129, 125, 139, 119, 112, 137, 135, 135, 128, 133, 111, 141, 121, 125, 128, 126, 108, 32, 147, 130, 142, 116, 132, 132, 128, 134, 135, 109, 144, 127, 134, 123, 133, 119, 136, 110, 124, 128, 128, 143, 140, 139, 126, 133, 117, 109, 133, 142, 117, 60, 134, 135, 138, 125, 131, 124, 134, 135, 141, 117, 140, 127, 148, 110, 122, 135, 135, 124, 124, 121, 135, 138, 131, 143, 126, 135, 127, 116, 127, 132, 121, 117, 139, 141, 126, 121, 142, 126, 132, 135, 123, 114, 141, 135, 138, 107, 116, 131, 136, 120, 120, 128, 137, 129, 121, 150, 122, 133, 135, 113, 129, 128, 124, 131, 139, 133, 146, 139, 143, 127, 125, 122, 135, 109, 130, 139, 136, 75, 115, 127, 144, 123, 127, 128, 132, 139, 129, 139, 121, 139, 109, 138, 136, 132, 126, 145, 147, 124, 114, 111, 148, 127, 127, 108, 133, 91, 135, 159, 131, 90, 99, 136, 138, 124, 134, 134, 116, 136, 135, 150, 117, 147, 116, 129, 123, 150, 122, 130, 138, 138, 106, 115, 134, 113, 116, 110, 132, 107, 134, 162, 136, 81, 98, 121, 138, 122, 137, 123, 124, 97, 139, 156, 107, 126, 141, 140, 124, 146, 138, 146, 143, 125, 120, 129, 88, 117, 145, 110, 120, 132, 141, 135, 131, 120, 127, 118, 142, 116, 129, 139, 125, 112, 147, 148, 118, 107, 136, 123, 132, 146, 132, 127, 133, 129, 127, 114, 94, 117, 152, 120, 115, 130, 148, 106, 134, 150, 144, 139, 140, 125, 136, 137, 134, 119, 135, 157, 142, 114, 130, 123, 136, 141, 138, 123, 128, 108, 117, 113, 117, 96, 146, 104, 129, 122, 139, 113, 124, 122, 125, 141, 137, 123, 118, 121, 125, 148, 126, 130, 129, 132, 128, 122, 127, 136, 133, 120, 134, 120, 109, 122, 120, 103, 130, 113, 121, 106, 127, 120, 130, 139, 127, 143, 143, 133, 124, 132, 125, 139, 133, 132, 128, 122, 130, 113, 118, 127, 127, 123, 132, 122, 110, 117, 122, 120, 153, 118, 124, 128, 125, 113, 131, 133, 137, 130, 139, 124, 106, 129, 107, 142, 126, 139, 136, 116, 115, 121, 122, 127, 118, 135, 139, 128, 118, 136, 118, 118, 149, 121, 132, 128, 138, 118, 118, 136, 140, 130, 130, 133, 114, 145, 128, 138, 129, 131, 143, 128, 133, 119, 118, 118, 123, 116, 120, 125, 117, 122, 113, 110, 143, 123, 130, 111, 134, 121, 131, 116, 127, 145, 140, 138, 125, 137, 122, 128, 120, 130, 120, 144, 131, 119, 134, 110, 114, 118, 137, 129, 116, 129, 126, 100, 137, 115, 139, 121, 130, 112, 119, 123, 132, 128, 127, 127, 121, 148, 113, 137, 112, 144, 109, 133, 135, 115, 117, 102, 101, 140, 132, 130, 130, 126, 122, 110, 118, 144, 135, 111, 123, 128, 152, 119, 120, 136, 142, 127, 113, 132, 122, 138, 121, 144, 96, 146, 145, 114, 139, 69, 101, 109, 128, 139, 130, 129, 137, 109, 110, 148, 133, 93, 86, 138, 147, 108, 125, 119, 128, 117, 121, 111, 121, 122, 108, 136, 99, 107, 142, 119, 157, 63, 96, 120, 114, 127, 142, 125, 129, 102, 91, 140, 110, 63, 47, 137, 145, 103, 99, 118, 128, 102, 132, 72, 119, 75, 103, 113, 97, 94, 147, 148, 144, 50, 148, 147, 112, 141, 119, 127, 150, 126, 96, 128, 111, 36, 56, 136, 105, 109, 97, 119, 116, 113, 131, 97, 115, 92, 98, 102, 113, 112, 124, 173, 105, 111, 179, 189, 123, 156, 121, 108, 104, 131, 130, 119, 117, 92, 61, 155, 67, 140, 119, 130, 100, 124, 124, 92, 110, 120, 91, 99, 156, 99, 134, 191, 97, 143, 183, 172, 111, 160, 82, 129, 89, 119, 138, 117, 131, 129, 85, 152, 82, 149, 119, 118, 114, 142, 157, 113, 151, 127, 100, 102, 140, 115, 145, 161, 130, 113, 126, 144, 110, 146, 132, 102, 103, 107, 144, 159, 123, 146, 114, 151, 129, 166, 130, 129, 104, 139, 135, 136, 114, 105, 124, 133, 127, 129, 128, 131, 118, 137, 130, 127, 107, 123, 136, 113, 140, 132, 138, 114, 146, 120, 159, 134, 109, 124, 123, 133, 131, 109, 151, 148, 141, 120, 156, 120, 114, 138, 121, 118, 118, 150, 118, 131, 147, 131, 143, 145, 139, 127, 133, 130, 121, 116, 122, 103, 134, 145, 155, 115, 122, 117, 129, 143, 147, 136, 143, 125, 146, 148, 138, 112, 105, 129, 159, 150, 136, 123, 174, 161, 169, 149, 88, 110, 153, 114, 148, 110, 132, 166, 181, 99, 114, 136, 104, 125, 114, 149, 114, 101, 172, 108, 158, 128, 138, 89, 106, 97, 137, 140, 138, 151, 126, 160, 93, 156, 115, 106, 134, 154, 146, 149, 139, 150, 89, 125, 112, 131, 127, 163, 102, 76, 123, 151, 81, 84, 128, 103, 137, 60, 152, 106, 114, 125, 122, 105, 153, 131, 137, 67, 122, 101, 121, 105, 138, 146, 157, 125, 127, 120, 126, 151, 108, 121, 109, 138, 112, 91, 122, 83, 109, 51, 151, 135, 147, 114, 139, 139, 134, 133, 133, 67, 114, 118, 128, 99, 118, 124, 120, 133, 120, 118, 127, 139, 111, 147, 104, 137, 111, 117, 131, 72, 106, 97, 122, 146, 151, 110, 130, 120, 135, 146, 132, 75, 115, 127, 133, 107, 127, 142, 145, 120, 119, 136, 117, 128, 129, 128, 116, 153, 109, 112, 125, 108, 127, 112, 129, 157, 128, 121, 141, 147, 145, 152, 138, 74, 122, 124, 125, 88, 119, 143, 142, 121, 115, 134, 116, 146, 132, 127, 128, 135, 100, 105, 128, 126, 133, 124, 137, 145, 132, 126, 133, 138, 126, 141, 125, 75, 139, 132, 134, 80, 118, 140, 140, 124, 121, 127, 128, 116, 129, 145, 124, 121, 102, 119, 124, 139, 127, 139, 132, 119, 153, 121, 134, 130, 122, 148, 126, 90, 133, 131, 129, 72, 132, 145, 141, 115, 128, 123, 148, 122, 125, 135, 124, 133, 91, 128, 135, 140, 123, 140, 126, 122, 107, 119, 136, 130, 121, 136, 144, 100, 140, 140, 128, 86, 115, 135, 138, 129, 121, 125, 124, 126, 127, 132, 118, 134, 122, 143, 140, 134, 124, 136, 134, 127, 107, 106, 140, 109, 124, 132, 126, 112, 136, 158, 118, 96, 109, 145, 156, 116, 132, 125, 126, 111, 127, 136, 114, 129, 118, 133, 119, 147, 127, 121, 138, 116, 122, 126, 108, 101, 131, 114, 114, 120, 121, 156, 119, 108, 113, 132, 132, 122, 118, 126, 126, 121, 134, 148, 125, 118, 133, 132, 146, 140, 140, 141, 139, 130, 121, 120, 91, 116, 143, 110, 124, 154, 142, 132, 142, 138, 130, 136, 135, 121, 135, 123, 127, 102, 136, 143, 128, 127, 143, 123, 132, 142, 135, 140, 125, 115, 127, 126, 100, 117, 151, 122, 135, 139, 147, 130, 137, 136, 138, 139, 142, 125, 121, 119, 136, 119, 136, 152, 141, 126, 133, 121, 140, 142, 133, 133, 127, 115, 123, 108, 119, 116, 150, 112, 127, 125, 136, 113, 134, 132, 139, 120, 136, 117, 128, 119, 126, 144, 126, 147, 120, 118, 118, 113, 129, 131, 132, 119, 134, 117, 111, 113, 122, 121, 137, 128, 119, 114, 124, 115, 135, 119, 118, 151, 139, 114, 124, 139, 95, 144, 123, 139, 137, 140, 118, 119, 107, 130, 126, 121, 155, 135, 121, 114, 124, 110, 150, 129, 140, 111, 121, 124, 133, 138, 133, 140, 138, 144, 124, 119, 118, 148, 119, 149, 138, 127, 119, 110, 122, 119, 131, 130, 129, 129, 127, 114, 124, 118, 138, 126, 129, 128, 122, 119, 131, 119, 130, 125, 134, 126, 120, 119, 107, 142, 121, 125, 146, 133, 130, 111, 118, 108, 118, 134, 129, 125, 124, 123, 123, 123, 112, 132, 134, 125, 125, 128, 145, 135, 137, 137, 127, 129, 105, 131, 127, 156, 112, 124, 120, 126, 123, 120, 122, 115, 115, 121, 132, 142, 133, 138, 119, 107, 113, 127, 139, 110, 136, 127, 135, 120, 135, 129, 124, 123, 105, 152, 108, 161, 119, 124, 107, 144, 130, 121, 134, 112, 130, 136, 126, 134, 118, 132, 107, 134, 96, 136, 120, 94, 125, 130, 135, 113, 134, 138, 123, 121, 124, 134, 144, 137, 130, 132, 109, 130, 134, 131, 130, 107, 137, 122, 118, 129, 129, 126, 148, 129, 112, 135, 132, 65, 98, 147, 145, 103, 114, 111, 127, 115, 114, 139, 127, 120, 133, 107, 118, 142, 136, 133, 122, 84, 130, 132, 120, 129, 128, 137, 149, 142, 120, 151, 105, 29, 63, 133, 142, 102, 105, 136, 121, 95, 140, 125, 142, 94, 118, 103, 135, 119, 125, 133, 129, 64, 131, 142, 106, 118, 141, 135, 149, 140, 129, 147, 114, 23, 54, 121, 134, 116, 99, 112, 100, 113, 122, 111, 152, 93, 96, 90, 124, 125, 125, 162, 128, 112, 179, 144, 100, 127, 120, 128, 88, 127, 138, 141, 122, 73, 73, 161, 92, 129, 113, 157, 130, 123, 100, 91, 127, 94, 126, 81, 141, 98, 174, 179, 128, 114, 192, 164, 97, 154, 102, 120, 78, 164, 138, 154, 143, 152, 98, 190, 70, 164, 114, 157, 126, 152, 119, 119, 115, 80, 131, 101, 184, 116, 156, 137, 130, 127, 151, 154, 119, 138, 122, 107, 100, 156, 118, 156, 117, 141, 111, 153, 102, 157, 122, 150, 117, 148, 96, 116, 124, 117, 131, 126, 149, 158, 128, 149, 140, 118, 126, 113, 106, 137, 136, 132, 152, 157, 135, 129, 144, 127, 152, 128, 101, 136, 119, 135, 123, 119, 110, 131, 134, 118, 128, 129, 105, 114, 131, 107, 122, 147, 126, 123, 147, 140, 127, 147, 122, 128, 137, 117, 118, 120, 121, 135, 145, 113, 125, 124, 128, 133, 125, 148, 136, 129, 129, 129, 141, 103, 143, 131, 105, 151, 164, 152, 99, 144, 164, 130, 152, 158, 133, 130, 96, 128, 145, 116, 151, 167, 98, 102, 152, 147, 116, 154, 132, 104, 142, 138, 186, 132, 141, 126, 96, 108, 134, 110, 164, 135, 119, 117, 136, 125, 121, 139, 122, 114, 117, 157, 137, 120, 125, 159, 146, 122, 103, 99, 111, 140, 110, 104, 144, 156, 77, 109, 121, 111, 135, 98, 115, 136, 113, 116, 109, 121, 131, 117, 164, 72, 126, 128, 113, 99, 126, 137, 131, 135, 137, 104, 126, 161, 83, 134, 104, 113, 116, 111, 128, 92, 142, 128, 114, 152, 125, 133, 138, 132, 147, 146, 113, 60, 117, 133, 115, 75, 114, 123, 132, 131, 123, 108, 114, 125, 93, 126, 96, 133, 102, 112, 117, 37, 156, 163, 122, 140, 116, 117, 122, 134, 127, 131, 119, 86, 111, 135, 142, 95, 131, 148, 147, 129, 132, 125, 113, 132, 111, 125, 120, 136, 91, 121, 130, 55, 131, 141, 105, 141, 132, 127, 135, 126, 129, 149, 130, 85, 122, 145, 144, 85, 114, 141, 142, 116, 128, 138, 120, 129, 113, 135, 122, 142, 91, 127, 128, 95, 129, 140, 120, 124, 143, 115, 134, 116, 129, 149, 128, 113, 143, 138, 127, 90, 121, 132, 129, 122, 134, 129, 114, 132, 129, 141, 125, 140, 107, 141, 133, 117, 132, 131, 124, 130, 124, 125, 135, 119, 131, 150, 123, 118, 139, 154, 131, 90, 109, 141, 137, 106, 120, 136, 110, 124, 129, 151, 121, 127, 117, 130, 147, 117, 126, 134, 118, 137, 117, 125, 139, 109, 111, 144, 131, 113, 131, 141, 123, 107, 112, 131, 132, 128, 137, 125, 114, 124, 132, 143, 121, 125, 126, 132, 120, 134, 122, 123, 126, 114, 109, 113, 133, 110, 119, 141, 115, 126, 121, 133, 136, 127, 118, 135, 148, 115, 121, 123, 114, 135, 137, 140, 117, 142, 144, 125, 128, 152, 132, 130, 133, 124, 125, 113, 106, 114, 133, 124, 121, 136, 135, 153, 139, 132, 121, 141, 143, 124, 131, 123, 129, 122, 154, 147, 115, 114, 154, 130, 130, 151, 146, 133, 130, 122, 118, 114, 104, 120, 149, 128, 134, 155, 152, 143, 131, 155, 127, 141, 123, 127, 129, 118, 130, 111, 136, 138, 121, 115, 151, 134, 134, 135, 141, 125, 132, 133, 117, 118, 120, 108, 148, 129, 115, 147, 150, 125, 148, 134, 121, 128, 138, 126, 122, 130, 125, 119, 113, 136, 135, 118, 127, 120, 125, 124, 143, 129, 133, 119, 121, 126, 117, 119, 141, 114, 128, 122, 120, 116, 132, 139, 123, 138, 133, 123, 123, 132, 120, 138, 121, 143, 135, 118, 129, 127, 122, 118, 126, 129, 146, 124, 120, 109, 125, 115, 150, 126, 112, 121, 132, 132, 133, 121, 125, 145, 154, 126, 126, 128, 124, 152, 126, 128, 131, 139, 118, 115, 117, 110, 127, 128, 158, 123, 105, 128, 136, 115, 130, 123, 142, 117, 128, 129, 134, 134, 133, 144, 146, 129, 116, 141, 116, 157, 115, 129, 136, 135, 120, 119, 116, 120, 130, 113, 136, 126, 125, 132, 126, 119, 115, 117, 135, 122, 127, 116, 126, 129, 136, 135, 122, 128, 126, 130, 126, 141, 123, 121, 128, 130, 120, 110, 102, 135, 142, 121, 125, 133, 115, 130, 124, 137, 107, 126, 128, 106, 119, 116, 138, 111, 128, 136, 132, 120, 116, 133, 131, 142, 123, 108, 119, 125, 119, 116, 116, 129, 125, 124, 140, 128, 124, 131, 130, 129, 111, 120, 119, 86, 111, 112, 145, 115, 134, 122, 130, 134, 125, 142, 134, 147, 123, 114, 125, 124, 133, 126, 144, 137, 139, 133, 134, 130, 124, 146, 130, 143, 110, 129, 122, 80, 128, 127, 128, 107, 127, 117, 112, 124, 121, 136, 129, 143, 141, 106, 105, 124, 138, 108, 134, 131, 126, 132, 145, 130, 122, 133, 139, 127, 120, 123, 118, 70, 134, 139, 118, 107, 131, 115, 132, 127, 128, 129, 123, 138, 133, 118, 121, 136, 137, 122, 124, 114, 136, 127, 127, 133, 136, 138, 141, 126, 134, 130, 130, 68, 85, 131, 146, 104, 124, 122, 125, 126, 144, 128, 164, 114, 123, 121, 124, 116, 135, 148, 151, 67, 131, 144, 88, 121, 117, 132, 142, 127, 117, 128, 128, 67, 71, 146, 119, 131, 104, 115, 88, 134, 151, 117, 138, 70, 112, 111, 132, 77, 159, 169, 142, 98, 136, 134, 72, 133, 115, 101, 73, 116, 134, 149, 104, 100, 81, 170, 88, 117, 106, 160, 142, 139, 110, 93, 102, 72, 108, 70, 152, 100, 169, 146, 108, 136, 184, 148, 114, 157, 105, 131, 81, 165, 163, 188, 158, 180, 91, 187, 82, 129, 95, 196, 137, 130, 94, 120, 106, 123, 121, 115, 153, 115, 140, 160, 113, 115, 160, 162, 114, 158, 133, 143, 120, 161, 111, 150, 136, 166, 116, 171, 131, 147, 136, 164, 123, 158, 99, 114, 118, 138, 131, 118, 158, 159, 131, 116, 122, 126, 131, 112, 150, 143, 155, 157, 157, 142, 132, 135, 143, 141, 117, 129, 116, 137, 151, 121, 128, 129, 118, 124, 115, 132, 128, 139, 117, 130, 145, 125, 125, 136, 130, 139, 126, 134, 140, 158, 119, 135, 132, 118, 105, 118, 138, 125, 159, 109, 111, 110, 138, 121, 148, 126, 140, 124, 145, 123, 147, 100, 146, 134, 112, 137, 148, 158, 101, 142, 119, 168, 117, 167, 147, 136, 97, 109, 141, 116, 155, 119, 100, 103, 134, 154, 150, 126, 153, 95, 160, 130, 182, 94, 141, 180, 89, 130, 138, 153, 108, 120, 96, 119, 145, 126, 125, 114, 100, 109, 126, 128, 131, 121, 96, 138, 116, 120, 122, 119, 120, 129, 137, 94, 132, 130, 104, 135, 133, 143, 129, 126, 99, 154, 108, 132, 124, 128, 139, 109, 135, 97, 92, 117, 105, 70, 116, 126, 121, 149, 115, 118, 134, 112, 107, 100, 111, 126, 119, 132, 134, 123, 123, 134, 107, 151, 115, 126, 133, 122, 122, 137, 122, 121, 102, 136, 112, 102, 123, 137, 122, 136, 126, 113, 110, 119, 96, 80, 98, 128, 110, 132, 126, 110, 147, 135, 105, 148, 137, 117, 147, 119, 130, 141, 126, 130, 107, 134, 127, 87, 124, 141, 130, 121, 114, 97, 113, 111, 68, 99, 119, 122, 128, 133, 121, 53, 140, 128, 135, 121, 134, 122, 135, 114, 136, 125, 125, 129, 122, 124, 133, 101, 130, 142, 144, 120, 122, 133, 90, 149, 66, 119, 118, 131, 113, 139, 129, 51, 123, 116, 125, 126, 145, 124, 132, 126, 125, 138, 141, 122, 124, 133, 140, 97, 130, 121, 139, 131, 128, 117, 95, 138, 88, 125, 136, 123, 131, 148, 135, 80, 131, 123, 123, 132, 128, 121, 132, 109, 136, 147, 114, 126, 130, 140, 129, 124, 128, 128, 135, 130, 139, 119, 78, 118, 128, 138, 131, 122, 130, 133, 144, 95, 115, 129, 113, 130, 104, 133, 124, 130, 127, 151, 119, 136, 122, 133, 120, 135, 120, 126, 139, 130, 127, 130, 82, 133, 144, 141, 120, 130, 160, 143, 135, 116, 122, 115, 133, 128, 97, 117, 126, 120, 122, 151, 119, 128, 126, 144, 133, 134, 135, 154, 151, 132, 127, 133, 102, 119, 147, 146, 121, 129, 140, 130, 138, 126, 138, 132, 149, 132, 107, 121, 103, 118, 147, 137, 144, 137, 133, 132, 118, 151, 122, 142, 124, 116, 135, 115, 121, 129, 153, 159, 115, 118, 154, 133, 116, 126, 137, 136, 142, 120, 123, 117, 82, 120, 146, 131, 118, 144, 135, 136, 135, 129, 116, 125, 132, 116, 118, 126, 117, 117, 134, 151, 124, 125, 144, 139, 123, 132, 147, 142, 134, 118, 114, 106, 138, 117, 149, 129, 118, 146, 152, 132, 150, 132, 127, 134, 138, 105, 119, 111, 130, 136, 123, 136, 136, 120, 126, 120, 124, 124, 121, 122, 137, 119, 121, 94, 128, 120, 134, 134, 132, 120, 132, 140, 135, 133, 119, 151, 143, 119, 113, 131, 112, 159, 124, 136, 131, 129, 138, 128, 116, 126, 133, 119, 129, 117, 121, 117, 124, 120, 127, 130, 146, 137, 120, 136, 128, 137, 126, 146, 148, 130, 118, 124, 110, 137, 118, 133, 134, 135, 115, 120, 105, 125, 133, 131, 151, 131, 109, 114, 121, 117, 118, 142, 147, 123, 120, 136, 130, 135, 129, 143, 135, 130, 115, 124, 115, 143, 114, 116, 128, 116, 127, 118, 114, 132, 128, 136, 125, 137, 117, 126, 136, 135, 119, 143, 124, 114, 121, 126, 132, 123, 119, 131, 131, 123, 114, 138, 136, 134, 128, 125, 122, 122, 114, 130, 129, 132, 130, 143, 126, 123, 124, 132, 138, 123, 110, 131, 117, 115, 121, 124, 141, 127, 119, 121, 138, 110, 120, 135, 152, 130, 135, 118, 130, 122, 119, 123, 126, 122, 120, 134, 112, 122, 130, 127, 133, 129, 115, 133, 121, 115, 109, 124, 134, 117, 122, 122, 134, 110, 116, 137, 135, 153, 131, 109, 117, 122, 121, 129, 119, 147, 137, 139, 124, 134, 124, 135, 152, 126, 120, 133, 131, 123, 129, 138, 139, 130, 129, 132, 128, 124, 122, 132, 125, 142, 120, 100, 143, 136, 111, 133, 130, 141, 145, 133, 134, 121, 125, 118, 144, 131, 122, 123, 119, 127, 148, 115, 140, 119, 108, 136, 143, 137, 122, 135, 138, 123, 133, 113, 140, 124, 120, 158, 129, 97, 138, 136, 135, 133, 121, 119, 121, 138, 122, 120, 131, 135, 102, 140, 132, 125, 85, 114, 123, 121, 159, 129, 141, 113, 146, 130, 141, 105, 142, 168, 128, 87, 136, 150, 109, 139, 106, 130, 136, 136, 128, 108, 103, 130, 54, 150, 136, 125, 94, 134, 118, 125, 128, 118, 137, 86, 124, 124, 132, 72, 160, 189, 160, 91, 146, 165, 62, 144, 98, 88, 80, 141, 133, 194, 115, 171, 57, 238, 104, 135, 71, 196, 148, 142, 86, 102, 93, 67, 97, 68, 138, 77, 159, 143, 96, 125, 209, 159, 111, 142, 90, 132, 48, 170, 142, 165, 127, 195, 77, 153, 77, 155, 112, 194, 124, 102, 75, 96, 107, 82, 105, 86, 164, 140, 152, 171, 120, 130, 154, 153, 117, 159, 134, 129, 116, 149, 119, 145, 151, 157, 111, 156, 83, 145, 122, 132, 99, 143, 120, 118, 127, 109, 125, 109, 153, 128, 116, 136, 136, 120, 126, 122, 125, 127, 129, 129, 119, 134, 117, 121, 115, 112, 115, 122, 136, 135, 119, 110, 127, 118, 123, 134, 123, 128, 118, 121, 127, 137, 163, 120, 97, 143, 125, 138, 138, 153, 146, 156, 127, 139, 156, 107, 131, 124, 136, 117, 158, 127, 147, 117, 123, 124, 139, 145, 150, 145, 163, 130, 163, 119, 152, 122, 117, 126, 149, 170, 121, 127, 142, 114, 127, 130, 155, 140, 125, 96, 126, 136, 140, 128, 99, 123, 143, 116, 118, 109, 131, 109, 126, 132, 187, 101, 146, 169, 86, 130, 141, 147, 109, 119, 124, 149, 139, 125, 116, 114, 107, 139, 129, 120, 115, 118, 96, 125, 109, 132, 124, 140, 152, 117, 171, 101, 138, 116, 102, 138, 114, 153, 123, 138, 106, 151, 127, 125, 129, 133, 112, 95, 114, 122, 121, 131, 109, 108, 110, 125, 129, 138, 139, 130, 121, 118, 124, 88, 120, 137, 107, 135, 119, 134, 134, 133, 109, 114, 127, 123, 140, 120, 116, 141, 132, 141, 128, 140, 100, 96, 113, 109, 110, 142, 126, 120, 132, 118, 113, 92, 130, 123, 124, 131, 126, 158, 136, 120, 117, 132, 114, 117, 131, 112, 109, 134, 129, 142, 125, 134, 112, 90, 116, 130, 132, 118, 124, 118, 130, 126, 85, 87, 133, 117, 104, 124, 130, 119, 130, 125, 125, 125, 122, 132, 123, 97, 132, 125, 120, 124, 114, 135, 134, 123, 135, 145, 137, 118, 109, 123, 122, 139, 57, 84, 111, 135, 129, 120, 128, 82, 128, 119, 116, 129, 129, 124, 112, 120, 145, 126, 128, 120, 117, 131, 127, 140, 127, 141, 147, 130, 124, 137, 109, 122, 40, 90, 118, 135, 123, 130, 140, 66, 125, 119, 128, 119, 137, 122, 121, 112, 130, 136, 143, 131, 127, 135, 119, 141, 116, 130, 127, 133, 128, 125, 81, 129, 24, 107, 118, 129, 148, 135, 142, 63, 118, 130, 120, 115, 118, 134, 137, 122, 138, 150, 127, 132, 142, 131, 136, 134, 127, 136, 143, 123, 134, 122, 65, 124, 41, 115, 124, 128, 147, 133, 155, 74, 128, 126, 119, 126, 113, 128, 115, 126, 138, 143, 140, 124, 137, 132, 117, 136, 121, 148, 138, 118, 126, 131, 49, 120, 73, 139, 123, 126, 143, 133, 127, 110, 130, 128, 130, 123, 109, 130, 103, 112, 144, 134, 137, 128, 131, 130, 124, 134, 128, 127, 110, 134, 129, 121, 69, 117, 84, 139, 115, 130, 138, 112, 108, 114, 147, 134, 141, 132, 131, 105, 98, 104, 159, 145, 131, 149, 142, 138, 143, 136, 128, 144, 139, 127, 118, 125, 90, 131, 103, 136, 126, 110, 145, 116, 130, 117, 152, 144, 124, 122, 129, 106, 140, 118, 137, 130, 119, 135, 132, 135, 133, 130, 127, 139, 132, 115, 117, 112, 99, 130, 111, 134, 135, 139, 126, 124, 122, 127, 125, 139, 138, 113, 121, 119, 131, 117, 119, 126, 132, 119, 127, 124, 120, 135, 119, 135, 141, 119, 113, 109, 104, 138, 106, 129, 127, 145, 121, 125, 121, 134, 132, 126, 140, 146, 125, 118, 121, 116, 124, 129, 130, 128, 122, 144, 120, 116, 126, 144, 142, 129, 120, 128, 124, 141, 121, 117, 120, 123, 126, 118, 109, 125, 124, 131, 136, 127, 126, 131, 133, 133, 123, 131, 128, 121, 113, 125, 122, 117, 127, 130, 127, 124, 127, 139, 126, 137, 130, 127, 117, 127, 123, 120, 110, 124, 122, 127, 140, 134, 133, 135, 138, 136, 114, 128, 121, 119, 123, 146, 123, 122, 125, 144, 139, 117, 123, 139, 122, 143, 131, 118, 119, 112, 125, 141, 126, 131, 136, 130, 117, 133, 110, 137, 123, 136, 116, 129, 109, 140, 123, 127, 131, 116, 131, 128, 127, 117, 139, 136, 126, 124, 140, 116, 131, 121, 123, 124, 119, 134, 123, 129, 129, 130, 130, 123, 139, 130, 119, 120, 112, 127, 128, 120, 120, 120, 126, 134, 125, 107, 129, 144, 141, 146, 128, 108, 127, 129, 118, 132, 141, 137, 141, 131, 125, 116, 129, 134, 132, 128, 124, 137, 135, 134, 137, 137, 138, 126, 128, 129, 162, 123, 126, 125, 125, 121, 138, 132, 128, 124, 112, 126, 133, 139, 127, 135, 115, 132, 126, 128, 140, 125, 112, 143, 117, 125, 147, 124, 146, 129, 110, 117, 134, 139, 136, 135, 122, 115, 128, 120, 132, 128, 121, 128, 131, 99, 133, 120, 131, 115, 119, 118, 128, 114, 119, 106, 126, 137, 107, 131, 134, 115, 86, 126, 121, 113, 137, 131, 133, 94, 131, 138, 137, 118, 118, 125, 123, 65, 135, 127, 121, 116, 130, 146, 135, 109, 119, 126, 140, 143, 76, 124, 83, 134, 91, 125, 98, 121, 127, 121, 101, 69, 108, 127, 145, 105, 151, 146, 141, 74, 162, 158, 94, 135, 135, 118, 118, 161, 109, 193, 107, 154, 64, 176, 53, 130, 136, 171, 157, 133, 71, 71, 56, 77, 80, 82, 152, 90, 155, 97, 95, 109, 173, 158, 114, 129, 111, 138, 86, 153, 151, 122, 126, 173, 96, 138, 62, 165, 118, 150, 124, 119, 85, 116, 121, 94, 122, 85, 175, 150, 166, 156, 111, 119, 137, 148, 113, 176, 124, 122, 126, 162, 138, 160, 147, 157, 132, 143, 90, 147, 136, 100, 102, 150, 112, 118, 112, 100, 122, 116, 146, 140, 140, 127, 122, 119, 149, 110, 154, 118, 151, 159, 163, 144, 115, 118, 151, 127, 136, 115, 124, 129, 148, 140, 141, 139, 132, 123, 111, 131, 141, 113, 154, 123, 139, 116, 107, 161, 123, 139, 135, 152, 137, 156, 149, 132, 141, 122, 129, 126, 145, 110, 153, 142, 155, 117, 120, 129, 125, 130, 157, 132, 142, 134, 152, 136, 126, 106, 116, 123, 159, 155, 146, 133, 147, 125, 158, 100, 151, 115, 141, 82, 113, 127, 163, 110, 119, 98, 130, 90, 135, 132, 139, 118, 134, 120, 175, 101, 133, 128, 88, 141, 159, 156, 114, 125, 102, 138, 125, 122, 132, 117, 92, 121, 99, 122, 148, 138, 103, 125, 134, 132, 112, 153, 176, 120, 190, 107, 158, 113, 96, 115, 115, 158, 128, 141, 101, 121, 107, 129, 149, 126, 115, 111, 109, 128, 117, 128, 112, 120, 123, 135, 128, 126, 138, 146, 131, 101, 122, 97, 114, 119, 117, 138, 113, 151, 144, 139, 118, 134, 123, 129, 111, 142, 131, 137, 135, 135, 129, 142, 116, 117, 114, 133, 125, 129, 120, 132, 134, 106, 116, 112, 144, 135, 119, 138, 128, 167, 123, 133, 112, 126, 120, 109, 127, 123, 123, 125, 129, 135, 137, 136, 108, 129, 120, 136, 134, 133, 132, 131, 135, 113, 141, 109, 145, 126, 124, 136, 126, 149, 123, 132, 106, 128, 125, 97, 129, 117, 120, 142, 123, 129, 116, 148, 116, 125, 116, 136, 134, 121, 141, 121, 135, 127, 124, 84, 129, 120, 132, 122, 141, 129, 131, 130, 111, 132, 128, 111, 130, 113, 103, 137, 132, 116, 119, 135, 130, 123, 113, 130, 120, 133, 141, 122, 141, 110, 86, 79, 119, 132, 134, 128, 139, 120, 114, 126, 107, 136, 144, 95, 130, 115, 125, 132, 131, 127, 138, 135, 133, 132, 120, 127, 142, 122, 118, 111, 141, 120, 40, 77, 111, 118, 152, 131, 144, 106, 129, 127, 104, 134, 124, 107, 125, 106, 119, 138, 119, 122, 137, 117, 122, 135, 132, 124, 135, 126, 118, 117, 133, 123, 27, 88, 103, 129, 137, 122, 161, 98, 124, 111, 116, 126, 114, 99, 118, 100, 123, 122, 126, 120, 128, 132, 123, 141, 129, 124, 133, 127, 112, 120, 115, 121, 29, 87, 105, 124, 151, 134, 120, 83, 123, 130, 108, 121, 121, 84, 91, 112, 109, 130, 130, 148, 130, 133, 127, 111, 114, 137, 135, 101, 107, 123, 105, 114, 55, 91, 115, 126, 128, 107, 103, 109, 128, 145, 127, 119, 118, 101, 115, 115, 126, 124, 124, 142, 130, 134, 130, 152, 133, 132, 134, 114, 96, 131, 120, 116, 85, 105, 141, 130, 133, 118, 118, 121, 128, 140, 114, 126, 127, 100, 125, 111, 129, 128, 125, 133, 139, 132, 124, 123, 134, 143, 130, 108, 112, 120, 114, 129, 110, 113, 128, 113, 124, 108, 125, 124, 132, 118, 110, 119, 114, 128, 129, 127, 115, 135, 117, 132, 122, 128, 120, 127, 113, 129, 123, 133, 125, 120, 116, 136, 131, 120, 140, 118, 127, 119, 119, 124, 127, 133, 116, 145, 114, 125, 135, 127, 123, 135, 134, 123, 123, 139, 125, 128, 119, 148, 132, 120, 120, 140, 124, 131, 136, 118, 138, 112, 126, 131, 133, 135, 128, 133, 126, 123, 116, 136, 131, 137, 110, 138, 115, 122, 129, 129, 125, 135, 121, 132, 123, 135, 130, 136, 129, 122, 130, 123, 132, 111, 124, 129, 115, 134, 132, 129, 111, 129, 129, 132, 151, 131, 125, 134, 107, 122, 126, 139, 130, 130, 138, 134, 131, 135, 134, 136, 119, 121, 132, 115, 138, 110, 133, 132, 129, 134, 122, 126, 124, 136, 116, 133, 136, 115, 117, 129, 128, 123, 124, 135, 123, 114, 118, 129, 136, 122, 140, 133, 126, 123, 133, 111, 128, 126, 141, 119, 116, 132, 133, 118, 125, 129, 130, 130, 132, 130, 117, 122, 128, 138, 129, 116, 125, 123, 138, 137, 132, 127, 128, 132, 121, 107, 130, 129, 129, 109, 125, 123, 115, 138, 136, 126, 123, 139, 114, 141, 142, 133, 110, 134, 101, 136, 127, 131, 143, 119, 118, 144, 134, 126, 120, 121, 144, 119, 136, 135, 135, 115, 118, 133, 129, 128, 130, 121, 101, 144, 122, 146, 117, 136, 125, 115, 114, 131, 121, 119, 123, 136, 85, 138, 127, 114, 127, 133, 135, 86, 142, 126, 136, 104, 110, 133, 136, 87, 126, 126, 113, 134, 113, 141, 128, 140, 128, 115, 129, 127, 74, 133, 114, 118, 68, 151, 147, 115, 114, 136, 116, 48, 116, 128, 123, 110, 125, 156, 115, 71, 132, 136, 120, 143, 120, 132, 131, 146, 111, 129, 131, 151, 59, 158, 69, 128, 56, 140, 136, 123, 122, 127, 102, 51, 127, 113, 130, 79, 133, 152, 132, 90, 153, 158, 98, 169, 127, 139, 97, 151, 111, 180, 106, 158, 95, 153, 55, 124, 126, 178, 154, 147, 79, 91, 80, 83, 79, 57, 159, 127, 135, 97, 85, 112, 156, 173, 151, 137, 120, 148, 130, 159, 144, 129, 120, 152, 130, 115, 108, 158, 122, 172, 140, 115, 93, 102, 113, 127, 107, 116, 173, 133, 155, 143, 98, 121, 151, 138, 131, 152, 135, 114, 113, 138, 132, 140, 137, 142, 138, 155, 128, 129, 114, 169, 145, 147, 117, 116, 115, 127, 126, 124, 143, 127, 141, 127, 133, 135, 147, 122, 118, 138, 139, 116, 125, 143, 132, 132, 120, 142, 126, 132, 145, 127, 136, 131, 118, 130, 122, 120, 144, 130, 120, 137, 138, 153, 133, 134, 150, 111, 115, 126, 131, 136, 160, 146, 143, 155, 103, 143, 161, 142, 103, 137, 117, 142, 132, 102, 84, 151, 136, 126, 152, 150, 139, 107, 129, 148, 118, 114, 98, 153, 125, 138, 147, 139, 147, 179, 135, 133, 141, 135, 141, 87, 128, 121, 159, 126, 116, 88, 126, 118, 127, 118, 153, 127, 115, 144, 133, 106, 94, 131, 78, 132, 158, 144, 132, 151, 93, 142, 135, 134, 154, 117, 82, 117, 91, 123, 148, 146, 100, 121, 131, 120, 121, 163, 159, 150, 152, 127, 154, 98, 105, 144, 106, 128, 122, 125, 139, 117, 118, 132, 157, 156, 124, 131, 107, 149, 120, 125, 132, 128, 138, 144, 145, 125, 120, 159, 145, 127, 136, 122, 132, 133, 111, 143, 117, 133, 136, 134, 130, 142, 131, 115, 118, 150, 129, 125, 125, 132, 135, 123, 114, 107, 110, 133, 138, 140, 148, 149, 122, 125, 145, 139, 137, 123, 117, 122, 122, 149, 132, 131, 106, 123, 124, 128, 141, 148, 124, 125, 124, 139, 127, 146, 115, 126, 117, 125, 115, 137, 142, 132, 138, 104, 150, 118, 126, 121, 126, 141, 143, 141, 124, 125, 105, 119, 128, 100, 146, 127, 129, 139, 124, 144, 124, 146, 137, 146, 102, 127, 127, 133, 136, 128, 144, 124, 141, 101, 129, 127, 117, 130, 141, 146, 119, 123, 86, 131, 123, 110, 113, 122, 110, 127, 116, 136, 134, 129, 111, 134, 96, 118, 128, 134, 141, 121, 128, 113, 156, 93, 112, 112, 150, 141, 132, 148, 139, 130, 109, 130, 141, 100, 131, 114, 116, 135, 132, 151, 127, 135, 123, 136, 118, 122, 112, 133, 132, 127, 153, 86, 146, 91, 118, 104, 146, 134, 168, 132, 131, 132, 109, 125, 113, 95, 109, 121, 92, 145, 125, 135, 121, 143, 129, 146, 115, 109, 136, 139, 126, 130, 137, 104, 135, 85, 108, 105, 155, 138, 141, 129, 121, 127, 98, 121, 133, 87, 110, 129, 96, 155, 110, 123, 133, 135, 133, 121, 108, 144, 139, 137, 110, 117, 135, 104, 118, 81, 117, 134, 142, 130, 107, 108, 111, 124, 90, 141, 118, 113, 126, 127, 80, 142, 119, 129, 137, 154, 127, 137, 129, 130, 124, 135, 103, 134, 139, 107, 114, 81, 106, 117, 155, 124, 108, 112, 119, 127, 90, 134, 127, 114, 116, 147, 112, 126, 107, 139, 139, 129, 120, 144, 135, 136, 118, 118, 117, 136, 141, 117, 119, 98, 132, 136, 131, 118, 122, 120, 123, 126, 100, 132, 122, 121, 123, 124, 111, 140, 120, 139, 131, 140, 127, 126, 130, 141, 132, 121, 107, 121, 142, 135, 119, 112, 120, 113, 140, 137, 133, 126, 135, 139, 105, 124, 109, 131, 114, 136, 127, 130, 114, 138, 129, 146, 128, 133, 122, 146, 138, 124, 120, 134, 130, 124, 113, 114, 116, 112, 127, 139, 130, 132, 135, 135, 106, 126, 116, 117, 127, 131, 128, 137, 111, 134, 126, 120, 140, 133, 121, 139, 138, 116, 134, 128, 125, 112, 120, 131, 119, 118, 143, 133, 147, 135, 134, 133, 128, 139, 114, 141, 126, 138, 118, 130, 114, 140, 115, 144, 134, 127, 117, 136, 132, 123, 136, 130, 120, 112, 128, 123, 133, 126, 121, 144, 129, 127, 135, 128, 116, 125, 124, 131, 120, 122, 120, 128, 113, 132, 118, 143, 138, 116, 116, 134, 139, 133, 145, 146, 132, 102, 136, 137, 134, 118, 111, 132, 116, 121, 136, 126, 121, 135, 118, 137, 122, 145, 129, 141, 116, 124, 127, 129, 137, 138, 125, 140, 132, 125, 133, 125, 121, 104, 124, 136, 133, 106, 133, 135, 121, 136, 126, 137, 124, 136, 130, 143, 128, 143, 108, 125, 116, 129, 127, 138, 129, 131, 112, 131, 127, 122, 130, 126, 124, 108, 133, 128, 140, 103, 119, 137, 121, 119, 127, 133, 125, 139, 118, 126, 112, 137, 121, 138, 106, 129, 122, 139, 134, 124, 102, 128, 135, 118, 140, 139, 127, 96, 129, 122, 145, 95, 120, 146, 139, 134, 132, 125, 104, 121, 134, 136, 114, 121, 110, 133, 121, 141, 131, 138, 116, 127, 106, 141, 122, 117, 135, 119, 131, 74, 135, 132, 141, 103, 136, 165, 114, 107, 144, 130, 126, 126, 99, 139, 117, 141, 122, 129, 124, 143, 88, 140, 96, 135, 96, 137, 134, 140, 129, 135, 145, 64, 136, 135, 128, 136, 120, 160, 121, 76, 119, 135, 129, 138, 139, 138, 114, 135, 109, 130, 129, 177, 60, 152, 46, 120, 76, 143, 129, 133, 108, 137, 122, 84, 136, 108, 136, 113, 148, 149, 127, 124, 135, 178, 106, 143, 138, 120, 78, 152, 124, 161, 112, 172, 109, 150, 83, 139, 144, 137, 125, 119, 64, 127, 105, 115, 105, 89, 156, 125, 168, 126, 104, 121, 179, 174, 103, 129, 97, 123, 105, 155, 151, 120, 128, 167, 136, 125, 101, 157, 122, 180, 141, 121, 92, 100, 134, 122, 117, 125, 169, 114, 122, 146, 103, 142, 125, 138, 123, 140, 140, 133, 138, 143, 142, 129, 133, 133, 139, 144, 150, 140, 142, 139, 130, 144, 112, 116, 121, 127, 139, 129, 146, 124, 122, 128, 118, 115, 126, 138, 137, 129, 114, 135, 137, 137, 121, 136, 125, 112, 133, 123, 129, 121, 124, 125, 126, 118, 136, 138, 130, 123, 122, 138, 126, 154, 114, 127, 129, 151, 98, 122, 138, 128, 139, 140, 137, 140, 136, 143, 154, 122, 134, 139, 110, 136, 91, 108, 107, 145, 135, 129, 129, 126, 138, 144, 114, 139, 119, 130, 128, 125, 127, 147, 148, 133, 121, 168, 129, 129, 155, 155, 133, 102, 140, 143, 136, 121, 105, 98, 116, 137, 127, 133, 125, 129, 119, 154, 114, 116, 110, 157, 88, 108, 140, 172, 151, 171, 89, 168, 117, 157, 147, 128, 80, 119, 90, 148, 153, 172, 108, 125, 153, 128, 120, 145, 146, 125, 144, 138, 178, 81, 119, 154, 99, 133, 143, 143, 142, 149, 115, 142, 132, 157, 152, 147, 80, 133, 110, 142, 132, 139, 102, 149, 140, 149, 131, 129, 136, 131, 139, 139, 125, 132, 114, 129, 130, 131, 115, 137, 140, 131, 117, 156, 141, 153, 113, 133, 131, 135, 112, 131, 127, 117, 81, 125, 120, 161, 132, 137, 139, 111, 148, 139, 122, 120, 127, 151, 120, 131, 125, 131, 120, 141, 123, 132, 122, 149, 124, 136, 124, 148, 109, 124, 122, 129, 95, 127, 111, 133, 141, 131, 144, 80, 138, 140, 125, 117, 140, 150, 134, 135, 138, 135, 116, 135, 114, 110, 121, 155, 131, 130, 128, 139, 121, 139, 129, 146, 82, 125, 120, 144, 137, 116, 130, 80, 132, 142, 131, 121, 133, 136, 133, 145, 122, 136, 127, 132, 128, 127, 122, 146, 130, 132, 117, 149, 138, 129, 130, 132, 124, 124, 103, 129, 129, 134, 142, 90, 146, 140, 133, 122, 141, 145, 134, 129, 131, 136, 106, 123, 131, 113, 129, 146, 122, 132, 121, 135, 118, 140, 119, 135, 92, 117, 106, 124, 129, 131, 133, 95, 149, 123, 142, 125, 145, 137, 144, 135, 114, 122, 105, 133, 131, 110, 112, 132, 115, 146, 107, 144, 132, 145, 129, 124, 100, 119, 108, 126, 136, 132, 134, 94, 150, 134, 127, 119, 150, 140, 138, 130, 120, 139, 106, 133, 134, 120, 137, 149, 115, 141, 109, 137, 135, 140, 113, 123, 121, 125, 124, 115, 126, 126, 146, 114, 141, 116, 130, 135, 155, 153, 137, 124, 122, 115, 102, 129, 136, 115, 135, 137, 104, 126, 131, 127, 122, 149, 131, 119, 132, 112, 117, 116, 126, 127, 133, 107, 137, 118, 122, 136, 129, 147, 122, 118, 118, 121, 127, 126, 137, 136, 131, 137, 119, 137, 124, 130, 133, 136, 132, 127, 117, 116, 127, 116, 113, 131, 121, 116, 118, 123, 126, 118, 135, 121, 122, 119, 116, 140, 117, 131, 125, 133, 123, 138, 116, 129, 130, 125, 124, 122, 141, 112, 121, 132, 114, 116, 107, 128, 132, 121, 114, 118, 123, 124, 135, 135, 141, 122, 117, 129, 109, 122, 113, 126, 133, 132, 125, 145, 118, 140, 137, 132, 134, 123, 120, 126, 132, 124, 128, 128, 131, 106, 116, 140, 108, 124, 128, 134, 123, 128, 128, 129, 107, 127, 118, 136, 128, 129, 135, 132, 115, 134, 125, 127, 139, 127, 121, 130, 129, 111, 117, 123, 128, 121, 115, 115, 128, 124, 139, 131, 119, 132, 129, 118, 119, 129, 123, 122, 115, 129, 132, 135, 123, 137, 136, 119, 139, 119, 119, 144, 126, 117, 137, 122, 144, 126, 123, 135, 118, 128, 131, 150, 132, 134, 128, 135, 116, 117, 121, 121, 128, 135, 143, 133, 118, 144, 132, 133, 140, 129, 105, 142, 125, 122, 129, 124, 123, 112, 133, 127, 126, 122, 119, 125, 126, 135, 141, 127, 118, 136, 124, 122, 117, 120, 133, 136, 114, 128, 125, 141, 112, 124, 120, 142, 110, 137, 138, 133, 128, 91, 125, 131, 127, 103, 128, 149, 122, 129, 129, 125, 134, 134, 115, 135, 127, 120, 127, 133, 112, 147, 121, 147, 122, 136, 99, 118, 103, 124, 136, 123, 119, 105, 127, 128, 142, 105, 137, 140, 127, 123, 122, 131, 123, 135, 119, 124, 113, 135, 138, 137, 122, 138, 143, 153, 125, 131, 102, 136, 116, 127, 141, 127, 129, 100, 132, 123, 131, 118, 127, 164, 120, 124, 120, 135, 134, 130, 127, 115, 134, 144, 113, 131, 131, 146, 114, 136, 99, 139, 100, 98, 91, 115, 143, 125, 132, 87, 134, 136, 126, 112, 133, 165, 110, 100, 158, 136, 135, 117, 117, 126, 108, 123, 103, 121, 110, 160, 98, 136, 74, 126, 95, 127, 108, 126, 110, 129, 117, 83, 136, 143, 138, 139, 119, 136, 112, 89, 130, 146, 122, 140, 131, 141, 112, 144, 124, 132, 125, 176, 68, 135, 68, 134, 81, 180, 144, 146, 85, 124, 122, 115, 126, 89, 150, 135, 142, 145, 129, 81, 126, 142, 145, 138, 134, 144, 117, 147, 118, 128, 129, 153, 94, 118, 106, 170, 124, 128, 133, 142, 94, 144, 109, 129, 92, 84, 164, 103, 177, 122, 103, 150, 175, 152, 95, 126, 138, 140, 130, 138, 148, 131, 108, 153, 134, 129, 126, 153, 112, 168, 130, 110, 95, 130, 134, 121, 108, 106, 162, 124, 136, 123, 125, 134, 138, 119, 122, 128, 137, 134, 137, 136, 129, 114, 124, 146, 138, 125, 145, 142, 140, 128, 131, 127, 118, 140, 148, 124, 136, 128, 131, 137, 140, 127, 122, 152, 133, 124, 123, 133, 144, 115, 112, 126, 143, 143, 140, 146, 144, 135, 130, 124, 133, 127, 133, 133, 124, 120, 149, 120, 133, 129, 134, 119, 142, 140, 119, 149, 136, 150, 132, 146, 150, 135, 127, 152, 125, 126, 113, 127, 130, 132, 143, 143, 144, 139, 140, 151, 131, 152, 136, 136, 140, 125, 148, 130, 90, 152, 128, 114, 165, 151, 160, 186, 111, 139, 126, 170, 142, 139, 117, 120, 135, 129, 158, 126, 123, 116, 131, 153, 125, 137, 125, 109, 120, 169, 176, 110, 107, 181, 102, 109, 125, 148, 143, 166, 93, 184, 129, 186, 118, 134, 96, 131, 126, 148, 140, 146, 118, 133, 155, 138, 145, 126, 145, 123, 110, 133, 140, 107, 129, 156, 117, 128, 138, 123, 127, 128, 125, 132, 119, 159, 131, 138, 73, 136, 112, 156, 117, 134, 93, 134, 131, 138, 133, 122, 149, 127, 127, 153, 128, 113, 122, 109, 144, 128, 121, 132, 121, 128, 118, 113, 127, 145, 127, 130, 115, 136, 122, 118, 123, 135, 99, 130, 127, 119, 112, 127, 135, 99, 135, 137, 139, 118, 147, 134, 141, 141, 128, 127, 108, 121, 127, 121, 113, 137, 133, 119, 106, 142, 129, 105, 131, 134, 99, 122, 124, 136, 147, 120, 148, 51, 142, 137, 120, 113, 128, 149, 138, 125, 137, 123, 134, 123, 126, 128, 120, 128, 126, 127, 116, 152, 124, 128, 129, 129, 103, 122, 122, 109, 150, 131, 132, 82, 131, 143, 123, 114, 136, 142, 116, 128, 136, 131, 126, 127, 125, 105, 127, 147, 113, 123, 115, 135, 120, 119, 122, 125, 108, 131, 109, 122, 135, 123, 121, 133, 133, 130, 120, 120, 148, 146, 130, 134, 127, 133, 126, 124, 120, 110, 114, 141, 127, 130, 130, 133, 137, 139, 126, 124, 119, 112, 115, 127, 134, 126, 133, 133, 126, 146, 119, 123, 132, 122, 129, 121, 130, 127, 116, 123, 150, 124, 136, 139, 120, 132, 119, 128, 122, 145, 131, 127, 131, 120, 111, 112, 141, 122, 134, 123, 137, 131, 132, 126, 131, 149, 125, 129, 124, 123, 118, 123, 128, 128, 151, 134, 126, 136, 125, 131, 137, 138, 131, 126, 101, 119, 119, 120, 138, 132, 131, 109, 126, 129, 127, 124, 131, 139, 145, 122, 122, 125, 133, 117, 138, 141, 149, 141, 121, 136, 118, 134, 127, 144, 131, 121, 129, 124, 128, 121, 127, 129, 146, 113, 139, 117, 113, 124, 146, 141, 132, 121, 121, 125, 119, 132, 121, 136, 130, 136, 121, 136, 125, 125, 132, 141, 131, 119, 125, 117, 120, 119, 133, 141, 134, 119, 132, 124, 117, 107, 137, 147, 130, 118, 126, 119, 123, 115, 120, 122, 133, 134, 125, 148, 116, 129, 130, 133, 144, 123, 124, 111, 124, 129, 109, 134, 136, 111, 130, 109, 120, 122, 133, 134, 131, 109, 120, 128, 131, 130, 127, 122, 121, 129, 133, 138, 129, 129, 130, 142, 137, 118, 115, 129, 116, 115, 109, 143, 138, 119, 130, 122, 124, 102, 121, 130, 126, 117, 136, 127, 131, 111, 108, 122, 129, 128, 134, 140, 103, 130, 121, 116, 125, 117, 114, 127, 121, 130, 124, 127, 129, 114, 119, 127, 112, 117, 134, 130, 128, 122, 124, 138, 120, 140, 102, 113, 133, 121, 117, 136, 127, 135, 125, 143, 132, 127, 111, 119, 112, 103, 113, 138, 122, 120, 115, 134, 115, 107, 130, 142, 125, 126, 137, 137, 124, 118, 116, 112, 127, 127, 126, 134, 104, 143, 120, 124, 132, 136, 102, 127, 118, 118, 118, 123, 136, 105, 107, 115, 126, 115, 143, 124, 127, 121, 132, 127, 109, 122, 114, 116, 125, 135, 123, 135, 113, 147, 120, 134, 120, 134, 101, 124, 103, 124, 117, 133, 126, 112, 125, 126, 124, 120, 122, 132, 109, 129, 132, 123, 134, 111, 125, 119, 124, 130, 133, 136, 119, 130, 122, 140, 119, 132, 118, 112, 104, 112, 129, 140, 112, 117, 135, 131, 130, 109, 126, 128, 116, 131, 121, 127, 138, 128, 140, 101, 133, 122, 128, 141, 118, 138, 130, 149, 106, 129, 116, 132, 103, 104, 117, 121, 122, 116, 125, 130, 114, 127, 133, 164, 110, 109, 137, 114, 123, 123, 119, 119, 133, 124, 115, 139, 131, 173, 146, 149, 98, 135, 101, 124, 114, 117, 140, 138, 122, 110, 127, 127, 129, 114, 154, 143, 125, 86, 134, 118, 126, 120, 92, 126, 122, 149, 130, 160, 120, 153, 115, 153, 70, 129, 106, 141, 126, 129, 93, 123, 121, 122, 130, 136, 130, 147, 140, 114, 103, 77, 142, 151, 122, 116, 124, 118, 133, 155, 105, 137, 118, 160, 102, 127, 94, 131, 111, 146, 108, 142, 65, 118, 107, 124, 111, 106, 134, 138, 143, 158, 142, 97, 120, 152, 123, 145, 128, 143, 115, 170, 108, 139, 106, 144, 107, 149, 124, 123, 117, 107, 97, 137, 89, 160, 90, 110, 97, 125, 144, 130, 174, 143, 121, 149, 138, 142, 116, 158, 145, 120, 144, 160, 101, 147, 97, 133, 120, 170, 152, 92, 94, 89, 92, 144, 104, 130, 151, 84, 113, 117, 118, 135, 127, 110, 145, 133, 133, 120, 113, 127, 143, 137, 149, 146, 125, 128, 127, 118, 118, 137, 130, 138, 127, 123, 122, 142, 140, 113, 134, 127, 130, 118, 111, 127, 155, 134, 127, 140, 134, 131, 116, 135, 145, 116, 130, 128, 151, 130, 129, 135, 134, 124, 146, 129, 145, 140, 119, 113, 132, 137, 154, 124, 111, 129, 140, 130, 143, 133, 135, 142, 137, 135, 136, 133, 135, 128, 127, 139, 135, 127, 126, 131, 153, 117, 131, 128, 133, 129, 122, 142, 132, 129, 146, 117, 129, 149, 139, 115, 104, 155, 110, 118, 175, 164, 135, 179, 97, 141, 105, 160, 154, 153, 105, 103, 141, 140, 163, 147, 109, 140, 141, 165, 138, 122, 125, 106, 120, 121, 163, 81, 131, 181, 133, 114, 144, 145, 152, 151, 72, 158, 131, 145, 149, 141, 79, 130, 125, 153, 162, 134, 93, 151, 144, 150, 138, 132, 140, 111, 121, 123, 166, 104, 126, 143, 95, 132, 109, 128, 129, 123, 104, 116, 98, 115, 123, 122, 82, 135, 124, 160, 114, 127, 123, 134, 124, 125, 117, 126, 129, 94, 132, 155, 138, 100, 157, 128, 138, 119, 142, 146, 110, 139, 135, 119, 119, 128, 138, 129, 98, 148, 126, 105, 145, 157, 129, 129, 112, 131, 94, 119, 131, 90, 131, 134, 137, 120, 140, 137, 128, 128, 131, 128, 111, 132, 119, 119, 110, 131, 138, 128, 99, 139, 115, 120, 140, 137, 95, 106, 98, 139, 128, 119, 119, 99, 119, 111, 139, 126, 128, 130, 131, 128, 135, 129, 120, 126, 126, 108, 123, 127, 117, 139, 111, 121, 121, 125, 117, 149, 126, 119, 77, 141, 136, 126, 119, 130, 131, 140, 139, 126, 139, 144, 132, 124, 118, 133, 130, 142, 140, 125, 124, 137, 122, 130, 127, 139, 133, 133, 133, 131, 131, 121, 98, 124, 133, 126, 129, 132, 120, 124, 123, 126, 121, 140, 127, 127, 119, 116, 117, 118, 136, 131, 131, 129, 128, 133, 118, 126, 116, 134, 128, 120, 129, 120, 120, 123, 126, 133, 137, 122, 130, 124, 132, 132, 126, 137, 128, 137, 126, 124, 124, 130, 130, 134, 125, 138, 116, 132, 123, 125, 139, 139, 125, 125, 125, 114, 112, 141, 129, 119, 135, 145, 143, 124, 128, 132, 127, 130, 154, 131, 120, 119, 131, 127, 118, 139, 117, 133, 134, 137, 123, 135, 117, 153, 123, 118, 118, 114, 104, 131, 143, 134, 126, 130, 136, 130, 129, 126, 122, 143, 138, 123, 119, 115, 124, 136, 126, 140, 121, 126, 113, 139, 130, 118, 126, 138, 109, 128, 109, 122, 118, 141, 143, 127, 128, 113, 132, 127, 116, 126, 130, 146, 141, 131, 120, 116, 118, 132, 133, 122, 140, 135, 127, 120, 132, 125, 133, 140, 115, 122, 115, 114, 114, 124, 141, 132, 127, 98, 136, 124, 116, 128, 124, 146, 129, 124, 125, 132, 115, 129, 134, 131, 133, 127, 127, 113, 124, 130, 138, 127, 117, 139, 134, 110, 94, 128, 143, 129, 125, 128, 130, 124, 122, 123, 125, 125, 131, 127, 130, 134, 121, 134, 125, 131, 140, 131, 113, 126, 125, 130, 126, 131, 136, 124, 129, 96, 108, 127, 137, 125, 148, 120, 123, 120, 119, 113, 129, 125, 128, 128, 114, 127, 125, 122, 124, 119, 133, 140, 120, 136, 119, 122, 132, 134, 134, 122, 118, 106, 108, 122, 118, 142, 125, 117, 128, 99, 132, 118, 128, 136, 128, 130, 127, 123, 109, 127, 109, 126, 121, 132, 125, 134, 108, 136, 131, 136, 127, 119, 122, 106, 101, 126, 125, 127, 142, 117, 126, 132, 117, 116, 137, 127, 125, 133, 118, 130, 106, 128, 114, 117, 120, 134, 135, 128, 124, 129, 132, 133, 124, 128, 119, 98, 120, 106, 112, 124, 125, 111, 122, 129, 119, 120, 131, 127, 125, 137, 141, 150, 131, 135, 118, 120, 139, 125, 126, 133, 113, 140, 119, 140, 125, 131, 117, 126, 121, 128, 115, 126, 137, 113, 123, 124, 125, 111, 142, 150, 117, 129, 139, 135, 119, 129, 113, 118, 117, 122, 119, 128, 116, 144, 128, 139, 116, 129, 114, 118, 109, 98, 114, 130, 130, 103, 136, 127, 123, 123, 134, 136, 113, 118, 131, 119, 111, 118, 106, 84, 133, 129, 122, 145, 128, 146, 117, 137, 131, 143, 117, 129, 115, 106, 98, 115, 126, 117, 117, 103, 134, 135, 126, 137, 110, 100, 130, 116, 127, 137, 109, 127, 135, 148, 122, 133, 114, 145, 116, 129, 90, 135, 131, 138, 143, 122, 114, 149, 124, 132, 145, 99, 136, 129, 122, 145, 118, 108, 117, 135, 115, 147, 110, 139, 98, 145, 121, 131, 104, 162, 126, 122, 78, 137, 131, 112, 106, 127, 117, 140, 106, 133, 149, 114, 104, 154, 124, 125, 130, 107, 127, 132, 108, 139, 119, 121, 104, 134, 100, 167, 117, 144, 108, 110, 125, 150, 133, 117, 108, 140, 95, 125, 110, 140, 92, 119, 115, 124, 130, 115, 117, 118, 105, 136, 118, 135, 135, 112, 119, 139, 127, 138, 131, 122, 126, 97, 126, 120, 119, 106, 103, 135, 126, 143, 111, 131, 109, 115, 116, 138, 120, 86, 100, 132, 123, 116, 155, 93, 160, 103, 157, 140, 133, 101, 137, 100, 163, 128, 177, 115, 125, 103, 94, 93, 101, 142, 142, 104, 135, 135, 119, 138, 116, 127, 140, 126, 125, 134, 125, 130, 144, 148, 137, 133, 133, 144, 128, 127, 128, 114, 114, 127, 122, 123, 119, 130, 145, 132, 137, 125, 129, 131, 137, 112, 117, 122, 117, 138, 137, 133, 132, 132, 126, 111, 119, 138, 126, 129, 141, 124, 119, 140, 124, 137, 136, 121, 115, 126, 130, 130, 115, 134, 135, 129, 121, 125, 123, 116, 115, 124, 124, 115, 136, 112, 136, 121, 123, 117, 123, 134, 132, 141, 131, 127, 135, 137, 119, 139, 122, 121, 124, 120, 133, 134, 129, 133, 128, 98, 151, 144, 132, 134, 161, 134, 125, 171, 115, 171, 116, 153, 140, 137, 99, 148, 135, 145, 177, 127, 113, 131, 129, 166, 147, 134, 160, 115, 149, 115, 143, 86, 123, 190, 96, 141, 154, 121, 151, 167, 95, 168, 131, 152, 135, 115, 89, 121, 119, 147, 156, 95, 105, 145, 147, 144, 171, 161, 171, 121, 183, 150, 159, 94, 105, 155, 83, 138, 125, 117, 142, 111, 104, 138, 110, 156, 118, 115, 103, 104, 134, 147, 129, 138, 141, 140, 93, 117, 127, 156, 146, 101, 152, 154, 116, 100, 117, 119, 126, 130, 146, 160, 108, 126, 119, 117, 142, 139, 119, 123, 95, 130, 136, 105, 132, 139, 127, 120, 106, 87, 89, 151, 141, 88, 144, 132, 139, 108, 131, 118, 114, 117, 129, 127, 111, 127, 127, 141, 129, 131, 118, 128, 110, 114, 121, 111, 145, 125, 115, 123, 98, 132, 125, 153, 118, 122, 131, 119, 130, 125, 128, 133, 118, 126, 139, 140, 126, 143, 132, 120, 133, 141, 128, 138, 129, 116, 115, 130, 142, 129, 126, 138, 94, 129, 137, 130, 119, 146, 119, 116, 141, 130, 135, 133, 130, 125, 124, 132, 126, 132, 122, 119, 130, 121, 132, 134, 130, 131, 135, 141, 127, 119, 123, 113, 119, 124, 141, 130, 126, 123, 135, 130, 134, 115, 150, 134, 133, 130, 129, 130, 125, 130, 128, 145, 145, 133, 127, 135, 125, 136, 119, 128, 140, 122, 133, 127, 111, 129, 141, 136, 147, 123, 132, 133, 127, 125, 132, 132, 139, 134, 124, 121, 133, 133, 124, 141, 142, 138, 119, 130, 123, 132, 131, 118, 135, 119, 125, 124, 103, 125, 135, 144, 159, 124, 139, 136, 121, 135, 136, 130, 127, 132, 117, 133, 127, 138, 118, 142, 132, 134, 131, 142, 141, 125, 124, 128, 126, 123, 123, 117, 114, 129, 142, 130, 144, 117, 132, 132, 127, 129, 140, 126, 141, 135, 129, 121, 123, 123, 134, 128, 131, 134, 127, 131, 131, 146, 137, 126, 136, 139, 120, 109, 112, 131, 135, 132, 124, 114, 130, 134, 120, 137, 150, 139, 138, 134, 137, 121, 127, 132, 123, 129, 131, 128, 127, 127, 139, 136, 125, 136, 134, 129, 115, 110, 117, 137, 150, 131, 128, 119, 131, 142, 125, 132, 140, 136, 132, 130, 127, 115, 125, 129, 143, 121, 135, 120, 128, 119, 126, 131, 143, 135, 113, 119, 113, 106, 111, 134, 157, 127, 120, 115, 135, 133, 119, 129, 142, 142, 130, 137, 134, 129, 111, 121, 148, 123, 133, 131, 133, 125, 127, 141, 134, 130, 125, 132, 129, 105, 109, 121, 145, 134, 133, 116, 125, 121, 115, 143, 153, 141, 131, 124, 129, 131, 133, 123, 107, 128, 135, 123, 137, 110, 132, 140, 153, 129, 129, 126, 124, 109, 112, 128, 146, 130, 130, 116, 131, 127, 119, 129, 129, 129, 126, 114, 135, 120, 115, 126, 119, 124, 130, 146, 145, 109, 124, 124, 129, 124, 124, 134, 137, 108, 123, 125, 141, 129, 142, 115, 121, 126, 118, 101, 140, 140, 127, 136, 131, 136, 123, 115, 121, 118, 142, 120, 147, 140, 107, 133, 130, 122, 132, 120, 108, 108, 108, 121, 137, 130, 132, 128, 130, 144, 118, 111, 146, 131, 127, 119, 133, 141, 102, 141, 101, 109, 121, 121, 127, 126, 119, 126, 135, 127, 134, 127, 118, 114, 135, 116, 134, 126, 125, 124, 118, 122, 89, 137, 147, 138, 126, 134, 137, 120, 99, 123, 81, 128, 120, 123, 119, 135, 120, 137, 122, 106, 130, 123, 105, 126, 125, 115, 115, 139, 130, 119, 126, 138, 87, 116, 133, 148, 121, 120, 139, 130, 104, 141, 107, 113, 132, 119, 149, 126, 120, 141, 105, 133, 130, 113, 124, 120, 140, 134, 114, 120, 123, 114, 124, 112, 110, 119, 138, 155, 139, 102, 121, 136, 115, 154, 123, 148, 95, 142, 140, 151, 115, 125, 96, 127, 99, 146, 149, 126, 134, 143, 93, 124, 106, 137, 108, 114, 100, 125, 123, 155, 141, 129, 135, 146, 138, 131, 88, 121, 88, 142, 148, 121, 142, 143, 131, 106, 106, 154, 152, 109, 123, 119, 131, 145, 76, 128, 139, 121, 127, 143, 115, 117, 113, 129, 107, 142, 127, 111, 106, 130, 75, 120, 135, 130, 122, 145, 123, 111, 126, 162, 128, 135, 112, 130, 114, 140, 125, 120, 126, 137, 118, 140, 134, 136, 111, 113, 109, 132, 121, 97, 136, 113, 112, 127, 120, 135, 124, 107, 136, 97, 159, 118, 88, 103, 100, 129, 115, 133, 115, 145, 131, 128, 120, 132, 122, 106, 104, 141, 137, 104, 145, 93, 153, 103, 148, 131, 162, 109, 116, 108, 167, 117, 156, 121, 159, 100, 108, 101, 103, 152, 156, 115, 147, 111, 125, 120, 126, 116, 123, 121, 135, 126, 130, 133, 114, 129, 121, 119, 128, 130, 121, 122, 123, 131, 135, 126, 129, 120, 121, 126, 123, 124, 139, 129, 128, 116, 125, 126, 130, 116, 122, 127, 121, 121, 138, 115, 136, 126, 129, 130, 120, 130, 123, 129, 119, 112, 119, 133, 140, 122, 112, 125, 127, 132, 131, 128, 123, 128, 122, 117, 127, 123, 134, 121, 128, 119, 129, 118, 131, 126, 129, 142, 128, 132, 117, 122, 124, 137, 112, 129, 139, 124, 134, 132, 115, 128, 123, 136, 130, 130, 132, 120, 135, 125, 126, 135, 135, 132, 149, 135, 123, 158, 140, 128, 146, 114, 136, 129, 115, 121, 128, 129, 129, 115, 138, 143, 129, 121, 114, 123, 119, 146, 159, 129, 89, 148, 109, 177, 124, 132, 159, 152, 125, 167, 142, 175, 109, 82, 136, 74, 130, 103, 158, 100, 131, 100, 121, 135, 144, 181, 136, 123, 161, 161, 112, 135, 89, 132, 75, 139, 110, 135, 176, 143, 138, 210, 147, 201, 101, 101, 134, 78, 108, 83, 129, 168, 157, 122, 142, 166, 125, 154, 143, 111, 148, 128, 152, 134, 91, 122, 81, 125, 123, 153, 137, 128, 146, 164, 156, 156, 112, 104, 117, 86, 122, 76, 133, 131, 169, 130, 142, 139, 97, 133, 138, 141, 142, 114, 169, 88, 99, 113, 95, 116, 130, 136, 137, 114, 116, 131, 131, 139, 116, 84, 111, 97, 110, 94, 142, 128, 120, 111, 136, 119, 114, 158, 125, 144, 158, 127, 151, 100, 78, 115, 106, 136, 123, 131, 131, 116, 118, 115, 136, 127, 121, 97, 92, 93, 115, 74, 131, 118, 113, 109, 146, 131, 119, 151, 119, 130, 143, 139, 132, 100, 110, 143, 139, 139, 120, 131, 115, 136, 111, 149, 121, 114, 133, 109, 115, 121, 132, 74, 132, 106, 126, 127, 122, 125, 140, 133, 127, 134, 135, 126, 137, 110, 121, 135, 124, 132, 132, 129, 118, 116, 119, 135, 123, 133, 118, 124, 111, 131, 129, 96, 128, 124, 100, 127, 127, 120, 122, 149, 142, 116, 135, 117, 128, 103, 116, 127, 124, 130, 127, 124, 133, 124, 128, 134, 128, 128, 123, 107, 108, 106, 127, 87, 115, 125, 105, 116, 130, 133, 124, 126, 119, 111, 148, 137, 118, 121, 138, 146, 125, 135, 131, 127, 139, 129, 128, 122, 120, 125, 136, 107, 120, 133, 118, 116, 144, 136, 104, 132, 132, 121, 142, 132, 127, 126, 133, 143, 130, 118, 140, 155, 136, 123, 122, 129, 123, 121, 127, 121, 134, 140, 117, 121, 118, 138, 125, 121, 121, 119, 114, 108, 124, 132, 138, 130, 124, 112, 128, 128, 124, 117, 131, 140, 137, 136, 140, 119, 119, 141, 114, 133, 133, 124, 109, 103, 116, 124, 118, 115, 123, 126, 112, 120, 124, 131, 141, 134, 129, 113, 141, 122, 121, 124, 129, 147, 133, 122, 128, 111, 127, 144, 112, 115, 126, 138, 122, 108, 117, 138, 126, 133, 136, 136, 97, 121, 130, 131, 125, 135, 136, 117, 129, 122, 116, 129, 138, 143, 127, 120, 125, 117, 115, 138, 128, 120, 120, 131, 117, 114, 123, 136, 128, 119, 128, 136, 122, 127, 131, 125, 134, 135, 118, 105, 130, 133, 129, 132, 129, 152, 132, 133, 125, 119, 138, 129, 106, 119, 125, 132, 121, 118, 130, 127, 139, 127, 134, 128, 106, 128, 134, 142, 137, 125, 120, 110, 135, 121, 116, 103, 125, 144, 127, 120, 109, 135, 123, 117, 99, 119, 134, 139, 130, 110, 121, 127, 116, 110, 110, 131, 112, 129, 132, 132, 137, 137, 142, 121, 121, 118, 117, 123, 118, 134, 154, 124, 124, 100, 104, 133, 115, 118, 123, 127, 132, 127, 122, 142, 143, 125, 135, 128, 113, 126, 131, 136, 141, 131, 122, 119, 119, 126, 115, 138, 126, 134, 131, 112, 121, 118, 122, 115, 94, 117, 127, 103, 154, 109, 123, 136, 124, 107, 123, 125, 121, 128, 132, 116, 133, 124, 95, 125, 114, 125, 106, 137, 132, 126, 160, 115, 97, 116, 124, 103, 112, 130, 110, 86, 157, 119, 137, 127, 110, 96, 125, 124, 133, 143, 150, 145, 149, 131, 100, 136, 120, 143, 112, 106, 126, 125, 151, 126, 100, 114, 110, 131, 102, 123, 113, 117, 159, 119, 100, 122, 126, 97, 133, 137, 129, 162, 167, 148, 123, 113, 121, 121, 112, 121, 105, 128, 136, 139, 131, 128, 125, 133, 124, 135, 113, 138, 109, 130, 153, 127, 126, 128, 157, 117, 123, 127, 147, 147, 153, 126, 137, 116, 116, 109, 131, 109, 107, 132, 137, 129, 136, 131, 119, 155, 120, 117, 75, 147, 88, 117, 158, 126, 129, 136, 170, 103, 110, 145, 141, 140, 153, 133, 122, 134, 116, 104, 151, 153, 135, 97, 150, 157, 149, 117, 122, 162, 94, 159, 133, 148, 111, 164, 113, 121, 104, 166, 114, 121, 128, 180, 99, 124, 130, 137, 120, 139, 111, 92, 129, 111, 129, 94, 139, 137, 143, 93, 137, 148, 88, 159, 142, 105, 124, 128, 128, 165, 96, 138, 110, 124, 132, 121, 116, 143, 144, 151, 87, 115, 137, 118, 115, 110, 145, 122, 140, 121, 120, 106, 150, 137, 106, 127, 118, 114, 132, 124, 114, 153, 106, 157, 122, 133, 150, 140, 126, 138, 138, 131, 107, 126, 154, 108, 95, 117, 153, 138, 123, 134, 112, 130, 140, 139, 124, 128, 117, 117, 137, 130, 131, 116, 122, 139, 136, 120, 127, 117, 131, 137, 140, 129, 123, 142, 122, 129, 126, 133, 116, 138, 128, 116, 132, 139, 119, 121, 132, 136, 117, 120, 132, 132, 139, 127, 127, 141, 129, 139, 122, 115, 130, 123, 129, 120, 130, 112, 111, 120, 119, 142, 138, 123, 125, 128, 120, 115, 131, 135, 133, 119, 125, 118, 124, 138, 143, 114, 124, 110, 119, 127, 135, 122, 132, 132, 135, 115, 131, 127, 116, 112, 131, 128, 136, 129, 124, 127, 140, 153, 132, 132, 134, 146, 93, 129, 132, 137, 144, 145, 126, 140, 123, 109, 131, 111, 121, 154, 147, 109, 146, 144, 127, 132, 149, 135, 131, 164, 125, 145, 106, 142, 111, 122, 150, 125, 166, 133, 136, 140, 81, 124, 154, 108, 115, 139, 133, 116, 146, 124, 123, 110, 131, 123, 137, 143, 139, 128, 121, 160, 85, 100, 109, 123, 120, 134, 195, 132, 142, 126, 167, 151, 69, 111, 135, 84, 105, 107, 112, 110, 139, 139, 143, 120, 111, 128, 135, 129, 144, 119, 126, 133, 88, 95, 117, 110, 102, 124, 197, 136, 120, 130, 131, 137, 90, 94, 141, 85, 91, 94, 103, 115, 156, 140, 168, 141, 110, 133, 139, 142, 141, 98, 137, 126, 117, 111, 111, 106, 91, 139, 155, 142, 115, 148, 130, 127, 79, 101, 119, 108, 102, 103, 114, 128, 118, 148, 153, 150, 130, 153, 123, 130, 159, 113, 165, 112, 92, 125, 115, 127, 76, 144, 164, 125, 125, 163, 134, 154, 95, 89, 117, 110, 94, 102, 104, 127, 117, 153, 170, 151, 108, 151, 96, 119, 166, 123, 182, 86, 86, 134, 118, 110, 71, 166, 144, 135, 121, 183, 129, 158, 108, 77, 95, 124, 109, 92, 72, 146, 141, 144, 146, 143, 95, 153, 89, 130, 140, 129, 182, 110, 95, 128, 114, 132, 97, 150, 149, 130, 127, 167, 123, 149, 110, 79, 99, 126, 98, 82, 90, 112, 126, 132, 145, 138, 121, 139, 100, 114, 134, 130, 160, 105, 128, 137, 127, 114, 102, 152, 181, 148, 109, 137, 135, 130, 116, 90, 134, 127, 129, 108, 79, 126, 119, 135, 140, 138, 128, 136, 101, 122, 142, 118, 130, 123, 117, 149, 108, 122, 95, 127, 168, 140, 122, 154, 133, 143, 101, 102, 137, 123, 122, 119, 62, 139, 128, 141, 134, 147, 124, 142, 116, 128, 146, 117, 135, 98, 115, 132, 121, 116, 110, 148, 157, 137, 129, 149, 121, 148, 122, 91, 100, 143, 120, 86, 81, 140, 130, 139, 130, 139, 123, 144, 123, 112, 140, 110, 158, 117, 97, 135, 124, 114, 105, 127, 151, 147, 127, 145, 133, 144, 120, 116, 117, 123, 121, 101, 97, 135, 131, 141, 134, 139, 121, 151, 115, 126, 132, 124, 143, 132, 117, 132, 121, 109, 105, 133, 147, 129, 139, 121, 112, 135, 123, 98, 131, 139, 114, 109, 92, 136, 134, 145, 136, 137, 130, 139, 98, 128, 134, 126, 145, 125, 119, 156, 157, 97, 109, 129, 152, 142, 128, 139, 129, 138, 113, 121, 137, 122, 112, 116, 92, 138, 116, 130, 120, 142, 142, 139, 103, 121, 138, 113, 137, 137, 105, 151, 155, 103, 102, 125, 170, 119, 126, 142, 125, 129, 123, 116, 151, 127, 140, 134, 89, 139, 135, 150, 132, 152, 135, 130, 82, 108, 138, 131, 142, 125, 110, 146, 168, 101, 113, 123, 172, 148, 122, 149, 126, 138, 115, 102, 146, 130, 140, 123, 99, 139, 129, 136, 144, 139, 138, 137, 81, 101, 144, 118, 155, 126, 86, 160, 156, 117, 106, 118, 183, 143, 127, 138, 125, 139, 118, 118, 141, 139, 150, 110, 105, 140, 147, 151, 139, 151, 157, 143, 78, 116, 145, 135, 157, 137, 81, 161, 188, 130, 88, 113, 185, 129, 114, 161, 117, 145, 129, 136, 153, 136, 131, 119, 108, 148, 157, 141, 153, 146, 141, 150, 92, 123, 140, 133, 148, 136, 106, 148, 166, 138, 75, 124, 163, 97, 97, 151, 101, 103, 142, 123, 134, 106, 144, 121, 124, 157, 142, 165, 154, 186, 141, 148, 93, 112, 138, 149, 154, 160, 121, 127, 172, 118, 60, 91, 170, 99, 113, 167, 121, 108, 138, 120, 137, 102, 150, 110, 101, 142, 147, 156, 150, 171, 156, 134, 103, 104, 133, 150, 132, 156, 133, 137, 161, 127, 68, 88, 158, 72, 135, 144, 122, 133, 122, 107, 127, 98, 170, 121, 124, 105, 143, 121, 126, 142, 168, 147, 116, 118, 117, 150, 104, 168, 128, 126, 147, 126, 107, 125, 142, 107, 85, 153, 125, 145, 129, 111, 120, 132, 182, 102, 135, 117, 145, 105, 117, 117, 133, 156, 110, 106, 117, 175, 111, 125, 128, 129, 127, 123, 106, 147, 127, 135, 146, 155, 150, 149, 110, 96, 98, 148, 127, 127, 127, 139, 148, 107, 117, 109, 153, 157, 112, 111, 124, 123, 131, 121, 133, 108, 149, 121, 108, 124, 126, 137, 123, 137, 127, 110, 114, 139, 120, 118, 113, 114, 113, 126, 129, 155, 135, 144, 118, 124, 121, 123, 130, 136, 150, 110, 145, 147, 110, 124, 125, 124, 120, 133, 133, 128, 114, 132, 107, 141, 115, 139, 118, 153, 131, 144, 116, 141, 145, 139, 120, 131, 121, 132, 136, 129, 152, 122, 126, 125, 111, 117, 130, 116, 119, 135, 133, 131, 127, 116, 117, 136, 130, 130, 132, 125, 128, 124, 124, 134, 131, 127, 131, 123, 120, 128, 138, 118, 136, 131, 117, 118, 133, 121, 124, 139, 121, 136, 133, 130, 117, 117, 129, 120, 121, 117, 138, 121, 139, 123, 114, 120, 132, 131, 127, 137, 124, 140, 134, 123, 131, 125, 138, 124, 111, 129, 112, 136, 116, 136, 114, 134, 133, 130, 138, 119, 124, 117, 115, 121, 118, 131, 131, 131, 127, 123, 121, 120, 127, 138, 134, 115, 128, 132, 130, 128, 137, 126, 135, 120, 126, 140, 128, 139, 130, 122, 119, 139, 123, 130, 116, 127, 125, 137, 127, 120, 129, 135, 128, 129, 125, 130, 142, 120, 117, 116, 128, 126, 122, 131, 133, 135, 123, 138, 125, 130, 139, 131, 131, 118, 118, 112, 127, 123, 134, 140, 126, 140, 115, 143, 131, 110, 127, 136, 123, 134, 116, 153, 125, 126, 151, 159, 124, 114, 176, 148, 113, 105, 147, 118, 122, 145, 133, 122, 124, 128, 121, 113, 148, 131, 170, 125, 150, 136, 130, 150, 160, 155, 121, 130, 112, 120, 160, 120, 115, 95, 172, 122, 89, 120, 100, 96, 90, 135, 123, 102, 94, 104, 127, 116, 119, 154, 160, 110, 129, 140, 136, 130, 152, 111, 115, 131, 105, 120, 149, 102, 116, 103, 210, 132, 125, 138, 114, 118, 101, 136, 149, 115, 86, 103, 115, 128, 146, 164, 144, 129, 111, 111, 113, 156, 143, 102, 149, 138, 121, 100, 132, 118, 139, 158, 202, 145, 127, 181, 141, 152, 121, 128, 152, 135, 122, 104, 96, 165, 162, 161, 167, 182, 115, 105, 86, 131, 105, 114, 225, 148, 130, 112, 134, 122, 113, 172, 229, 136, 137, 195, 141, 149, 115, 122, 155, 141, 124, 123, 74, 178, 185, 147, 160, 196, 103, 120, 80, 144, 110, 103, 228, 152, 103, 124, 140, 131, 106, 159, 223, 132, 120, 205, 122, 131, 111, 122, 179, 143, 128, 102, 97, 178, 183, 142, 134, 194, 123, 134, 89, 167, 127, 118, 197, 138, 108, 142, 145, 108, 111, 146, 226, 122, 130, 175, 118, 129, 111, 125, 166, 136, 130, 92, 101, 186, 171, 146, 147, 179, 109, 145, 102, 154, 134, 103, 204, 151, 123, 133, 153, 103, 104, 153, 221, 120, 132, 179, 123, 152, 112, 137, 174, 144, 140, 105, 99, 174, 146, 128, 130, 169, 107, 146, 104, 127, 128, 103, 181, 169, 111, 125, 145, 124, 95, 167, 242, 120, 134, 159, 123, 140, 118, 168, 176, 123, 153, 118, 69, 150, 156, 152, 135, 151, 124, 156, 102, 123, 142, 114, 172, 166, 97, 153, 159, 119, 108, 129, 254, 127, 139, 184, 126, 156, 111, 150, 178, 129, 130, 109, 79, 157, 142, 135, 138, 179, 139, 156, 114, 127, 143, 99, 173, 166, 99, 120, 153, 120, 103, 133, 229, 112, 134, 211, 122, 144, 115, 128, 180, 111, 137, 102, 70, 166, 165, 141, 141, 190, 105, 142, 108, 142, 147, 124, 186, 148, 98, 125, 116, 138, 96, 154, 178, 116, 154, 159, 124, 157, 100, 108, 150, 102, 144, 106, 88, 164, 149, 135, 140, 166, 88, 140, 111, 131, 142, 110, 180, 132, 94, 137, 128, 141, 113, 126, 214, 130, 165, 185, 122, 158, 122, 131, 122, 118, 136, 100, 107, 151, 145, 129, 138, 173, 84, 136, 128, 127, 137, 117, 182, 117, 78, 130, 120, 135, 136, 128, 212, 125, 177, 182, 100, 129, 100, 120, 134, 138, 152, 120, 104, 174, 144, 138, 138, 174, 108, 140, 121, 125, 155, 119, 200, 136, 101, 141, 152, 138, 107, 146, 212, 143, 157, 191, 106, 133, 115, 127, 128, 121, 150, 99, 101, 148, 147, 136, 122, 171, 110, 129, 107, 138, 142, 94, 178, 127, 138, 121, 172, 127, 114, 134, 190, 142, 142, 169, 140, 177, 115, 149, 133, 116, 122, 75, 114, 151, 138, 137, 141, 157, 123, 124, 120, 120, 145, 102, 188, 142, 115, 135, 168, 123, 97, 118, 171, 126, 108, 170, 120, 143, 115, 151, 137, 114, 146, 89, 110, 154, 137, 145, 143, 176, 140, 133, 106, 123, 159, 129, 176, 159, 107, 146, 146, 139, 79, 102, 167, 122, 122, 186, 123, 124, 140, 122, 135, 118, 149, 102, 100, 146, 168, 162, 136, 153, 169, 170, 118, 116, 156, 150, 145, 148, 140, 140, 122, 145, 104, 96, 151, 131, 144, 166, 127, 146, 105, 113, 140, 125, 155, 126, 106, 119, 152, 128, 100, 153, 150, 168, 140, 135, 142, 128, 133, 144, 135, 152, 131, 148, 135, 131, 173, 127, 119, 172, 131, 165, 134, 112, 134, 121, 128, 139, 111, 145, 137, 138, 135, 142, 146, 135, 126, 127, 153, 143, 151, 126, 125, 122, 120, 126, 126, 126, 135, 129, 107, 133, 145, 121, 143, 130, 137, 123, 137, 151, 115, 114, 117, 143, 125, 118, 118, 123, 126, 118, 120, 151, 123, 129, 126, 136, 141, 132, 133, 126, 133, 116, 157, 132, 127, 149, 120, 135, 144, 141, 140, 125, 138, 137, 153, 135, 134, 138, 140, 140, 132, 138, 116, 126, 139, 113, 116, 125, 116, 123, 130, 137, 128, 128, 129, 126, 136, 132, 137, 121, 121, 130, 123, 131, 127, 124, 125, 131, 119, 134, 115, 135, 118, 122, 119, 114, 122, 140, 132, 125, 128, 130, 133, 122, 125, 121, 124, 134, 135, 124, 123, 120, 128, 143, 138, 110, 130, 126, 126, 125, 134, 126, 135, 121, 137, 122, 129, 117, 126, 128, 119, 135, 110, 130, 136, 137, 119, 125, 113, 112, 116, 120, 119, 128, 130, 141, 116, 130, 110, 140, 116, 121, 131, 143, 130, 125, 130, 118, 123, 118, 119, 129, 128, 136, 135, 126, 138, 111, 139, 125, 126, 124, 131, 134, 126, 133, 125, 125, 113, 132, 128, 131, 133, 119, 129, 116, 128, 128, 121, 115, 115, 125, 135, 127, 112, 125, 129, 123, 125, 136, 119, 121, 129, 133, 126, 136, 132, 120, 124, 133, 124, 125, 129, 125, 125, 119, 128, 115, 128, 129, 119, 141, 143, 128, 120, 117, 114, 134, 134, 115, 129, 130, 125, 140, 137, 117, 141, 132, 122, 138, 127, 127, 120, 141, 129, 132, 131, 133, 137, 120, 134, 136, 129, 137, 133, 130, 128, 151, 119, 112, 117, 133, 129, 132, 138, 110, 143, 146, 149, 140, 107, 113, 153, 145, 128, 119, 137, 148, 157, 133, 125, 155, 131, 134, 131, 151, 115, 116, 156, 141, 119, 131, 114, 136, 113, 152, 123, 112, 155, 148, 159, 134, 112, 126, 146, 125, 136, 117, 128, 148, 157, 106, 131, 144, 115, 135, 131, 162, 130, 121, 147, 151, 141, 117, 115, 113, 123, 151, 140, 127, 134, 173, 133, 155, 130, 141, 147, 139, 130, 129, 116, 155, 169, 136, 141, 144, 124, 123, 115, 164, 127, 129, 168, 163, 141, 125, 128, 98, 126, 148, 162, 116, 134, 174, 127, 146, 132, 146, 173, 124, 118, 122, 109, 150, 163, 132, 137, 146, 121, 122, 121, 158, 129, 118, 168, 194, 129, 114, 129, 110, 153, 171, 159, 123, 154, 167, 135, 164, 110, 136, 174, 138, 100, 124, 96, 158, 159, 123, 123, 169, 132, 114, 113, 180, 136, 119, 172, 186, 145, 129, 117, 102, 146, 164, 151, 125, 153, 164, 160, 149, 101, 135, 187, 146, 108, 118, 98, 174, 182, 132, 126, 169, 111, 125, 130, 178, 135, 103, 179, 169, 138, 127, 119, 101, 107, 186, 163, 118, 153, 190, 153, 169, 98, 115, 172, 124, 113, 142, 101, 179, 156, 140, 133, 153, 133, 126, 108, 143, 136, 87, 168, 173, 113, 118, 138, 135, 107, 174, 158, 134, 125, 184, 137, 158, 104, 116, 155, 137, 149, 134, 100, 152, 137, 131, 127, 133, 148, 121, 110, 121, 142, 136, 168, 184, 133, 111, 131, 116, 112, 170, 143, 123, 138, 180, 138, 174, 120, 129, 156, 144, 137, 144, 109, 160, 142, 129, 136, 145, 147, 120, 111, 139, 121, 136, 183, 222, 130, 118, 111, 96, 116, 180, 191, 117, 178, 233, 168, 196, 78, 128, 213, 135, 110, 121, 109, 201, 163, 111, 117, 168, 106, 132, 117, 144, 133, 112, 204, 230, 141, 119, 118, 119, 153, 192, 199, 111, 161, 207, 125, 171, 126, 110, 249, 149, 149, 92, 89, 218, 223, 146, 152, 193, 103, 134, 111, 189, 131, 116, 230, 222, 124, 112, 108, 141, 135, 176, 186, 120, 174, 197, 145, 163, 119, 112, 234, 144, 154, 107, 105, 196, 208, 149, 145, 181, 96, 133, 112, 196, 120, 135, 210, 223, 124, 114, 126, 116, 148, 175, 192, 118, 150, 187, 139, 165, 109, 119, 216, 140, 146, 129, 133, 181, 206, 121, 120, 168, 112, 121, 129, 210, 117, 103, 214, 213, 120, 127, 125, 88, 123, 157, 179, 120, 191, 208, 146, 192, 91, 123, 217, 144, 144, 126, 114, 192, 212, 123, 103, 185, 112, 122, 125, 195, 103, 93, 198, 187, 123, 127, 132, 101, 120, 156, 170, 130, 161, 184, 147, 158, 103, 103, 209, 132, 151, 129, 106, 158, 194, 128, 100, 181, 112, 121, 120, 172, 121, 112, 193, 167, 119, 123, 138, 83, 127, 154, 183, 134, 170, 182, 139, 167, 93, 126, 183, 142, 122, 131, 101, 159, 165, 145, 136, 165, 111, 133, 121, 168, 105, 96, 168, 151, 127, 107, 105, 116, 128, 148, 172, 109, 148, 143, 133, 162, 127, 150, 138, 108, 121, 127, 118, 132, 155, 159, 131, 157, 126, 135, 122, 145, 105, 100, 171, 146, 129, 132, 124, 126, 102, 87, 174, 132, 146, 129, 131, 142, 137, 109, 148, 107, 129, 132, 121, 108, 154, 154, 160, 141, 104, 135, 123, 144, 101, 138, 146, 163, 126, 139, 127, 113, 115, 97, 157, 120, 137, 117, 155, 141, 129, 112, 156, 136, 120, 128, 131, 103, 148, 152, 133, 154, 117, 129, 112, 148, 117, 150, 114, 141, 133, 138, 113, 121, 131, 116, 149, 137, 157, 153, 150, 126, 138, 104, 163, 121, 118, 121, 134, 116, 151, 135, 122, 161, 119, 126, 134, 148, 133, 132, 124, 134, 127, 134, 143, 124, 132, 118, 124, 138, 135, 126, 123, 136, 128, 128, 135, 133, 136, 121, 128, 121, 114, 116, 129, 120, 118, 129, 115, 129, 124, 131, 123, 134, 111, 136, 123, 121, 140, 125, 113, 128, 120, 126, 131, 126, 125, 139, 138, 120, 132, 128, 113, 137, 113, 133, 135, 130, 118, 125, 125, 133, 139, 118, 141, 131, 126, 125, 123, 133, 126, 120, 135, 121, 122, 135, 127, 129, 118, 117, 124, 127, 123, 126, 130, 132, 128, 122, 130, 128, 118, 114, 129, 139, 144, 133, 129, 110, 120, 127, 125, 116, 132, 131, 122, 134, 119, 123, 128, 120, 139, 134, 122, 137, 128, 133, 113, 116, 116, 126, 116, 125, 126, 118, 114, 127, 127, 123, 137, };
+#include <stdint.h>
+
+const float inline_Variable_quantized_min_0 [ 1 ] = { -1.4658213, };
+#include <stdint.h>
+
+const float inline_Variable_quantized_max_0 [ 1 ] = { 1.4827952, };
+#include <stdint.h>
+
+const float inline_Variable_1_0 [ 32 ] = { 0.5780225, -0.16384779, -0.4345745, -0.597377, -0.07290177, -0.054406535, 0.50055176, 0.17901272, 0.061275087, 0.7035889, 0.4821739, 0.71990424, 0.8626814, -0.33886588, 0.35639188, 0.18779205, 0.0122972, 0.31423524, 0.3264045, 0.43020993, -0.252126, 0.45105258, 0.19716854, 0.1755184, -0.6027231, -0.5300849, 0.0747934, 0.772581, 0.41220447, -0.035656765, -0.19516377, 0.23329337, };
+#include <stdint.h>
+
+const int inline_zscore_eightbit_Variable_1__port__0_reshape_dims_0 [ 1 ] = { -1, };
+#include <stdint.h>
+
+const int inline_zscore_eightbit_Variable_1__port__0_reduction_dims_0 [ 1 ] = { 0, };
+#include <stdint.h>
+
+const float inline_Variable_2_0 [ 320 ] = { 0.09988884, -1.1353989, -0.30359662, -0.56671315, 0.14865185, 0.07054141, -0.704112, 0.14634563, 0.038837895, 0.12827557, -0.64816165, 0.22390124, 0.2185188, -0.37734136, -0.4888368, -0.331484, 0.2816934, -0.16101772, 0.1772173, -1.536288, 0.090911604, -0.1976156, 0.12854636, 0.07009501, -0.6700738, 0.09005826, 0.1293878, -1.2707134, 0.106641725, -0.6959609, 0.2972734, -0.70892376, 0.07672069, -0.2427029, -0.5615418, 0.025082974, 0.30457148, -0.76232576, 0.21156852, 0.08285654, -1.5010211, 0.13247569, -1.0183421, 0.33674574, 0.104593806, 0.32479236, -0.8564378, -1.0494801, 0.20867094, 0.2168353, -0.8439878, 0.2557021, 0.264512, 0.25309193, 0.11172143, -0.76710767, -1.0080864, 0.111535, 0.1552014, -0.75241226, -1.405301, 0.24535958, 0.50746, 0.41373497, -1.1237661, -0.49714264, -1.193322, 0.46042937, -0.7896807, -1.5146972, -1.065499, -0.7908416, -0.36020097, 0.13737579, 0.1800311, 0.10458995, -1.2556252, 0.19812348, 0.11553663, 0.19312829, 0.19815284, -0.6666778, 0.38857913, 0.34162205, -0.32378697, -0.44522342, -1.1611727, 0.22871752, -0.29519376, -1.3071843, 0.5401799, 0.47966257, -0.7937667, -0.4779475, -0.57502764, 0.05691072, -0.37754378, 0.4417573, -0.53276825, -0.025525812, 0.22032534, -0.52696246, 0.006800288, 0.21865974, -1.3790156, 0.18081068, -1.1568668, 0.24767317, -0.40314373, 0.15539955, 0.4219837, -0.89859253, -0.27225167, -0.5556192, 0.39687112, 0.22608338, 0.25365105, 0.42373037, -0.696854, -0.5957061, 0.25737432, -0.29580608, 0.23977302, 0.17660421, -1.1174837, 0.15318531, -0.27639833, 0.14572532, -0.547503, -0.61896807, -0.85999936, 0.25975132, 0.010483696, 0.12721783, 0.24397285, -0.8340953, -1.1913066, -0.12690386, 0.1763387, 0.2419106, 0.24643797, -1.1318684, 0.2253065, -0.42647567, 0.23230341, -0.19417518, 0.2654986, -0.78949887, -0.3036996, 0.088061474, 0.08736932, -1.4195353, -0.11059197, -0.23896568, 0.14594136, 0.02509412, -0.69089675, 0.1775754, 0.11705143, 0.15467075, -1.1349207, 0.26591048, 0.3258521, 0.031622194, -1.1133165, 0.1874126, -0.15618077, -0.068399064, 0.22635035, -1.4113846, -1.0293227, 0.2676869, -0.6638573, -0.809697, 0.18838994, 0.2597897, 0.2623801, -0.71988785, 0.21033898, 0.06689028, 0.17471848, -0.60703725, 0.21527685, -0.11019864, 0.14076443, 0.15391845, 0.24682955, -0.8389134, 0.09058878, -0.8974278, -0.70003927, 0.48892072, 0.08466619, 0.37337586, 0.28916568, -0.5683443, 0.5530419, -0.029433832, -0.31237292, -1.0186286, -0.856211, 0.18168707, 0.24505684, 0.11122351, -1.0695484, -0.2974286, -0.9681376, 0.20844795, 0.1775028, -0.0049748956, -1.1505655, 0.34835112, -0.55756736, -0.023716582, -0.43805465, -0.5937699, -1.582205, 0.38626796, -0.31469446, 0.36865616, -0.5076476, -0.82651234, 0.31743962, -0.23834953, 0.29536465, -0.24033858, 0.30810896, -0.39118254, -0.68157536, 0.24319851, -0.54398525, -1.0657492, 0.25145695, -0.3252582, 0.27745238, -0.11717181, 0.3144103, -0.45244437, -0.763521, 0.22043528, 0.19075611, -0.5889457, 0.20152752, 0.19212854, -1.1147237, -0.20268336, -1.228045, 0.18554242, 0.13688831, 0.15359318, 0.24540433, -0.760812, 0.013307341, 0.16837452, -1.2520785, 0.16123922, -0.062990166, -0.5221762, 0.20173639, -0.00034856345, -0.9912086, -1.377334, -1.2250979, 0.403099, -1.2409686, 0.5818211, 0.48017198, -1.1191057, 0.03920581, -0.04006948, 0.29451925, 0.26080048, -0.113024294, 0.37046853, -1.0469614, 0.3173648, -0.59533584, -0.9986988, -0.70942324, -0.41003427, -0.91178864, -0.70455736, -0.36260656, -0.30002633, 0.29269257, -0.7386339, -0.7255059, 0.29854324, -1.1281329, 0.23479827, -1.6177104, -0.48460004, -0.8565176, 0.5298956, -0.8117683, 0.5291518, -1.2899235, -1.3870862, -0.7093207, 0.30185577, -1.7221317, -0.2104229, -0.6143567, 0.2010387, 0.2665378, 0.20631528, -0.84900254, -0.2459556, 0.1791449, 0.22730747, -0.64836246, 0.2167886, 0.21860307, 0.22896318, -0.32576513, -0.73935324, -1.8570166, 0.278421, -0.21250452, 0.22379157, };
+#include <stdint.h>
+
+const int inline_MatMul_1_eightbit_Variable_2__port__0_reshape_dims_0 [ 1 ] = { -1, };
+#include <stdint.h>
+
+const int inline_MatMul_1_eightbit_Variable_2__port__0_reduction_dims_0 [ 1 ] = { 0, };
+#include <stdint.h>
+
+const float inline_Variable_3_0 [ 10 ] = { 0.28487265, 1.0677086, -0.81945246, -0.8251177, 0.3759778, -0.023035817, 1.0077289, -0.10922931, 0.41795105, 0.02427876, };
+#include <stdint.h>
+
+const int inline_logits_eightbit_Variable_3__port__0_reshape_dims_0 [ 1 ] = { -1, };
+#include <stdint.h>
+
+const int inline_logits_eightbit_Variable_3__port__0_reduction_dims_0 [ 1 ] = { 0, };
+#include <stdint.h>
+
+const int inline_y_pred_dimension_0 [ 1 ] = { 1, };
diff --git a/DigitRecognition/input_data.h b/DigitRecognition/input_data.h
new file mode 100644
index 0000000..d6ece33
--- /dev/null
+++ b/DigitRecognition/input_data.h
@@ -0,0 +1,3 @@
+
+
+ const float input_data [ 784 ] = { 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.32941, 0.72549, 0.62353, 0.59216, 0.23529, 0.14118, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.87059, 0.99608, 0.99608, 0.99608, 0.99608, 0.94510, 0.77647, 0.77647, 0.77647, 0.77647, 0.77647, 0.77647, 0.77647, 0.77647, 0.66667, 0.20392, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.26275, 0.44706, 0.28235, 0.44706, 0.63922, 0.89020, 0.99608, 0.88235, 0.99608, 0.99608, 0.99608, 0.98039, 0.89804, 0.99608, 0.99608, 0.54902, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.06667, 0.25882, 0.05490, 0.26275, 0.26275, 0.26275, 0.23137, 0.08235, 0.92549, 0.99608, 0.41569, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.32549, 0.99216, 0.81961, 0.07059, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.08627, 0.91373, 1.00000, 0.32549, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.50588, 0.99608, 0.93333, 0.17255, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.23137, 0.97647, 0.99608, 0.24314, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.52157, 0.99608, 0.73333, 0.01961, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.03529, 0.80392, 0.97255, 0.22745, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.49412, 0.99608, 0.71373, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.29412, 0.98431, 0.94118, 0.22353, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.07451, 0.86667, 0.99608, 0.65098, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.01176, 0.79608, 0.99608, 0.85882, 0.13725, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.14902, 0.99608, 0.99608, 0.30196, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.12157, 0.87843, 0.99608, 0.45098, 0.00392, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.52157, 0.99608, 0.99608, 0.20392, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.23922, 0.94902, 0.99608, 0.99608, 0.20392, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.47451, 0.99608, 0.99608, 0.85882, 0.15686, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.47451, 0.99608, 0.81176, 0.07059, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000 };
diff --git a/uTensor/core/context.hpp b/uTensor/core/context.hpp
index 34c7116..240dd57 100644
--- a/uTensor/core/context.hpp
+++ b/uTensor/core/context.hpp
@@ -1,7 +1,7 @@
#ifndef UTENSOR_CTX_H
#define UTENSOR_CTX_H
-#include "uTensor/core/uTensorBase.hpp"
+#include "uTensorBase.hpp"
#include <memory>
#include <unordered_map>
#include <initializer_list>
diff --git a/uTensor/core/tensor.hpp b/uTensor/core/tensor.hpp
index 309eb69..542469b 100644
--- a/uTensor/core/tensor.hpp
+++ b/uTensor/core/tensor.hpp
@@ -1,7 +1,7 @@
#ifndef UTENSOR_TENSOR_H
#define UTENSOR_TENSOR_H
-#include "uTensor/util/uTensor_util.hpp"
+#include "../util/uTensor_util.hpp"
#include <initializer_list>
#include "utensor_string.hpp"
#include <memory>
diff --git a/uTensor/core/uTensorBase.hpp b/uTensor/core/uTensorBase.hpp
index c1b47a8..303269b 100644
--- a/uTensor/core/uTensorBase.hpp
+++ b/uTensor/core/uTensorBase.hpp
@@ -1,7 +1,7 @@
#ifndef UTENSOR_BASE_H
#define UTENSOR_BASE_H
-#include "uTensor/core/tensor.hpp"
+#include "tensor.hpp"
//isType() https://stackoverflow.com/questions/9974596/how-to-check-whether-two-pointers-point-to-the-same-object-or-not
//double dispatch
diff --git a/uTensor/ops/ArrayOps.hpp b/uTensor/ops/ArrayOps.hpp
index bfa4552..e5b002f 100644
--- a/uTensor/ops/ArrayOps.hpp
+++ b/uTensor/ops/ArrayOps.hpp
@@ -1,9 +1,9 @@
#ifndef UTENSOR_ARRAY_OPS
#define UTENSOR_ARRAY_OPS
-#include "uTensor/util/uTensor_util.hpp"
-#include "uTensor/util/quantization_utils.hpp"
-#include "uTensor/core/uTensorBase.hpp"
+#include "../util/uTensor_util.hpp"
+#include "../util/quantization_utils.hpp"
+#include "../core/uTensorBase.hpp"
#include <cstring>
#include <cmath>
#include <array>
diff --git a/uTensor/ops/MathOps.hpp b/uTensor/ops/MathOps.hpp
index b063139..72f1c21 100644
--- a/uTensor/ops/MathOps.hpp
+++ b/uTensor/ops/MathOps.hpp
@@ -1,9 +1,9 @@
#ifndef UTENSOR_MATH_OPS
#define UTENSOR_MATH_OPS
-#include "uTensor/util/quantization_utils.hpp"
-#include "uTensor/core/tensor.hpp"
-#include "uTensor/core/uTensorBase.hpp"
+#include "../util/quantization_utils.hpp"
+#include "../core/tensor.hpp"
+#include "../core/uTensorBase.hpp"
#include <climits>
#include <algorithm>
#include <vector>
diff --git a/uTensor/ops/MatrixOps.hpp b/uTensor/ops/MatrixOps.hpp
index a4b1576..0beef33 100644
--- a/uTensor/ops/MatrixOps.hpp
+++ b/uTensor/ops/MatrixOps.hpp
@@ -1,10 +1,10 @@
#ifndef UTENSOR_MATRIX_OPS
#define UTENSOR_MATRIX_OPS
-#include "uTensor/util/quantization_utils.hpp"
-#include "uTensor/core/tensor.hpp"
-#include "uTensor/core/uTensorBase.hpp"
-//#include "uTensor/ops/quantization.hpp" // Deprecated
+#include "../util/quantization_utils.hpp"
+#include "../core/tensor.hpp"
+#include "../core/uTensorBase.hpp"
+//#include "../ops/quantization.hpp" // Deprecated
#include <cmath>
#include <cstdlib>
#include <limits>
diff --git a/uTensor/ops/NnOps.hpp b/uTensor/ops/NnOps.hpp
index 0317d5e..5433640 100644
--- a/uTensor/ops/NnOps.hpp
+++ b/uTensor/ops/NnOps.hpp
@@ -1,9 +1,9 @@
#ifndef UTENSOR_NN_OPS
#define UTENSOR_NN_OPS
-#include "uTensor/util/quantization_utils.hpp"
-#include "uTensor/core/tensor.hpp"
-#include "uTensor/core/uTensorBase.hpp"
+#include "../util/quantization_utils.hpp"
+#include "../core/tensor.hpp"
+#include "../core/uTensorBase.hpp"
#include <math.h>
#include <algorithm>
diff --git a/uTensor/util/quantization_utils.hpp b/uTensor/util/quantization_utils.hpp
index 9e8592f..60f2b1f 100644
--- a/uTensor/util/quantization_utils.hpp
+++ b/uTensor/util/quantization_utils.hpp
@@ -1,7 +1,7 @@
#ifndef UTENSOR_QUANT_UTILS
#define UTENSOR_QUANT_UTILS
-#include "uTensor/core/tensor.hpp"
+#include "../core/tensor.hpp"
#include <math.h>
#include <limits>
#include <cstdlib>
diff --git a/uTensor/util/uTensor_util.cpp b/uTensor/util/uTensor_util.cpp
index 3127970..89ac0b5 100644
--- a/uTensor/util/uTensor_util.cpp
+++ b/uTensor/util/uTensor_util.cpp
@@ -1,8 +1,8 @@
#include "uTensor/util/uTensor_util.hpp"
-#ifndef TARGET_MBED
-#include <sys/stat.h>
-#include <dirent.h>
-#endif
+//#ifndef TARGET_MBED
+//#include <sys/stat.h>
+//#include <dirent.h>
+//#endif
#include <cstdlib>
void return_error(int ret_val) {
@@ -46,18 +46,18 @@ uint32_t ntoh32(uint32_t val) {
}
void init_env() {
- int status;
- DIR* dir = opendir("/fs/tmp");
- if (dir) {
- closedir(dir);
- return;
- } else {
+ //int status;
+ //DIR* dir = opendir("/fs/tmp");
+ //if (dir) {
+ // closedir(dir);
+ // return;
+ //} else {
- status = mkdir("/fs/tmp", 0777);
- if (status == -1) {
- ERR_EXIT("env setting failed");
- }
- }
+ // status = mkdir("/fs/tmp", 0777);
+ // if (status == -1) {
+ // ERR_EXIT("env setting failed");
+ // }
+ //}
}
void utensor_exit(void) {
diff --git a/uTensor/util/uTensor_util.hpp b/uTensor/util/uTensor_util.hpp
index 7c2713d..750239d 100644
--- a/uTensor/util/uTensor_util.hpp
+++ b/uTensor/util/uTensor_util.hpp
@@ -22,14 +22,11 @@ void return_error(int ret_val);
#define ON_ERR(FUNC, MSG) \
{ \
- printf(" * "); \
- printf(MSG); \
return_error(FUNC); \
}
#define DEBUG(MSG, ...) \
{ \
- printf(MSG, ##__VA_ARGS__); \
fflush(stdout); \
}
@@ -49,12 +46,9 @@ enum Padding {
void utensor_exit(void);
+
#define ERR_EXIT(MSG, ...) \
{ \
- printf("[Error] %s:%d @%s ", __FILE__, __LINE__, __func__); \
- printf(MSG, ##__VA_ARGS__); \
- fflush(stdout); \
- utensor_exit(); \
}
//typedef std::vector<uint32_t> Shape;
@@ -98,7 +92,7 @@ void printVector(std::vector<uint32_t> vec);
#elif defined(_POSIX_VERSION)
// POSIX
#else
- #include "mbed.h"
+ //#include "mbed.h"
//# error "Unknown compiler"
// little endian to big endian
//uint32_t htonl(uint32_t& val);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment